]> sigrok.org Git - sigrok-cli.git/blobdiff - main.c
accept multiple --config requests for multiple channel groups
[sigrok-cli.git] / main.c
diff --git a/main.c b/main.c
index 829492f5704aa8b3b0f4d5f2a1c48a1d4b61709a..1de4b16e8ea0adbaeff9a2e2aebde7daeb1570e5 100644 (file)
--- a/main.c
+++ b/main.c
@@ -113,7 +113,6 @@ static void get_option(void)
        const struct sr_key_info *ci;
        GSList *devices;
        GVariant *gvar;
-       GHashTable *devargs;
        int ret;
        char *s;
        struct sr_dev_driver *driver;
@@ -136,14 +135,11 @@ static void get_option(void)
                return;
        }
 
-       cg = select_channel_group(sdi);
+       cg = lookup_channel_group(sdi, NULL);
        if (!(ci = sr_key_info_name_get(SR_KEY_CONFIG, opt_get)))
                g_critical("Unknown option '%s'", opt_get);
 
-       if ((devargs = parse_generic_arg(opt_config, FALSE)))
-               set_dev_options(sdi, devargs);
-       else
-               devargs = NULL;
+       set_dev_options_array(sdi, opt_configs);
 
        if ((ret = maybe_config_get(driver, sdi, cg, ci->key, &gvar)) != SR_OK)
                g_critical("Failed to get '%s': %s", opt_get, sr_strerror(ret));
@@ -171,24 +167,18 @@ static void get_option(void)
 
        g_variant_unref(gvar);
        sr_dev_close(sdi);
-       if (devargs)
-               g_hash_table_destroy(devargs);
 }
 
 static void set_options(void)
 {
        struct sr_dev_inst *sdi;
        GSList *devices;
-       GHashTable *devargs;
 
-       if (!opt_config) {
+       if (!opt_configs) {
                g_critical("No setting specified.");
                return;
        }
 
-       if (!(devargs = parse_generic_arg(opt_config, FALSE)))
-               return;
-
        if (!(devices = device_scan())) {
                g_critical("No devices found.");
                return;
@@ -201,11 +191,9 @@ static void set_options(void)
                return;
        }
 
-       set_dev_options(sdi, devargs);
+       set_dev_options_array(sdi, opt_configs);
 
        sr_dev_close(sdi);
-       g_hash_table_destroy(devargs);
-
 }
 
 int main(int argc, char **argv)
@@ -224,6 +212,11 @@ int main(int argc, char **argv)
                goto done;
 
 #ifdef HAVE_SRD
+       if (opt_pd_binary && !opt_pds) {
+               g_critical("Option -B will not take effect in the absence of -P.");
+               goto done;
+       }
+
        /* Set the loglevel (amount of messages to output) for libsigrokdecode. */
        if (srd_log_loglevel_set(opt_loglevel) != SRD_OK)
                goto done;
@@ -242,6 +235,8 @@ int main(int argc, char **argv)
                if (opt_pd_binary) {
                        if (setup_pd_binary(opt_pd_binary) != 0)
                                goto done;
+                       if (setup_binary_stdout() != 0)
+                               goto done;
                        if (srd_pd_output_callback_add(srd_sess, SRD_OUTPUT_BINARY,
                                        show_pd_binary, NULL) != SRD_OK)
                                goto done;
@@ -259,6 +254,7 @@ int main(int argc, char **argv)
                                        show_pd_annotations, NULL) != SRD_OK)
                                goto done;
                }
+               show_pd_prepare();
        }
 #endif
 
@@ -298,6 +294,8 @@ int main(int argc, char **argv)
                show_help();
 
 #ifdef HAVE_SRD
+       if (opt_pds)
+               show_pd_close();
        if (opt_pds)
                srd_exit();
 #endif