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);
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));
+ if (sdi->probes) {
+ if (g_slist_length(sdi->probes) == 1) {
+ probe = sdi->probes->data;
+ printf("with 1 probe: %s", probe->name);
+ } else {
+ printf("with %d probes:", g_slist_length(sdi->probes));
+ for (l = sdi->probes; l; l = l->next) {
+ probe = l->data;
+ printf(" %s", probe->name);
+ }
+ }
+ }
printf("\n");
}
static int select_probes(struct sr_dev_inst *sdi)
{
- char **probelist;
- int max_probes, i;
+ struct sr_probe *probe;
+ GSList *selected_probes, *l;
if (!opt_probes)
return SR_OK;
- /*
- * This only works because a device by default initializes
- * and enables all its probes.
- */
- max_probes = g_slist_length(sdi->probes);
- probelist = parse_probestring(max_probes, opt_probes);
- if (!probelist) {
+ if (!(selected_probes = parse_probestring(sdi, opt_probes)))
return SR_ERR;
- }
- for (i = 0; i < max_probes; i++) {
- if (probelist[i]) {
- sr_dev_probe_name_set(sdi, i, probelist[i]);
- g_free(probelist[i]);
- } else {
- sr_dev_probe_enable(sdi, i, FALSE);
- }
+ for (l = sdi->probes; l; l = l->next) {
+ probe = l->data;
+ if (g_slist_find(selected_probes, probe))
+ probe->enabled = TRUE;
+ else
+ probe->enabled = FALSE;
}
- g_free(probelist);
+ g_slist_free(selected_probes);
return SR_OK;
}
int main(int argc, char **argv)
{
+ int ret = 1;
GOptionContext *context;
GError *error;
if (!g_option_context_parse(context, &argc, &argv, &error)) {
g_critical("%s", error->message);
- return 1;
+ goto done_noexit;
}
/* Set the loglevel (amount of messages to output) for libsigrok. */
if (sr_log_loglevel_set(opt_loglevel) != SR_OK)
- return 1;
+ goto done_noexit;
/* Set the loglevel (amount of messages to output) for libsigrokdecode. */
if (srd_log_loglevel_set(opt_loglevel) != SRD_OK)
- return 1;
+ goto done_noexit;
if (sr_init() != SR_OK)
- return 1;
+ goto done_noexit;
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();
if (opt_pds)
srd_exit();
- g_option_context_free(context);
+ ret = 0;
+
+done:
sr_exit();
- return 0;
+done_noexit:
+ g_option_context_free(context);
+
+ return ret;
}