diff options
-rw-r--r-- | cli/mmcli-modem-firmware.c | 19 | ||||
-rw-r--r-- | docs/reference/libmm-glib/libmm-glib-sections.txt | 10 | ||||
-rw-r--r-- | include/ModemManager-enums.h | 4 | ||||
-rw-r--r-- | introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml | 38 | ||||
-rw-r--r-- | libmm-glib/mm-firmware-properties.c | 215 | ||||
-rw-r--r-- | libmm-glib/mm-firmware-properties.h | 19 |
6 files changed, 294 insertions, 11 deletions
diff --git a/cli/mmcli-modem-firmware.c b/cli/mmcli-modem-firmware.c index e0fcfb9a..166c76e9 100644 --- a/cli/mmcli-modem-firmware.c +++ b/cli/mmcli-modem-firmware.c @@ -134,6 +134,9 @@ list_process_reply (MMFirmwareProperties *selected, GList *result, const GError *error) { +#undef VALIDATE_UNKNOWN +#define VALIDATE_UNKNOWN(str) (str ? str : "unknown") + if (error) { g_printerr ("error: couldn't list firmware images: '%s'\n", error->message); @@ -152,7 +155,7 @@ list_process_reply (MMFirmwareProperties *selected, MMFirmwareProperties *props = MM_FIRMWARE_PROPERTIES (l->data); g_print ("\t[%u] %s%s\n" - "\t\t Type: '%s'\n", + "\t\tType: '%s'\n", i, mm_firmware_properties_get_unique_id (props), ((selected && @@ -161,6 +164,20 @@ list_process_reply (MMFirmwareProperties *selected, " (CURRENT)" : ""), mm_firmware_image_type_get_string ( mm_firmware_properties_get_image_type (props))); + + if (mm_firmware_properties_get_image_type (props) == MM_FIRMWARE_IMAGE_TYPE_GOBI) { + g_print ("\t\t[Gobi] PRI version: '%s'\n" + "\t\t[Gobi] PRI info: '%s'\n" + "\t\t[Gobi] Boot version: '%s'\n" + "\t\t[Gobi] PRI Unique ID: '%s'\n" + "\t\t[Gobi] Modem Unique ID: '%s'\n", + VALIDATE_UNKNOWN (mm_firmware_properties_get_gobi_pri_version (props)), + VALIDATE_UNKNOWN (mm_firmware_properties_get_gobi_pri_info (props)), + VALIDATE_UNKNOWN (mm_firmware_properties_get_gobi_boot_version (props)), + VALIDATE_UNKNOWN (mm_firmware_properties_get_gobi_pri_unique_id (props)), + VALIDATE_UNKNOWN (mm_firmware_properties_get_gobi_modem_unique_id (props))); + } + g_object_unref (props); } g_list_free (result); diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt index a1569cf0..b793b09b 100644 --- a/docs/reference/libmm-glib/libmm-glib-sections.txt +++ b/docs/reference/libmm-glib/libmm-glib-sections.txt @@ -533,10 +533,20 @@ MMFirmwareProperties <SUBSECTION Getters> mm_firmware_properties_get_image_type mm_firmware_properties_get_unique_id +mm_firmware_properties_get_gobi_pri_version +mm_firmware_properties_get_gobi_pri_info +mm_firmware_properties_get_gobi_boot_version +mm_firmware_properties_get_gobi_pri_unique_id +mm_firmware_properties_get_gobi_modem_unique_id <SUBSECTION Private> mm_firmware_properties_new mm_firmware_properties_new_from_dictionary mm_firmware_properties_get_dictionary +mm_firmware_properties_set_gobi_pri_version +mm_firmware_properties_set_gobi_pri_info +mm_firmware_properties_set_gobi_boot_version +mm_firmware_properties_set_gobi_pri_unique_id +mm_firmware_properties_set_gobi_modem_unique_id <SUBSECTION Standard> MMFirmwarePropertiesClass MMFirmwarePropertiesPrivate diff --git a/include/ModemManager-enums.h b/include/ModemManager-enums.h index 19cbee18..129a30f8 100644 --- a/include/ModemManager-enums.h +++ b/include/ModemManager-enums.h @@ -688,12 +688,14 @@ typedef enum { /*< underscore_name=mm_modem_3gpp_ussd_session_state >*/ * MMFirmwareImageType: * @MM_FIRMWARE_IMAGE_TYPE_UNKNOWN: Unknown firmware type. * @MM_FIRMWARE_IMAGE_TYPE_GENERIC: Generic firmware image. + * @MM_FIRMWARE_IMAGE_TYPE_GOBI: Firmware image of Gobi devices. * * Type of firmware image. */ typedef enum { /*< underscore_name=mm_firmware_image_type >*/ MM_FIRMWARE_IMAGE_TYPE_UNKNOWN = 0, - MM_FIRMWARE_IMAGE_TYPE_GENERIC = 1 + MM_FIRMWARE_IMAGE_TYPE_GENERIC = 1, + MM_FIRMWARE_IMAGE_TYPE_GOBI = 2, } MMFirmwareImageType; #endif /* _MODEMMANAGER_ENUMS_H_ */ diff --git a/introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml b/introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml index 112b324a..c1912130 100644 --- a/introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml +++ b/introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml @@ -40,13 +40,39 @@ string value (signature <literal>"s"</literal>). </listitem> </varlistentry> - <varlistentry><term><literal>"version"</literal></term> + <varlistentry><term><literal>"gobi-pri-version"</literal></term> <listitem> - (Optional) The version of the firmware, given as a string value - (signature <literal>"s"</literal>). The format is - unspecified; tools attempting to upgrade firmware automatically must - understand the versioning scheme used by the modem driver they are - interacting with. + (Optional) The version of the PRI firmware image, in images of type + <link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>, + given as a string value (signature <literal>"s"</literal>). + </listitem> + </varlistentry> + <varlistentry><term><literal>"gobi-pri-info"</literal></term> + <listitem> + (Optional) Additional information of the PRI image, in images of type + <link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>, + given as a string value (signature <literal>"s"</literal>). + </listitem> + </varlistentry> + <varlistentry><term><literal>"gobi-boot-version"</literal></term> + <listitem> + (Optional) The boot version of the PRI firmware image, in images of type + <link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>, + given as a string value (signature <literal>"s"</literal>). + </listitem> + </varlistentry> + <varlistentry><term><literal>"gobi-pri-unique-id"</literal></term> + <listitem> + (Optional) The unique ID of the PRI firmware image, in images of type + <link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>, + given as a string value (signature <literal>"s"</literal>). + </listitem> + </varlistentry> + <varlistentry><term><literal>"gobi-modem-unique-id"</literal></term> + <listitem> + (Optional) The unique ID of the Modem firmware image, in images of type + <link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>, + given as a string value (signature <literal>"s"</literal>). </listitem> </varlistentry> </variablelist> diff --git a/libmm-glib/mm-firmware-properties.c b/libmm-glib/mm-firmware-properties.c index 57cb8486..c1451223 100644 --- a/libmm-glib/mm-firmware-properties.c +++ b/libmm-glib/mm-firmware-properties.c @@ -33,13 +33,25 @@ G_DEFINE_TYPE (MMFirmwareProperties, mm_firmware_properties, G_TYPE_OBJECT); -#define PROPERTY_UNIQUE_ID "unique-id" -#define PROPERTY_IMAGE_TYPE "image-type" +#define PROPERTY_UNIQUE_ID "unique-id" +#define PROPERTY_IMAGE_TYPE "image-type" +#define PROPERTY_GOBI_PRI_VERSION "gobi-pri-version" +#define PROPERTY_GOBI_PRI_INFO "gobi-pri-info" +#define PROPERTY_GOBI_BOOT_VERSION "gobi-boot-version" +#define PROPERTY_GOBI_PRI_UNIQUE_ID "gobi-pri-unique-id" +#define PROPERTY_GOBI_MODEM_UNIQUE_ID "gobi-modem-unique-id" struct _MMFirmwarePropertiesPrivate { /* Mandatory parameters */ MMFirmwareImageType image_type; gchar *unique_id; + + /* Gobi specific */ + gchar *gobi_pri_version; + gchar *gobi_pri_info; + gchar *gobi_boot_version; + gchar *gobi_pri_unique_id; + gchar *gobi_modem_unique_id; }; static MMFirmwareProperties *firmware_properties_new_empty (void); @@ -83,6 +95,154 @@ mm_firmware_properties_get_image_type (MMFirmwareProperties *self) /*****************************************************************************/ /** + * mm_firmware_properties_get_gobi_pri_version: + * @self: a #MMFirmwareProperties. + * + * Gets the PRI version of a firmware image of type %MM_FIRMWARE_IMAGE_TYPE_GOBI. + * + * Returns: The PRI version, or %NULL if unknown. Do not free the returned value, it is owned by @self. + */ +const gchar * +mm_firmware_properties_get_gobi_pri_version (MMFirmwareProperties *self) +{ + g_return_val_if_fail (MM_IS_FIRMWARE_PROPERTIES (self), NULL); + g_return_val_if_fail (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI, NULL); + + return self->priv->gobi_pri_version; +} + +void +mm_firmware_properties_set_gobi_pri_version (MMFirmwareProperties *self, + const gchar *version) +{ + g_return_if_fail (MM_IS_FIRMWARE_PROPERTIES (self)); + g_return_if_fail (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI); + + g_free (self->priv->gobi_pri_version); + self->priv->gobi_pri_version = g_strdup (version); +} + +/*****************************************************************************/ + +/** + * mm_firmware_properties_get_gobi_pri_info: + * @self: a #MMFirmwareProperties. + * + * Gets the PRI info of a firmware image of type %MM_FIRMWARE_IMAGE_TYPE_GOBI. + * + * Returns: The PRI info, or %NULL if unknown. Do not free the returned value, it is owned by @self. + */ +const gchar * +mm_firmware_properties_get_gobi_pri_info (MMFirmwareProperties *self) +{ + g_return_val_if_fail (MM_IS_FIRMWARE_PROPERTIES (self), NULL); + g_return_val_if_fail (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI, NULL); + + return self->priv->gobi_pri_info; +} + +void +mm_firmware_properties_set_gobi_pri_info (MMFirmwareProperties *self, + const gchar *info) +{ + g_return_if_fail (MM_IS_FIRMWARE_PROPERTIES (self)); + g_return_if_fail (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI); + + g_free (self->priv->gobi_pri_info); + self->priv->gobi_pri_info = g_strdup (info); +} + +/** + * mm_firmware_properties_get_gobi_boot_version: + * @self: a #MMFirmwareProperties. + * + * Gets the boot version of a firmware image of type %MM_FIRMWARE_IMAGE_TYPE_GOBI. + * + * Returns: The boot version, or %NULL if unknown. Do not free the returned value, it is owned by @self. + */ +const gchar * +mm_firmware_properties_get_gobi_boot_version (MMFirmwareProperties *self) +{ + g_return_val_if_fail (MM_IS_FIRMWARE_PROPERTIES (self), NULL); + g_return_val_if_fail (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI, NULL); + + return self->priv->gobi_boot_version; +} + +void +mm_firmware_properties_set_gobi_boot_version (MMFirmwareProperties *self, + const gchar *version) +{ + g_return_if_fail (MM_IS_FIRMWARE_PROPERTIES (self)); + g_return_if_fail (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI); + + g_free (self->priv->gobi_boot_version); + self->priv->gobi_boot_version = g_strdup (version); +} + +/*****************************************************************************/ + +/** + * mm_firmware_properties_get_gobi_pri_unique_id: + * @self: a #MMFirmwareProperties. + * + * Gets the PRI unique ID of a firmware image of type %MM_FIRMWARE_IMAGE_TYPE_GOBI. + * + * Returns: The PRI unique ID, or %NULL if unknown. Do not free the returned value, it is owned by @self. + */ +const gchar * +mm_firmware_properties_get_gobi_pri_unique_id (MMFirmwareProperties *self) +{ + g_return_val_if_fail (MM_IS_FIRMWARE_PROPERTIES (self), NULL); + g_return_val_if_fail (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI, NULL); + + return self->priv->gobi_pri_unique_id; +} + +void +mm_firmware_properties_set_gobi_pri_unique_id (MMFirmwareProperties *self, + const gchar *unique_id) +{ + g_return_if_fail (MM_IS_FIRMWARE_PROPERTIES (self)); + g_return_if_fail (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI); + + g_free (self->priv->gobi_pri_unique_id); + self->priv->gobi_pri_unique_id = g_strdup (unique_id); +} + +/*****************************************************************************/ + +/** + * mm_firmware_properties_get_gobi_modem_unique_id: + * @self: a #MMFirmwareProperties. + * + * Gets the MODEM unique ID of a firmware image of type %MM_FIRMWARE_IMAGE_TYPE_GOBI. + * + * Returns: The PRI unique ID, or %NULL if unknown. Do not free the returned value, it is owned by @self. + */ +const gchar * +mm_firmware_properties_get_gobi_modem_unique_id (MMFirmwareProperties *self) +{ + g_return_val_if_fail (MM_IS_FIRMWARE_PROPERTIES (self), NULL); + g_return_val_if_fail (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI, NULL); + + return self->priv->gobi_modem_unique_id; +} + +void +mm_firmware_properties_set_gobi_modem_unique_id (MMFirmwareProperties *self, + const gchar *unique_id) +{ + g_return_if_fail (MM_IS_FIRMWARE_PROPERTIES (self)); + g_return_if_fail (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI); + + g_free (self->priv->gobi_modem_unique_id); + self->priv->gobi_modem_unique_id = g_strdup (unique_id); +} + +/*****************************************************************************/ + +/** * mm_firmware_properties_get_dictionary: * @self: A #MMFirmwareProperties. * @@ -115,6 +275,34 @@ mm_firmware_properties_get_dictionary (MMFirmwareProperties *self) PROPERTY_IMAGE_TYPE, g_variant_new_uint32 (self->priv->image_type)); + if (self->priv->image_type == MM_FIRMWARE_IMAGE_TYPE_GOBI) { + if (self->priv->gobi_pri_version) + g_variant_builder_add (&builder, + "{sv}", + PROPERTY_GOBI_PRI_VERSION, + g_variant_new_string (self->priv->gobi_pri_version)); + if (self->priv->gobi_pri_info) + g_variant_builder_add (&builder, + "{sv}", + PROPERTY_GOBI_PRI_INFO, + g_variant_new_string (self->priv->gobi_pri_info)); + if (self->priv->gobi_boot_version) + g_variant_builder_add (&builder, + "{sv}", + PROPERTY_GOBI_BOOT_VERSION, + g_variant_new_string (self->priv->gobi_boot_version)); + if (self->priv->gobi_pri_unique_id) + g_variant_builder_add (&builder, + "{sv}", + PROPERTY_GOBI_PRI_UNIQUE_ID, + g_variant_new_string (self->priv->gobi_pri_unique_id)); + if (self->priv->gobi_modem_unique_id) + g_variant_builder_add (&builder, + "{sv}", + PROPERTY_GOBI_MODEM_UNIQUE_ID, + g_variant_new_string (self->priv->gobi_modem_unique_id)); + } + return g_variant_ref_sink (g_variant_builder_end (&builder)); } @@ -129,8 +317,24 @@ consume_variant (MMFirmwareProperties *self, if (g_str_equal (key, PROPERTY_UNIQUE_ID)) { g_free (self->priv->unique_id); self->priv->unique_id = g_variant_dup_string (value, NULL); - } else if (g_str_equal (key, PROPERTY_IMAGE_TYPE)) + } else if (g_str_equal (key, PROPERTY_IMAGE_TYPE)) { self->priv->image_type = g_variant_get_uint32 (value); + } else if (g_str_equal (key, PROPERTY_GOBI_PRI_VERSION)) { + g_free (self->priv->gobi_pri_version); + self->priv->gobi_pri_version = g_variant_dup_string (value, NULL); + } else if (g_str_equal (key, PROPERTY_GOBI_PRI_INFO)) { + g_free (self->priv->gobi_pri_info); + self->priv->gobi_pri_info = g_variant_dup_string (value, NULL); + } else if (g_str_equal (key, PROPERTY_GOBI_BOOT_VERSION)) { + g_free (self->priv->gobi_boot_version); + self->priv->gobi_boot_version = g_variant_dup_string (value, NULL); + } else if (g_str_equal (key, PROPERTY_GOBI_PRI_UNIQUE_ID)) { + g_free (self->priv->gobi_pri_unique_id); + self->priv->gobi_pri_unique_id = g_variant_dup_string (value, NULL); + } else if (g_str_equal (key, PROPERTY_GOBI_MODEM_UNIQUE_ID)) { + g_free (self->priv->gobi_modem_unique_id); + self->priv->gobi_modem_unique_id = g_variant_dup_string (value, NULL); + } else { /* Set error */ g_set_error (error, @@ -267,6 +471,11 @@ finalize (GObject *object) MMFirmwareProperties *self = MM_FIRMWARE_PROPERTIES (object); g_free (self->priv->unique_id); + g_free (self->priv->gobi_pri_version); + g_free (self->priv->gobi_pri_info); + g_free (self->priv->gobi_boot_version); + g_free (self->priv->gobi_pri_unique_id); + g_free (self->priv->gobi_modem_unique_id); G_OBJECT_CLASS (mm_firmware_properties_parent_class)->finalize (object); } diff --git a/libmm-glib/mm-firmware-properties.h b/libmm-glib/mm-firmware-properties.h index 4cacfd68..33fffc3e 100644 --- a/libmm-glib/mm-firmware-properties.h +++ b/libmm-glib/mm-firmware-properties.h @@ -58,6 +58,13 @@ GType mm_firmware_properties_get_type (void); const gchar *mm_firmware_properties_get_unique_id (MMFirmwareProperties *self); MMFirmwareImageType mm_firmware_properties_get_image_type (MMFirmwareProperties *self); +/* Gobi specific */ +const gchar *mm_firmware_properties_get_gobi_pri_version (MMFirmwareProperties *self); +const gchar *mm_firmware_properties_get_gobi_pri_info (MMFirmwareProperties *self); +const gchar *mm_firmware_properties_get_gobi_boot_version (MMFirmwareProperties *self); +const gchar *mm_firmware_properties_get_gobi_pri_unique_id (MMFirmwareProperties *self); +const gchar *mm_firmware_properties_get_gobi_modem_unique_id (MMFirmwareProperties *self); + /*****************************************************************************/ /* ModemManager/libmm-glib/mmcli specific methods */ @@ -70,6 +77,18 @@ MMFirmwareProperties *mm_firmware_properties_new (MMFirmwareImageType image_type MMFirmwareProperties *mm_firmware_properties_new_from_dictionary (GVariant *dictionary, GError **error); +/* Gobi specific */ +void mm_firmware_properties_set_gobi_pri_version (MMFirmwareProperties *self, + const gchar *version); +void mm_firmware_properties_set_gobi_pri_info (MMFirmwareProperties *self, + const gchar *info); +void mm_firmware_properties_set_gobi_boot_version (MMFirmwareProperties *self, + const gchar *version); +void mm_firmware_properties_set_gobi_pri_unique_id (MMFirmwareProperties *self, + const gchar *id); +void mm_firmware_properties_set_gobi_modem_unique_id (MMFirmwareProperties *self, + const gchar *id); + GVariant *mm_firmware_properties_get_dictionary (MMFirmwareProperties *self); #endif |