[PATCH 2/3] qmicli: new '--get-expected-data-format' & '--set-expected-data-format' actions

Dan Williams dcbw at redhat.com
Wed Jan 6 09:07:01 PST 2016


On Tue, 2015-12-29 at 17:39 +0100, Aleksander Morgado wrote:
> These new actions allow to query or update the data format expected
> by the
> kernel in the WWAN interface associated to the cdc-wdm device used.
> 

LGTM

> ---
>  src/qmicli/qmicli-helpers.c | 21 +++++++++++++
>  src/qmicli/qmicli-helpers.h |  2 ++
>  src/qmicli/qmicli.c         | 76
> ++++++++++++++++++++++++++++++++++++++++++++-
>  3 files changed, 98 insertions(+), 1 deletion(-)
> 
> diff --git a/src/qmicli/qmicli-helpers.c b/src/qmicli/qmicli
> -helpers.c
> index a2ca5d3..511adf5 100644
> --- a/src/qmicli/qmicli-helpers.c
> +++ b/src/qmicli/qmicli-helpers.c
> @@ -371,6 +371,27 @@ qmicli_read_net_open_flags_from_string (const
> gchar *str,
>  }
>  
>  gboolean
> +qmicli_read_expected_data_format_from_string (const gchar *str,
> +                                             
>  QmiDeviceExpectedDataFormat *out)
> +{
> +    GType type;
> +    GEnumClass *enum_class;
> +    GEnumValue *enum_value;
> +
> +    type = qmi_device_expected_data_format_get_type ();
> +    enum_class = G_ENUM_CLASS (g_type_class_ref (type));
> +    enum_value = g_enum_get_value_by_nick (enum_class, str);
> +
> +    if (enum_value)
> +        *out = (QmiDeviceExpectedDataFormat)enum_value->value;
> +    else
> +        g_printerr ("error: invalid expected data format value
> given: '%s'\n", str);
> +
> +    g_type_class_unref (enum_class);
> +    return !!enum_value;
> +}
> +
> +gboolean
>  qmicli_read_link_layer_protocol_from_string (const gchar *str,
>                                               QmiWdaLinkLayerProtocol
> *out)
>  {
> diff --git a/src/qmicli/qmicli-helpers.h b/src/qmicli/qmicli
> -helpers.h
> index 975b507..1dcb95c 100644
> --- a/src/qmicli/qmicli-helpers.h
> +++ b/src/qmicli/qmicli-helpers.h
> @@ -47,6 +47,8 @@ gboolean qmicli_read_radio_interface_from_string   
>           (const gchar *str,
>                                                               
>  QmiNasRadioInterface *out);
>  gboolean qmicli_read_net_open_flags_from_string              (const
> gchar *str,
>                                                               
>  QmiDeviceOpenFlags *out);
> +gboolean qmicli_read_expected_data_format_from_string        (const
> gchar *str,
> +                                                             
>  QmiDeviceExpectedDataFormat *out);
>  gboolean qmicli_read_link_layer_protocol_from_string         (const
> gchar *str,
>                                                               
>  QmiWdaLinkLayerProtocol *out);
>  gboolean qmicli_read_autoconnect_setting_from_string         (const
> gchar *str,
> diff --git a/src/qmicli/qmicli.c b/src/qmicli/qmicli.c
> index 855cb0a..4960c78 100644
> --- a/src/qmicli/qmicli.c
> +++ b/src/qmicli/qmicli.c
> @@ -49,6 +49,8 @@ static gboolean operation_status;
>  static gchar *device_str;
>  static gboolean get_service_version_info_flag;
>  static gboolean get_wwan_iface_flag;
> +static gboolean get_expected_data_format_flag;
> +static gchar *set_expected_data_format_str;
>  static gchar *device_set_instance_id_str;
>  static gboolean device_open_version_info_flag;
>  static gboolean device_open_sync_flag;
> @@ -69,6 +71,14 @@ static GOptionEntry main_entries[] = {
>        "Get the WWAN iface name associated with this control port",
>        NULL
>      },
> +    { "get-expected-data-format", 'e', 0, G_OPTION_ARG_NONE,
> &get_expected_data_format_flag,
> +      "Get the expected data format in the WWAN iface",
> +      NULL
> +    },
> +    { "set-expected-data-format", 'E', 0, G_OPTION_ARG_STRING,
> &set_expected_data_format_str,
> +      "Set the expected data format in the WWAN iface",
> +      "[802-3|raw-ip]"
> +    },
>      { "get-service-version-info", 0, 0, G_OPTION_ARG_NONE,
> &get_service_version_info_flag,
>        "Get service version info",
>        NULL
> @@ -214,7 +224,9 @@ generic_options_enabled (void)
>  
>      n_actions = (!!device_set_instance_id_str +
>                   get_service_version_info_flag +
> -                 get_wwan_iface_flag);
> +                 get_wwan_iface_flag +
> +                 get_expected_data_format_flag +
> +                 !!set_expected_data_format_str);
>  
>      if (n_actions > 1) {
>          g_printerr ("error: too many generic actions requested\n");
> @@ -459,6 +471,64 @@ device_get_service_version_info (QmiDevice *dev)
>  }
>  
>  static gboolean
> +device_set_expected_data_format_cb (QmiDevice *dev)
> +{
> +    QmiDeviceExpectedDataFormat expected;
> +    GError *error = NULL;
> +
> +    if (!qmicli_read_expected_data_format_from_string
> (set_expected_data_format_str, &expected) ||
> +        expected == QMI_DEVICE_EXPECTED_DATA_FORMAT_UNKNOWN)
> +        g_printerr ("error: invalid requested data format: %s",
> set_expected_data_format_str);
> +    else if (!qmi_device_set_expected_data_format (dev, expected,
> &error)) {
> +        g_printerr ("error: cannot set expected data format: %s\n",
> error->message);
> +        g_error_free (error);
> +    } else
> +        g_print ("[%s] expected data format set to: %s\n",
> +                 qmi_device_get_path_display (dev),
> +                 qmi_device_expected_data_format_get_string
> (expected));
> +
> +    /* We're done now */
> +    qmicli_async_operation_done (!error);
> +
> +    g_object_unref (dev);
> +    return FALSE;
> +}
> +
> +static void
> +device_set_expected_data_format (QmiDevice *dev)
> +{
> +    g_debug ("Setting expected WWAN data format this control
> port...");
> +    g_idle_add ((GSourceFunc) device_set_expected_data_format_cb,
> g_object_ref (dev));
> +}
> +
> +static gboolean
> +device_get_expected_data_format_cb (QmiDevice *dev)
> +{
> +    QmiDeviceExpectedDataFormat expected;
> +    GError *error = NULL;
> +
> +    expected = qmi_device_get_expected_data_format (dev, &error);
> +    if (expected == QMI_DEVICE_EXPECTED_DATA_FORMAT_UNKNOWN) {
> +        g_printerr ("error: cannot get expected data format: %s\n",
> error->message);
> +        g_error_free (error);
> +    } else
> +        g_print ("%s\n", qmi_device_expected_data_format_get_string
> (expected));
> +
> +    /* We're done now */
> +    qmicli_async_operation_done (!error);
> +
> +    g_object_unref (dev);
> +    return FALSE;
> +}
> +
> +static void
> +device_get_expected_data_format (QmiDevice *dev)
> +{
> +    g_debug ("Getting expected WWAN data format this control
> port...");
> +    g_idle_add ((GSourceFunc) device_get_expected_data_format_cb,
> g_object_ref (dev));
> +}
> +
> +static gboolean
>  device_get_wwan_iface_cb (QmiDevice *dev)
>  {
>      const gchar *wwan_iface;
> @@ -504,6 +574,10 @@ device_open_ready (QmiDevice *dev,
>          device_get_service_version_info (dev);
>      else if (get_wwan_iface_flag)
>          device_get_wwan_iface (dev);
> +    else if (get_expected_data_format_flag)
> +        device_get_expected_data_format (dev);
> +    else if (set_expected_data_format_str)
> +        device_set_expected_data_format (dev);
>      else
>          device_allocate_client (dev);
>  }


More information about the libqmi-devel mailing list