struct sr_scpi_dev_inst *scpi;
struct dev_context *devc;
struct sr_datafeed_packet packet;
- struct sr_datafeed_analog_old analog;
+ struct sr_datafeed_analog analog;
+ struct sr_analog_encoding encoding;
+ struct sr_analog_meaning meaning;
+ struct sr_analog_spec spec;
struct sr_datafeed_logic logic;
double vdiv, offset;
int len, i, vref;
else
for (i = 0; i < len; i++)
devc->data[i] = (128 - devc->buffer[i]) * vdiv - offset;
- analog.channels = g_slist_append(NULL, ch);
+ sr_analog_init(&analog, &encoding, &meaning, &spec, 0);
+ analog.meaning->channels = g_slist_append(NULL, ch);
analog.num_samples = len;
analog.data = devc->data;
- analog.mq = SR_MQ_VOLTAGE;
- analog.unit = SR_UNIT_VOLT;
- analog.mqflags = 0;
- packet.type = SR_DF_ANALOG_OLD;
+ analog.meaning->mq = SR_MQ_VOLTAGE;
+ analog.meaning->unit = SR_UNIT_VOLT;
+ analog.meaning->mqflags = 0;
+ packet.type = SR_DF_ANALOG;
packet.payload = &analog;
sr_session_send(sdi, &packet);
- g_slist_free(analog.channels);
+ g_slist_free(analog.meaning->channels);
} else {
logic.length = len;
// TODO: For the MSO1000Z series, we need a way to express that
return SR_ERR;
sr_dbg("Current timebase %g", devc->timebase);
- /* Vertical gain. */
+ /* Probe attenuation. */
for (i = 0; i < devc->model->analog_channels; i++) {
- cmd = g_strdup_printf(":CHAN%d:SCAL?", i + 1);
- res = sr_scpi_get_float(sdi->conn, cmd, &devc->vdiv[i]);
+ cmd = g_strdup_printf(":CHAN%d:PROB?", i + 1);
+ res = sr_scpi_get_float(sdi->conn, cmd, &devc->attenuation[i]);
g_free(cmd);
if (res != SR_OK)
return SR_ERR;
}
- sr_dbg("Current vertical gain:");
+ sr_dbg("Current probe attenuation:");
for (i = 0; i < devc->model->analog_channels; i++)
- sr_dbg("CH%d %g", i + 1, devc->vdiv[i]);
+ sr_dbg("CH%d %g", i + 1, devc->attenuation[i]);
- /* Vertical offset. */
- for (i = 0; i < devc->model->analog_channels; i++) {
- cmd = g_strdup_printf(":CHAN%d:OFFS?", i + 1);
- res = sr_scpi_get_float(sdi->conn, cmd, &devc->vert_offset[i]);
- g_free(cmd);
- if (res != SR_OK)
- return SR_ERR;
- }
- sr_dbg("Current vertical offset:");
- for (i = 0; i < devc->model->analog_channels; i++)
- sr_dbg("CH%d %g", i + 1, devc->vert_offset[i]);
+ /* Vertical gain and offset. */
+ if (rigol_ds_get_dev_cfg_vertical(sdi) != SR_OK)
+ return SR_ERR;
/* Coupling. */
for (i = 0; i < devc->model->analog_channels; i++) {
return SR_OK;
}
+
+SR_PRIV int rigol_ds_get_dev_cfg_vertical(const struct sr_dev_inst *sdi)
+{
+ struct dev_context *devc;
+ char *cmd;
+ unsigned int i;
+ int res;
+
+ devc = sdi->priv;
+
+ /* Vertical gain. */
+ for (i = 0; i < devc->model->analog_channels; i++) {
+ cmd = g_strdup_printf(":CHAN%d:SCAL?", i + 1);
+ res = sr_scpi_get_float(sdi->conn, cmd, &devc->vdiv[i]);
+ g_free(cmd);
+ if (res != SR_OK)
+ return SR_ERR;
+ }
+ sr_dbg("Current vertical gain:");
+ for (i = 0; i < devc->model->analog_channels; i++)
+ sr_dbg("CH%d %g", i + 1, devc->vdiv[i]);
+
+ /* Vertical offset. */
+ for (i = 0; i < devc->model->analog_channels; i++) {
+ cmd = g_strdup_printf(":CHAN%d:OFFS?", i + 1);
+ res = sr_scpi_get_float(sdi->conn, cmd, &devc->vert_offset[i]);
+ g_free(cmd);
+ if (res != SR_OK)
+ return SR_ERR;
+ }
+ sr_dbg("Current vertical offset:");
+ for (i = 0; i < devc->model->analog_channels; i++)
+ sr_dbg("CH%d %g", i + 1, devc->vert_offset[i]);
+
+ return SR_OK;
+}