aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2024-04-04 09:26:00 +0000
committerDan Williams <dan@bigw.org>2024-04-12 01:17:14 +0000
commit44adf5cd40360ec2bc3aa49827e1a5d9d223b1d5 (patch)
treedd808f7dec8a4d0a507fcaedf01e83ec6c8a5ed7 /src
parent62a81425ecb90dcc22c1b4b71b1e9ba21a3e50ef (diff)
broadband-modem-mtk-legacy: don't assume primary port always exists
Diffstat (limited to 'src')
-rw-r--r--src/plugins/mtk/mm-broadband-modem-mtk-legacy.c70
1 files changed, 46 insertions, 24 deletions
diff --git a/src/plugins/mtk/mm-broadband-modem-mtk-legacy.c b/src/plugins/mtk/mm-broadband-modem-mtk-legacy.c
index b42a2147..bb1f48c8 100644
--- a/src/plugins/mtk/mm-broadband-modem-mtk-legacy.c
+++ b/src/plugins/mtk/mm-broadband-modem-mtk-legacy.c
@@ -689,17 +689,21 @@ modem_3gpp_cleanup_unsolicited_events (MMIfaceModem3gpp *self,
g_task_new (self, NULL, callback, user_data));
}
+/*****************************************************************************/
+
static const MMBaseModemAtCommand unsolicited_enable_sequence[] = {
/* enable signal URC */
{ "+ECSQ=2", 5, FALSE, NULL },
{ NULL }
};
-static const MMBaseModemAtCommand unsolicited_disable_sequence[] = {
- /* disable signal URC */
- { "+ECSQ=0" , 5, FALSE, NULL },
- { NULL }
-};
+static gboolean
+modem_3gpp_enable_unsolicited_events_finish (MMIfaceModem3gpp *self,
+ GAsyncResult *res,
+ GError **error)
+{
+ return g_task_propagate_boolean (G_TASK (res), error);
+}
static void
own_enable_unsolicited_events_ready (MMBaseModem *self,
@@ -722,7 +726,8 @@ parent_enable_unsolicited_events_ready (MMIfaceModem3gpp *self,
GAsyncResult *res,
GTask *task)
{
- GError *error = NULL;
+ MMPortSerialAt *primary;
+ GError *error = NULL;
if (!iface_modem_3gpp_parent->enable_unsolicited_events_finish (self, res, &error)) {
g_task_return_error (task, error);
@@ -730,10 +735,17 @@ parent_enable_unsolicited_events_ready (MMIfaceModem3gpp *self,
return;
}
- /* Our own enable now */
+ primary = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
+ if (!primary) {
+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
+ "Couldn't enable unsolicited events: no primary port");
+ g_object_unref (task);
+ return;
+ }
+
mm_base_modem_at_sequence_full (
MM_BASE_MODEM (self),
- mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)),
+ primary,
unsolicited_enable_sequence,
NULL,NULL,NULL,
(GAsyncReadyCallback)own_enable_unsolicited_events_ready,
@@ -752,10 +764,18 @@ modem_3gpp_enable_unsolicited_events (MMIfaceModem3gpp *self,
g_task_new (self, NULL, callback, user_data));
}
+/*****************************************************************************/
+
+static const MMBaseModemAtCommand unsolicited_disable_sequence[] = {
+ /* disable signal URC */
+ { "+ECSQ=0" , 5, FALSE, NULL },
+ { NULL }
+};
+
static gboolean
-modem_3gpp_enable_unsolicited_events_finish (MMIfaceModem3gpp *self,
- GAsyncResult *res,
- GError **error)
+modem_3gpp_disable_unsolicited_events_finish (MMIfaceModem3gpp *self,
+ GAsyncResult *res,
+ GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
@@ -771,7 +791,6 @@ parent_disable_unsolicited_events_ready (MMIfaceModem3gpp *self,
g_task_return_error (task, error);
else
g_task_return_boolean (task, TRUE);
-
g_object_unref (task);
}
@@ -789,7 +808,6 @@ own_disable_unsolicited_events_ready (MMBaseModem *self,
return;
}
- /* Next, chain up parent's disable */
iface_modem_3gpp_parent->disable_unsolicited_events (
MM_IFACE_MODEM_3GPP (self),
(GAsyncReadyCallback)parent_disable_unsolicited_events_ready,
@@ -801,22 +819,26 @@ modem_3gpp_disable_unsolicited_events (MMIfaceModem3gpp *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
- /* Our own disable first */
+ MMPortSerialAt *primary;
+ GTask *task;
+
+ task = g_task_new (self, NULL, callback, user_data);
+
+ primary = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
+ if (!primary) {
+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
+ "Couldn't disable unsolicited events: no primary port");
+ g_object_unref (task);
+ return;
+ }
+
mm_base_modem_at_sequence_full (
MM_BASE_MODEM (self),
- mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)),
+ primary,
unsolicited_disable_sequence,
NULL, NULL, NULL,
(GAsyncReadyCallback)own_disable_unsolicited_events_ready,
- g_task_new (self, NULL, callback, user_data));
-}
-
-static gboolean
-modem_3gpp_disable_unsolicited_events_finish (MMIfaceModem3gpp *self,
- GAsyncResult *res,
- GError **error)
-{
- return g_task_propagate_boolean (G_TASK (res), error);
+ task);
}
/*****************************************************************************/