aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Palmas <dnlplm@gmail.com>2021-10-12 19:13:39 +0200
committerDaniele Palmas <dnlplm@gmail.com>2021-10-15 15:22:02 +0200
commitf8c1e849395e639272d3d9791f55afc2d3b8dffc (patch)
tree13d98cfc75a60565d4dcc5ac98e022f95f2d672d
parent266043255ffb57c527ebee85489fd9984434e4b7 (diff)
telit: prefer qmi for set_current_bands if available
-rw-r--r--plugins/telit/mm-shared-telit.c57
1 files changed, 50 insertions, 7 deletions
diff --git a/plugins/telit/mm-shared-telit.c b/plugins/telit/mm-shared-telit.c
index f0a0e0a4..4314ea60 100644
--- a/plugins/telit/mm-shared-telit.c
+++ b/plugins/telit/mm-shared-telit.c
@@ -405,20 +405,19 @@ set_current_bands_ready (MMBaseModem *self,
g_object_unref (task);
}
-void
-mm_shared_telit_modem_set_current_bands (MMIfaceModem *self,
- GArray *bands_array,
- GAsyncReadyCallback callback,
- gpointer user_data)
+static void
+set_current_bands_at (MMIfaceModem *self,
+ GTask *task)
{
- GTask *task;
GError *error = NULL;
gchar *cmd;
Private *priv;
+ GArray *bands_array;
priv = get_private (MM_SHARED_TELIT (self));
- task = g_task_new (self, NULL, callback, user_data);
+ bands_array = g_task_get_task_data (task);
+ g_assert (bands_array);
if (bands_array->len == 1 && g_array_index (bands_array, MMModemBand, 0) == MM_MODEM_BAND_ANY) {
if (!priv->supported_bands) {
@@ -452,6 +451,50 @@ mm_shared_telit_modem_set_current_bands (MMIfaceModem *self,
g_free (cmd);
}
+static void
+parent_set_current_bands_ready (MMIfaceModem *self,
+ GAsyncResult *res,
+ GTask *task)
+{
+ GError *error = NULL;
+ Private *priv;
+
+ priv = get_private (MM_SHARED_TELIT (self));
+
+ if (priv->iface_modem_parent->set_current_bands_finish (MM_IFACE_MODEM (self), res, &error)) {
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
+ } else {
+ g_clear_error (&error);
+ set_current_bands_at (self, task);
+ }
+}
+
+void
+mm_shared_telit_modem_set_current_bands (MMIfaceModem *self,
+ GArray *bands_array,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GTask *task;
+ Private *priv;
+
+ priv = get_private (MM_SHARED_TELIT (self));
+
+ task = g_task_new (self, NULL, callback, user_data);
+ g_task_set_task_data (task, g_array_ref (bands_array), (GDestroyNotify)g_array_unref);
+
+ if (priv->iface_modem_parent &&
+ priv->iface_modem_parent->set_current_bands &&
+ priv->iface_modem_parent->set_current_bands_finish) {
+ priv->iface_modem_parent->set_current_bands (self,
+ bands_array,
+ (GAsyncReadyCallback) parent_set_current_bands_ready,
+ task);
+ } else
+ set_current_bands_at (self, task);
+}
+
/*****************************************************************************/
/* Set current modes (Modem interface) */