dell,dw5821e: use DMS extension method to load properly formatted firmware version

And require libqmi 1.23.1.
This commit is contained in:
Aleksander Morgado
2019-02-26 17:05:42 +01:00
parent 301bdcfef7
commit 1093c124b4
2 changed files with 61 additions and 8 deletions

View File

@@ -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")

View File

@@ -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);
}
/*****************************************************************************/