/*
- * 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>
*
#include "config.h"
#ifdef HAVE_SRD
-#include <sigrokdecode.h> /* First, so we avoid a _POSIX_C_SOURCE warning. */
+#include <libsigrokdecode/libsigrokdecode.h> /* First, so we avoid a _POSIX_C_SOURCE warning. */
#endif
#include <stdio.h>
#include <stdlib.h>
static gboolean opt_version = FALSE;
static gint opt_loglevel = SR_LOG_WARN; /* Show errors+warnings per default. */
-static gboolean opt_list_devs = FALSE;
+static gboolean opt_scan_devs = FALSE;
static gboolean opt_wait_trigger = FALSE;
static gchar *opt_input_file = NULL;
static gchar *opt_output_file = NULL;
static gchar *opt_drv = NULL;
-static gchar *opt_dev = NULL;
+static gchar *opt_config = NULL;
static gchar *opt_probes = NULL;
static gchar *opt_triggers = NULL;
static gchar *opt_pds = NULL;
{"version", 'V', 0, G_OPTION_ARG_NONE, &opt_version,
"Show version and support list", NULL},
{"loglevel", 'l', 0, G_OPTION_ARG_INT, &opt_loglevel,
- "Set libsigrok/libsigrokdecode loglevel", NULL},
- {"list-devices", 'D', 0, G_OPTION_ARG_NONE, &opt_list_devs,
- "Scan for devices", NULL},
- {"driver", 0, 0, G_OPTION_ARG_STRING, &opt_drv,
- "Use only this driver", NULL},
- {"device", 'd', 0, G_OPTION_ARG_STRING, &opt_dev,
- "Use specified device", NULL},
+ "Set loglevel (5 is most verbose)", NULL},
+ {"driver", 'd', 0, G_OPTION_ARG_STRING, &opt_drv,
+ "The driver to use", NULL},
+ {"config", 'c', 0, G_OPTION_ARG_STRING, &opt_config,
+ "Specify device configuration options", NULL},
{"input-file", 'i', 0, G_OPTION_ARG_FILENAME, &opt_input_file,
"Load input from file", NULL},
{"input-format", 'I', 0, G_OPTION_ARG_STRING, &opt_input_format,
{"wait-trigger", 'w', 0, G_OPTION_ARG_NONE, &opt_wait_trigger,
"Wait for trigger", NULL},
#ifdef HAVE_SRD
- {"protocol-decoders", 'a', 0, G_OPTION_ARG_STRING, &opt_pds,
+ {"protocol-decoders", 'P', 0, G_OPTION_ARG_STRING, &opt_pds,
"Protocol decoders to run", NULL},
- {"protocol-decoder-stack", 's', 0, G_OPTION_ARG_STRING, &opt_pd_stack,
+ {"protocol-decoder-stack", 'S', 0, G_OPTION_ARG_STRING, &opt_pd_stack,
"Protocol decoder stack", NULL},
{"protocol-decoder-annotations", 'A', 0, G_OPTION_ARG_STRING, &opt_pd_annotations,
"Protocol decoder annotation(s) to show", NULL},
#endif
+ {"scan", 0, 0, G_OPTION_ARG_NONE, &opt_scan_devs,
+ "Scan for devices", NULL},
{"show", 0, 0, G_OPTION_ARG_NONE, &opt_show,
"Show device detail", NULL},
{"time", 0, 0, G_OPTION_ARG_STRING, &opt_time,
src = g_try_malloc(sizeof(struct sr_config));
src->key = srci->key;
value = g_hash_table_lookup(hash, key);
- src->value = g_strdup(value);
+ src->data = g_variant_new_string(value);
opts = g_slist_append(opts, src);
}
g_list_free(keys);
static void free_drvopts(struct sr_config *src)
{
- g_free((void *)src->value);
+ g_variant_unref(src->data);
g_free(src);
}
{
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)
{
struct sr_dev_inst *sdi;
const struct sr_config_info *srci;
- const struct sr_samplerates *samplerates;
- struct sr_rational *rationals;
GSList *devices;
- uint64_t *integers;
- const int *hwopts, *hwcaps;
- int cap, num_devices, *tmp_bool, i;
- char *s, *title;
+ GVariant *gvar_opts, *gvar_dict, *gvar_list, *gvar;
+ gsize num_opts, num_elements;
+ const uint64_t *uint64, p, q;
+ const int32_t *opts;
+ unsigned int num_devices, tmp_bool, o, i;
+ char *s;
const char *charopts, **stropts;
if (!(devices = device_scan())) {
num_devices = g_slist_length(devices);
if (num_devices > 1) {
g_critical("%d devices found. Use --list-devices to show them, "
- "and --device to select one.", num_devices);
+ "and select one to show.", num_devices);
return;
}
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;
}
- if (sr_config_list(sdi->driver, SR_CONF_TRIGGER_TYPE, (const void **)&charopts,
- sdi) == SR_OK && charopts) {
- printf("Supported triggers: ");
- while (*charopts) {
- printf("%c ", *charopts);
- charopts++;
- }
- printf("\n");
- }
-
- if ((sr_config_list(sdi->driver, SR_CONF_SCAN_OPTIONS, (const void **)&hwopts,
- NULL) == SR_OK) && hwopts) {
+ if ((sr_config_list(sdi->driver, SR_CONF_SCAN_OPTIONS, &gvar_opts,
+ NULL) == SR_OK)) {
+ opts = g_variant_get_fixed_array(gvar_opts, &num_elements,
+ sizeof(int32_t));
printf("Supported driver options:\n");
- for (i = 0; hwopts[i]; i++) {
- if (!(srci = sr_config_info_get(hwopts[i])))
+ for (i = 0; i < num_elements; i++) {
+ if (!(srci = sr_config_info_get(opts[i])))
continue;
printf(" %s\n", srci->id);
}
+ g_variant_unref(gvar_opts);
}
- title = "Supported device options:\n";
- if ((sr_config_list(sdi->driver, SR_CONF_DEVICE_OPTIONS, (const void **)&hwcaps,
- NULL) != SR_OK) || !hwcaps)
+ if ((sr_config_list(sdi->driver, SR_CONF_DEVICE_OPTIONS, &gvar_opts,
+ sdi) != SR_OK))
/* Driver supports no device instance options. */
return;
- for (cap = 0; hwcaps[cap]; cap++) {
- if (!(srci = sr_config_info_get(hwcaps[cap])))
+ printf("Supported device options:\n");
+ opts = g_variant_get_fixed_array(gvar_opts, &num_opts, sizeof(int32_t));
+ for (o = 0; o < num_opts; o++) {
+ if (!(srci = sr_config_info_get(opts[o])))
continue;
- if (title) {
- printf("%s", title);
- title = NULL;
- }
+ if (srci->key == SR_CONF_TRIGGER_TYPE) {
+ if (sr_config_list(sdi->driver, srci->key, &gvar,
+ sdi) != SR_OK) {
+ printf("\n");
+ continue;
+ }
+ charopts = g_variant_get_string(gvar, NULL);
+ printf(" Supported triggers: ");
+ while (*charopts) {
+ printf("%c ", *charopts);
+ charopts++;
+ }
+ printf("\n");
+ g_variant_unref(gvar);
- if (srci->key == SR_CONF_PATTERN_MODE) {
+ } else if (srci->key == SR_CONF_PATTERN_MODE) {
/* Pattern generator modes */
printf(" %s", srci->id);
- if (sr_config_list(sdi->driver, SR_CONF_PATTERN_MODE,
- (const void **)&stropts, sdi) == SR_OK) {
+ if (sr_config_list(sdi->driver, srci->key, &gvar,
+ sdi) == SR_OK) {
printf(" - supported patterns:\n");
- for (i = 0; stropts[i]; i++)
+ stropts = g_variant_get_strv(gvar, &num_elements);
+ for (i = 0; i < num_elements; i++)
printf(" %s\n", stropts[i]);
+ g_variant_unref(gvar);
} else {
printf("\n");
}
/* Supported samplerates */
printf(" %s", srci->id);
if (sr_config_list(sdi->driver, SR_CONF_SAMPLERATE,
- (const void **)&samplerates, sdi) != SR_OK) {
+ &gvar_dict, sdi) != SR_OK) {
printf("\n");
continue;
}
- if (samplerates->step) {
+ if ((gvar_list = g_variant_lookup_value(gvar_dict,
+ "samplerates", G_VARIANT_TYPE("at")))) {
+ uint64 = g_variant_get_fixed_array(gvar_list,
+ &num_elements, sizeof(uint64_t));
+ printf(" - supported samplerates:\n");
+ for (i = 0; i < num_elements; i++)
+ printf(" %s\n", sr_samplerate_string(uint64[i]));
+ } if ((gvar_list = g_variant_lookup_value(gvar_dict,
+ "samplerate-steps", G_VARIANT_TYPE("at")))) {
+ uint64 = g_variant_get_fixed_array(gvar_list,
+ &num_elements, sizeof(uint64_t));
/* low */
- if (!(s = sr_samplerate_string(samplerates->low)))
+ if (!(s = sr_samplerate_string(uint64[0])))
continue;
printf(" (%s", s);
g_free(s);
/* high */
- if (!(s = sr_samplerate_string(samplerates->high)))
+ if (!(s = sr_samplerate_string(uint64[1])))
continue;
printf(" - %s", s);
g_free(s);
/* step */
- if (!(s = sr_samplerate_string(samplerates->step)))
+ if (!(s = sr_samplerate_string(uint64[2])))
continue;
printf(" in steps of %s)\n", s);
g_free(s);
- } else {
- printf(" - supported samplerates:\n");
- for (i = 0; samplerates->list[i]; i++)
- printf(" %s\n", sr_samplerate_string(samplerates->list[i]));
+ g_variant_unref(gvar_list);
}
+ g_variant_unref(gvar_dict);
} else if (srci->key == SR_CONF_BUFFERSIZE) {
/* Supported buffer sizes */
printf(" %s", srci->id);
if (sr_config_list(sdi->driver, SR_CONF_BUFFERSIZE,
- (const void **)&integers, sdi) != SR_OK) {
+ &gvar_list, sdi) != SR_OK) {
printf("\n");
continue;
}
+ uint64 = g_variant_get_fixed_array(gvar_list,
+ &num_elements, sizeof(uint64_t));
printf(" - supported buffer sizes:\n");
- for (i = 0; integers[i]; i++)
- printf(" %"PRIu64"\n", integers[i]);
+ for (i = 0; i < num_elements; i++)
+ printf(" %"PRIu64"\n", uint64[i]);
+ g_variant_unref(gvar_list);
} else if (srci->key == SR_CONF_TIMEBASE) {
/* Supported time bases */
printf(" %s", srci->id);
if (sr_config_list(sdi->driver, SR_CONF_TIMEBASE,
- (const void **)&rationals, sdi) != SR_OK) {
+ &gvar_list, sdi) != SR_OK) {
printf("\n");
continue;
}
printf(" - supported time bases:\n");
- for (i = 0; rationals[i].p && rationals[i].q; i++)
- printf(" %s\n", sr_period_string(
- rationals[i].p * rationals[i].q));
+ num_elements = g_variant_n_children(gvar_list);
+ for (i = 0; i < num_elements; i++) {
+ gvar = g_variant_get_child_value(gvar_list, i);
+ g_variant_get(gvar, "(tt)", &p, &q);
+ s = sr_period_string(p * q);
+ printf(" %s\n", s);
+ g_free(s);
+ }
+ g_variant_unref(gvar_list);
} else if (srci->key == SR_CONF_TRIGGER_SOURCE) {
/* Supported trigger sources */
printf(" %s", srci->id);
if (sr_config_list(sdi->driver, SR_CONF_TRIGGER_SOURCE,
- (const void **)&stropts, sdi) != SR_OK) {
+ &gvar, sdi) != SR_OK) {
printf("\n");
continue;
}
printf(" - supported trigger sources:\n");
- for (i = 0; stropts[i]; i++)
+ stropts = g_variant_get_strv(gvar, &num_elements);
+ for (i = 0; i < num_elements; i++)
printf(" %s\n", stropts[i]);
+ g_variant_unref(gvar);
} else if (srci->key == SR_CONF_FILTER) {
/* Supported filters */
printf(" %s", srci->id);
if (sr_config_list(sdi->driver, SR_CONF_FILTER,
- (const void **)&stropts, sdi) != SR_OK) {
+ &gvar, sdi) != SR_OK) {
printf("\n");
continue;
}
printf(" - supported filter targets:\n");
- for (i = 0; stropts[i]; i++)
+ stropts = g_variant_get_strv(gvar, &num_elements);
+ for (i = 0; i < num_elements; i++)
printf(" %s\n", stropts[i]);
+ g_variant_unref(gvar);
} else if (srci->key == SR_CONF_VDIV) {
/* Supported volts/div values */
printf(" %s", srci->id);
if (sr_config_list(sdi->driver, SR_CONF_VDIV,
- (const void **)&rationals, sdi) != SR_OK) {
+ &gvar_list, sdi) != SR_OK) {
printf("\n");
continue;
}
printf(" - supported volts/div:\n");
- for (i = 0; rationals[i].p && rationals[i].q; i++)
- printf(" %s\n", sr_voltage_string( &rationals[i]));
+ num_elements = g_variant_n_children(gvar_list);
+ for (i = 0; i < num_elements; i++) {
+ gvar = g_variant_get_child_value(gvar_list, i);
+ g_variant_get(gvar, "(tt)", &p, &q);
+ s = sr_voltage_string(p, q);
+ printf(" %s\n", s);
+ g_free(s);
+ }
+ g_variant_unref(gvar_list);
} else if (srci->key == SR_CONF_COUPLING) {
/* Supported coupling settings */
printf(" %s", srci->id);
if (sr_config_list(sdi->driver, SR_CONF_COUPLING,
- (const void **)&stropts, sdi) != SR_OK) {
+ &gvar, sdi) != SR_OK) {
printf("\n");
continue;
}
printf(" - supported coupling options:\n");
- for (i = 0; stropts[i]; i++)
+ stropts = g_variant_get_strv(gvar, &num_elements);
+ for (i = 0; i < num_elements; i++)
printf(" %s\n", stropts[i]);
+ g_variant_unref(gvar);
} else if (srci->key == SR_CONF_DATALOG) {
/* Turning on/off internal data logging. */
printf(" %s\t(on/off", srci->id);
if (sr_config_get(sdi->driver, SR_CONF_DATALOG,
- (const void **)&tmp_bool, sdi) == SR_OK) {
- printf(", currently %s", *tmp_bool ? "on" : "off");
+ &gvar, sdi) == SR_OK) {
+ tmp_bool = g_variant_get_boolean(gvar);
+ printf(", currently %s", tmp_bool ? "on" : "off");
+ g_variant_unref(gvar);
}
printf(")\n");
} else {
printf(" %s\n", srci->id);
}
}
+ g_variant_unref(gvar_opts);
- sr_session_destroy();
+ sr_dev_close(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;
static int unitsize = 0;
static int triggered = 0;
static FILE *outfile = NULL;
+ GSList *l;
+ GString *out;
+ GVariant *gvar;
int sample_size, ret;
- uint64_t *samplerate, output_len, filter_out_len;
+ uint64_t samplerate, output_len, filter_out_len;
uint8_t *output_buf, *filter_out;
- GString *out;
- GSList *l;
+
+ (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)
#ifdef HAVE_SRD
if (opt_pds && logic_probelist->len) {
if (sr_config_get(sdi->driver, SR_CONF_SAMPLERATE,
- (const void **)&samplerate, sdi) != SR_OK) {
+ &gvar, sdi) != SR_OK) {
g_critical("Unable to initialize protocol "
"decoders: no samplerate found.");
break;
}
- srd_session_start(logic_probelist->len, unitsize,
- *samplerate);
+ samplerate = g_variant_get_uint64(gvar);
+ g_variant_unref(gvar);
+ srd_session_start(logic_probelist->len, unitsize, samplerate);
}
#endif
break;
src = l->data;
switch (src->key) {
case SR_CONF_SAMPLERATE:
- samplerate = (uint64_t *)src->value;
- g_debug("cli: got samplerate %"PRIu64" Hz", *samplerate);
+ samplerate = g_variant_get_uint64(src->data);
+ g_debug("cli: got samplerate %"PRIu64" Hz", samplerate);
break;
case SR_CONF_SAMPLE_INTERVAL:
- samplerate = (uint64_t *)src->value;
- g_debug("cli: got sample interval %"PRIu64" ms", *samplerate);
+ samplerate = g_variant_get_uint64(src->data);
+ g_debug("cli: got sample interval %"PRIu64" ms", samplerate);
break;
default:
/* Unknown metadata is not an error. */
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");
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();
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();
GHashTableIter iter;
gpointer key, value;
int ret;
- float tmp_float;
- uint64_t tmp_u64;
- struct sr_rational tmp_rat;
+ double tmp_double;
+ uint64_t tmp_u64, p, q;
gboolean tmp_bool;
- void *val;
+ GVariant *val, *rational[2];
g_hash_table_iter_init(&iter, args);
while (g_hash_table_iter_next(&iter, &key, &value)) {
ret = sr_parse_sizestring(value, &tmp_u64);
if (ret != SR_OK)
break;
- val = &tmp_u64;
+ val = g_variant_new_uint64(tmp_u64);
break;
case SR_T_CHAR:
- val = value;
+ val = g_variant_new_string(value);
break;
case SR_T_BOOL:
if (!value)
tmp_bool = TRUE;
else
tmp_bool = sr_parse_boolstring(value);
- val = &tmp_bool;
+ val = g_variant_new_boolean(tmp_bool);
break;
case SR_T_FLOAT:
- tmp_float = strtof(value, NULL);
- val = &tmp_float;
+ tmp_double = strtof(value, NULL);
+ val = g_variant_new_double(tmp_double);
break;
case SR_T_RATIONAL_PERIOD:
- if ((ret = sr_parse_period(value, &tmp_rat)) != SR_OK)
+ if ((ret = sr_parse_period(value, &p, &q)) != SR_OK)
break;
- val = &tmp_rat;
+ rational[0] = g_variant_new_uint64(p);
+ rational[1] = g_variant_new_uint64(q);
+ val = g_variant_new_tuple(rational, 2);
break;
case SR_T_RATIONAL_VOLT:
- if ((ret = sr_parse_voltage(value, &tmp_rat)) != SR_OK)
+ if ((ret = sr_parse_voltage(value, &p, &q)) != SR_OK)
break;
- val = &tmp_rat;
+ rational[0] = g_variant_new_uint64(p);
+ rational[1] = g_variant_new_uint64(q);
+ val = g_variant_new_tuple(rational, 2);
break;
default:
ret = SR_ERR;
GSList *devices;
GHashTable *devargs;
- if (!opt_dev) {
+ if (!opt_config) {
g_critical("No setting specified.");
return;
}
- if (!(devargs = parse_generic_arg(opt_dev, FALSE)))
+ if (!(devargs = parse_generic_arg(opt_config, FALSE)))
return;
if (!(devices = device_scan())) {
}
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);
static int set_limit_time(const struct sr_dev_inst *sdi)
{
+ GVariant *gvar;
uint64_t time_msec;
- uint64_t *samplerate;
+ uint64_t samplerate;
if (!(time_msec = sr_parse_timestring(opt_time))) {
g_critical("Invalid time '%s'", opt_time);
}
if (sr_dev_has_option(sdi, SR_CONF_LIMIT_MSEC)) {
- if (sr_config_set(sdi, SR_CONF_LIMIT_MSEC, &time_msec) != SR_OK) {
+ gvar = g_variant_new_uint64(time_msec);
+ if (sr_config_set(sdi, SR_CONF_LIMIT_MSEC, gvar) != SR_OK) {
g_critical("Failed to configure time limit.");
return SR_ERR;
}
} else if (sr_dev_has_option(sdi, SR_CONF_SAMPLERATE)) {
/* Convert to samples based on the samplerate. */
- sr_config_get(sdi->driver, SR_CONF_SAMPLERATE,
- (const void **)&samplerate, sdi);
- limit_samples = (*samplerate) * time_msec / (uint64_t)1000;
+ sr_config_get(sdi->driver, SR_CONF_SAMPLERATE, &gvar, sdi);
+ samplerate = g_variant_get_uint64(gvar);
+ g_variant_unref(gvar);
+ limit_samples = (samplerate) * time_msec / (uint64_t)1000;
if (limit_samples == 0) {
g_critical("Not enough time at this samplerate.");
return SR_ERR;
}
- if (sr_config_set(sdi, SR_CONF_LIMIT_SAMPLES,
- &limit_samples) != SR_OK) {
+ gvar = g_variant_new_uint64(limit_samples);
+ if (sr_config_set(sdi, SR_CONF_LIMIT_SAMPLES, gvar) != SR_OK) {
g_critical("Failed to configure time-based sample limit.");
return SR_ERR;
}
{
GSList *devices;
GHashTable *devargs;
+ GVariant *gvar;
struct sr_dev_inst *sdi;
int max_probes, i;
char **triggerlist;
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;
}
- if (opt_dev) {
- if ((devargs = parse_generic_arg(opt_dev, FALSE))) {
+ if (opt_config) {
+ if ((devargs = parse_generic_arg(opt_config, FALSE))) {
if (set_dev_options(sdi, devargs) != SR_OK)
return;
g_hash_table_destroy(devargs);
}
if (opt_samples) {
- if ((sr_parse_sizestring(opt_samples, &limit_samples) != SR_OK)
- || (sr_config_set(sdi, SR_CONF_LIMIT_SAMPLES,
- &limit_samples) != SR_OK)) {
+ if ((sr_parse_sizestring(opt_samples, &limit_samples) != SR_OK)) {
+ g_critical("Invalid sample limit '%s'.", opt_samples);
+ sr_session_destroy();
+ return;
+ }
+ gvar = g_variant_new_uint64(limit_samples);
+ if (sr_config_set(sdi, SR_CONF_LIMIT_SAMPLES, gvar) != SR_OK) {
g_critical("Failed to configure sample limit.");
sr_session_destroy();
return;
}
if (opt_frames) {
- if ((sr_parse_sizestring(opt_frames, &limit_frames) != SR_OK)
- || (sr_config_set(sdi, SR_CONF_LIMIT_FRAMES,
- &limit_frames) != SR_OK)) {
+ if ((sr_parse_sizestring(opt_frames, &limit_frames) != SR_OK)) {
+ g_critical("Invalid sample limit '%s'.", opt_samples);
+ sr_session_destroy();
+ return;
+ }
+ gvar = g_variant_new_uint64(limit_frames);
+ if (sr_config_set(sdi, SR_CONF_LIMIT_FRAMES, gvar) != SR_OK) {
g_critical("Failed to configure frame limit.");
sr_session_destroy();
return;
if (opt_version)
show_version();
- else if (opt_list_devs)
+ else if (opt_scan_devs)
show_dev_list();
#ifdef HAVE_SRD
else if (opt_pds && opt_show)