X-Git-Url: https://sigrok.org/gitweb/?p=sigrok-cli.git;a=blobdiff_plain;f=sigrok-cli.c;h=aeffeaa8d42f659aac62fde3d31d642e175cc138;hp=1168745a6d9e01ab145b8e75145148d0267fbbad;hb=11b62b6f90e9c65beb1b6880c7e254551e296ae2;hpb=4ed6cde9892cb3fb1578c9f637da39318b9c62e1 diff --git a/sigrok-cli.c b/sigrok-cli.c index 1168745..aeffeaa 100644 --- a/sigrok-cli.c +++ b/sigrok-cli.c @@ -132,7 +132,6 @@ static GSList *hash_to_hwopt(GHashTable *hash) value = g_hash_table_lookup(hash, key); hwopt->value = g_strdup(value); opts = g_slist_append(opts, hwopt); - break; } g_list_free(keys); @@ -245,6 +244,8 @@ static void show_version(void) static void print_dev_line(const struct sr_dev_inst *sdi) { + struct sr_probe *probe; + GSList *l; if (sdi->vendor && sdi->vendor[0]) printf("%s ", sdi->vendor); @@ -252,9 +253,19 @@ static void print_dev_line(const struct sr_dev_inst *sdi) printf("%s ", sdi->model); if (sdi->version && sdi->version[0]) printf("%s ", sdi->version); - if (sdi->probes) - printf("with %d probes", g_slist_length(sdi->probes)); - printf("\n"); + if (sdi->probes) { + if (g_slist_length(sdi->probes) == 1) { + probe = sdi->probes->data; + printf("with 1 probe: %s\n", probe->name); + } else { + printf("with %d probes:\n", g_slist_length(sdi->probes)); + for (l = sdi->probes; l; l = l->next) { + probe = l->data; + printf(" %s\n", probe->name); + } + } + } else + printf("\n"); } static void show_dev_list(void) @@ -546,6 +557,7 @@ static void datafeed_in(const struct sr_dev_inst *sdi, int num_enabled_probes, sample_size, ret, i; uint64_t output_len, filter_out_len; uint8_t *output_buf, *filter_out; + GString *out; /* If the first packet to come in isn't a header, don't even try. */ if (packet->type != SR_DF_HEADER && o == NULL) @@ -594,6 +606,9 @@ static void datafeed_in(const struct sr_dev_inst *sdi, received_samples); if (outfile && outfile != stdout) fclose(outfile); + + if (o->format->cleanup) + o->format->cleanup(o); g_free(o); o = NULL; break; @@ -784,6 +799,14 @@ static void datafeed_in(const struct sr_dev_inst *sdi, g_message("received unknown packet type %d", packet->type); } + if (o && o->format->recv) { + out = o->format->recv(o, sdi, packet); + if (out && out->len) { + fwrite(out->str, 1, out->len, outfile); + fflush(outfile); + } + } + } /* Register the given PDs for this session. @@ -1382,13 +1405,6 @@ static void run_session(void) g_free(triggerlist); } - if (sr_dev_config_set(sdi, SR_HWCAP_PROBECONFIG, - (char *)sdi->probes) != SR_OK) { - g_critical("Failed to configure probes."); - sr_session_destroy(); - return; - } - if (opt_continuous) { if (!sr_driver_hwcap_exists(sdi->driver, SR_HWCAP_CONTINUOUS)) { g_critical("This device does not support continuous sampling."); @@ -1513,10 +1529,10 @@ int main(int argc, char **argv) show_version(); else if (opt_list_devs) show_dev_list(); + else if (opt_pds && opt_show) + show_pd_detail(); else if (opt_show) show_dev_detail(); - else if (opt_pds) - show_pd_detail(); else if (opt_input_file) load_input_file(); else if (opt_samples || opt_time || opt_frames || opt_continuous)