diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2017-01-23 21:49:13 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2017-02-08 18:49:21 +0100 |
commit | ae4bf3a0335baa2027abb8c56d1adc1824c8a701 (patch) | |
tree | 178a657308f5cc80b3063553f77f90394acd2224 | |
parent | 3b56f04e3befadd40f62568e028b1cd09a735296 (diff) | |
download | external_libqmi-ae4bf3a0335baa2027abb8c56d1adc1824c8a701.zip external_libqmi-ae4bf3a0335baa2027abb8c56d1adc1824c8a701.tar.gz external_libqmi-ae4bf3a0335baa2027abb8c56d1adc1824c8a701.tar.bz2 |
qmi-firmware-update: support automatic mode (QMI/MBIM) detection by default
The default, if nothing specified, is the 'auto mode', which can also be
explicitly selected with --device-open-auto.
The user may also select an explicit mode with --device-open-mbim or
--device-open-qmi.
-rw-r--r-- | src/qmi-firmware-update/qfu-main.c | 34 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-operation-reset.c | 5 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-operation-update.c | 6 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-operation.h | 7 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-reseter.c | 12 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-reseter.h | 3 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-updater.c | 17 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-updater.h | 3 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-utils.c | 28 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-utils.h | 3 |
10 files changed, 58 insertions, 60 deletions
diff --git a/src/qmi-firmware-update/qfu-main.c b/src/qmi-firmware-update/qfu-main.c index f8cb144..876e1cf 100644 --- a/src/qmi-firmware-update/qfu-main.c +++ b/src/qmi-firmware-update/qfu-main.c @@ -54,7 +54,9 @@ static gchar *firmware_version_str; static gchar *config_version_str; static gchar *carrier_str; static gboolean device_open_proxy_flag; +static gboolean device_open_qmi_flag; static gboolean device_open_mbim_flag; +static gboolean device_open_auto_flag; static gboolean ignore_version_errors_flag; static gboolean override_download_flag; static gint modem_storage_index_int; @@ -261,8 +263,16 @@ static GOptionEntry context_main_entries[] = { "Request to use the 'qmi-proxy' proxy.", NULL }, + { "device-open-qmi", 0, 0, G_OPTION_ARG_NONE, &device_open_qmi_flag, + "Open a cdc-wdm device explicitly in QMI mode", + NULL + }, { "device-open-mbim", 0, 0, G_OPTION_ARG_NONE, &device_open_mbim_flag, - "Open an MBIM device with EXT_QMUX support.", + "Open a cdc-wdm device explicitly in MBIM mode", + NULL + }, + { "device-open-auto", 0, 0, G_OPTION_ARG_NONE, &device_open_auto_flag, + "Open a cdc-wdm device in either QMI or MBIM mode (default)", NULL }, { "verbose", 'v', 0, G_OPTION_ARG_NONE, &stdout_verbose_flag, @@ -466,6 +476,7 @@ int main (int argc, char **argv) guint n_actions; gboolean result = FALSE; QfuDeviceSelection *device_selection = NULL; + QmiDeviceOpenFlags device_open_flags = QMI_DEVICE_OPEN_FLAGS_NONE; setlocale (LC_ALL, ""); @@ -553,6 +564,20 @@ int main (int argc, char **argv) } } + /* Validate device open flags */ + if (action_update_flag || action_reset_flag) { + if (device_open_mbim_flag + device_open_qmi_flag + device_open_auto_flag > 1) { + g_printerr ("error: cannot specify multiple mode flags to open device\n"); + goto out; + } + if (device_open_proxy_flag) + device_open_flags |= QMI_DEVICE_OPEN_FLAGS_PROXY; + if (device_open_mbim_flag) + device_open_flags |= QMI_DEVICE_OPEN_FLAGS_MBIM; + if (device_open_auto_flag || (!device_open_qmi_flag && !device_open_mbim_flag)) + device_open_flags |= QMI_DEVICE_OPEN_FLAGS_AUTO; + } + /* Run */ if (action_update_flag) { @@ -570,8 +595,7 @@ int main (int argc, char **argv) firmware_version_str, config_version_str, carrier_str, - device_open_proxy_flag, - device_open_mbim_flag, + device_open_flags, ignore_version_errors_flag, override_download_flag, (guint8) modem_storage_index_int, @@ -588,9 +612,7 @@ int main (int argc, char **argv) if (action_reset_flag) { g_assert (QFU_IS_DEVICE_SELECTION (device_selection)); - result = qfu_operation_reset_run (device_selection, - device_open_proxy_flag, - device_open_mbim_flag); + result = qfu_operation_reset_run (device_selection, device_open_flags); goto out; } diff --git a/src/qmi-firmware-update/qfu-operation-reset.c b/src/qmi-firmware-update/qfu-operation-reset.c index 65b5e21..41af3c1 100644 --- a/src/qmi-firmware-update/qfu-operation-reset.c +++ b/src/qmi-firmware-update/qfu-operation-reset.c @@ -106,13 +106,12 @@ operation_reseter_run (QfuReseter *reseter) gboolean qfu_operation_reset_run (QfuDeviceSelection *device_selection, - gboolean device_open_proxy, - gboolean device_open_mbim) + QmiDeviceOpenFlags device_open_flags) { QfuReseter *reseter = NULL; gboolean result; - reseter = qfu_reseter_new (device_selection, NULL, device_open_proxy, device_open_mbim); + reseter = qfu_reseter_new (device_selection, NULL, device_open_flags); result = operation_reseter_run (reseter); g_object_unref (reseter); return result; diff --git a/src/qmi-firmware-update/qfu-operation-update.c b/src/qmi-firmware-update/qfu-operation-update.c index 8a58984..f7aa6fd 100644 --- a/src/qmi-firmware-update/qfu-operation-update.c +++ b/src/qmi-firmware-update/qfu-operation-update.c @@ -121,8 +121,7 @@ qfu_operation_update_run (const gchar **images, const gchar *firmware_version, const gchar *config_version, const gchar *carrier, - gboolean device_open_proxy, - gboolean device_open_mbim, + QmiDeviceOpenFlags device_open_flags, gboolean ignore_version_errors, gboolean override_download, guint8 modem_storage_index, @@ -137,8 +136,7 @@ qfu_operation_update_run (const gchar **images, firmware_version, config_version, carrier, - device_open_proxy, - device_open_mbim, + device_open_flags, ignore_version_errors, override_download, modem_storage_index, diff --git a/src/qmi-firmware-update/qfu-operation.h b/src/qmi-firmware-update/qfu-operation.h index 95c2b5e..c72c929 100644 --- a/src/qmi-firmware-update/qfu-operation.h +++ b/src/qmi-firmware-update/qfu-operation.h @@ -23,6 +23,7 @@ #define QFU_OPERATION_H #include <glib.h> +#include <libqmi-glib.h> #include "qfu-device-selection.h" G_BEGIN_DECLS @@ -32,8 +33,7 @@ gboolean qfu_operation_update_run (const gchar **images, const gchar *firmware_version, const gchar *config_version, const gchar *carrier, - gboolean device_open_proxy, - gboolean device_open_mbim, + QmiDeviceOpenFlags device_open_flags, gboolean ignore_version_errors, gboolean override_download, guint8 modem_storage_index, @@ -42,8 +42,7 @@ gboolean qfu_operation_update_qdl_run (const gchar **images, QfuDeviceSelection *device_selection); gboolean qfu_operation_verify_run (const gchar **images); gboolean qfu_operation_reset_run (QfuDeviceSelection *device_selection, - gboolean device_open_proxy, - gboolean device_open_mbim); + QmiDeviceOpenFlags device_open_flags); G_END_DECLS diff --git a/src/qmi-firmware-update/qfu-reseter.c b/src/qmi-firmware-update/qfu-reseter.c index aad09a5..7fc0c68 100644 --- a/src/qmi-firmware-update/qfu-reseter.c +++ b/src/qmi-firmware-update/qfu-reseter.c @@ -36,8 +36,7 @@ G_DEFINE_TYPE (QfuReseter, qfu_reseter, G_TYPE_OBJECT) struct _QfuReseterPrivate { QfuDeviceSelection *device_selection; QmiClientDms *qmi_client; - gboolean device_open_proxy; - gboolean device_open_mbim; + QmiDeviceOpenFlags device_open_flags; }; /******************************************************************************/ @@ -387,8 +386,7 @@ qfu_reseter_run (QfuReseter *self, g_assert (ctx->cdc_wdm); qfu_utils_new_client_dms (ctx->cdc_wdm, 3, - self->priv->device_open_proxy, - self->priv->device_open_mbim, + self->priv->device_open_flags, FALSE, cancellable, (GAsyncReadyCallback) new_client_dms_ready, @@ -400,16 +398,14 @@ qfu_reseter_run (QfuReseter *self, QfuReseter * qfu_reseter_new (QfuDeviceSelection *device_selection, QmiClientDms *qmi_client, - gboolean device_open_proxy, - gboolean device_open_mbim) + QmiDeviceOpenFlags device_open_flags) { QfuReseter *self; self = g_object_new (QFU_TYPE_RESETER, NULL); self->priv->device_selection = g_object_ref (device_selection); self->priv->qmi_client = qmi_client ? g_object_ref (qmi_client) : NULL; - self->priv->device_open_proxy = device_open_proxy; - self->priv->device_open_mbim = device_open_mbim; + self->priv->device_open_flags = device_open_flags; return self; } diff --git a/src/qmi-firmware-update/qfu-reseter.h b/src/qmi-firmware-update/qfu-reseter.h index e80f77a..56aaf9d 100644 --- a/src/qmi-firmware-update/qfu-reseter.h +++ b/src/qmi-firmware-update/qfu-reseter.h @@ -53,8 +53,7 @@ struct _QfuReseterClass { GType qfu_reseter_get_type (void); QfuReseter *qfu_reseter_new (QfuDeviceSelection *device_selection, QmiClientDms *qmi_client, - gboolean device_open_proxy, - gboolean device_open_mbim); + QmiDeviceOpenFlags device_open_flags); void qfu_reseter_run (QfuReseter *self, GCancellable *cancellable, GAsyncReadyCallback callback, diff --git a/src/qmi-firmware-update/qfu-updater.c b/src/qmi-firmware-update/qfu-updater.c index 10eb27c..ca22281 100644 --- a/src/qmi-firmware-update/qfu-updater.c +++ b/src/qmi-firmware-update/qfu-updater.c @@ -52,8 +52,7 @@ struct _QfuUpdaterPrivate { gchar *firmware_version; gchar *config_version; gchar *carrier; - gboolean device_open_proxy; - gboolean device_open_mbim; + QmiDeviceOpenFlags device_open_flags; gboolean ignore_version_errors; gboolean override_download; guint8 modem_storage_index; @@ -410,8 +409,7 @@ run_context_step_qmi_client_after (GTask *task) g_assert (ctx->cdc_wdm_file); qfu_utils_new_client_dms (ctx->cdc_wdm_file, 1, /* single try to allocate DMS client */ - self->priv->device_open_proxy, - self->priv->device_open_mbim, + self->priv->device_open_flags, TRUE, g_task_get_cancellable (task), (GAsyncReadyCallback) new_client_dms_after_ready, @@ -852,7 +850,7 @@ run_context_step_power_cycle (GTask *task) g_assert (ctx->pending_images != NULL); /* Boothold reset */ - reseter = qfu_reseter_new (self->priv->device_selection, ctx->qmi_client, FALSE, FALSE); + reseter = qfu_reseter_new (self->priv->device_selection, ctx->qmi_client, self->priv->device_open_flags); qfu_reseter_run (reseter, g_task_get_cancellable (task), (GAsyncReadyCallback) reseter_run_ready, @@ -1245,8 +1243,7 @@ run_context_step_qmi_client (GTask *task) g_assert (ctx->cdc_wdm_file); qfu_utils_new_client_dms (ctx->cdc_wdm_file, 3, /* initially, up to 3 tries to allocate DMS client */ - self->priv->device_open_proxy, - self->priv->device_open_mbim, + self->priv->device_open_flags, TRUE, g_task_get_cancellable (task), (GAsyncReadyCallback) new_client_dms_ready, @@ -1386,8 +1383,7 @@ qfu_updater_new (QfuDeviceSelection *device_selection, const gchar *firmware_version, const gchar *config_version, const gchar *carrier, - gboolean device_open_proxy, - gboolean device_open_mbim, + QmiDeviceOpenFlags device_open_flags, gboolean ignore_version_errors, gboolean override_download, guint8 modem_storage_index, @@ -1400,8 +1396,7 @@ qfu_updater_new (QfuDeviceSelection *device_selection, self = g_object_new (QFU_TYPE_UPDATER, NULL); self->priv->type = UPDATER_TYPE_GENERIC; self->priv->device_selection = g_object_ref (device_selection); - self->priv->device_open_proxy = device_open_proxy; - self->priv->device_open_mbim = device_open_mbim; + self->priv->device_open_flags = device_open_flags; self->priv->firmware_version = (firmware_version ? g_strdup (firmware_version) : NULL); self->priv->config_version = (config_version ? g_strdup (config_version) : NULL); self->priv->carrier = (carrier ? g_strdup (carrier) : NULL); diff --git a/src/qmi-firmware-update/qfu-updater.h b/src/qmi-firmware-update/qfu-updater.h index c3e4a8f..bc74a9e 100644 --- a/src/qmi-firmware-update/qfu-updater.h +++ b/src/qmi-firmware-update/qfu-updater.h @@ -54,8 +54,7 @@ QfuUpdater *qfu_updater_new (QfuDeviceSelection *device_selection, const gchar *firmware_version, const gchar *config_version, const gchar *carrier, - gboolean device_open_proxy, - gboolean device_open_mbim, + QmiDeviceOpenFlags device_open_flags, gboolean ignore_version_errors, gboolean override_download, guint8 modem_storage_index, diff --git a/src/qmi-firmware-update/qfu-utils.c b/src/qmi-firmware-update/qfu-utils.c index 9977f1f..32437e3 100644 --- a/src/qmi-firmware-update/qfu-utils.c +++ b/src/qmi-firmware-update/qfu-utils.c @@ -217,11 +217,10 @@ out: /******************************************************************************/ typedef struct { - QmiDevice *qmi_device; - gboolean device_open_proxy; - gboolean device_open_mbim; - gint qmi_client_retries; - QmiClientDms *qmi_client; + QmiDevice *qmi_device; + QmiDeviceOpenFlags device_open_flags; + gint qmi_client_retries; + QmiClientDms *qmi_client; gboolean load_capabilities; gchar *revision; @@ -544,7 +543,6 @@ qmi_device_ready (GObject *source, { NewClientDmsContext *ctx; GError *error = NULL; - QmiDeviceOpenFlags flags = QMI_DEVICE_OPEN_FLAGS_SYNC; ctx = (NewClientDmsContext *) g_task_get_task_data (task); @@ -558,16 +556,12 @@ qmi_device_ready (GObject *source, g_debug ("[qfu,utils] QMI device created"); - if (ctx->device_open_proxy) - flags |= QMI_DEVICE_OPEN_FLAGS_PROXY; - if (ctx->device_open_mbim) - flags |= QMI_DEVICE_OPEN_FLAGS_MBIM; - g_debug ("[qfu,utils] opening QMI device (%s proxy, %s mode)...", - ctx->device_open_proxy ? "with" : "without", - ctx->device_open_mbim ? "mbim" : "qmi"); + (ctx->device_open_flags & QMI_DEVICE_OPEN_FLAGS_PROXY) ? "with" : "without", + (ctx->device_open_flags & QMI_DEVICE_OPEN_FLAGS_MBIM) ? "mbim" : "qmi"); + qmi_device_open (ctx->qmi_device, - flags, + ctx->device_open_flags | QMI_DEVICE_OPEN_FLAGS_SYNC, 20, g_task_get_cancellable (task), (GAsyncReadyCallback) qmi_device_open_ready, @@ -577,8 +571,7 @@ qmi_device_ready (GObject *source, void qfu_utils_new_client_dms (GFile *cdc_wdm_file, guint retries, - gboolean device_open_proxy, - gboolean device_open_mbim, + QmiDeviceOpenFlags device_open_flags, gboolean load_capabilities, GCancellable *cancellable, GAsyncReadyCallback callback, @@ -589,8 +582,7 @@ qfu_utils_new_client_dms (GFile *cdc_wdm_file, ctx = g_slice_new0 (NewClientDmsContext); ctx->qmi_client_retries = retries; - ctx->device_open_proxy = device_open_proxy; - ctx->device_open_mbim = device_open_mbim; + ctx->device_open_flags = device_open_flags; ctx->load_capabilities = load_capabilities; task = g_task_new (NULL, cancellable, callback, user_data); diff --git a/src/qmi-firmware-update/qfu-utils.h b/src/qmi-firmware-update/qfu-utils.h index f661a3a..0111aac 100644 --- a/src/qmi-firmware-update/qfu-utils.h +++ b/src/qmi-firmware-update/qfu-utils.h @@ -46,8 +46,7 @@ gboolean qfu_utils_parse_cwe_version_string (const gchar *version, void qfu_utils_new_client_dms (GFile *cdc_wdm_file, guint retries, - gboolean device_open_proxy, - gboolean device_open_mbim, + QmiDeviceOpenFlags device_open_flags, gboolean load_capabilities, GCancellable *cancellable, GAsyncReadyCallback callback, |