[PATCH 1/2] qmicli: preparing for firmware download support

Aleksander Morgado aleksander at aleksander.es
Mon Aug 29 09:15:33 UTC 2016


On 19/08/16 16:29, Bjørn Mork wrote:
> The firmware preference must be set to the new firmware version
> before a firmware download can take place.  Add support for setting
> the firmware preference independently of the currently installed
> images.
> 
> Signed-off-by: Bjørn Mork <bjorn at mork.no>
> ---
>  src/qmicli/qmicli-dms.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 72 insertions(+)
> 
> diff --git a/src/qmicli/qmicli-dms.c b/src/qmicli/qmicli-dms.c
> index 7f1593f333f9..485b73400af1 100644
> --- a/src/qmicli/qmicli-dms.c
> +++ b/src/qmicli/qmicli-dms.c
> @@ -81,6 +81,7 @@ static gboolean get_factory_sku_flag;
>  static gboolean list_stored_images_flag;
>  static gchar *select_stored_image_str;
>  static gchar *delete_stored_image_str;
> +static gchar *set_firmware_pref_str;
>  static gboolean set_fcc_authentication_flag;
>  static gboolean get_supported_messages_flag;
>  static gboolean reset_flag;
> @@ -243,6 +244,10 @@ static GOptionEntry entries[] = {
>        "Delete stored image",
>        "[modem#|pri#] where # is the index"
>      },
> +    { "dms-set-firmware-pref", 0, 0, G_OPTION_ARG_STRING, &set_firmware_pref_str,
> +      "Set firmware preference",
> +      "[(fwver),(config),(carrier)]"
> +    },

Could we make it "--dms-set-firmware-preference"? That would align with
all the other long-format commands, which take full words, not just
prefixes.


>      { "dms-set-fcc-authentication", 0, 0, G_OPTION_ARG_NONE, &set_fcc_authentication_flag,
>        "Set FCC authentication",
>        NULL
> @@ -325,6 +330,7 @@ qmicli_dms_options_enabled (void)
>                   list_stored_images_flag +
>                   !!select_stored_image_str +
>                   !!delete_stored_image_str +
> +                 !!set_firmware_pref_str +
>                   set_fcc_authentication_flag +
>                   get_supported_messages_flag +
>                   reset_flag +
> @@ -2959,6 +2965,50 @@ get_stored_image_delete_ready (QmiClientDms *client,
>          g_array_unref (pri_image_id.unique_id);
>  }
>  
> +static QmiMessageDmsSetFirmwarePreferenceInput *
> +set_firmware_pref_input_create (const gchar *str)
> +{
> +    QmiMessageDmsSetFirmwarePreferenceInput *input;
> +    GArray *array;
> +    QmiMessageDmsSetFirmwarePreferenceInputListImage modem_image_id;
> +    QmiMessageDmsSetFirmwarePreferenceInputListImage pri_image_id;
> +    gchar **split;
> +
> +    /* Prepare inputs.
> +     * Format of the string is:
> +     *    "[(fwver),(config),(carrier)]"
> +     */
> +    split = g_strsplit (str, ",", -1);
> +
> +    modem_image_id.type = QMI_DMS_FIRMWARE_IMAGE_TYPE_MODEM;
> +    pri_image_id.type = QMI_DMS_FIRMWARE_IMAGE_TYPE_PRI;
> +
> +    modem_image_id.unique_id = g_array_sized_new (FALSE, TRUE, 1, 16);
> +    pri_image_id.unique_id = g_array_sized_new (FALSE, TRUE, 1, 16);
> +
> +    /* modem unique id is the fixed wildcard string '?_?' matching any pri */
> +    g_array_insert_vals (modem_image_id.unique_id, 0, "?_?", 3);
> +    g_array_set_size (modem_image_id.unique_id, 16);
> +
> +    /* modem build id format is "(fwver)_?", matching any carrier */
> +    modem_image_id.build_id = g_strdup_printf ("%s_?", split[0]);
> +
> +    /* pri unique id is the "(config)" input */
> +    g_array_insert_vals (pri_image_id.unique_id, 0, split[1], strlen (split[1]));
> +    g_array_set_size (pri_image_id.unique_id, 16);
> +
> +    pri_image_id.build_id = g_strdup_printf ("%s_%s", split[0], split[2]);
> +
> +    array = g_array_sized_new (FALSE, FALSE, sizeof (QmiMessageDmsSetFirmwarePreferenceInputListImage), 2);
> +    g_array_append_val (array, modem_image_id);
> +    g_array_append_val (array, pri_image_id);
> +
> +    input = qmi_message_dms_set_firmware_preference_input_new ();
> +    qmi_message_dms_set_firmware_preference_input_set_list (input, array, NULL);
> +
> +    return input;
> +}
> +
>  static void
>  set_fcc_authentication_ready (QmiClientDms *client,
>                                GAsyncResult *res)
> @@ -3660,6 +3710,28 @@ qmicli_dms_run (QmiDevice *device,
>          return;
>      }
>  
> +    /* Set firmware preference? */
> +    if (set_firmware_pref_str) {
> +        QmiMessageDmsSetFirmwarePreferenceInput *input;
> +
> +        g_debug ("Asynchronously setting firmware preference...");
> +        input = set_firmware_pref_input_create (set_firmware_pref_str);
> +        if (!input) {
> +            operation_shutdown (FALSE);
> +            return;
> +        }
> +
> +        qmi_client_dms_set_firmware_preference (
> +            client,
> +            input,
> +            10,
> +            NULL,
> +            (GAsyncReadyCallback)select_stored_image_ready,
> +            NULL);
> +        qmi_message_dms_set_firmware_preference_input_unref (input);
> +        return;
> +    }
> +
>      /* Set FCC authentication */
>      if (set_fcc_authentication_flag) {
>          g_debug ("Asynchronously setting FCC auth...");
> 


-- 
Aleksander
https://aleksander.es


More information about the libqmi-devel mailing list