X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Frigol-ds%2Fprotocol.c;h=a533f12a1f12451d8acd609ccd407ab8bb0f9cf3;hb=76f712a73f3213a7ec0a38e38302cf2f04f48976;hp=1344c8b420542398286f09b34f4c7345e15cd5ee;hpb=ce97fc3f6a15b71575b9ef46d161b829d48d2e0a;p=libsigrok.git diff --git a/src/hardware/rigol-ds/protocol.c b/src/hardware/rigol-ds/protocol.c index 1344c8b4..a533f12a 100644 --- a/src/hardware/rigol-ds/protocol.c +++ b/src/hardware/rigol-ds/protocol.c @@ -337,8 +337,12 @@ SR_PRIV int rigol_ds_capture_start(const struct sr_dev_inst *sdi) if (!(devc = sdi->priv)) return SR_ERR; - sr_dbg("Starting data capture for frameset %" PRIu64 " of %" PRIu64, - devc->num_frames + 1, devc->limit_frames); + if (devc->limit_frames == 0) + sr_dbg("Starting data capture for frameset %" PRIu64, + devc->num_frames + 1); + else + sr_dbg("Starting data capture for frameset %" PRIu64 " of %" + PRIu64, devc->num_frames + 1, devc->limit_frames); switch (devc->model->series->protocol) { case PROTOCOL_V1: @@ -474,10 +478,20 @@ SR_PRIV int rigol_ds_channel_start(const struct sr_dev_inst *sdi) if (devc->model->series->protocol >= PROTOCOL_V3 && ch->type == SR_CHANNEL_ANALOG) { + /* Vertical increment. */ + if (sr_scpi_get_float(sdi->conn, ":WAV:YINC?", + &devc->vert_inc[ch->index]) != SR_OK) + return SR_ERR; + /* Vertical origin. */ + if (sr_scpi_get_float(sdi->conn, ":WAV:YOR?", + &devc->vert_origin[ch->index]) != SR_OK) + return SR_ERR; /* Vertical reference. */ if (sr_scpi_get_int(sdi->conn, ":WAV:YREF?", &devc->vert_reference[ch->index]) != SR_OK) return SR_ERR; + } else if (ch->type == SR_CHANNEL_ANALOG) { + devc->vert_inc[ch->index] = devc->vdiv[ch->index] / 25.6; } rigol_ds_set_wait_event(devc, WAIT_BLOCK); @@ -557,7 +571,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data) struct sr_analog_meaning meaning; struct sr_analog_spec spec; struct sr_datafeed_logic logic; - double vdiv, offset; + double vdiv, offset, origin; int len, i, vref; struct sr_channel *ch; gsize expected_data_bytes; @@ -677,11 +691,12 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data) if (ch->type == SR_CHANNEL_ANALOG) { vref = devc->vert_reference[ch->index]; - vdiv = devc->vdiv[ch->index] / 25.6; + vdiv = devc->vert_inc[ch->index]; + origin = devc->vert_origin[ch->index]; offset = devc->vert_offset[ch->index]; if (devc->model->series->protocol >= PROTOCOL_V3) for (i = 0; i < len; i++) - devc->data[i] = ((int)devc->buffer[i] - vref) * vdiv - offset; + devc->data[i] = ((int)devc->buffer[i] - vref - origin) * vdiv; else for (i = 0; i < len; i++) devc->data[i] = (128 - devc->buffer[i]) * vdiv - offset; @@ -868,7 +883,8 @@ SR_PRIV int rigol_ds_get_dev_cfg(const struct sr_dev_inst *sdi) sr_dbg("Current trigger source %s", devc->trigger_source); /* Horizontal trigger position. */ - if (sr_scpi_get_float(sdi->conn, ":TIM:OFFS?", &devc->horiz_triggerpos) != SR_OK) + if (sr_scpi_get_float(sdi->conn, devc->model->cmds[CMD_GET_HORIZ_TRIGGERPOS].str, + &devc->horiz_triggerpos) != SR_OK) return SR_ERR; sr_dbg("Current horizontal trigger position %g", devc->horiz_triggerpos);