diff options
author | Freedom Liu <tianyu28658@gmail.com> | 2021-05-04 14:49:25 +0800 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-05-14 22:10:49 +0200 |
commit | 76e700f4fd703f952208993330ab098305c13d6b (patch) | |
tree | 4c85a90ae7cbe10ceaf0b674e9ab9d8877dcfa18 /src/mm-shared-qmi.c | |
parent | bb928dbf7409b445e6aaab994c571fb7d504a8d7 (diff) |
broadband-modem-mbim: get model through QMI-over-MBIM
move the modem_load_model() async method from mm-broadband-modem-qmi.c
to mm-shared-qmi.c, and then make use of the method from both the QMI
and MBIM implementations.
Diffstat (limited to 'src/mm-shared-qmi.c')
-rw-r--r-- | src/mm-shared-qmi.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/mm-shared-qmi.c b/src/mm-shared-qmi.c index 35911713..b4c27b5e 100644 --- a/src/mm-shared-qmi.c +++ b/src/mm-shared-qmi.c @@ -1154,6 +1154,66 @@ mm_shared_qmi_load_supported_capabilities (MMIfaceModem *self, } /*****************************************************************************/ +/* Load model (Modem interface) */ + +gchar * +mm_shared_qmi_load_model_finish (MMIfaceModem *self, + GAsyncResult *res, + GError **error) +{ + return g_task_propagate_pointer (G_TASK (res), error); +} + +static void +dms_get_model_ready (QmiClientDms *client, + GAsyncResult *res, + GTask *task) +{ + QmiMessageDmsGetModelOutput *output = NULL; + GError *error = NULL; + + output = qmi_client_dms_get_model_finish (client, res, &error); + if (!output) { + g_prefix_error (&error, "QMI operation failed: "); + g_task_return_error (task, error); + } else if (!qmi_message_dms_get_model_output_get_result (output, &error)) { + g_prefix_error (&error, "Couldn't get Model: "); + g_task_return_error (task, error); + } else { + const gchar *str; + + qmi_message_dms_get_model_output_get_model (output, &str, NULL); + g_task_return_pointer (task, g_strdup (str), g_free); + } + + if (output) + qmi_message_dms_get_model_output_unref (output); + + g_object_unref (task); +} + +void +mm_shared_qmi_load_model (MMIfaceModem *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + QmiClient *client = NULL; + + if (!mm_shared_qmi_ensure_client (MM_SHARED_QMI (self), + QMI_SERVICE_DMS, &client, + callback, user_data)) + return; + + mm_obj_dbg (self, "loading model..."); + qmi_client_dms_get_model (QMI_CLIENT_DMS (client), + NULL, + 5, + NULL, + (GAsyncReadyCallback)dms_get_model_ready, + g_task_new (self, NULL, callback, user_data)); +} + +/*****************************************************************************/ /* Allowed modes setting (Modem interface) */ typedef struct { |