show: print list of available serial ports
authorGerhard Sittig <gerhard.sittig@gmx.net>
Thu, 16 Mar 2017 11:16:58 +0000 (12:16 +0100)
committerUwe Hermann <uwe@hermann-uwe.de>
Tue, 4 Jun 2019 17:13:12 +0000 (19:13 +0200)
Introduce the --list-serial command line option, which prints the list
of serial ports detected by the sigrok serial.c abstraction.

The code was taken from Carl-Fredrik Sundström's <audio.cf@gmail.com>
message to the mailing list, with minor style fixes applied, and the
option renamed to explicitly mention its "list" nature, not suggesting
it would be a parameter to setup.

main.c
options.c
show.c
sigrok-cli.h

diff --git a/main.c b/main.c
index 8e4ac3a6a5891879c8aec9c946c82b5121b60753..829492f5704aa8b3b0f4d5f2a1c48a1d4b61709a 100644 (file)
--- a/main.c
+++ b/main.c
@@ -292,6 +292,8 @@ int main(int argc, char **argv)
                set_options();
        else if (opt_samples || opt_time || opt_frames || opt_continuous)
                run_session();
+       else if (opt_list_serial)
+               show_serial_ports();
        else
                show_help();
 
index 3ec4414ba8792abd84579a78ff3395861df033db..d69ed7381e21fbe9402deda2b3c2f48620d0a0da 100644 (file)
--- a/options.c
+++ b/options.c
@@ -52,6 +52,7 @@ gchar *opt_frames = NULL;
 gboolean opt_continuous = FALSE;
 gchar *opt_get = NULL;
 gboolean opt_set = FALSE;
+gboolean opt_list_serial = FALSE;
 
 /*
  * Defines a callback function that generates an error if an
@@ -158,6 +159,7 @@ static const GOptionEntry optargs[] = {
                        "Sample continuously", NULL},
        {"get", 0, 0, G_OPTION_ARG_CALLBACK, &check_opt_get, "Get device options only", NULL},
        {"set", 0, 0, G_OPTION_ARG_NONE, &opt_set, "Set device options only", NULL},
+       {"list-serial", 0, 0, G_OPTION_ARG_NONE, &opt_list_serial, "List available serial ports", NULL},
        {NULL, 0, 0, 0, NULL, NULL, NULL}
 };
 
diff --git a/show.c b/show.c
index 090be4a3f84f42425c5eed85382b3348cb2b8188..c2517ddf766625aad001f23d3f1d99a0ccc5785c 100644 (file)
--- a/show.c
+++ b/show.c
@@ -1055,3 +1055,25 @@ void show_transform(void)
        }
        g_strfreev(tok);
 }
+
+static void print_serial_port(gpointer data, gpointer user_data)
+{
+       struct sr_serial_port *port;
+
+       port = (void *)data;
+       (void)user_data;
+       printf("\t%s\t%s\n", port->name, port->description);
+}
+
+void show_serial_ports(void)
+{
+       GSList *serial_ports;
+
+       serial_ports = sr_serial_list(NULL);
+       if (!serial_ports)
+               return;
+
+       printf("Available serial ports:\n");
+       g_slist_foreach(serial_ports, print_serial_port, NULL);
+       g_slist_free_full(serial_ports, (GDestroyNotify)sr_serial_free);
+}
index 37746e3b8b25c3a38d09ecbe0b2e5fa22c7a0cfc..7def7412fd62cbc8dd3bb4885da4c02f30d46173 100644 (file)
@@ -52,6 +52,7 @@ void show_pd_detail(void);
 void show_input(void);
 void show_output(void);
 void show_transform(void);
+void show_serial_ports(void);
 
 /* device.c */
 GSList *device_scan(void);
@@ -139,6 +140,7 @@ extern gchar *opt_frames;
 extern gboolean opt_continuous;
 extern gchar *opt_get;
 extern gboolean opt_set;
+extern gboolean opt_list_serial;
 int parse_options(int argc, char **argv);
 void show_help(void);