diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2021-01-30 14:42:17 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-02-15 15:01:23 +0000 |
commit | da65496d931b2c2e68d1dd9befb3b58c5cee894c (patch) | |
tree | 08b3717134fe1260485b64ca8bc2f1c035bc7c0d /src | |
parent | 1976b6fb9ff1a89a1d4cc253c6a846fb178a2293 (diff) |
qmicli: move all qmi_wwan specific actions to their own group
Diffstat (limited to 'src')
-rw-r--r-- | src/qmicli/Makefile.am | 1 | ||||
-rw-r--r-- | src/qmicli/qmicli-qmiwwan.c | 193 | ||||
-rw-r--r-- | src/qmicli/qmicli.c | 118 | ||||
-rw-r--r-- | src/qmicli/qmicli.h | 6 |
4 files changed, 209 insertions, 109 deletions
diff --git a/src/qmicli/Makefile.am b/src/qmicli/Makefile.am index 1d3d816..dcb0e9c 100644 --- a/src/qmicli/Makefile.am +++ b/src/qmicli/Makefile.am @@ -42,6 +42,7 @@ qmicli_CPPFLAGS = \ qmicli_SOURCES = \ qmicli.c \ qmicli.h \ + qmicli-qmiwwan.c \ qmicli-dms.c \ qmicli-wds.c \ qmicli-nas.c \ diff --git a/src/qmicli/qmicli-qmiwwan.c b/src/qmicli/qmicli-qmiwwan.c new file mode 100644 index 0000000..ed7e59a --- /dev/null +++ b/src/qmicli/qmicli-qmiwwan.c @@ -0,0 +1,193 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * qmicli -- Command line interface to control QMI devices + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * Copyright (C) 2021 Aleksander Morgado <aleksander@aleksander.es> + */ + +#include "config.h" + +#include <stdio.h> +#include <stdlib.h> +#include <locale.h> +#include <string.h> + +#include <glib.h> +#include <glib/gprintf.h> +#include <gio/gio.h> + +#include <libqmi-glib.h> + +#include "qmicli.h" +#include "qmicli-helpers.h" + +/* Options */ +static gboolean get_wwan_iface_flag; +static gboolean get_expected_data_format_flag; +static gchar *set_expected_data_format_str; + +static GOptionEntry entries[] = { + { "get-wwan-iface", 'w', 0, G_OPTION_ARG_NONE, &get_wwan_iface_flag, + "Get the associated WWAN iface name", + 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|qmap-pass-through]" + }, + { NULL } +}; + +GOptionGroup * +qmicli_qmiwwan_get_option_group (void) +{ + GOptionGroup *group; + + group = g_option_group_new ("qmiwwan", + "qmi_wwan specific options:", + "Show qmi_wwan driver specific options", NULL, NULL); + g_option_group_add_entries (group, entries); + + return group; +} + +gboolean +qmicli_qmiwwan_options_enabled (void) +{ + static guint n_actions = 0; + static gboolean checked = FALSE; + + if (checked) + return !!n_actions; + + n_actions = (get_wwan_iface_flag + + get_expected_data_format_flag + + !!set_expected_data_format_str); + + if (n_actions > 1) { + g_printerr ("error: too many qmi_wwan specific actions requested\n"); + exit (EXIT_FAILURE); + } + + checked = TRUE; + return !!n_actions; +} + +/******************************************************************************/ + +static gboolean +device_set_expected_data_format_cb (QmiDevice *dev) +{ + QmiDeviceExpectedDataFormat expected; + GError *error = NULL; + + if (!qmicli_read_device_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, FALSE); + + 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, FALSE); + + 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; + + wwan_iface = qmi_device_get_wwan_iface (dev); + if (!wwan_iface) + g_printerr ("error: cannot get WWAN interface name\n"); + else + g_print ("%s\n", wwan_iface); + + /* We're done now */ + qmicli_async_operation_done (!!wwan_iface, FALSE); + + g_object_unref (dev); + return FALSE; +} + +static void +device_get_wwan_iface (QmiDevice *dev) +{ + g_debug ("Getting WWAN iface for this control port..."); + g_idle_add ((GSourceFunc) device_get_wwan_iface_cb, g_object_ref (dev)); +} + +/******************************************************************************/ +/* Common */ + +void +qmicli_qmiwwan_run (QmiDevice *device, + GCancellable *cancellable) +{ + if (get_wwan_iface_flag) + device_get_wwan_iface (device); + else if (get_expected_data_format_flag) + device_get_expected_data_format (device); + else if (set_expected_data_format_str) + device_set_expected_data_format (device); + else + g_warn_if_reached (); +} diff --git a/src/qmicli/qmicli.c b/src/qmicli/qmicli.c index 36b1cb9..47a6ce3 100644 --- a/src/qmicli/qmicli.c +++ b/src/qmicli/qmicli.c @@ -57,9 +57,6 @@ static QrtrBus *qrtr_bus; /* Main options */ 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; @@ -84,18 +81,6 @@ static GOptionEntry main_entries[] = { "[PATH]" #endif }, - { "get-wwan-iface", 'w', 0, G_OPTION_ARG_NONE, &get_wwan_iface_flag, - "(qmi_wwan specific) Get the associated WWAN iface name", - NULL - }, - { "get-expected-data-format", 'e', 0, G_OPTION_ARG_NONE, &get_expected_data_format_flag, - "(qmi_wwan specific) 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, - "(qmi_wwan specific) Set the expected data format in the WWAN iface", - "[802-3|raw-ip|qmap-pass-through]" - }, { "get-service-version-info", 0, 0, G_OPTION_ARG_NONE, &get_service_version_info_flag, "Get service version info", NULL @@ -258,10 +243,7 @@ generic_options_enabled (void) return !!n_actions; n_actions = (!!device_set_instance_id_str + - get_service_version_info_flag + - get_wwan_iface_flag + - get_expected_data_format_flag + - !!set_expected_data_format_str); + get_service_version_info_flag); if (n_actions > 1) { g_printerr ("error: too many generic actions requested\n"); @@ -646,89 +628,6 @@ device_get_service_version_info (QmiDevice *dev) NULL); } -static gboolean -device_set_expected_data_format_cb (QmiDevice *dev) -{ - QmiDeviceExpectedDataFormat expected; - GError *error = NULL; - - if (!qmicli_read_device_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, FALSE); - - 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, FALSE); - - 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; - - wwan_iface = qmi_device_get_wwan_iface (dev); - if (!wwan_iface) - g_printerr ("error: cannot get WWAN interface name\n"); - else - g_print ("%s\n", wwan_iface); - - /* We're done now */ - qmicli_async_operation_done (!!wwan_iface, FALSE); - - g_object_unref (dev); - return FALSE; -} - -static void -device_get_wwan_iface (QmiDevice *dev) -{ - g_debug ("Getting WWAN iface for this control port..."); - g_idle_add ((GSourceFunc) device_get_wwan_iface_cb, g_object_ref (dev)); -} - static void device_open_ready (QmiDevice *dev, GAsyncResult *res) @@ -748,12 +647,8 @@ device_open_ready (QmiDevice *dev, device_set_instance_id (dev); else if (get_service_version_info_flag) 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 if (qmicli_qmiwwan_options_enabled ()) + qmicli_qmiwwan_run (dev, cancellable); else device_allocate_client (dev); } @@ -882,12 +777,16 @@ parse_actions (void) { guint actions_enabled = 0; - /* Generic options? */ if (generic_options_enabled ()) { service = QMI_SERVICE_CTL; actions_enabled++; } + if (qmicli_qmiwwan_options_enabled ()) { + service = QMI_SERVICE_UNKNOWN; + actions_enabled++; + } + #if defined HAVE_QMI_SERVICE_DMS if (qmicli_dms_options_enabled ()) { service = QMI_SERVICE_DMS; @@ -1063,6 +962,7 @@ int main (int argc, char **argv) #if defined HAVE_QMI_SERVICE_DSD g_option_context_add_group (context, qmicli_dsd_get_option_group ()); #endif + g_option_context_add_group (context, qmicli_qmiwwan_get_option_group ()); g_option_context_add_main_entries (context, main_entries, NULL); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_printerr ("error: %s\n", diff --git a/src/qmicli/qmicli.h b/src/qmicli/qmicli.h index 9e96ed1..00537b9 100644 --- a/src/qmicli/qmicli.h +++ b/src/qmicli/qmicli.h @@ -29,6 +29,12 @@ void qmicli_async_operation_done (gboolean reported_operation_status, gboolean skip_cid_release); void qmicli_expect_indications (void); +/* qmi_wwan specific */ +GOptionGroup *qmicli_qmiwwan_get_option_group (void); +gboolean qmicli_qmiwwan_options_enabled (void); +void qmicli_qmiwwan_run (QmiDevice *device, + GCancellable *cancellable); + #if defined HAVE_QMI_SERVICE_DMS GOptionGroup *qmicli_dms_get_option_group (void); gboolean qmicli_dms_options_enabled (void); |