]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/rigol-ds/protocol.c
rigol-ds: Fix an issue causing only one channel to be acquired.
[libsigrok.git] / src / hardware / rigol-ds / protocol.c
index 39462c280ba1830ec208ac5390cebaa1b64e9621..1344c8b420542398286f09b34f4c7345e15cd5ee 100644 (file)
@@ -221,7 +221,7 @@ static int rigol_ds_check_stop(const struct sr_dev_inst *sdi)
                return SR_OK;
 
        if (ch->type == SR_CHANNEL_LOGIC) {
-               if (rigol_ds_config_set(sdi->conn, ":WAV:SOUR LA") != SR_OK)
+               if (rigol_ds_config_set(sdi, ":WAV:SOUR LA") != SR_OK)
                        return SR_ERR;
        } else {
                if (rigol_ds_config_set(sdi, ":WAV:SOUR CHAN%d",
@@ -440,7 +440,7 @@ SR_PRIV int rigol_ds_channel_start(const struct sr_dev_inst *sdi)
                break;
        case PROTOCOL_V3:
                if (ch->type == SR_CHANNEL_LOGIC) {
-                       if (rigol_ds_config_set(sdi->conn, ":WAV:SOUR LA") != SR_OK)
+                       if (rigol_ds_config_set(sdi, ":WAV:SOUR LA") != SR_OK)
                                return SR_ERR;
                } else {
                        if (rigol_ds_config_set(sdi, ":WAV:SOUR CHAN%d",
@@ -631,10 +631,10 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
                                /* Still reading the header. */
                                return TRUE;
                        if (len == -1) {
-                               sr_err("Read error, aborting capture.");
+                               sr_err("Error while reading block header, aborting capture.");
                                packet.type = SR_DF_FRAME_END;
                                sr_session_send(sdi, &packet);
-                               sdi->driver->dev_acquisition_stop(sdi);
+                               sr_dev_acquisition_stop(sdi);
                                return TRUE;
                        }
                        /* At slow timebases in live capture the DS2072
@@ -664,10 +664,10 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
        len = sr_scpi_read_data(scpi, (char *)devc->buffer, len);
 
        if (len == -1) {
-               sr_err("Read error, aborting capture.");
+               sr_err("Error while reading block data, aborting capture.");
                packet.type = SR_DF_FRAME_END;
                sr_session_send(sdi, &packet);
-               sdi->driver->dev_acquisition_stop(sdi);
+               sr_dev_acquisition_stop(sdi);
                return TRUE;
        }
 
@@ -723,11 +723,12 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
                        if (devc->data_source != DATA_SOURCE_LIVE)
                                rigol_ds_set_wait_event(devc, WAIT_BLOCK);
                }
-               if (!sr_scpi_read_complete(scpi)) {
+               /* End acquisition when data for all channels is acquired. */
+               if (!sr_scpi_read_complete(scpi) && !devc->channel_entry->next) {
                        sr_err("Read should have been completed");
                        packet.type = SR_DF_FRAME_END;
                        sr_session_send(sdi, &packet);
-                       sdi->driver->dev_acquisition_stop(sdi);
+                       sr_dev_acquisition_stop(sdi);
                        return TRUE;
                }
                devc->num_block_read = 0;
@@ -765,7 +766,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
 
                if (++devc->num_frames == devc->limit_frames) {
                        /* Last frame, stop capture. */
-                       sdi->driver->dev_acquisition_stop(sdi);
+                       sr_dev_acquisition_stop(sdi);
                } else {
                        /* Get the next frame, starting with the first channel. */
                        devc->channel_entry = devc->enabled_channels;