SR_CONF_TRIGGER_SOURCE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_TRIGGER_SLOPE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_HORIZ_TRIGGERPOS | SR_CONF_SET,
- SR_CONF_NUM_TIMEBASE | SR_CONF_GET,
+ SR_CONF_NUM_HDIV | SR_CONF_GET,
SR_CONF_SAMPLERATE | SR_CONF_GET,
+ SR_CONF_DATA_SOURCE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
};
static const uint32_t analog_devopts[] = {
SR_CONF_NUM_VDIV | SR_CONF_GET,
SR_CONF_VDIV | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_COUPLING | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
- SR_CONF_DATA_SOURCE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
};
static const uint64_t timebases[][2] = {
[DS1000] = {VENDOR(RIGOL), "DS1000", PROTOCOL_V2, FORMAT_IEEE488_2,
{50, 1}, {2, 1000}, 12, 600, 1048576},
[DS2000] = {VENDOR(RIGOL), "DS2000", PROTOCOL_V3, FORMAT_IEEE488_2,
- {500, 1}, {2, 1000}, 14, 1400, 14000},
+ {500, 1}, {500, 1000000}, 14, 1400, 14000},
[DS2000A] = {VENDOR(RIGOL), "DS2000A", PROTOCOL_V3, FORMAT_IEEE488_2,
{1000, 1}, {500, 1000000}, 14, 1400, 14000},
[DSO1000] = {VENDOR(AGILENT), "DSO1000", PROTOCOL_V3, FORMAT_IEEE488_2,
g_free(devc->trigger_source);
g_free(devc->trigger_slope);
g_free(devc->analog_groups);
- g_free(devc->digital_group);
g_free(devc);
}
for (i = 0; i < model->analog_channels; i++) {
if (!(channel_name = g_strdup_printf("CH%d", i + 1)))
return NULL;
- ch = sr_channel_new(i, SR_CHANNEL_ANALOG, TRUE, channel_name);
- sdi->channels = g_slist_append(sdi->channels, ch);
+ ch = sr_channel_new(sdi, i, SR_CHANNEL_ANALOG, TRUE, channel_name);
devc->analog_groups[i] = g_malloc0(sizeof(struct sr_channel_group));
}
if (devc->model->has_digital) {
- devc->digital_group = g_malloc0(sizeof(struct sr_channel_group*));
+ devc->digital_group = g_malloc0(sizeof(struct sr_channel_group));
for (i = 0; i < ARRAY_SIZE(devc->digital_channels); i++) {
if (!(channel_name = g_strdup_printf("D%d", i)))
return NULL;
- ch = sr_channel_new(i, SR_CHANNEL_LOGIC, TRUE, channel_name);
+ ch = sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE, channel_name);
g_free(channel_name);
- sdi->channels = g_slist_append(sdi->channels, ch);
devc->digital_group->channels = g_slist_append(
devc->digital_group->channels, ch);
}
}
for (i = 0; i < NUM_VDIV; i++)
- if (!memcmp(&devc->model->series->min_vdiv, &vdivs[i], sizeof(uint64_t[2])))
+ if (!memcmp(&devc->model->series->min_vdiv, &vdivs[i], sizeof(uint64_t[2]))) {
devc->vdivs = &vdivs[i];
+ devc->num_vdivs = NUM_VDIV - i;
+ }
if (!(devc->buffer = g_try_malloc(ACQ_BUFFER_SIZE)))
return NULL;
}
switch (key) {
- case SR_CONF_NUM_TIMEBASE:
+ case SR_CONF_NUM_HDIV:
*data = g_variant_new_int32(devc->model->series->num_horizontal_divs);
break;
case SR_CONF_NUM_VDIV:
- *data = g_variant_new_int32(NUM_VDIV);
+ *data = g_variant_new_int32(devc->num_vdivs);
break;
case SR_CONF_DATA_SOURCE:
if (devc->data_source == DATA_SOURCE_LIVE)
return SR_ERR_ARG;
/* If a channel group is specified, it must be a valid one. */
- if (cg) {
- for (i = 0; i < devc->model->analog_channels; i++)
- if (cg == devc->analog_groups[i])
- break;
- if (i >= devc->model->analog_channels) {
- sr_err("Invalid channel group specified.");
- return SR_ERR;
- }
+ if (cg && !g_slist_find(sdi->channel_groups, cg)) {
+ sr_err("Invalid channel group specified.");
+ return SR_ERR;
}
switch (key) {
return SR_ERR_CHANNEL_GROUP;
}
g_variant_builder_init(&gvb, G_VARIANT_TYPE_ARRAY);
- for (i = 0; i < NUM_VDIV; i++) {
+ for (i = 0; i < devc->num_vdivs; i++) {
rational[0] = g_variant_new_uint64(devc->vdivs[i][0]);
rational[1] = g_variant_new_uint64(devc->vdivs[i][1]);
tuple = g_variant_new_tuple(rational, 2);