aboutsummaryrefslogtreecommitdiff
path: root/src/mm-shared-qmi.c
diff options
context:
space:
mode:
authorFreedom Liu <tianyu28658@gmail.com>2021-05-04 14:49:25 +0800
committerAleksander Morgado <aleksander@aleksander.es>2021-05-14 22:10:49 +0200
commit76e700f4fd703f952208993330ab098305c13d6b (patch)
tree4c85a90ae7cbe10ceaf0b674e9ab9d8877dcfa18 /src/mm-shared-qmi.c
parentbb928dbf7409b445e6aaab994c571fb7d504a8d7 (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.c60
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 {