diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2019-02-26 17:05:42 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2019-02-26 23:57:29 +0100 |
commit | 1093c124b4cb0185f97de65ecce15901ec8ec9d8 (patch) | |
tree | e1271729fe010e395e91c7e9119ab55a6aea11dd | |
parent | 301bdcfef7e3407a675b37b99d2c57ddb249baa8 (diff) | |
download | ModemManager-1093c124b4cb0185f97de65ecce15901ec8ec9d8.tar.gz |
dell,dw5821e: use DMS extension method to load properly formatted firmware version
And require libqmi 1.23.1.
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | plugins/dell/mm-broadband-modem-dell-dw5821e.c | 67 |
2 files changed, 61 insertions, 8 deletions
diff --git a/configure.ac b/configure.ac index cd6a51e97..e7e733719 100644 --- a/configure.ac +++ b/configure.ac @@ -341,7 +341,7 @@ dnl----------------------------------------------------------------------------- dnl QMI support (enabled by default) dnl -LIBQMI_VERSION=1.22.0 +LIBQMI_VERSION=1.23.1 AC_ARG_WITH(qmi, AS_HELP_STRING([--without-qmi], [Build without QMI support]), [], [with_qmi=yes]) AM_CONDITIONAL(WITH_QMI, test "x$with_qmi" = "xyes") diff --git a/plugins/dell/mm-broadband-modem-dell-dw5821e.c b/plugins/dell/mm-broadband-modem-dell-dw5821e.c index d3ddd1dbf..36148f3f7 100644 --- a/plugins/dell/mm-broadband-modem-dell-dw5821e.c +++ b/plugins/dell/mm-broadband-modem-dell-dw5821e.c @@ -34,6 +34,7 @@ #include "mm-iface-modem-location.h" #include "mm-iface-modem-firmware.h" #include "mm-broadband-modem-dell-dw5821e.h" +#include "mm-shared-qmi.h" static void iface_modem_location_init (MMIfaceModemLocation *iface); static void iface_modem_firmware_init (MMIfaceModemFirmware *iface); @@ -66,21 +67,73 @@ firmware_load_update_settings_finish (MMIfaceModemFirmware *self, } static void -firmware_load_update_settings (MMIfaceModemFirmware *self, - GAsyncReadyCallback callback, - gpointer user_data) +dell_get_firmware_version_ready (QmiClientDms *client, + GAsyncResult *res, + GTask *task) { - MMFirmwareUpdateSettings *update_settings; - GTask *task; + QmiMessageDmsDellGetFirmwareVersionOutput *output; + GError *error = NULL; + MMFirmwareUpdateSettings *update_settings = NULL; + const gchar *str; - task = g_task_new (self, NULL, callback, user_data); + output = qmi_client_dms_dell_get_firmware_version_finish (client, res, &error); + if (!output || !qmi_message_dms_dell_get_firmware_version_output_get_result (output, &error)) + goto out; + /* Create update settings now */ update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT | MM_MODEM_FIRMWARE_UPDATE_METHOD_QMI_PDC); mm_firmware_update_settings_set_fastboot_at (update_settings, "AT^FASTBOOT"); - g_task_return_pointer (task, update_settings, g_object_unref); + qmi_message_dms_dell_get_firmware_version_output_get_version (output, &str, NULL); + mm_firmware_update_settings_set_version (update_settings, str); + + out: + if (error) + g_task_return_error (task, error); + else { + g_assert (update_settings); + g_task_return_pointer (task, update_settings, g_object_unref); + } g_object_unref (task); + if (output) + qmi_message_dms_dell_get_firmware_version_output_unref (output); +} + +static void +firmware_load_update_settings (MMIfaceModemFirmware *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GTask *task; + QmiMessageDmsDellGetFirmwareVersionInput *input = NULL; + QmiClient *client = NULL; + + + task = g_task_new (self, NULL, callback, user_data); + + client = mm_shared_qmi_peek_client (MM_SHARED_QMI (self), + QMI_SERVICE_DMS, + MM_PORT_QMI_FLAG_DEFAULT, + NULL); + if (!client) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Unable to load DW5821e version info: no QMI DMS client available"); + g_object_unref (task); + return; + } + + input = qmi_message_dms_dell_get_firmware_version_input_new (); + qmi_message_dms_dell_get_firmware_version_input_set_version_type (input, + QMI_DMS_DELL_FIRMWARE_VERSION_TYPE_FIRMWARE_MCFG, + NULL); + qmi_client_dms_dell_get_firmware_version (QMI_CLIENT_DMS (client), + input, + 10, + NULL, + (GAsyncReadyCallback)dell_get_firmware_version_ready, + task); + qmi_message_dms_dell_get_firmware_version_input_unref (input); } /*****************************************************************************/ |