From 047805348db1fdaac4c24b6ea4f4d382e6bc03c8 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Sat, 14 Nov 2020 23:17:00 +0100 Subject: iface-modem-firmware: allow plugins to ignore carrier info Skip building the firmware version information with carrier config information if the plugin already knows that the firmware upgrade method doesn't implement carrier-specific upgrade paths. --- src/mm-broadband-modem.c | 14 +++++++++++++- src/mm-iface-modem-firmware.c | 43 ++++++++++++++++++++++++++++++------------- src/mm-iface-modem-firmware.h | 3 ++- 3 files changed, 45 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 8a376c63..5fb72cc9 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -126,6 +126,7 @@ enum { PROP_MODEM_PERIODIC_ACCESS_TECH_CHECK_DISABLED, PROP_MODEM_PERIODIC_CALL_LIST_CHECK_DISABLED, PROP_MODEM_CARRIER_CONFIG_MAPPING, + PROP_MODEM_FIRMWARE_IGNORE_CARRIER, PROP_FLOW_CONTROL, PROP_INDICATORS_DISABLED, PROP_LAST @@ -253,7 +254,8 @@ struct _MMBroadbandModemPrivate { /*<--- Modem Firmware interface --->*/ /* Properties */ - GObject *modem_firmware_dbus_skeleton; + GObject *modem_firmware_dbus_skeleton; + gboolean modem_firmware_ignore_carrier; }; /*****************************************************************************/ @@ -12110,6 +12112,9 @@ set_property (GObject *object, case PROP_MODEM_CARRIER_CONFIG_MAPPING: self->priv->carrier_config_mapping = g_value_dup_string (value); break; + case PROP_MODEM_FIRMWARE_IGNORE_CARRIER: + self->priv->modem_firmware_ignore_carrier = g_value_get_boolean (value); + break; case PROP_FLOW_CONTROL: self->priv->flow_control = g_value_get_flags (value); break; @@ -12248,6 +12253,9 @@ get_property (GObject *object, case PROP_MODEM_CARRIER_CONFIG_MAPPING: g_value_set_string (value, self->priv->carrier_config_mapping); break; + case PROP_MODEM_FIRMWARE_IGNORE_CARRIER: + g_value_set_boolean (value, self->priv->modem_firmware_ignore_carrier); + break; case PROP_FLOW_CONTROL: g_value_set_flags (value, self->priv->flow_control); break; @@ -12843,6 +12851,10 @@ mm_broadband_modem_class_init (MMBroadbandModemClass *klass) PROP_MODEM_CARRIER_CONFIG_MAPPING, MM_IFACE_MODEM_CARRIER_CONFIG_MAPPING); + g_object_class_override_property (object_class, + PROP_MODEM_FIRMWARE_IGNORE_CARRIER, + MM_IFACE_MODEM_FIRMWARE_IGNORE_CARRIER); + properties[PROP_FLOW_CONTROL] = g_param_spec_flags (MM_BROADBAND_MODEM_FLOW_CONTROL, "Flow control", diff --git a/src/mm-iface-modem-firmware.c b/src/mm-iface-modem-firmware.c index 5cd710b2..d363f929 100644 --- a/src/mm-iface-modem-firmware.c +++ b/src/mm-iface-modem-firmware.c @@ -297,18 +297,23 @@ add_generic_version (MMBaseModem *self, MMFirmwareUpdateSettings *update_settings, GError **error) { - const gchar *firmware_revision; - const gchar *carrier_revision; - gchar *combined; + const gchar *firmware_revision; + const gchar *carrier_revision = NULL; + g_autofree gchar *combined = NULL; + gboolean ignore_carrier = FALSE; firmware_revision = mm_iface_modem_get_revision (MM_IFACE_MODEM (self)); if (!firmware_revision) { - g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, - "Unknown revision"); + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Unknown revision"); return FALSE; } - mm_iface_modem_get_carrier_config (MM_IFACE_MODEM (self), NULL, &carrier_revision); + g_object_get (self, + MM_IFACE_MODEM_FIRMWARE_IGNORE_CARRIER, &ignore_carrier, + NULL); + + if (!ignore_carrier) + mm_iface_modem_get_carrier_config (MM_IFACE_MODEM (self), NULL, &carrier_revision); if (!carrier_revision) { mm_firmware_update_settings_set_version (update_settings, firmware_revision); @@ -317,7 +322,6 @@ add_generic_version (MMBaseModem *self, combined = g_strdup_printf ("%s - %s", firmware_revision, carrier_revision); mm_firmware_update_settings_set_version (update_settings, combined); - g_free (combined); return TRUE; } @@ -332,9 +336,10 @@ add_generic_device_ids (MMBaseModem *self, guint16 rid; MMPort *primary = NULL; const gchar *subsystem; - const gchar *aux; + const gchar *carrier_config = NULL; g_autoptr(GPtrArray) ids = NULL; guint i; + gboolean ignore_carrier = FALSE; vid = mm_base_modem_get_vendor_id (self); pid = mm_base_modem_get_product_id (self); @@ -370,16 +375,20 @@ add_generic_device_ids (MMBaseModem *self, return FALSE; } - mm_iface_modem_get_carrier_config (MM_IFACE_MODEM (self), &aux, NULL); + g_object_get (self, + MM_IFACE_MODEM_FIRMWARE_IGNORE_CARRIER, &ignore_carrier, + NULL); + + if (!ignore_carrier) + mm_iface_modem_get_carrier_config (MM_IFACE_MODEM (self), &carrier_config, NULL); ids = g_ptr_array_new_with_free_func (g_free); - if (aux) { - gchar *carrier; + if (carrier_config) { + g_autofree gchar *carrier = NULL; - carrier = g_ascii_strup (aux, -1); + carrier = g_ascii_strup (carrier_config, -1); g_ptr_array_add (ids, g_strdup_printf ("%s\\VID_%04X&PID_%04X&REV_%04X&CARRIER_%s", supported_subsystems[i], vid, pid, rid, carrier)); - g_free (carrier); } g_ptr_array_add (ids, g_strdup_printf ("%s\\VID_%04X&PID_%04X&REV_%04X", supported_subsystems[i], vid, pid, rid)); @@ -563,6 +572,14 @@ iface_modem_firmware_init (gpointer g_iface) MM_GDBUS_TYPE_MODEM_FIRMWARE_SKELETON, G_PARAM_READWRITE)); + g_object_interface_install_property + (g_iface, + g_param_spec_boolean (MM_IFACE_MODEM_FIRMWARE_IGNORE_CARRIER, + "Ignore carrier info in firmware details", + "Whether carrier info (version, name) should be ignored when showing the firmware details", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + initialized = TRUE; } diff --git a/src/mm-iface-modem-firmware.h b/src/mm-iface-modem-firmware.h index 6ce894a0..365bfb15 100644 --- a/src/mm-iface-modem-firmware.h +++ b/src/mm-iface-modem-firmware.h @@ -27,7 +27,8 @@ #define MM_IS_IFACE_MODEM_FIRMWARE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_IFACE_MODEM_FIRMWARE)) #define MM_IFACE_MODEM_FIRMWARE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MM_TYPE_IFACE_MODEM_FIRMWARE, MMIfaceModemFirmware)) -#define MM_IFACE_MODEM_FIRMWARE_DBUS_SKELETON "iface-modem-firmware-dbus-skeleton" +#define MM_IFACE_MODEM_FIRMWARE_DBUS_SKELETON "iface-modem-firmware-dbus-skeleton" +#define MM_IFACE_MODEM_FIRMWARE_IGNORE_CARRIER "iface-modem-firmware-ignore-carrier" typedef struct _MMIfaceModemFirmware MMIfaceModemFirmware; -- cgit v1.2.3-70-g09d2