diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2019-07-08 22:44:33 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2019-07-11 23:21:00 +0200 |
commit | 63ccd363615a678c0cd86ce65e030b1a70df9bb5 (patch) | |
tree | 0e75c9a383dae726dd4dfe92c5329a6ec0528a96 | |
parent | 4c2aa2b54e011e3f05fcb637952ee017cc242543 (diff) |
huawei: cleanup/setup voice unsolicited events
-rw-r--r-- | plugins/huawei/mm-broadband-modem-huawei.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/plugins/huawei/mm-broadband-modem-huawei.c b/plugins/huawei/mm-broadband-modem-huawei.c index 41544391..76490a99 100644 --- a/plugins/huawei/mm-broadband-modem-huawei.c +++ b/plugins/huawei/mm-broadband-modem-huawei.c @@ -3190,6 +3190,96 @@ common_voice_setup_cleanup_unsolicited_events (MMBroadbandModemHuawei *self, } } +/*****************************************************************************/ +/* Setup unsolicited events (Voice interface) */ + +static gboolean +modem_voice_setup_unsolicited_events_finish (MMIfaceModemVoice *self, + GAsyncResult *res, + GError **error) +{ + return g_task_propagate_boolean (G_TASK (res), error); +} + +static void +parent_voice_setup_unsolicited_events_ready (MMIfaceModemVoice *self, + GAsyncResult *res, + GTask *task) +{ + GError *error = NULL; + + if (!iface_modem_voice_parent->setup_unsolicited_events_finish (self, res, &error)) { + g_task_return_error (task, error); + g_object_unref (task); + return; + } + + /* Our own setup now */ + common_voice_setup_cleanup_unsolicited_events (MM_BROADBAND_MODEM_HUAWEI (self), TRUE); + + g_task_return_boolean (task, TRUE); + g_object_unref (task); +} + +static void +modem_voice_setup_unsolicited_events (MMIfaceModemVoice *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GTask *task; + + task = g_task_new (self, NULL, callback, user_data); + + /* Chain up parent's setup */ + iface_modem_voice_parent->setup_unsolicited_events ( + self, + (GAsyncReadyCallback)parent_voice_setup_unsolicited_events_ready, + task); +} + +/*****************************************************************************/ +/* Cleanup unsolicited events (Voice interface) */ + +static gboolean +modem_voice_cleanup_unsolicited_events_finish (MMIfaceModemVoice *self, + GAsyncResult *res, + GError **error) +{ + return g_task_propagate_boolean (G_TASK (res), error); +} + +static void +parent_voice_cleanup_unsolicited_events_ready (MMIfaceModemVoice *self, + GAsyncResult *res, + GTask *task) +{ + GError *error = NULL; + + if (!iface_modem_voice_parent->cleanup_unsolicited_events_finish (self, res, &error)) + g_task_return_error (task, error); + else + g_task_return_boolean (task, TRUE); + g_object_unref (task); +} + +static void +modem_voice_cleanup_unsolicited_events (MMIfaceModemVoice *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GTask *task; + + task = g_task_new (self, NULL, callback, user_data); + + /* cleanup our own */ + common_voice_setup_cleanup_unsolicited_events (MM_BROADBAND_MODEM_HUAWEI (self), FALSE); + + /* Chain up parent's cleanup */ + iface_modem_voice_parent->cleanup_unsolicited_events ( + self, + (GAsyncReadyCallback)parent_voice_cleanup_unsolicited_events_ready, + task); +} /*****************************************************************************/ /* Enabling unsolicited events (Voice interface) */ @@ -4601,6 +4691,10 @@ iface_modem_voice_init (MMIfaceModemVoice *iface) iface->check_support = modem_voice_check_support; iface->check_support_finish = modem_voice_check_support_finish; + iface->setup_unsolicited_events = modem_voice_setup_unsolicited_events; + iface->setup_unsolicited_events_finish = modem_voice_setup_unsolicited_events_finish; + iface->cleanup_unsolicited_events = modem_voice_cleanup_unsolicited_events; + iface->cleanup_unsolicited_events_finish = modem_voice_cleanup_unsolicited_events_finish; iface->enable_unsolicited_events = modem_voice_enable_unsolicited_events; iface->enable_unsolicited_events_finish = modem_voice_enable_unsolicited_events_finish; iface->disable_unsolicited_events = modem_voice_disable_unsolicited_events; |