diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2018-12-17 17:37:36 +0100 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2019-01-03 18:53:52 +0000 |
commit | 67b3b830c87e79827a9934362e673e1a23116026 (patch) | |
tree | 615ecd0c362ae7d99eddecef0e1f9b82dda40d91 /libmm-glib/mm-firmware-update-settings.c | |
parent | bc39201f761bd667bcd0c5eb53643a180ce53327 (diff) |
api,firmware: expose device ids
Diffstat (limited to 'libmm-glib/mm-firmware-update-settings.c')
-rw-r--r-- | libmm-glib/mm-firmware-update-settings.c | 74 |
1 files changed, 56 insertions, 18 deletions
diff --git a/libmm-glib/mm-firmware-update-settings.c b/libmm-glib/mm-firmware-update-settings.c index 7ac081e5..a8886c49 100644 --- a/libmm-glib/mm-firmware-update-settings.c +++ b/libmm-glib/mm-firmware-update-settings.c @@ -30,10 +30,13 @@ G_DEFINE_TYPE (MMFirmwareUpdateSettings, mm_firmware_update_settings, G_TYPE_OBJECT) +#define PROPERTY_DEVICE_IDS "device-ids" #define PROPERTY_FASTBOOT_AT "fastboot-at" struct _MMFirmwareUpdateSettingsPrivate { - MMModemFirmwareUpdateMethod method; + /* Generic */ + MMModemFirmwareUpdateMethod method; + gchar **device_ids; /* Fasboot specific */ gchar *fastboot_at; }; @@ -59,6 +62,35 @@ mm_firmware_update_settings_get_method (MMFirmwareUpdateSettings *self) /*****************************************************************************/ /** + * mm_firmware_update_settings_get_device_ids: + * @self: a #MMFirmwareUpdateSettings. + * + * Gets the list of device ids used to identify the device during a firmware update + * operation. + * + * Returns: (transfer none): The list of device ids, or %NULL if unknown. Do not free the returned value, it is owned by @self. + */ +const gchar ** +mm_firmware_update_settings_get_device_ids (MMFirmwareUpdateSettings *self) +{ + g_return_val_if_fail (MM_IS_FIRMWARE_UPDATE_SETTINGS (self), NULL); + + return (const gchar **) self->priv->device_ids; +} + +void +mm_firmware_update_settings_set_device_ids (MMFirmwareUpdateSettings *self, + const gchar **device_ids) +{ + g_return_if_fail (MM_IS_FIRMWARE_UPDATE_SETTINGS (self)); + + g_strfreev (self->priv->device_ids); + self->priv->device_ids = g_strdupv ((gchar **)device_ids); +} + +/*****************************************************************************/ + +/** * mm_firmware_update_settings_get_fastboot_at: * @self: a #MMFirmwareUpdateSettings. * @@ -110,18 +142,25 @@ mm_firmware_update_settings_get_variant (MMFirmwareUpdateSettings *self) g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ua{sv})")); g_variant_builder_add (&builder, "u", method); - switch (method) { - case MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT: - g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{sv}")); + g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{sv}")); + { g_variant_builder_add (&builder, "{sv}", - PROPERTY_FASTBOOT_AT, - g_variant_new_string (self->priv->fastboot_at)); - g_variant_builder_close (&builder); - break; - default: - break; + PROPERTY_DEVICE_IDS, + g_variant_new_strv ((const gchar * const *)self->priv->device_ids, -1)); + + switch (method) { + case MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT: + g_variant_builder_add (&builder, + "{sv}", + PROPERTY_FASTBOOT_AT, + g_variant_new_string (self->priv->fastboot_at)); + break; + default: + break; + } } + g_variant_builder_close (&builder); return g_variant_ref_sink (g_variant_builder_end (&builder)); } @@ -137,6 +176,9 @@ consume_variant (MMFirmwareUpdateSettings *self, if (g_str_equal (key, PROPERTY_FASTBOOT_AT)) { g_free (self->priv->fastboot_at); self->priv->fastboot_at = g_variant_dup_string (value, NULL); + } else if (g_str_equal (key, PROPERTY_DEVICE_IDS)) { + g_strfreev (self->priv->device_ids); + self->priv->device_ids = g_variant_dup_strv (value, NULL); } else { g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, "Invalid settings dictionary, unexpected key '%s'", key); @@ -190,6 +232,9 @@ mm_firmware_update_settings_new_from_variant (GVariant *variant, g_variant_unref (value); } + if (!inner_error && !self->priv->device_ids) + inner_error = g_error_new (MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, + "Missing required'" PROPERTY_DEVICE_IDS "' setting"); if (!inner_error) { switch (method) { case MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT: @@ -213,14 +258,6 @@ mm_firmware_update_settings_new_from_variant (GVariant *variant, /*****************************************************************************/ -/** - * mm_firmware_update_settings_new: - * @method: A #MMModemFirmwareUpdateMethod specifying the update method. - * - * Creates a new #MMFirmwareUpdateSettings object. - * - * Returns: (transfer full): A #MMFirmwareUpdateSettings. The returned value should be freed with g_object_unref(). - */ MMFirmwareUpdateSettings * mm_firmware_update_settings_new (MMModemFirmwareUpdateMethod method) { @@ -243,6 +280,7 @@ finalize (GObject *object) { MMFirmwareUpdateSettings *self = MM_FIRMWARE_UPDATE_SETTINGS (object); + g_strfreev (self->priv->device_ids); g_free (self->priv->fastboot_at); G_OBJECT_CLASS (mm_firmware_update_settings_parent_class)->finalize (object); |