]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/rigol-ds/protocol.c
rigol-ds: Get correct samplerate for Memory and Segmented sources
[libsigrok.git] / src / hardware / rigol-ds / protocol.c
index 3ea0cea8984a799b24cc47f00a4e31db1dc23e78..6d8abc1ee3a4f521a917fdfe6ee206c85f482ade 100644 (file)
@@ -666,8 +666,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
                                return TRUE;
                        if (len == -1) {
                                sr_err("Error while reading block header, aborting capture.");
-                               packet.type = SR_DF_FRAME_END;
-                               sr_session_send(sdi, &packet);
+                               std_session_send_df_frame_end(sdi);
                                sr_dev_acquisition_stop(sdi);
                                return TRUE;
                        }
@@ -699,8 +698,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
 
        if (len == -1) {
                sr_err("Error while reading block data, aborting capture.");
-               packet.type = SR_DF_FRAME_END;
-               sr_session_send(sdi, &packet);
+               std_session_send_df_frame_end(sdi);
                sr_dev_acquisition_stop(sdi);
                return TRUE;
        }
@@ -758,13 +756,8 @@ 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);
                }
-               /* 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);
-                       sr_dev_acquisition_stop(sdi);
-                       return TRUE;
                }
                devc->num_block_read = 0;
        } else {
@@ -796,10 +789,9 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
                rigol_ds_channel_start(sdi);
        } else {
                /* Done with this frame. */
-               packet.type = SR_DF_FRAME_END;
-               sr_session_send(sdi, &packet);
+               std_session_send_df_frame_end(sdi);
 
-               if (++devc->num_frames == devc->limit_frames) {
+               if (++devc->num_frames == devc->limit_frames || devc->data_source == DATA_SOURCE_MEMORY) {
                        /* Last frame, stop capture. */
                        sr_dev_acquisition_stop(sdi);
                } else {
@@ -809,8 +801,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
                        rigol_ds_capture_start(sdi);
 
                        /* Start of next frame. */
-                       packet.type = SR_DF_FRAME_BEGIN;
-                       sr_session_send(sdi, &packet);
+                       std_session_send_df_frame_begin(sdi);
                }
        }