aboutsummaryrefslogtreecommitdiff
path: root/libmm-glib/mm-firmware-update-settings.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmm-glib/mm-firmware-update-settings.c')
-rw-r--r--libmm-glib/mm-firmware-update-settings.c74
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);