diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-iface-modem-firmware.c | 53 | ||||
-rw-r--r-- | src/mm-iface-modem.c | 18 | ||||
-rw-r--r-- | src/mm-iface-modem.h | 5 |
3 files changed, 63 insertions, 13 deletions
diff --git a/src/mm-iface-modem-firmware.c b/src/mm-iface-modem-firmware.c index 11eff7c3..5cbe8741 100644 --- a/src/mm-iface-modem-firmware.c +++ b/src/mm-iface-modem-firmware.c @@ -283,6 +283,24 @@ mm_iface_modem_firmware_initialize_finish (MMIfaceModemFirmware *self, } static gboolean +add_generic_version (MMBaseModem *self, + MMFirmwareUpdateSettings *update_settings, + GError **error) +{ + const gchar *revision; + + revision = mm_iface_modem_get_revision (MM_IFACE_MODEM (self)); + if (!revision) { + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Unknown revision"); + return FALSE; + } + + mm_firmware_update_settings_set_version (update_settings, revision); + return TRUE; +} + +static gboolean add_generic_device_ids (MMBaseModem *self, MMFirmwareUpdateSettings *update_settings, GError **error) @@ -343,20 +361,33 @@ load_update_settings_ready (MMIfaceModemFirmware *self, if (!update_settings) { mm_dbg ("Couldn't load update settings: '%s'", error->message); g_error_free (error); - } else { - /* If the plugin didn't specify custom device ids, add the default ones ourselves */ - if (!mm_firmware_update_settings_get_device_ids (update_settings) && - !add_generic_device_ids (MM_BASE_MODEM (self), update_settings, &error)) { - mm_warn ("Couldn't build device ids: '%s'", error->message); - g_error_free (error); - } else { - variant = mm_firmware_update_settings_get_variant (update_settings); - g_object_unref (update_settings); - } + goto out; } - mm_gdbus_modem_firmware_set_update_settings (ctx->skeleton, variant); + /* If the plugin didn't specify custom device ids, add the default ones ourselves */ + if (!mm_firmware_update_settings_get_device_ids (update_settings) && + !add_generic_device_ids (MM_BASE_MODEM (self), update_settings, &error)) { + mm_warn ("Couldn't build device ids: '%s'", error->message); + g_error_free (error); + g_clear_object (&update_settings); + goto out; + } + /* If the plugin didn't specify custom version, add the default one ourselves */ + if (!mm_firmware_update_settings_get_version (update_settings) && + !add_generic_version (MM_BASE_MODEM (self), update_settings, &error)) { + mm_warn ("Couldn't set version: '%s'", error->message); + g_error_free (error); + g_clear_object (&update_settings); + goto out; + } + +out: + if (update_settings) { + variant = mm_firmware_update_settings_get_variant (update_settings); + g_object_unref (update_settings); + } + mm_gdbus_modem_firmware_set_update_settings (ctx->skeleton, variant); if (variant) g_variant_unref (variant); diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index a18accdd..1ffcb967 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -5329,6 +5329,24 @@ mm_iface_modem_get_model (MMIfaceModem *self) return model; } +const gchar * +mm_iface_modem_get_revision (MMIfaceModem *self) +{ + const gchar *revision = NULL; + MmGdbusModem *skeleton; + + g_object_get (self, + MM_IFACE_MODEM_DBUS_SKELETON, &skeleton, + NULL); + + if (skeleton) { + revision = mm_gdbus_modem_get_revision (skeleton); + g_object_unref (skeleton); + } + + return revision; +} + /*****************************************************************************/ static void diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h index cc3e087e..5b1c891d 100644 --- a/src/mm-iface-modem.h +++ b/src/mm-iface-modem.h @@ -380,8 +380,9 @@ gboolean mm_iface_modem_is_3g_only (MMIfaceModem *self); gboolean mm_iface_modem_is_4g (MMIfaceModem *self); gboolean mm_iface_modem_is_4g_only (MMIfaceModem *self); -/* Helper to query model */ -const gchar *mm_iface_modem_get_model (MMIfaceModem *self); +/* Helpers to query properties */ +const gchar *mm_iface_modem_get_model (MMIfaceModem *self); +const gchar *mm_iface_modem_get_revision (MMIfaceModem *self); /* Initialize Modem interface (async) */ void mm_iface_modem_initialize (MMIfaceModem *self, |