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.
This commit is contained in:

committed by
Aleksander Morgado

parent
bb928dbf74
commit
76e700f4fd
@@ -675,6 +675,14 @@ modem_load_manufacturer (MMIfaceModem *self,
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Model loading (Modem interface) */
|
/* Model loading (Modem interface) */
|
||||||
|
|
||||||
|
static gchar *
|
||||||
|
modem_load_model_default (MMIfaceModem *self)
|
||||||
|
{
|
||||||
|
return g_strdup_printf ("MBIM [%04X:%04X]",
|
||||||
|
(mm_base_modem_get_vendor_id (MM_BASE_MODEM (self)) & 0xFFFF),
|
||||||
|
(mm_base_modem_get_product_id (MM_BASE_MODEM (self)) & 0xFFFF));
|
||||||
|
}
|
||||||
|
|
||||||
static gchar *
|
static gchar *
|
||||||
modem_load_model_finish (MMIfaceModem *self,
|
modem_load_model_finish (MMIfaceModem *self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
@@ -683,6 +691,29 @@ modem_load_model_finish (MMIfaceModem *self,
|
|||||||
return g_task_propagate_pointer (G_TASK (res), error);
|
return g_task_propagate_pointer (G_TASK (res), error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined WITH_QMI && QMI_MBIM_QMUX_SUPPORTED
|
||||||
|
|
||||||
|
static void
|
||||||
|
qmi_load_model_ready (MMIfaceModem *self,
|
||||||
|
GAsyncResult *res,
|
||||||
|
GTask *task)
|
||||||
|
{
|
||||||
|
gchar *model = NULL;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
model = mm_shared_qmi_load_model_finish (self, res, &error);
|
||||||
|
if (!model) {
|
||||||
|
mm_obj_dbg (self, "couldn't load model using QMI over MBIM: %s", error->message);
|
||||||
|
model = modem_load_model_default (self);
|
||||||
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_task_return_pointer (task, model, g_free);
|
||||||
|
g_object_unref (task);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
modem_load_model (MMIfaceModem *self,
|
modem_load_model (MMIfaceModem *self,
|
||||||
GAsyncReadyCallback callback,
|
GAsyncReadyCallback callback,
|
||||||
@@ -692,18 +723,24 @@ modem_load_model (MMIfaceModem *self,
|
|||||||
GTask *task;
|
GTask *task;
|
||||||
MMPortMbim *port;
|
MMPortMbim *port;
|
||||||
|
|
||||||
|
task = g_task_new (self, NULL, callback, user_data);
|
||||||
|
|
||||||
port = mm_broadband_modem_mbim_peek_port_mbim (MM_BROADBAND_MODEM_MBIM (self));
|
port = mm_broadband_modem_mbim_peek_port_mbim (MM_BROADBAND_MODEM_MBIM (self));
|
||||||
if (port) {
|
if (port) {
|
||||||
model = g_strdup (mm_kernel_device_get_physdev_product (
|
model = g_strdup (mm_kernel_device_get_physdev_product (
|
||||||
mm_port_peek_kernel_device (MM_PORT (port))));
|
mm_port_peek_kernel_device (MM_PORT (port))));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!model)
|
#if defined WITH_QMI && QMI_MBIM_QMUX_SUPPORTED
|
||||||
model = g_strdup_printf ("MBIM [%04X:%04X]",
|
if (!model) {
|
||||||
(mm_base_modem_get_vendor_id (MM_BASE_MODEM (self)) & 0xFFFF),
|
mm_shared_qmi_load_model (self, (GAsyncReadyCallback)qmi_load_model_ready, task);
|
||||||
(mm_base_modem_get_product_id (MM_BASE_MODEM (self)) & 0xFFFF));
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!model)
|
||||||
|
model = modem_load_model_default (self);
|
||||||
|
|
||||||
task = g_task_new (self, NULL, callback, user_data);
|
|
||||||
g_task_return_pointer (task, model, g_free);
|
g_task_return_pointer (task, model, g_free);
|
||||||
g_object_unref (task);
|
g_object_unref (task);
|
||||||
}
|
}
|
||||||
|
@@ -432,66 +432,6 @@ modem_load_manufacturer (MMIfaceModem *self,
|
|||||||
g_task_new (self, NULL, callback, user_data));
|
g_task_new (self, NULL, callback, user_data));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/* Model loading (Modem interface) */
|
|
||||||
|
|
||||||
static gchar *
|
|
||||||
modem_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);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
modem_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));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Revision loading (Modem interface) */
|
/* Revision loading (Modem interface) */
|
||||||
|
|
||||||
@@ -11187,8 +11127,8 @@ iface_modem_init (MMIfaceModem *iface)
|
|||||||
iface->set_current_capabilities_finish = mm_shared_qmi_set_current_capabilities_finish;
|
iface->set_current_capabilities_finish = mm_shared_qmi_set_current_capabilities_finish;
|
||||||
iface->load_manufacturer = modem_load_manufacturer;
|
iface->load_manufacturer = modem_load_manufacturer;
|
||||||
iface->load_manufacturer_finish = modem_load_manufacturer_finish;
|
iface->load_manufacturer_finish = modem_load_manufacturer_finish;
|
||||||
iface->load_model = modem_load_model;
|
iface->load_model = mm_shared_qmi_load_model;
|
||||||
iface->load_model_finish = modem_load_model_finish;
|
iface->load_model_finish = mm_shared_qmi_load_model_finish;
|
||||||
iface->load_revision = modem_load_revision;
|
iface->load_revision = modem_load_revision;
|
||||||
iface->load_revision_finish = modem_load_revision_finish;
|
iface->load_revision_finish = modem_load_revision_finish;
|
||||||
iface->load_hardware_revision = modem_load_hardware_revision;
|
iface->load_hardware_revision = modem_load_hardware_revision;
|
||||||
|
@@ -1153,6 +1153,66 @@ mm_shared_qmi_load_supported_capabilities (MMIfaceModem *self,
|
|||||||
g_object_unref (task);
|
g_object_unref (task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* 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) */
|
/* Allowed modes setting (Modem interface) */
|
||||||
|
|
||||||
|
@@ -94,6 +94,12 @@ void mm_shared_qmi_set_current_capabilities (MMIfaceMode
|
|||||||
gboolean mm_shared_qmi_set_current_capabilities_finish (MMIfaceModem *self,
|
gboolean mm_shared_qmi_set_current_capabilities_finish (MMIfaceModem *self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
void mm_shared_qmi_load_model (MMIfaceModem *self,
|
||||||
|
GAsyncReadyCallback callback,
|
||||||
|
gpointer user_data);
|
||||||
|
gchar *mm_shared_qmi_load_model_finish (MMIfaceModem *self,
|
||||||
|
GAsyncResult *res,
|
||||||
|
GError **error);
|
||||||
void mm_shared_qmi_load_supported_modes (MMIfaceModem *self,
|
void mm_shared_qmi_load_supported_modes (MMIfaceModem *self,
|
||||||
GAsyncReadyCallback callback,
|
GAsyncReadyCallback callback,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
Reference in New Issue
Block a user