]> sigrok.org Git - sigrok-cli.git/blobdiff - sigrok-cli.c
Use new output API receive() function
[sigrok-cli.git] / sigrok-cli.c
index a194a5cb9c3ec9c4a7a8c854b5c52331ef4dc8ac..a1ab7362ce8cfceb7bba44dc0a4e601579c367eb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file is part of the sigrok project.
+ * This file is part of the sigrok-cli project.
  *
  * Copyright (C) 2012 Bert Vermeulen <bert@biot.com>
  *
@@ -271,26 +271,39 @@ static void print_dev_line(const struct sr_dev_inst *sdi)
 {
        struct sr_probe *probe;
        GSList *l;
+       GString *s;
+       GVariant *gvar;
 
+       s = g_string_sized_new(128);
+       g_string_assign(s, sdi->driver->name);
+       if (sr_config_get(sdi->driver, SR_CONF_CONN, &gvar, sdi) == SR_OK) {
+               g_string_append(s, ":conn=");
+               g_string_append(s, g_variant_get_string(gvar, NULL));
+               g_variant_unref(gvar);
+       }
+       g_string_append(s, " - ");
        if (sdi->vendor && sdi->vendor[0])
-               printf("%s ", sdi->vendor);
+               g_string_append_printf(s, "%s ", sdi->vendor);
        if (sdi->model && sdi->model[0])
-               printf("%s ", sdi->model);
+               g_string_append_printf(s, "%s ", sdi->model);
        if (sdi->version && sdi->version[0])
-               printf("%s ", sdi->version);
+               g_string_append_printf(s, "%s ", sdi->version);
        if (sdi->probes) {
                if (g_slist_length(sdi->probes) == 1) {
                        probe = sdi->probes->data;
-                       printf("with 1 probe: %s", probe->name);
+                       g_string_append_printf(s, "with 1 probe: %s", probe->name);
                } else {
-                       printf("with %d probes:", g_slist_length(sdi->probes));
+                       g_string_append_printf(s, "with %d probes:", g_slist_length(sdi->probes));
                        for (l = sdi->probes; l; l = l->next) {
                                probe = l->data;
-                               printf(" %s", probe->name);
+                               g_string_append_printf(s, " %s", probe->name);
                        }
                }
        }
-       printf("\n");
+       g_string_append_printf(s, "\n");
+       printf("%s", s->str);
+       g_string_free(s, TRUE);
+
 }
 
 static void show_dev_list(void)
@@ -338,11 +351,8 @@ static void show_dev_detail(void)
        sdi = devices->data;
        print_dev_line(sdi);
 
-       /* This properly opens and initializes the device, so we can get
-        * current settings. */
-       sr_session_new();
-       if (sr_session_dev_add(sdi) != SR_OK) {
-               g_critical("Failed to use device.");
+       if (sr_dev_open(sdi) != SR_OK) {
+               g_critical("Failed to open device.");
                return;
        }
 
@@ -550,7 +560,7 @@ static void show_dev_detail(void)
        }
        g_variant_unref(gvar_opts);
 
-       sr_session_destroy();
+       sr_dev_close(sdi);
 
 }
 
@@ -644,7 +654,7 @@ static GArray *get_enabled_logic_probes(const struct sr_dev_inst *sdi)
 }
 
 static void datafeed_in(const struct sr_dev_inst *sdi,
-               const struct sr_datafeed_packet *packet)
+               const struct sr_datafeed_packet *packet, void *cb_data)
 {
        const struct sr_datafeed_meta *meta;
        const struct sr_datafeed_logic *logic;
@@ -663,6 +673,8 @@ static void datafeed_in(const struct sr_dev_inst *sdi,
        uint64_t samplerate, output_len, filter_out_len;
        uint8_t *output_buf, *filter_out;
 
+       (void) cb_data;
+
        /* If the first packet to come in isn't a header, don't even try. */
        if (packet->type != SR_DF_HEADER && o == NULL)
                return;
@@ -860,15 +872,15 @@ static void datafeed_in(const struct sr_dev_inst *sdi,
                break;
        }
 
-       if (o && o->format->recv) {
-               out = o->format->recv(o, sdi, packet);
-               if (out && out->len) {
+       if (o && o->format->receive) {
+               if (o->format->receive(o, sdi, packet, &out) == SR_OK && out) {
                        fwrite(out->str, 1, out->len, outfile);
                        fflush(outfile);
+                       g_string_free(out, TRUE);
                }
        }
 
-       /* SR_DF_END needs to be handled after the output module's recv()
+       /* SR_DF_END needs to be handled after the output module's receive()
         * is called, so it can properly clean up that module etc. */
        if (packet->type == SR_DF_END) {
                g_debug("cli: Received SR_DF_END");
@@ -1392,7 +1404,7 @@ static void load_input_file_format(void)
                return;
 
        sr_session_new();
-       sr_session_datafeed_callback_add(datafeed_in);
+       sr_session_datafeed_callback_add(datafeed_in, NULL);
        if (sr_session_dev_add(in->sdi) != SR_OK) {
                g_critical("Failed to use device.");
                sr_session_destroy();
@@ -1412,7 +1424,7 @@ static void load_input_file(void)
 
        if (sr_session_load(opt_input_file) == SR_OK) {
                /* sigrok session file */
-               sr_session_datafeed_callback_add(datafeed_in);
+               sr_session_datafeed_callback_add(datafeed_in, NULL);
                sr_session_start();
                sr_session_run();
                sr_session_stop();
@@ -1516,15 +1528,14 @@ static void set_options(void)
        }
        sdi = devices->data;
 
-       sr_session_new();
-       if (sr_session_dev_add(sdi) != SR_OK) {
-               g_critical("Failed to use device.");
+       if (sr_dev_open(sdi) != SR_OK) {
+               g_critical("Failed to open device.");
                return;
        }
 
        set_dev_options(sdi, devargs);
 
-       sr_session_destroy();
+       sr_dev_close(sdi);
        g_slist_free(devices);
        g_hash_table_destroy(devargs);
 
@@ -1591,10 +1602,15 @@ static void run_session(void)
        sdi = devices->data;
 
        sr_session_new();
-       sr_session_datafeed_callback_add(datafeed_in);
+       sr_session_datafeed_callback_add(datafeed_in, NULL);
+
+       if (sr_dev_open(sdi) != SR_OK) {
+               g_critical("Failed to open device.");
+               return;
+       }
 
        if (sr_session_dev_add(sdi) != SR_OK) {
-               g_critical("Failed to use device.");
+               g_critical("Failed to add device to session.");
                sr_session_destroy();
                return;
        }