/** * fu_provider_unlock: **/ gboolean fu_provider_unlock (FuProvider *provider, FuDevice *device, GError **error) { guint64 flags; FuProviderClass *klass = FU_PROVIDER_GET_CLASS (provider); /* final check */ flags = fu_device_get_flags (device); if ((flags & FU_DEVICE_FLAG_LOCKED) == 0) { g_set_error (error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED, "Device %s is not locked", fu_device_get_id (device)); return FALSE; } /* run provider method */ if (klass->unlock != NULL) { if (!klass->unlock (provider, device, error)) return FALSE; } /* update with correct flags */ flags = fu_device_get_flags (device); fu_device_set_flags (device, flags &= ~FU_DEVICE_FLAG_LOCKED); fu_device_set_modified (device, g_get_real_time () / G_USEC_PER_SEC); return TRUE; }
/** * fu_util_get_devices: **/ static gboolean fu_util_get_devices (FuUtilPrivate *priv, gchar **values, GError **error) { FuDevice *dev; _cleanup_ptrarray_unref_ GPtrArray *devices = NULL; guint i; guint j; guint k; guint f; guint64 flags; const gchar *value; const gchar *keys[] = { FU_DEVICE_KEY_DISPLAY_NAME, FU_DEVICE_KEY_PROVIDER, FU_DEVICE_KEY_GUID, FU_DEVICE_KEY_VERSION, FU_DEVICE_KEY_URL_HOMEPAGE, FU_DEVICE_KEY_NAME, FU_DEVICE_KEY_SUMMARY, FU_DEVICE_KEY_DESCRIPTION, FU_DEVICE_KEY_LICENSE, FU_DEVICE_KEY_FLAGS, FU_DEVICE_KEY_TRUSTED, FU_DEVICE_KEY_SIZE, FU_DEVICE_KEY_FIRMWARE_HASH, NULL }; const gchar *flags_str[] = { "Internal", "AllowOnline", "AllowOffline", NULL }; /* get devices from daemon */ devices = fu_util_get_devices_internal (priv, error); if (devices == NULL) return FALSE; /* print */ if (devices->len == 0) { /* TRANSLATORS: nothing attached that can be upgraded */ g_print ("%s\n", _("No hardware detected with firmware update capability")); return TRUE; } for (i = 0; i < devices->len; i++) { dev = g_ptr_array_index (devices, i); g_print ("Device: %s\n", fu_device_get_id (dev)); for (j = 0; keys[j] != NULL; j++) { if (g_strcmp0 (keys[j], FU_DEVICE_KEY_FLAGS) == 0) { flags = fu_device_get_flags (dev); for (f = 0; flags_str[f] != NULL; f++) { g_print (" %s:", flags_str[f]); for (k = strlen (flags_str[f]); k < 15; k++) g_print (" "); g_print (" %s\n", flags & (1 << f) ? "True" : "False"); } continue; } value = fu_device_get_metadata (dev, keys[j]); if (value != NULL) { g_print (" %s:", keys[j]); for (k = strlen (keys[j]); k < 15; k++) g_print (" "); g_print (" %s\n", value); } } } return TRUE; }