base-modem: SIM switch handling at base modem level

When the SIM switch doesn't happen as part of an async hot swap
detection, we should trigger the switch handling at base modem level,
which e.g. doesn't require explicit cleanup of the SIM hot swap
detection port context.
This commit is contained in:
Aleksander Morgado
2020-08-28 14:59:06 +00:00
parent e7409b6898
commit e20eebff47
3 changed files with 25 additions and 18 deletions
+22
View File
@@ -1435,6 +1435,28 @@ mm_base_modem_get_product_id (MMBaseModem *self)
/*****************************************************************************/
static void
after_sim_switch_disable_ready (MMBaseModem *self,
GAsyncResult *res)
{
g_autoptr(GError) error = NULL;
mm_base_modem_disable_finish (self, res, &error);
if (error)
mm_obj_err (self, "failed to disable after SIM switch event: %s", error->message);
else
mm_base_modem_set_valid (self, FALSE);
}
void
mm_base_modem_process_sim_switch (MMBaseModem *self)
{
mm_base_modem_set_reprobe (self, TRUE);
mm_base_modem_disable (self, (GAsyncReadyCallback) after_sim_switch_disable_ready, NULL);
}
/*****************************************************************************/
static gboolean
base_modem_invalid_idle (MMBaseModem *self)
{
+2
View File
@@ -214,4 +214,6 @@ gboolean mm_base_modem_disable_finish (MMBaseModem *self,
GAsyncResult *res,
GError **error);
void mm_base_modem_process_sim_switch (MMBaseModem *self);
#endif /* MM_BASE_MODEM_H */
+1 -18
View File
@@ -11900,20 +11900,6 @@ mm_broadband_modem_create_device_identifier (MMBroadbandModem *self,
/*****************************************************************************/
static void
after_hotswap_event_disable_ready (MMBaseModem *self,
GAsyncResult *res,
gpointer user_data)
{
GError *error = NULL;
mm_base_modem_disable_finish (self, res, &error);
if (error) {
mm_obj_err (self, "failed to disable after hotswap event: %s", error->message);
g_error_free (error);
} else
mm_base_modem_set_valid (self, FALSE);
}
void
mm_broadband_modem_sim_hot_swap_detected (MMBroadbandModem *self)
@@ -11924,10 +11910,7 @@ mm_broadband_modem_sim_hot_swap_detected (MMBroadbandModem *self)
self->priv->sim_hot_swap_ports_ctx = NULL;
}
mm_base_modem_set_reprobe (MM_BASE_MODEM (self), TRUE);
mm_base_modem_disable (MM_BASE_MODEM (self),
(GAsyncReadyCallback) after_hotswap_event_disable_ready,
NULL);
mm_base_modem_process_sim_switch (MM_BASE_MODEM (self));
}
/*****************************************************************************/