aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/mmcli-modem-firmware.c19
-rw-r--r--docs/reference/libmm-glib/libmm-glib-sections.txt10
-rw-r--r--include/ModemManager-enums.h4
-rw-r--r--introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml38
-rw-r--r--libmm-glib/mm-firmware-properties.c215
-rw-r--r--libmm-glib/mm-firmware-properties.h19
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