diff --git a/libfwupd/fwupd-device.c b/libfwupd/fwupd-device.c index d735b9dd4..fd466d42f 100644 --- a/libfwupd/fwupd-device.c +++ b/libfwupd/fwupd-device.c @@ -44,6 +44,7 @@ typedef struct { gchar *vendor_id; gchar *homepage; gchar *plugin; + gchar *protocol; gchar *version; gchar *version_lowest; gchar *version_bootloader; @@ -62,6 +63,7 @@ enum { PROP_0, PROP_VERSION_FORMAT, PROP_FLAGS, + PROP_PROTOCOL, PROP_LAST }; @@ -844,6 +846,42 @@ fwupd_device_set_plugin (FwupdDevice *device, const gchar *plugin) priv->plugin = g_strdup (plugin); } +/** + * fwupd_device_get_protocol: + * @device: A #FwupdDevice + * + * Gets the protocol that the device uses for updating. + * + * Returns: the protocol name, or %NULL if unset + * + * Since: 1.3.6 + **/ +const gchar * +fwupd_device_get_protocol (FwupdDevice *device) +{ + FwupdDevicePrivate *priv = GET_PRIVATE (device); + g_return_val_if_fail (FWUPD_IS_DEVICE (device), NULL); + return priv->protocol; +} + +/** + * fwupd_device_set_protocol: + * @device: A #FwupdDevice + * @protocol: the protocol name, e.g. `com.hughski.colorhug` + * + * Sets the protocol that is used to update the device. + * + * Since: 1.3.6 + **/ +void +fwupd_device_set_protocol (FwupdDevice *device, const gchar *protocol) +{ + FwupdDevicePrivate *priv = GET_PRIVATE (device); + g_return_if_fail (FWUPD_IS_DEVICE (device)); + g_free (priv->protocol); + priv->protocol = g_strdup (protocol); +} + /** * fwupd_device_get_flags: * @device: A #FwupdDevice @@ -1061,6 +1099,8 @@ fwupd_device_incorporate (FwupdDevice *self, FwupdDevice *donor) fwupd_device_set_vendor_id (self, priv_donor->vendor_id); if (priv->plugin == NULL) fwupd_device_set_plugin (self, priv_donor->plugin); + if (priv->protocol == NULL) + fwupd_device_set_protocol (self, priv_donor->protocol); if (priv->update_error == NULL) fwupd_device_set_update_error (self, priv_donor->update_error); if (priv->update_message == NULL) @@ -1197,6 +1237,11 @@ fwupd_device_to_variant_full (FwupdDevice *device, FwupdDeviceFlags flags) FWUPD_RESULT_KEY_PLUGIN, g_variant_new_string (priv->plugin)); } + if (priv->protocol != NULL) { + g_variant_builder_add (&builder, "{sv}", + FWUPD_RESULT_KEY_PROTOCOL, + g_variant_new_string (priv->protocol)); + } if (priv->version != NULL) { g_variant_builder_add (&builder, "{sv}", FWUPD_RESULT_KEY_VERSION, @@ -1379,6 +1424,10 @@ fwupd_device_from_key_value (FwupdDevice *device, const gchar *key, GVariant *va fwupd_device_set_plugin (device, g_variant_get_string (value, NULL)); return; } + if (g_strcmp0 (key, FWUPD_RESULT_KEY_PROTOCOL) == 0) { + fwupd_device_set_protocol (device, g_variant_get_string (value, NULL)); + return; + } if (g_strcmp0 (key, FWUPD_RESULT_KEY_VERSION) == 0) { fwupd_device_set_version (device, g_variant_get_string (value, NULL)); return; @@ -1731,6 +1780,7 @@ fwupd_device_to_json (FwupdDevice *device, JsonBuilder *builder) fwupd_device_json_add_string (builder, FWUPD_RESULT_KEY_SUMMARY, priv->summary); fwupd_device_json_add_string (builder, FWUPD_RESULT_KEY_DESCRIPTION, priv->description); fwupd_device_json_add_string (builder, FWUPD_RESULT_KEY_PLUGIN, priv->plugin); + fwupd_device_json_add_string (builder, FWUPD_RESULT_KEY_PROTOCOL, priv->protocol); if (priv->flags != FWUPD_DEVICE_FLAG_NONE) { json_builder_set_member_name (builder, FWUPD_RESULT_KEY_FLAGS); json_builder_begin_array (builder); @@ -1843,6 +1893,7 @@ fwupd_device_to_string (FwupdDevice *device) fwupd_pad_kv_str (str, FWUPD_RESULT_KEY_SUMMARY, priv->summary); fwupd_pad_kv_str (str, FWUPD_RESULT_KEY_DESCRIPTION, priv->description); fwupd_pad_kv_str (str, FWUPD_RESULT_KEY_PLUGIN, priv->plugin); + fwupd_pad_kv_str (str, FWUPD_RESULT_KEY_PROTOCOL, priv->protocol); fwupd_pad_kv_dfl (str, FWUPD_RESULT_KEY_FLAGS, priv->flags); for (guint i = 0; i < priv->checksums->len; i++) { const gchar *checksum = g_ptr_array_index (priv->checksums, i); @@ -1897,6 +1948,9 @@ fwupd_device_get_property (GObject *object, guint prop_id, case PROP_FLAGS: g_value_set_uint64 (value, priv->flags); break; + case PROP_PROTOCOL: + g_value_set_string (value, priv->protocol); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1915,6 +1969,9 @@ fwupd_device_set_property (GObject *object, guint prop_id, case PROP_FLAGS: fwupd_device_set_flags (self, g_value_get_uint64 (value)); break; + case PROP_PROTOCOL: + fwupd_device_set_protocol (self, g_value_get_string (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1946,6 +2003,11 @@ fwupd_device_class_init (FwupdDeviceClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_NAME); g_object_class_install_property (object_class, PROP_FLAGS, pspec); + + pspec = g_param_spec_string ("protocol", NULL, NULL, NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_NAME); + g_object_class_install_property (object_class, PROP_PROTOCOL, pspec); } static void @@ -1976,6 +2038,7 @@ fwupd_device_finalize (GObject *object) g_free (priv->vendor); g_free (priv->vendor_id); g_free (priv->plugin); + g_free (priv->protocol); g_free (priv->update_error); g_free (priv->update_message); g_free (priv->version); diff --git a/libfwupd/fwupd-device.h b/libfwupd/fwupd-device.h index 5270b6149..ea1e12564 100644 --- a/libfwupd/fwupd-device.h +++ b/libfwupd/fwupd-device.h @@ -92,6 +92,9 @@ void fwupd_device_add_checksum (FwupdDevice *device, const gchar *fwupd_device_get_plugin (FwupdDevice *device); void fwupd_device_set_plugin (FwupdDevice *device, const gchar *plugin); +const gchar *fwupd_device_get_protocol (FwupdDevice *device); +void fwupd_device_set_protocol (FwupdDevice *device, + const gchar *protocol); const gchar *fwupd_device_get_vendor (FwupdDevice *device); void fwupd_device_set_vendor (FwupdDevice *device, const gchar *vendor); diff --git a/libfwupd/fwupd-enums-private.h b/libfwupd/fwupd-enums-private.h index 6463849c8..242ac0fc5 100644 --- a/libfwupd/fwupd-enums-private.h +++ b/libfwupd/fwupd-enums-private.h @@ -35,6 +35,7 @@ G_BEGIN_DECLS #define FWUPD_RESULT_KEY_NAME "Name" /* s */ #define FWUPD_RESULT_KEY_NAME_VARIANT_SUFFIX "NameVariantSuffix" /* s */ #define FWUPD_RESULT_KEY_PLUGIN "Plugin" /* s */ +#define FWUPD_RESULT_KEY_PROTOCOL "Protocol" /* s */ #define FWUPD_RESULT_KEY_RELEASE "Release" /* a{sv} */ #define FWUPD_RESULT_KEY_REMOTE_ID "RemoteId" /* s */ #define FWUPD_RESULT_KEY_SERIAL "Serial" /* s */ diff --git a/libfwupd/fwupd.map b/libfwupd/fwupd.map index 2fb4f670c..dea3b6ac3 100644 --- a/libfwupd/fwupd.map +++ b/libfwupd/fwupd.map @@ -405,3 +405,10 @@ LIBFWUPD_1.3.4 { fwupd_client_get_daemon_interactive; local: *; } LIBFWUPD_1.3.3; + +LIBFWUPD_1.3.6 { + global: + fwupd_device_get_protocol; + fwupd_device_set_protocol; + local: *; +} LIBFWUPD_1.3.4; diff --git a/libfwupdplugin/fu-device.c b/libfwupdplugin/fu-device.c index 36469cc4e..0f729a90e 100644 --- a/libfwupdplugin/fu-device.c +++ b/libfwupdplugin/fu-device.c @@ -36,7 +36,6 @@ typedef struct { gchar *equivalent_id; gchar *physical_id; gchar *logical_id; - gchar *protocol; FuDevice *alternate; FuDevice *parent; /* noref */ FuQuirks *quirks; @@ -66,7 +65,6 @@ enum { PROP_PROGRESS, PROP_PHYSICAL_ID, PROP_LOGICAL_ID, - PROP_PROTOCOL, PROP_QUIRKS, PROP_PARENT, PROP_LAST @@ -94,9 +92,6 @@ fu_device_get_property (GObject *object, guint prop_id, case PROP_LOGICAL_ID: g_value_set_string (value, priv->logical_id); break; - case PROP_PROTOCOL: - g_value_set_string (value, priv->protocol); - break; case PROP_QUIRKS: g_value_set_object (value, priv->quirks); break; @@ -128,9 +123,6 @@ fu_device_set_property (GObject *object, guint prop_id, case PROP_LOGICAL_ID: fu_device_set_logical_id (self, g_value_get_string (value)); break; - case PROP_PROTOCOL: - fu_device_set_protocol (self, g_value_get_string (value)); - break; case PROP_QUIRKS: fu_device_set_quirks (self, g_value_get_object (value)); break; @@ -1493,9 +1485,8 @@ fu_device_set_logical_id (FuDevice *self, const gchar *logical_id) const gchar * fu_device_get_protocol (FuDevice *self) { - FuDevicePrivate *priv = GET_PRIVATE (self); g_return_val_if_fail (FU_IS_DEVICE (self), NULL); - return priv->protocol; + return fwupd_device_get_protocol (FWUPD_DEVICE (self)); } /** @@ -1510,10 +1501,8 @@ fu_device_get_protocol (FuDevice *self) void fu_device_set_protocol (FuDevice *self, const gchar *protocol) { - FuDevicePrivate *priv = GET_PRIVATE (self); g_return_if_fail (FU_IS_DEVICE (self)); - g_free (priv->protocol); - priv->protocol = g_strdup (protocol); + fwupd_device_set_protocol (FWUPD_DEVICE (self), protocol); } /** @@ -1844,8 +1833,6 @@ fu_device_add_string (FuDevice *self, guint idt, GString *str) fu_common_string_append_kv (str, idt + 1, "PhysicalId", priv->physical_id); if (priv->logical_id != NULL) fu_common_string_append_kv (str, idt + 1, "LogicalId", priv->logical_id); - if (priv->protocol != NULL) - fu_common_string_append_kv (str, idt + 1, "Protocol", priv->protocol); if (priv->size_min > 0) { g_autofree gchar *sz = g_strdup_printf ("%" G_GUINT64_FORMAT, priv->size_min); fu_common_string_append_kv (str, idt + 1, "FirmwareSizeMin", sz); @@ -2573,8 +2560,6 @@ fu_device_incorporate (FuDevice *self, FuDevice *donor) fu_device_set_physical_id (self, priv_donor->physical_id); if (priv->logical_id == NULL && priv_donor->logical_id != NULL) fu_device_set_logical_id (self, priv_donor->logical_id); - if (priv->protocol == NULL && priv_donor->protocol != NULL) - fu_device_set_protocol (self, priv_donor->protocol); if (priv->quirks == NULL) fu_device_set_quirks (self, fu_device_get_quirks (donor)); g_rw_lock_reader_lock (&priv_donor->parent_guids_mutex); @@ -2676,11 +2661,6 @@ fu_device_class_init (FuDeviceClass *klass) G_PARAM_STATIC_NAME); g_object_class_install_property (object_class, PROP_LOGICAL_ID, pspec); - pspec = g_param_spec_string ("protocol", NULL, NULL, NULL, - G_PARAM_READWRITE | - G_PARAM_STATIC_NAME); - g_object_class_install_property (object_class, PROP_PROTOCOL, pspec); - pspec = g_param_spec_uint ("progress", NULL, NULL, 0, 100, 0, G_PARAM_READWRITE | @@ -2739,7 +2719,6 @@ fu_device_finalize (GObject *object) g_free (priv->equivalent_id); g_free (priv->physical_id); g_free (priv->logical_id); - g_free (priv->protocol); G_OBJECT_CLASS (fu_device_parent_class)->finalize (object); }