SR_CONF_SAMPLERATE,
SR_CONF_EXTERNAL_CLOCK,
SR_CONF_TRIGGER_TYPE,
+ SR_CONF_LIMIT_MSEC,
SR_CONF_LIMIT_SAMPLES,
};
for (i = num_probes; i > 0; --i) {
/* The LWLA series simply number probes from CH1 to CHxx. */
- g_ascii_formatd(name, sizeof name, "CH%.0f", i);
+ g_snprintf(name, sizeof(name), "CH%d", i);
probe = sr_probe_new(i - 1, SR_PROBE_LOGIC, TRUE, name);
list = g_slist_prepend(list, probe);
case SR_CONF_SAMPLERATE:
*data = g_variant_new_uint64(devc->samplerate);
break;
+ case SR_CONF_LIMIT_MSEC:
+ *data = g_variant_new_uint64(devc->limit_msec);
+ break;
case SR_CONF_LIMIT_SAMPLES:
*data = g_variant_new_uint64(devc->limit_samples);
break;
static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi,
const struct sr_probe_group *probe_group)
{
+ uint64_t value;
struct dev_context *devc;
- uint64_t rate;
(void)probe_group;
switch (key) {
case SR_CONF_SAMPLERATE:
- rate = g_variant_get_uint64(data);
- sr_info("Setting samplerate %" G_GUINT64_FORMAT, rate);
- if (rate > samplerates[0]
- || rate < samplerates[G_N_ELEMENTS(samplerates) - 1])
+ value = g_variant_get_uint64(data);
+ sr_info("Setting samplerate %" PRIu64, value);
+ if (value < samplerates[G_N_ELEMENTS(samplerates) - 1]
+ || value > samplerates[0])
return SR_ERR_SAMPLERATE;
- devc->samplerate = rate;
+ devc->samplerate = value;
+ break;
+ case SR_CONF_LIMIT_MSEC:
+ value = g_variant_get_uint64(data);
+ if (value > MAX_LIMIT_MSEC)
+ return SR_ERR_ARG;
+ devc->limit_msec = value;
break;
case SR_CONF_LIMIT_SAMPLES:
- devc->limit_samples = g_variant_get_uint64(data);
+ value = g_variant_get_uint64(data);
+ if (value > MAX_LIMIT_SAMPLES)
+ return SR_ERR_ARG;
+ devc->limit_samples = value;
break;
case SR_CONF_EXTERNAL_CLOCK:
if (g_variant_get_boolean(data)) {
devc->trigger_edge_mask = 0;
devc->trigger_values = 0;
- for (node = sdi->probes, probe_bit = 1;
- node != NULL;
- node = node->next, probe_bit <<= 1) {
-
- if (probe_bit >= ((uint64_t)1 << NUM_PROBES)) {
- sr_err("Channels over the limit of %d.", NUM_PROBES);
- return SR_ERR;
- }
+ for (node = sdi->probes; node != NULL; node = node->next) {
probe = node->data;
if (!probe || !probe->enabled)
continue;
+ if (probe->index >= NUM_PROBES) {
+ sr_err("Channel index %d out of range.", probe->index);
+ return SR_ERR_BUG;
+ }
+ probe_bit = (uint64_t)1 << probe->index;
+
/* Enable input channel for this probe. */
devc->channel_mask |= probe_bit;