aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-01-30 14:42:17 +0100
committerAleksander Morgado <aleksander@aleksander.es>2021-02-15 15:01:23 +0000
commitda65496d931b2c2e68d1dd9befb3b58c5cee894c (patch)
tree08b3717134fe1260485b64ca8bc2f1c035bc7c0d /src
parent1976b6fb9ff1a89a1d4cc253c6a846fb178a2293 (diff)
qmicli: move all qmi_wwan specific actions to their own group
Diffstat (limited to 'src')
-rw-r--r--src/qmicli/Makefile.am1
-rw-r--r--src/qmicli/qmicli-qmiwwan.c193
-rw-r--r--src/qmicli/qmicli.c118
-rw-r--r--src/qmicli/qmicli.h6
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);