if (strcasecmp(hw_info->manufacturer, "Rigol Technologies")) {
sr_scpi_hw_info_free(hw_info);
+ sr_scpi_close(scpi);
sr_scpi_free(scpi);
return SR_ERR_NA;
}
hw_info->manufacturer, hw_info->model,
hw_info->firmware_version))) {
sr_scpi_hw_info_free(hw_info);
+ sr_scpi_close(scpi);
sr_scpi_free(scpi);
return SR_ERR_NA;
}
sr_scpi_hw_info_free(hw_info);
+ sr_scpi_close(scpi);
sdi->conn = scpi;
struct dev_context *devc;
struct sr_probe *probe;
GSList *l;
- char cmd[256];
if (sdi->status != SR_ST_ACTIVE)
return SR_ERR_DEV_CLOSED;
scpi = sdi->conn;
devc = sdi->priv;
- if (devc->data_source == DATA_SOURCE_LIVE) {
- if (sr_scpi_send(sdi->conn, ":RUN") != SR_OK)
- return SR_ERR;
- } else if (devc->data_source == DATA_SOURCE_MEMORY) {
- if (devc->model->series != RIGOL_DS2000) {
- sr_err("Data source 'Memory' not supported for this device");
- return SR_ERR;
- }
- } else if (devc->data_source == DATA_SOURCE_SEGMENTED) {
- sr_err("Data source 'Segmented' not yet supported");
- return SR_ERR;
- }
-
for (l = sdi->probes; l; l = l->next) {
probe = l->data;
sr_dbg("handling probe %s", probe->name);
devc->enabled_analog_probes, probe);
if (probe->enabled != devc->analog_channels[probe->index]) {
/* Enabled channel is currently disabled, or vice versa. */
- sprintf(cmd, ":CHAN%d:DISP %s", probe->index + 1,
- probe->enabled ? "ON" : "OFF");
- if (sr_scpi_send(sdi->conn, cmd) != SR_OK)
+ if (set_cfg(sdi, ":CHAN%d:DISP %s", probe->index + 1,
+ probe->enabled ? "ON" : "OFF") != SR_OK)
return SR_ERR;
}
} else if (probe->type == SR_PROBE_LOGIC) {
devc->enabled_digital_probes, probe);
if (probe->enabled != devc->digital_channels[probe->index]) {
/* Enabled channel is currently disabled, or vice versa. */
- sprintf(cmd, ":DIG%d:TURN %s", probe->index,
- probe->enabled ? "ON" : "OFF");
- if (sr_scpi_send(sdi->conn, cmd) != SR_OK)
+ if (set_cfg(sdi, ":DIG%d:TURN %s", probe->index,
+ probe->enabled ? "ON" : "OFF") != SR_OK)
return SR_ERR;
}
}
}
+
if (!devc->enabled_analog_probes && !devc->enabled_digital_probes)
return SR_ERR;
+ if (devc->data_source == DATA_SOURCE_LIVE) {
+ if (set_cfg(sdi, ":RUN") != SR_OK)
+ return SR_ERR;
+ } else if (devc->data_source == DATA_SOURCE_MEMORY) {
+ if (devc->model->series != RIGOL_DS2000) {
+ sr_err("Data source 'Memory' not supported for this device");
+ return SR_ERR;
+ }
+ } else if (devc->data_source == DATA_SOURCE_SEGMENTED) {
+ sr_err("Data source 'Segmented' not yet supported");
+ return SR_ERR;
+ }
+
sr_scpi_source_add(scpi, G_IO_IN, 50, rigol_ds_receive, (void *)sdi);
/* Send header packet to the session bus. */
std_session_send_df_header(cb_data, LOG_PREFIX);
if (devc->model->protocol == PROTOCOL_LEGACY) {
+ devc->analog_frame_size = (devc->model->series == RIGOL_VS5000 ?
+ VS5000_ANALOG_LIVE_WAVEFORM_SIZE :
+ DS1000_ANALOG_LIVE_WAVEFORM_SIZE);
/* Fetch the first frame. */
- if (devc->enabled_analog_probes) {
- devc->analog_frame_size = DS1000_ANALOG_LIVE_WAVEFORM_SIZE;
- devc->channel_frame = devc->enabled_analog_probes->data;
- if (sr_scpi_send(sdi->conn, ":WAV:DATA? CHAN%d",
- devc->channel_frame->index + 1) != SR_OK)
- return SR_ERR;
- } else {
- devc->channel_frame = devc->enabled_digital_probes->data;
- if (sr_scpi_send(sdi->conn, ":WAV:DATA? DIG") != SR_OK)
- return SR_ERR;
- }
-
- devc->num_frame_bytes = 0;
+ if (devc->enabled_analog_probes)
+ devc->channel = devc->enabled_analog_probes->data;
+ else
+ devc->channel = devc->enabled_digital_probes->data;
+ if (rigol_ds_channel_start(sdi) != SR_OK)
+ return SR_ERR;
} else {
if (devc->enabled_analog_probes) {
if (devc->data_source == DATA_SOURCE_MEMORY)
/* Apparently for the DS2000 the memory
* depth can only be set in Running state -
* this matches the behaviour of the UI. */
- if (sr_scpi_send(sdi->conn, ":RUN") != SR_OK)
+ if (set_cfg(sdi, ":RUN") != SR_OK)
return SR_ERR;
- if (sr_scpi_send(sdi->conn, "ACQ:MDEP %d", devc->analog_frame_size) != SR_OK)
+ if (set_cfg(sdi, "ACQ:MDEP %d", devc->analog_frame_size) != SR_OK)
return SR_ERR;
- if (sr_scpi_send(sdi->conn, ":STOP") != SR_OK)
+ if (set_cfg(sdi, ":STOP") != SR_OK)
return SR_ERR;
} else
devc->analog_frame_size = DS2000_ANALOG_LIVE_WAVEFORM_SIZE;
- devc->channel_frame = devc->enabled_analog_probes->data;
+ devc->channel = devc->enabled_analog_probes->data;
if (rigol_ds_capture_start(sdi) != SR_OK)
return SR_ERR;
}