quectel: minor refactor in the sim hot swap setup logic

This commit is contained in:
Aleksander Morgado
2020-09-11 10:15:50 +02:00
parent 06148aba48
commit ab4160afa6

View File

@@ -134,72 +134,69 @@ static void
quectel_qusim_check_for_sim_swap_ready (MMIfaceModem *self, quectel_qusim_check_for_sim_swap_ready (MMIfaceModem *self,
GAsyncResult *res) GAsyncResult *res)
{ {
GError *error = NULL; g_autoptr(GError) error = NULL;
if (!MM_IFACE_MODEM_GET_INTERFACE (self)->check_for_sim_swap_finish (self, res, &error)) { if (!MM_IFACE_MODEM_GET_INTERFACE (self)->check_for_sim_swap_finish (self, res, &error))
mm_obj_warn (self, "couldn't check SIM swap: %s", error->message); mm_obj_warn (self, "couldn't check SIM swap: %s", error->message);
g_error_free (error); else
} else
mm_obj_dbg (self, "check SIM swap completed"); mm_obj_dbg (self, "check SIM swap completed");
} }
static void static void
quectel_qusim_unsolicited_handler (MMPortSerialAt *port, quectel_qusim_unsolicited_handler (MMPortSerialAt *port,
GMatchInfo *match_info, GMatchInfo *match_info,
MMIfaceModem* self) MMIfaceModem *self)
{ {
if (MM_IFACE_MODEM_GET_INTERFACE (self)->check_for_sim_swap && if (!MM_IFACE_MODEM_GET_INTERFACE (self)->check_for_sim_swap ||
MM_IFACE_MODEM_GET_INTERFACE (self)->check_for_sim_swap_finish) { !MM_IFACE_MODEM_GET_INTERFACE (self)->check_for_sim_swap_finish)
mm_obj_dbg (self, "checking SIM swap"); return;
MM_IFACE_MODEM_GET_INTERFACE (self)->check_for_sim_swap (
self, mm_obj_dbg (self, "checking SIM swap");
NULL, MM_IFACE_MODEM_GET_INTERFACE (self)->check_for_sim_swap (
(GAsyncReadyCallback)quectel_qusim_check_for_sim_swap_ready, self,
NULL); NULL,
} (GAsyncReadyCallback)quectel_qusim_check_for_sim_swap_ready,
NULL);
} }
/*****************************************************************************/
/* Setup SIM hot swap context (Modem interface) */
gboolean gboolean
mm_shared_quectel_setup_sim_hot_swap_finish (MMIfaceModem *self, mm_shared_quectel_setup_sim_hot_swap_finish (MMIfaceModem *self,
GAsyncResult *res, GAsyncResult *res,
GError **error) GError **error)
{ {
return g_task_propagate_boolean (G_TASK (res), error); return g_task_propagate_boolean (G_TASK (res), error);
} }
void void
mm_shared_quectel_setup_sim_hot_swap (MMIfaceModem *self, mm_shared_quectel_setup_sim_hot_swap (MMIfaceModem *self,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data) gpointer user_data)
{ {
MMPortSerialAt *port_primary; MMPortSerialAt *ports[2];
MMPortSerialAt *port_secondary; GTask *task;
GTask *task; GRegex *pattern;
GRegex *pattern; guint i;
task = g_task_new (self, NULL, callback, user_data); task = g_task_new (self, NULL, callback, user_data);
port_primary = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
port_secondary = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self)); ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
pattern = g_regex_new ("\\+QUSIM:\\s*1\\r\\n", G_REGEX_RAW, 0, NULL); pattern = g_regex_new ("\\+QUSIM:\\s*1\\r\\n", G_REGEX_RAW, 0, NULL);
g_assert (pattern); g_assert (pattern);
if (port_primary) for (i = 0; i < G_N_ELEMENTS (ports); i++) {
mm_port_serial_at_add_unsolicited_msg_handler ( if (ports[i])
port_primary, mm_port_serial_at_add_unsolicited_msg_handler (
pattern, ports[i],
(MMPortSerialAtUnsolicitedMsgFn)quectel_qusim_unsolicited_handler, pattern,
self, (MMPortSerialAtUnsolicitedMsgFn)quectel_qusim_unsolicited_handler,
NULL); self,
NULL);
if (port_secondary) }
mm_port_serial_at_add_unsolicited_msg_handler (
port_secondary,
pattern,
(MMPortSerialAtUnsolicitedMsgFn)quectel_qusim_unsolicited_handler,
self,
NULL);
g_regex_unref (pattern); g_regex_unref (pattern);
mm_obj_dbg (self, "+QUSIM detection set up"); mm_obj_dbg (self, "+QUSIM detection set up");