aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/cinterion/mm-broadband-modem-cinterion.c27
-rw-r--r--plugins/quectel/mm-broadband-modem-qmi-quectel.c1
-rw-r--r--plugins/quectel/mm-broadband-modem-quectel.c1
-rw-r--r--plugins/quectel/mm-shared-quectel.c23
-rw-r--r--plugins/quectel/mm-shared-quectel.h14
-rw-r--r--plugins/telit/mm-broadband-modem-telit.c23
-rw-r--r--plugins/ublox/mm-broadband-modem-ublox.c27
7 files changed, 87 insertions, 29 deletions
diff --git a/plugins/cinterion/mm-broadband-modem-cinterion.c b/plugins/cinterion/mm-broadband-modem-cinterion.c
index 7e483170..3be8da8b 100644
--- a/plugins/cinterion/mm-broadband-modem-cinterion.c
+++ b/plugins/cinterion/mm-broadband-modem-cinterion.c
@@ -2639,7 +2639,7 @@ cinterion_scks_unsolicited_handler (MMPortSerialAt *port,
break;
}
- mm_broadband_modem_sim_hot_swap_detected (MM_BROADBAND_MODEM (self));
+ mm_iface_modem_process_sim_event (MM_IFACE_MODEM (self));
}
static gboolean
@@ -2651,18 +2651,18 @@ modem_setup_sim_hot_swap_finish (MMIfaceModem *self,
}
static void
-cinterion_hot_swap_init_ready (MMBaseModem *_self,
+cinterion_hot_swap_init_ready (MMBaseModem *_self,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
MMBroadbandModemCinterion *self = MM_BROADBAND_MODEM_CINTERION (_self);
- GError *error = NULL;
- MMPortSerialAt *primary;
- MMPortSerialAt *secondary;
+ g_autoptr(GError) error = NULL;
+ MMPortSerialAt *primary;
+ MMPortSerialAt *secondary;
if (!mm_base_modem_at_command_finish (_self, res, &error)) {
g_prefix_error (&error, "Could not enable SCKS: ");
- g_task_return_error (task, error);
+ g_task_return_error (task, g_steal_pointer (&error));
g_object_unref (task);
return;
}
@@ -2686,6 +2686,9 @@ cinterion_hot_swap_init_ready (MMBaseModem *_self,
self,
NULL);
+ if (!mm_broadband_modem_sim_hot_swap_ports_context_init (MM_BROADBAND_MODEM (self), &error))
+ mm_obj_warn (self, "failed to initialize SIM hot swap ports context: %s", error->message);
+
g_task_return_boolean (task, TRUE);
g_object_unref (task);
}
@@ -2710,6 +2713,15 @@ modem_setup_sim_hot_swap (MMIfaceModem *self,
}
/*****************************************************************************/
+/* SIM hot swap cleanup (Modem interface) */
+
+static void
+modem_cleanup_sim_hot_swap (MMIfaceModem *self)
+{
+ mm_broadband_modem_sim_hot_swap_ports_context_reset (MM_BROADBAND_MODEM (self));
+}
+
+/*****************************************************************************/
/* Create Bearer (Modem interface) */
static MMBaseBearer *
@@ -2972,6 +2984,7 @@ iface_modem_init (MMIfaceModem *iface)
iface->modem_power_off_finish = modem_power_off_finish;
iface->setup_sim_hot_swap = modem_setup_sim_hot_swap;
iface->setup_sim_hot_swap_finish = modem_setup_sim_hot_swap_finish;
+ iface->cleanup_sim_hot_swap = modem_cleanup_sim_hot_swap;
}
static MMIfaceModem *
diff --git a/plugins/quectel/mm-broadband-modem-qmi-quectel.c b/plugins/quectel/mm-broadband-modem-qmi-quectel.c
index 1e8ec7be..a4ccbfc9 100644
--- a/plugins/quectel/mm-broadband-modem-qmi-quectel.c
+++ b/plugins/quectel/mm-broadband-modem-qmi-quectel.c
@@ -73,6 +73,7 @@ iface_modem_init (MMIfaceModem *iface)
iface->setup_sim_hot_swap = mm_shared_quectel_setup_sim_hot_swap;
iface->setup_sim_hot_swap_finish = mm_shared_quectel_setup_sim_hot_swap_finish;
+ iface->cleanup_sim_hot_swap = mm_shared_quectel_cleanup_sim_hot_swap;
}
static MMIfaceModem *
diff --git a/plugins/quectel/mm-broadband-modem-quectel.c b/plugins/quectel/mm-broadband-modem-quectel.c
index 23654305..ad66b783 100644
--- a/plugins/quectel/mm-broadband-modem-quectel.c
+++ b/plugins/quectel/mm-broadband-modem-quectel.c
@@ -71,6 +71,7 @@ iface_modem_init (MMIfaceModem *iface)
iface->setup_sim_hot_swap = mm_shared_quectel_setup_sim_hot_swap;
iface->setup_sim_hot_swap_finish = mm_shared_quectel_setup_sim_hot_swap_finish;
+ iface->cleanup_sim_hot_swap = mm_shared_quectel_cleanup_sim_hot_swap;
}
static MMIfaceModem *
diff --git a/plugins/quectel/mm-shared-quectel.c b/plugins/quectel/mm-shared-quectel.c
index 547775bd..13834e83 100644
--- a/plugins/quectel/mm-shared-quectel.c
+++ b/plugins/quectel/mm-shared-quectel.c
@@ -435,11 +435,12 @@ mm_shared_quectel_setup_sim_hot_swap (MMIfaceModem *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
- Private *priv;
- MMPortSerialAt *ports[2];
- GTask *task;
- GRegex *pattern;
- guint i;
+ Private *priv;
+ MMPortSerialAt *ports[2];
+ GTask *task;
+ GRegex *pattern;
+ guint i;
+ g_autoptr(GError) error = NULL;
priv = get_private (MM_SHARED_QUECTEL (self));
@@ -464,6 +465,9 @@ mm_shared_quectel_setup_sim_hot_swap (MMIfaceModem *self,
g_regex_unref (pattern);
mm_obj_dbg (self, "+QUSIM detection set up");
+ if (!mm_broadband_modem_sim_hot_swap_ports_context_init (MM_BROADBAND_MODEM (self), &error))
+ mm_obj_warn (self, "failed to initialize SIM hot swap ports context: %s", error->message);
+
/* Now, if available, setup parent logic */
if (priv->iface_modem_parent->setup_sim_hot_swap &&
priv->iface_modem_parent->setup_sim_hot_swap_finish) {
@@ -479,6 +483,15 @@ mm_shared_quectel_setup_sim_hot_swap (MMIfaceModem *self,
}
/*****************************************************************************/
+/* SIM hot swap cleanup (Modem interface) */
+
+void
+mm_shared_quectel_cleanup_sim_hot_swap (MMIfaceModem *self)
+{
+ mm_broadband_modem_sim_hot_swap_ports_context_reset (MM_BROADBAND_MODEM (self));
+}
+
+/*****************************************************************************/
/* GPS trace received */
static void
diff --git a/plugins/quectel/mm-shared-quectel.h b/plugins/quectel/mm-shared-quectel.h
index f9266c06..0dfcbde4 100644
--- a/plugins/quectel/mm-shared-quectel.h
+++ b/plugins/quectel/mm-shared-quectel.h
@@ -54,13 +54,13 @@ MMFirmwareUpdateSettings *mm_shared_quectel_firmware_load_update_settings_finish
GAsyncResult *res,
GError **error);
-void mm_shared_quectel_setup_sim_hot_swap (MMIfaceModem *self,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean mm_shared_quectel_setup_sim_hot_swap_finish (MMIfaceModem *self,
- GAsyncResult *res,
- GError **error);
+void mm_shared_quectel_setup_sim_hot_swap (MMIfaceModem *self,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean mm_shared_quectel_setup_sim_hot_swap_finish (MMIfaceModem *self,
+ GAsyncResult *res,
+ GError **error);
+void mm_shared_quectel_cleanup_sim_hot_swap (MMIfaceModem *self);
void mm_shared_quectel_location_load_capabilities (MMIfaceModemLocation *self,
GAsyncReadyCallback callback,
diff --git a/plugins/telit/mm-broadband-modem-telit.c b/plugins/telit/mm-broadband-modem-telit.c
index 6228d697..49e48247 100644
--- a/plugins/telit/mm-broadband-modem-telit.c
+++ b/plugins/telit/mm-broadband-modem-telit.c
@@ -474,7 +474,7 @@ telit_qss_unsolicited_handler (MMPortSerialAt *port,
if ((prev_qss_status == QSS_STATUS_SIM_REMOVED && cur_qss_status != QSS_STATUS_SIM_REMOVED) ||
(prev_qss_status > QSS_STATUS_SIM_REMOVED && cur_qss_status == QSS_STATUS_SIM_REMOVED)) {
mm_obj_info (self, "QSS handler: SIM swap detected");
- mm_broadband_modem_sim_hot_swap_detected (MM_BROADBAND_MODEM (self));
+ mm_iface_modem_process_sim_event (MM_IFACE_MODEM (self));
}
}
@@ -649,14 +649,19 @@ qss_setup_step (GTask *task)
case QSS_SETUP_STEP_LAST:
/* If all enabling actions failed (either both, or only primary if
* there is no secondary), then we return an error */
- if (ctx->primary_error &&
- (ctx->secondary_error || !ctx->secondary))
+ if (ctx->primary_error && (ctx->secondary_error || !ctx->secondary)) {
g_task_return_new_error (task,
MM_CORE_ERROR,
MM_CORE_ERROR_FAILED,
"QSS: couldn't enable unsolicited");
- else
+ } else {
+ g_autoptr(GError) error = NULL;
+
+ if (!mm_broadband_modem_sim_hot_swap_ports_context_init (MM_BROADBAND_MODEM (self), &error))
+ mm_obj_warn (self, "failed to initialize SIM hot swap ports context: %s", error->message);
+
g_task_return_boolean (task, TRUE);
+ }
g_object_unref (task);
break;
@@ -685,6 +690,15 @@ modem_setup_sim_hot_swap (MMIfaceModem *self,
}
/*****************************************************************************/
+/* SIM hot swap cleanup (Modem interface) */
+
+static void
+modem_cleanup_sim_hot_swap (MMIfaceModem *self)
+{
+ mm_broadband_modem_sim_hot_swap_ports_context_reset (MM_BROADBAND_MODEM (self));
+}
+
+/*****************************************************************************/
/* Load unlock retries (Modem interface)
*
* NOTE: the logic must make sure that LOAD_UNLOCK_RETRIES_STEP_UNLOCK is always
@@ -1408,6 +1422,7 @@ iface_modem_init (MMIfaceModem *iface)
iface->set_current_modes_finish = mm_shared_telit_set_current_modes_finish;
iface->setup_sim_hot_swap = modem_setup_sim_hot_swap;
iface->setup_sim_hot_swap_finish = modem_setup_sim_hot_swap_finish;
+ iface->cleanup_sim_hot_swap = modem_cleanup_sim_hot_swap;
}
static void
diff --git a/plugins/ublox/mm-broadband-modem-ublox.c b/plugins/ublox/mm-broadband-modem-ublox.c
index 7a45e4ed..b5c2072d 100644
--- a/plugins/ublox/mm-broadband-modem-ublox.c
+++ b/plugins/ublox/mm-broadband-modem-ublox.c
@@ -1079,7 +1079,7 @@ common_voice_enable_disable_unsolicited_events (MMBroadbandModemUblox *self,
}
/*****************************************************************************/
-/* Hotplug configure (Modem interface) */
+/* SIM hot swap setup (Modem interface) */
typedef enum {
CIEV_SIM_STATUS_UNKNOWN = -1,
@@ -1110,7 +1110,7 @@ ublox_ciev_unsolicited_handler (MMPortSerialAt *port,
mm_obj_info (self, "CIEV: sim hot swap detected '%d'", sim_insert_status);
if (sim_insert_status == CIEV_SIM_STATUS_INSERTED ||
sim_insert_status == CIEV_SIM_STATUS_REMOVED) {
- mm_broadband_modem_sim_hot_swap_detected (MM_BROADBAND_MODEM (self));
+ mm_iface_modem_process_sim_event (MM_IFACE_MODEM (self));
} else {
mm_obj_warn (self, "(%s) CIEV: unable to determine sim insert status: %d",
mm_port_get_device (MM_PORT (port)),
@@ -1155,21 +1155,26 @@ ublox_setup_ciev_handler (MMIfaceModem *self,
}
static void
-process_cind_verbosity_response (MMBaseModem *self,
+process_cind_verbosity_response (MMBaseModem *self,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
- GError *error = NULL;
+ g_autoptr(GError) error = NULL;
mm_base_modem_at_command_finish (self, res, &error);
if (error) {
mm_obj_warn (self, "CIND: verbose mode is not configured: %s", error->message);
- g_task_return_error (task, error);
+ g_task_return_error (task, g_steal_pointer (&error));
g_object_unref (task);
return;
}
+
mm_obj_info (self, "CIND unsolicited response codes processing verbosity configured successfully");
+
+ if (!mm_broadband_modem_sim_hot_swap_ports_context_init (MM_BROADBAND_MODEM (self), &error))
+ mm_obj_warn (self, "failed to initialize SIM hot swap ports context: %s", error->message);
+
g_task_return_boolean (task, TRUE);
g_object_unref (task);
}
@@ -1240,6 +1245,15 @@ modem_setup_sim_hot_swap (MMIfaceModem *self,
}
/*****************************************************************************/
+/* SIM hot swap cleanup (Modem interface) */
+
+static void
+modem_cleanup_sim_hot_swap (MMIfaceModem *self)
+{
+ mm_broadband_modem_sim_hot_swap_ports_context_reset (MM_BROADBAND_MODEM (self));
+}
+
+/*****************************************************************************/
/* Enabling unsolicited events (Voice interface) */
static gboolean
@@ -2031,6 +2045,7 @@ iface_modem_init (MMIfaceModem *iface)
iface->set_current_bands_finish = common_set_current_modes_bands_finish;
iface->setup_sim_hot_swap = modem_setup_sim_hot_swap;
iface->setup_sim_hot_swap_finish = modem_setup_sim_hot_swap_finish;
+ iface->cleanup_sim_hot_swap = modem_cleanup_sim_hot_swap;
}
static void