]> sigrok.org Git - sigrok-cli.git/blobdiff - sigrok-cli.c
fix device-specific options setting
[sigrok-cli.git] / sigrok-cli.c
index c42bf899c1ce79f2325233718e6018ec6118e859..488edc9d4b3d3ff080a77f5577e3c0771c51175d 100644 (file)
@@ -36,6 +36,8 @@
 
 #define DEFAULT_OUTPUT_FORMAT "bits:width=64"
 
+static struct sr_context *sr_ctx = NULL;
+
 static uint64_t limit_samples = 0;
 static uint64_t limit_frames = 0;
 static struct sr_output_format *output_format = NULL;
@@ -162,7 +164,7 @@ static GSList *device_scan(void)
                        return NULL;
                }
                g_free(drvname);
-               if (sr_driver_init(driver) != SR_OK) {
+               if (sr_driver_init(sr_ctx, driver) != SR_OK) {
                        g_critical("Failed to initialize driver.");
                        return NULL;
                }
@@ -178,7 +180,7 @@ static GSList *device_scan(void)
                drivers = sr_driver_list();
                for (i = 0; drivers[i]; i++) {
                        driver = drivers[i];
-                       if (sr_driver_init(driver) != SR_OK) {
+                       if (sr_driver_init(sr_ctx, driver) != SR_OK) {
                                g_critical("Failed to initialize driver.");
                                return NULL;
                        }
@@ -256,16 +258,16 @@ static void print_dev_line(const struct sr_dev_inst *sdi)
        if (sdi->probes) {
                if (g_slist_length(sdi->probes) == 1) {
                        probe = sdi->probes->data;
-                       printf("with 1 probe: %s\n", probe->name);
+                       printf("with 1 probe: %s", probe->name);
                } else {
-                       printf("with %d probes:\n", g_slist_length(sdi->probes));
+                       printf("with %d probes:", g_slist_length(sdi->probes));
                        for (l = sdi->probes; l; l = l->next) {
                                probe = l->data;
-                               printf("      %s\n", probe->name);
+                               printf(" %s", probe->name);
                        }
                }
-       } else
-               printf("\n");
+       }
+       printf("\n");
 }
 
 static void show_dev_list(void)
@@ -538,7 +540,7 @@ static void show_pd_detail(void)
 }
 
 static void datafeed_in(const struct sr_dev_inst *sdi,
-               struct sr_datafeed_packet *packet)
+               const struct sr_datafeed_packet *packet)
 {
        static struct sr_output *o = NULL;
        static int logic_probelist[SR_MAX_NUM_PROBES] = { -1 };
@@ -549,10 +551,10 @@ static void datafeed_in(const struct sr_dev_inst *sdi,
        static FILE *outfile = NULL;
        static int num_analog_probes = 0;
        struct sr_probe *probe;
-       struct sr_datafeed_logic *logic;
-       struct sr_datafeed_meta_logic *meta_logic;
-       struct sr_datafeed_analog *analog;
-       struct sr_datafeed_meta_analog *meta_analog;
+       const struct sr_datafeed_logic *logic;
+       const struct sr_datafeed_meta_logic *meta_logic;
+       const struct sr_datafeed_analog *analog;
+       const struct sr_datafeed_meta_analog *meta_analog;
        static int num_enabled_analog_probes = 0;
        int num_enabled_probes, sample_size, ret, i;
        uint64_t output_len, filter_out_len;
@@ -821,7 +823,6 @@ static int register_pds(struct sr_dev *dev, const char *pdstring)
        int ret;
        char **pdtokens, **pdtok, *pd_name;
 
-       /* Avoid compiler warnings. */
        (void)dev;
 
        ret = 0;
@@ -1287,8 +1288,6 @@ static int set_dev_options(struct sr_dev_inst *sdi, GHashTable *args)
                        g_critical("Failed to set device option '%s'.", (char *)key);
                        return ret;
                }
-               else
-                       break;
        }
 
        return SR_OK;
@@ -1458,7 +1457,6 @@ static void run_session(void)
 static void logger(const gchar *log_domain, GLogLevelFlags log_level,
                   const gchar *message, gpointer cb_data)
 {
-       /* Avoid compiler warnings. */
        (void)log_domain;
        (void)cb_data;
 
@@ -1475,6 +1473,7 @@ static void logger(const gchar *log_domain, GLogLevelFlags log_level,
 
 int main(int argc, char **argv)
 {
+       int ret = 1;
        GOptionContext *context;
        GError *error;
 
@@ -1486,36 +1485,36 @@ int main(int argc, char **argv)
 
        if (!g_option_context_parse(context, &argc, &argv, &error)) {
                g_critical("%s", error->message);
-               return 1;
+               goto done;
        }
 
        /* Set the loglevel (amount of messages to output) for libsigrok. */
        if (sr_log_loglevel_set(opt_loglevel) != SR_OK)
-               return 1;
+               goto done;
 
        /* Set the loglevel (amount of messages to output) for libsigrokdecode. */
        if (srd_log_loglevel_set(opt_loglevel) != SRD_OK)
-               return 1;
+               goto done;
 
-       if (sr_init() != SR_OK)
-               return 1;
+       if (sr_init(&sr_ctx) != SR_OK)
+               goto done;
 
        if (opt_pds) {
                if (srd_init(NULL) != SRD_OK)
-                       return 1;
+                       goto done;
                if (register_pds(NULL, opt_pds) != 0)
-                       return 1;
+                       goto done;
                if (srd_pd_output_callback_add(SRD_OUTPUT_ANN,
                                show_pd_annotations, NULL) != SRD_OK)
-                       return 1;
+                       goto done;
                if (setup_pd_stack() != 0)
-                       return 1;
+                       goto done;
                if (setup_pd_annotations() != 0)
-                       return 1;
+                       goto done;
        }
 
        if (setup_output_format() != 0)
-               return 1;
+               goto done;
 
        if (opt_version)
                show_version();
@@ -1535,8 +1534,13 @@ int main(int argc, char **argv)
        if (opt_pds)
                srd_exit();
 
+       ret = 0;
+
+done:
+       if (sr_ctx)
+               sr_exit(sr_ctx);
+
        g_option_context_free(context);
-       sr_exit();
 
-       return 0;
+       return ret;
 }