aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem-qmi.c130
1 files changed, 88 insertions, 42 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index af6f2534..95cc56b0 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -8345,13 +8345,6 @@ messaging_disable_unsolicited_events_finish (MMIfaceModemMessaging *_self,
GAsyncResult *res,
GError **error)
{
- MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self);
-
- /* Handle AT URC only fallback */
- if (self->priv->messaging_fallback_at_only && iface_modem_messaging_parent->disable_unsolicited_events_finish) {
- return iface_modem_messaging_parent->disable_unsolicited_events_finish (_self, res, error);
- }
-
return g_task_propagate_boolean (G_TASK (res), error);
}
@@ -8360,13 +8353,6 @@ messaging_enable_unsolicited_events_finish (MMIfaceModemMessaging *_self,
GAsyncResult *res,
GError **error)
{
- MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self);
-
- /* Handle AT URC only fallback */
- if (self->priv->messaging_fallback_at_only) {
- return iface_modem_messaging_parent->enable_unsolicited_events_finish (_self, res, error);
- }
-
return g_task_propagate_boolean (G_TASK (res), error);
}
@@ -8404,20 +8390,20 @@ ser_messaging_indicator_ready (QmiClientWms *client,
static void
common_enable_disable_messaging_unsolicited_events (MMBroadbandModemQmi *self,
gboolean enable,
- GAsyncReadyCallback callback,
- gpointer user_data)
+ GTask *task)
{
EnableMessagingUnsolicitedEventsContext *ctx;
- GTask *task;
QmiClient *client = NULL;
QmiMessageWmsSetEventReportInput *input;
+ GError *error = NULL;
- if (!mm_shared_qmi_ensure_client (MM_SHARED_QMI (self),
- QMI_SERVICE_WMS, &client,
- callback, user_data))
+ client = mm_shared_qmi_peek_client (MM_SHARED_QMI (self),
+ QMI_SERVICE_WMS, MM_PORT_QMI_FLAG_DEFAULT, &error);
+ if (!client) {
+ g_task_return_error (task, error);
+ g_object_unref (task);
return;
-
- task = g_task_new (self, NULL, callback, user_data);
+ }
if (enable == self->priv->messaging_unsolicited_events_enabled) {
mm_obj_dbg (self, "messaging unsolicited events already %s; skipping",
@@ -8449,32 +8435,93 @@ common_enable_disable_messaging_unsolicited_events (MMBroadbandModemQmi *self,
}
static void
+parent_messaging_disable_unsolicited_events_ready (MMIfaceModemMessaging *_self,
+ GAsyncResult *res,
+ GTask *task)
+{
+ MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self);
+ GError *error = NULL;
+
+ if (!iface_modem_messaging_parent->disable_unsolicited_events_finish (_self, res, &error)) {
+ if (self->priv->messaging_fallback_at_only) {
+ g_task_return_error (task, error);
+ g_object_unref (task);
+ return;
+ }
+ mm_obj_dbg (self, "disabling parent messaging unsolicited events failed: %s", error->message);
+ g_clear_error (&error);
+ }
+
+ /* handle AT URC only fallback */
+ if (self->priv->messaging_fallback_at_only) {
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
+ return;
+ }
+
+ /* Disable QMI indications */
+ common_enable_disable_messaging_unsolicited_events (self, FALSE, task);
+}
+
+static void
messaging_disable_unsolicited_events (MMIfaceModemMessaging *_self,
GAsyncReadyCallback callback,
gpointer user_data)
{
MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self);
+ GTask *task;
- /* Handle AT URC only fallback */
+ task = g_task_new (self, NULL, callback, user_data);
+
+ /* Generic implementation doesn't actually have a method to disable
+ * unsolicited messaging events */
+ if (iface_modem_messaging_parent->disable_unsolicited_events) {
+ /* Disable AT URCs parent and chain QMI indication disabling */
+ iface_modem_messaging_parent->disable_unsolicited_events (
+ _self,
+ (GAsyncReadyCallback)parent_messaging_disable_unsolicited_events_ready,
+ task);
+ return;
+ }
+
+ /* handle AT URC only fallback */
if (self->priv->messaging_fallback_at_only) {
- /* Generic implementation doesn't actually have a method to disable
- * unsolicited messaging events */
- if (!iface_modem_messaging_parent->disable_unsolicited_events) {
- GTask *task;
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
+ return;
+ }
- task = g_task_new (self, NULL, callback, user_data);
- g_task_return_boolean (task, TRUE);
+ /* Disable QMI indications */
+ common_enable_disable_messaging_unsolicited_events (self, FALSE, task);
+}
+
+static void
+parent_messaging_enable_unsolicited_events_ready (MMIfaceModemMessaging *_self,
+ GAsyncResult *res,
+ GTask *task)
+{
+ MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self);
+ GError *error = NULL;
+
+ if (!iface_modem_messaging_parent->enable_unsolicited_events_finish (_self, res, &error)) {
+ if (self->priv->messaging_fallback_at_only) {
+ g_task_return_error (task, error);
g_object_unref (task);
return;
}
+ mm_obj_dbg (self, "enabling parent messaging unsolicited events failed: %s", error->message);
+ g_clear_error (&error);
+ }
- return iface_modem_messaging_parent->disable_unsolicited_events (_self, callback, user_data);
+ /* handle AT URC only fallback */
+ if (self->priv->messaging_fallback_at_only) {
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
+ return;
}
- common_enable_disable_messaging_unsolicited_events (MM_BROADBAND_MODEM_QMI (self),
- FALSE,
- callback,
- user_data);
+ /* Enable QMI indications */
+ common_enable_disable_messaging_unsolicited_events (self, TRUE, task);
}
static void
@@ -8483,16 +8530,15 @@ messaging_enable_unsolicited_events (MMIfaceModemMessaging *_self,
gpointer user_data)
{
MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self);
+ GTask *task;
- /* Handle AT URC only fallback */
- if (self->priv->messaging_fallback_at_only) {
- return iface_modem_messaging_parent->enable_unsolicited_events (_self, callback, user_data);
- }
+ task = g_task_new (self, NULL, callback, user_data);
- common_enable_disable_messaging_unsolicited_events (MM_BROADBAND_MODEM_QMI (self),
- TRUE,
- callback,
- user_data);
+ /* Enable AT URCs parent and chain QMI indication enabling */
+ iface_modem_messaging_parent->enable_unsolicited_events (
+ _self,
+ (GAsyncReadyCallback)parent_messaging_enable_unsolicited_events_ready,
+ task);
}
/*****************************************************************************/