diff options
-rw-r--r-- | src/plugins/mtk/mm-broadband-modem-mtk-legacy.c | 70 |
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); } /*****************************************************************************/ |