diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-iface-modem-firmware.c | 22 | ||||
-rw-r--r-- | src/mm-iface-modem.c | 33 | ||||
-rw-r--r-- | src/mm-iface-modem.h | 12 | ||||
-rw-r--r-- | src/mm-shared-qmi.c | 25 | ||||
-rw-r--r-- | src/mm-shared-qmi.h | 4 |
5 files changed, 64 insertions, 32 deletions
diff --git a/src/mm-iface-modem-firmware.c b/src/mm-iface-modem-firmware.c index 1775a1cb..ecfa3b5f 100644 --- a/src/mm-iface-modem-firmware.c +++ b/src/mm-iface-modem-firmware.c @@ -287,16 +287,27 @@ add_generic_version (MMBaseModem *self, MMFirmwareUpdateSettings *update_settings, GError **error) { - const gchar *revision; + const gchar *firmware_revision; + const gchar *carrier_revision; + gchar *combined; - revision = mm_iface_modem_get_revision (MM_IFACE_MODEM (self)); - if (!revision) { + 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"); return FALSE; } - mm_firmware_update_settings_set_version (update_settings, revision); + 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); + return TRUE; + } + + combined = g_strdup_printf ("%s - %s", firmware_revision, carrier_revision); + mm_firmware_update_settings_set_version (update_settings, combined); + g_free (combined); return TRUE; } @@ -335,8 +346,7 @@ add_generic_device_ids (MMBaseModem *self, return FALSE; } - /* carrier = g_ascii_strup (mm_iface_modem_get_carrier_config (MM_IFACE_MODEM (self)), -1); */ - aux = mm_iface_modem_get_carrier_config (MM_IFACE_MODEM (self)); + mm_iface_modem_get_carrier_config (MM_IFACE_MODEM (self), &aux, NULL); ids = g_ptr_array_new_with_free_func ((GDestroyNotify)g_free); if (aux) { diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index 292923db..66db38ab 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -4363,17 +4363,19 @@ load_carrier_config_ready (MMIfaceModem *self, { InitializationContext *ctx; GError *error = NULL; - gchar *carrier_configuration; + gchar *name = NULL; + gchar *revision = NULL; ctx = g_task_get_task_data (task); - carrier_configuration = MM_IFACE_MODEM_GET_INTERFACE (self)->load_carrier_config_finish (self, res, &error); - if (!carrier_configuration) { + if (!MM_IFACE_MODEM_GET_INTERFACE (self)->load_carrier_config_finish (self, res, &name, &revision, &error)) { mm_warn ("couldn't load carrier config: '%s'", error->message); g_error_free (error); } else { - mm_gdbus_modem_set_carrier_configuration (ctx->skeleton, carrier_configuration); - g_free (carrier_configuration); + mm_gdbus_modem_set_carrier_configuration (ctx->skeleton, name); + mm_gdbus_modem_set_carrier_configuration_revision (ctx->skeleton, revision); + g_free (name); + g_free (revision); } /* Go on to next step */ @@ -5452,22 +5454,25 @@ mm_iface_modem_get_revision (MMIfaceModem *self) return revision; } -const gchar * -mm_iface_modem_get_carrier_config (MMIfaceModem *self) +gboolean +mm_iface_modem_get_carrier_config (MMIfaceModem *self, + const gchar **name, + const gchar **revision) { - const gchar *carrier_config = NULL; MmGdbusModem *skeleton; g_object_get (self, MM_IFACE_MODEM_DBUS_SKELETON, &skeleton, NULL); + if (!skeleton) + return FALSE; - if (skeleton) { - carrier_config = mm_gdbus_modem_get_carrier_configuration (skeleton); - g_object_unref (skeleton); - } - - return carrier_config; + if (name) + *name = mm_gdbus_modem_get_carrier_configuration (skeleton); + if (revision) + *revision = mm_gdbus_modem_get_carrier_configuration_revision (skeleton); + g_object_unref (skeleton); + return TRUE; } /*****************************************************************************/ diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h index 82236dd4..51cb02bd 100644 --- a/src/mm-iface-modem.h +++ b/src/mm-iface-modem.h @@ -362,8 +362,10 @@ struct _MMIfaceModem { void (* load_carrier_config) (MMIfaceModem *self, GAsyncReadyCallback callback, gpointer user_data); - gchar * (* load_carrier_config_finish) (MMIfaceModem *self, + gboolean (* load_carrier_config_finish) (MMIfaceModem *self, GAsyncResult *res, + gchar **carrier_config_name, + gchar **carrier_config_revision, GError **error); /* Setup carrier config based on IMSI */ @@ -400,9 +402,11 @@ gboolean mm_iface_modem_is_4g (MMIfaceModem *self); gboolean mm_iface_modem_is_4g_only (MMIfaceModem *self); /* Helpers to query properties */ -const gchar *mm_iface_modem_get_model (MMIfaceModem *self); -const gchar *mm_iface_modem_get_revision (MMIfaceModem *self); -const gchar *mm_iface_modem_get_carrier_config (MMIfaceModem *self); +const gchar *mm_iface_modem_get_model (MMIfaceModem *self); +const gchar *mm_iface_modem_get_revision (MMIfaceModem *self); +gboolean mm_iface_modem_get_carrier_config (MMIfaceModem *self, + const gchar **name, + const gchar **revision); /* Initialize Modem interface (async) */ void mm_iface_modem_initialize (MMIfaceModem *self, diff --git a/src/mm-shared-qmi.c b/src/mm-shared-qmi.c index c48b543a..989e066a 100644 --- a/src/mm-shared-qmi.c +++ b/src/mm-shared-qmi.c @@ -2419,7 +2419,6 @@ typedef struct { GArray *config_list; guint configs_loaded; gint config_active_i; - gchar *config_active; guint token; guint timeout_id; @@ -2458,17 +2457,31 @@ load_carrier_config_context_free (LoadCarrierConfigContext *ctx) if (ctx->config_list) g_array_unref (ctx->config_list); - g_free (ctx->config_active); g_clear_object (&ctx->client); g_slice_free (LoadCarrierConfigContext, ctx); } -gchar * +gboolean mm_shared_qmi_load_carrier_config_finish (MMIfaceModem *self, GAsyncResult *res, + gchar **carrier_config_name, + gchar **carrier_config_revision, GError **error) { - return g_task_propagate_pointer (G_TASK (res), error); + Private *priv; + ConfigInfo *config; + gssize i; + + i = g_task_propagate_int (G_TASK (res), error); + if (i < 0) + return FALSE; + + priv = get_private (MM_SHARED_QMI (self)); + config = &g_array_index (priv->config_list, ConfigInfo, i); + + *carrier_config_name = g_strdup (config->description); + *carrier_config_revision = g_strdup_printf ("%08X", config->version); + return TRUE; } static void load_carrier_config_step (GTask *task); @@ -2543,7 +2556,6 @@ get_selected_config_indication (QmiClientPdc *client, if ((config->id->len == active_id->len) && !memcmp (config->id->data, active_id->data, active_id->len)) { ctx->config_active_i = i; - ctx->config_active = g_strdup (config->description); break; } } @@ -2812,8 +2824,7 @@ load_carrier_config_step (GTask *task) priv->config_list = g_array_ref (ctx->config_list); priv->config_active_i = ctx->config_active_i; - g_assert (ctx->config_active); - g_task_return_pointer (task, g_strdup (ctx->config_active), g_free); + g_task_return_int (task, ctx->config_active_i); g_object_unref (task); break; } diff --git a/src/mm-shared-qmi.h b/src/mm-shared-qmi.h index 43564b15..093896e0 100644 --- a/src/mm-shared-qmi.h +++ b/src/mm-shared-qmi.h @@ -150,8 +150,10 @@ gboolean mm_shared_qmi_factory_reset_finish (MMIfaceMode void mm_shared_qmi_load_carrier_config (MMIfaceModem *self, GAsyncReadyCallback callback, gpointer user_data); -gchar *mm_shared_qmi_load_carrier_config_finish (MMIfaceModem *self, +gboolean mm_shared_qmi_load_carrier_config_finish (MMIfaceModem *self, GAsyncResult *res, + gchar **carrier_config_name, + gchar **carrier_config_revision, GError **error); void mm_shared_qmi_setup_carrier_config (MMIfaceModem *self, const gchar *imsi, |