- if (id == SR_CONF_SAMPLERATE) {
- cur_samplerate = *(const uint64_t *)value;
- sr_dbg("%s: setting samplerate to %" PRIu64, __func__,
- cur_samplerate);
- ret = SR_OK;
- } else if (id == SR_CONF_LIMIT_SAMPLES) {
- limit_msec = 0;
- limit_samples = *(const uint64_t *)value;
- sr_dbg("%s: setting limit_samples to %" PRIu64, __func__,
- limit_samples);
- ret = SR_OK;
- } else if (id == SR_CONF_LIMIT_MSEC) {
- limit_msec = *(const uint64_t *)value;
- limit_samples = 0;
- sr_dbg("%s: setting limit_msec to %" PRIu64, __func__,
- limit_msec);
- ret = SR_OK;
- } else if (id == SR_CONF_PATTERN_MODE) {
- stropt = value;
- ret = SR_OK;
- if (!strcmp(stropt, "sigrok")) {
- default_pattern = PATTERN_SIGROK;
- } else if (!strcmp(stropt, "random")) {
- default_pattern = PATTERN_RANDOM;
- } else if (!strcmp(stropt, "incremental")) {
- default_pattern = PATTERN_INC;
- } else if (!strcmp(stropt, "all-low")) {
- default_pattern = PATTERN_ALL_LOW;
- } else if (!strcmp(stropt, "all-high")) {
- default_pattern = PATTERN_ALL_HIGH;
- } else {
- ret = SR_ERR;
- }
- sr_dbg("%s: setting pattern to %d", __func__, default_pattern);
- } else {
- ret = SR_ERR;
+ if (sdi->status != SR_ST_ACTIVE)
+ return SR_ERR_DEV_CLOSED;
+
+ ret = SR_OK;
+ switch (id) {
+ case SR_CONF_SAMPLERATE:
+ devc->cur_samplerate = g_variant_get_uint64(data);
+ sr_dbg("Setting samplerate to %" PRIu64, devc->cur_samplerate);
+ break;
+ case SR_CONF_LIMIT_SAMPLES:
+ devc->limit_msec = 0;
+ devc->limit_samples = g_variant_get_uint64(data);
+ sr_dbg("Setting sample limit to %" PRIu64, devc->limit_samples);
+ break;
+ case SR_CONF_LIMIT_MSEC:
+ devc->limit_msec = g_variant_get_uint64(data);
+ devc->limit_samples = 0;
+ sr_dbg("Setting time limit to %" PRIu64"ms", devc->limit_msec);
+ break;
+ case SR_CONF_PATTERN_MODE:
+ if (!probe_group)
+ return SR_ERR_PROBE_GROUP;
+ stropt = g_variant_get_string(data, NULL);
+ probe = probe_group->probes->data;
+ pattern = -1;
+ if (probe->type == SR_PROBE_LOGIC) {
+ for (i = 0; i < ARRAY_SIZE(logic_pattern_str); i++) {
+ if (!strcmp(stropt, logic_pattern_str[i])) {
+ pattern = i;
+ break;
+ }
+ }
+ if (pattern == -1)
+ return SR_ERR_ARG;
+ devc->logic_pattern = pattern;
+
+ /* Might as well do this now, these are static. */
+ if (pattern == PATTERN_ALL_LOW)
+ memset(devc->logic_data, 0x00, LOGIC_BUFSIZE);
+ else if (pattern == PATTERN_ALL_HIGH)
+ memset(devc->logic_data, 0xff, LOGIC_BUFSIZE);
+ sr_dbg("Setting logic pattern to %s",
+ logic_pattern_str[pattern]);
+ } else if (probe->type == SR_PROBE_ANALOG) {
+ for (i = 0; i < ARRAY_SIZE(analog_pattern_str); i++) {
+ if (!strcmp(stropt, analog_pattern_str[i])) {
+ pattern = i;
+ break;
+ }
+ }
+ if (pattern == -1)
+ return SR_ERR_ARG;
+ sr_dbg("Setting analog pattern for probe group %s to %s",
+ probe_group->name,
+ analog_pattern_str[pattern]);
+ ag = probe_group->priv;
+ ag->pattern = pattern;
+ } else
+ return SR_ERR_BUG;
+ break;
+ default:
+ ret = SR_ERR_NA;