#include <string.h>
#include "sigrok-cli.h"
+#define DECODERS_HAVE_TAGS \
+ ((SRD_PACKAGE_VERSION_MAJOR > 0) || \
+ (SRD_PACKAGE_VERSION_MAJOR == 0) && (SRD_PACKAGE_VERSION_MINOR > 5))
+
static gint sort_inputs(gconstpointer a, gconstpointer b)
{
return strcmp(sr_input_id_get((struct sr_input_module *)a),
for (l = sl; l; l = l->next) {
dec = l->data;
+#if DECODERS_HAVE_TAGS
GString *tags = g_string_new(NULL);
for (GSList *t = dec->tags; t; t = t->next)
g_string_append_printf(tags, "%s, ", (char *)t->data);
if (tags->len != 0)
g_string_truncate(tags, tags->len - 2);
+#endif
GString *in = g_string_new(NULL);
for (GSList *t = dec->inputs; t; t = t->next)
else
g_string_truncate(out, out->len - 2);
+#if DECODERS_HAVE_TAGS
printf("{{pd|%s|%s|%s|%s|%s|%s|%s|supported}}\n",
dec->id, dec->name, dec->longname, dec->desc,
tags->str, in->str, out->str);
+#else
+ printf("{{pd|%s|%s|%s|%s|%s|%s|supported}}\n",
+ dec->id, dec->name, dec->longname, dec->desc,
+ in->str, out->str);
+#endif
+#if DECODERS_HAVE_TAGS
g_string_free(tags, TRUE);
+#endif
g_string_free(in, TRUE);
g_string_free(out, TRUE);
}
GString *s;
GVariant *gvar;
struct sr_dev_driver *driver;
- const char *vendor, *model, *version;
+ const char *vendor, *model, *version, *sernum;
driver = sr_dev_inst_driver_get(sdi);
vendor = sr_dev_inst_vendor_get(sdi);
model = sr_dev_inst_model_get(sdi);
version = sr_dev_inst_version_get(sdi);
+ sernum = sr_dev_inst_sernum_get(sdi);
channels = sr_dev_inst_channels_get(sdi);
s = g_string_sized_new(128);
g_string_append_printf(s, "%s ", model);
if (version && version[0])
g_string_append_printf(s, "%s ", version);
+ if (sernum && sernum[0])
+ g_string_append_printf(s, "[S/N: %s] ", sernum);
if (channels) {
if (g_slist_length(channels) == 1) {
ch = channels->data;
gsize num_elements;
double dlow, dhigh, dcur_low, dcur_high;
const uint64_t *uint64;
+ uint64_t cur_rate, rate;
uint64_t p = 0, q = 0, low = 0, high = 0;
uint64_t tmp_uint64, mask, cur_low, cur_high, cur_p, cur_q;
GArray *opts;
char *tmp_str, *s, c;
const char **stropts;
double tmp_flt;
+ gboolean have_tmp_flt, have_curr;
const double *fltopts;
if (parse_driver(opt_drv, &driver_from_opt, NULL)) {
* returned, or which values for them.
*/
select_channels(sdi);
- channel_group = select_channel_group(sdi);
+ channel_group = lookup_channel_group(sdi, NULL);
if (!(opts = sr_dev_options(driver, sdi, channel_group)))
/* Driver supports no device instance options. */
printf("Channel groups:\n");
for (cgl = channel_groups; cgl; cgl = cgl->next) {
cg = cgl->data;
- printf(" %s: channel%s", cg->name,
- g_slist_length(cg->channels) > 1 ? "s" : "");
+ printf(" %s: ", cg->name);
+ if (g_slist_length(cg->channels) == 0)
+ printf("No channels");
+ else
+ printf("channel%s", g_slist_length(cg->channels) > 1 ? "s" : "");
for (chl = cg->channels; chl; chl = chl->next) {
ch = chl->data;
printf(" %s", ch->name);
} else if (key == SR_CONF_SAMPLERATE) {
/* Supported samplerates */
printf(" %s", srci->id);
+ cur_rate = ~0ull;
+ if (maybe_config_get(driver, sdi, channel_group,
+ SR_CONF_SAMPLERATE, &gvar) == SR_OK) {
+ if (g_variant_is_of_type(gvar, G_VARIANT_TYPE_UINT64))
+ cur_rate = g_variant_get_uint64(gvar);
+ g_variant_unref(gvar);
+ }
if (maybe_config_list(driver, sdi, channel_group, SR_CONF_SAMPLERATE,
&gvar_dict) != SR_OK) {
printf("\n");
&num_elements, sizeof(uint64_t));
printf(" - supported samplerates:\n");
for (i = 0; i < num_elements; i++) {
- if (!(s = sr_samplerate_string(uint64[i])))
+ rate = uint64[i];
+ s = sr_samplerate_string(rate);
+ if (!s)
continue;
- printf(" %s\n", s);
+ printf(" %s", s);
+ if (rate == cur_rate)
+ printf(" (current)");
+ printf("\n");
g_free(s);
}
g_variant_unref(gvar_list);
continue;
}
+ have_curr = FALSE;
if (maybe_config_get(driver, sdi, channel_group, key, &gvar) == SR_OK) {
g_variant_get(gvar, "(dd)", &dcur_low, &dcur_high);
g_variant_unref(gvar);
- } else {
- dcur_low = 0;
- dcur_high = 0;
+ have_curr = TRUE;
}
num_elements = g_variant_n_children(gvar_list);
if (i)
printf(", ");
printf("%.1f-%.1f", dlow, dhigh);
+ if (!have_curr)
+ continue;
if (dlow == dcur_low && dhigh == dcur_high)
printf(" (current)");
}
} else if (srci->datatype == SR_T_FLOAT) {
printf(" %s: ", srci->id);
tmp_flt = 0.0;
+ have_tmp_flt = FALSE;
if (maybe_config_get(driver, sdi, channel_group, key,
&gvar) == SR_OK) {
tmp_flt = g_variant_get_double(gvar);
+ have_tmp_flt = TRUE;
g_variant_unref(gvar);
}
if (maybe_config_list(driver, sdi, channel_group, key,
&gvar) != SR_OK) {
- if (tmp_flt) {
+ if (have_tmp_flt) {
/* Can't list, but got a value to show. */
printf("%f (current)", tmp_flt);
}
if (i)
printf(", ");
printf("%f", fltopts[i]);
- if (tmp_flt && fltopts[i] == tmp_flt)
+ if (have_tmp_flt && fltopts[i] == tmp_flt)
printf(" (current)");
}
printf("\n");
printf("None.\n");
}
printf("Decoder tags:\n");
+#if DECODERS_HAVE_TAGS
if (dec->tags) {
for (l = dec->tags; l; l = l->next) {
str = l->data;
} else {
printf("None.\n");
}
+#endif
printf("Annotation classes:\n");
if (dec->annotations) {
for (l = dec->annotations; l; l = l->next) {