rigol-ds: Unify partial read handling.
This commit is contained in:
parent
f80a0bf232
commit
48460c6f3e
|
@ -491,6 +491,8 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
|
||||||
if (len == -1)
|
if (len == -1)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
devc->num_block_read += len;
|
||||||
|
|
||||||
if (devc->num_frame_samples == 0) {
|
if (devc->num_frame_samples == 0) {
|
||||||
/* Start of a new frame. */
|
/* Start of a new frame. */
|
||||||
packet.type = SR_DF_FRAME_BEGIN;
|
packet.type = SR_DF_FRAME_BEGIN;
|
||||||
|
@ -498,8 +500,6 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (probe->type == SR_PROBE_ANALOG) {
|
if (probe->type == SR_PROBE_ANALOG) {
|
||||||
if (devc->model->protocol == PROTOCOL_IEEE488_2)
|
|
||||||
devc->num_block_read += len;
|
|
||||||
vref = devc->vert_reference[probe->index];
|
vref = devc->vert_reference[probe->index];
|
||||||
vdiv = devc->vdiv[probe->index] / 25.6;
|
vdiv = devc->vdiv[probe->index] / 25.6;
|
||||||
offset = devc->vert_offset[probe->index];
|
offset = devc->vert_offset[probe->index];
|
||||||
|
@ -519,27 +519,6 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
|
||||||
packet.payload = &analog;
|
packet.payload = &analog;
|
||||||
sr_session_send(cb_data, &packet);
|
sr_session_send(cb_data, &packet);
|
||||||
g_slist_free(analog.probes);
|
g_slist_free(analog.probes);
|
||||||
|
|
||||||
if (devc->model->protocol == PROTOCOL_IEEE488_2) {
|
|
||||||
if (devc->num_block_read == devc->num_block_bytes) {
|
|
||||||
sr_dbg("Block has been completed");
|
|
||||||
/* Discard the terminating linefeed and prepare for
|
|
||||||
possible next block */
|
|
||||||
sr_scpi_read(scpi, (char *)devc->buffer, 1);
|
|
||||||
devc->num_block_bytes = 0;
|
|
||||||
if (devc->data_source != DATA_SOURCE_LIVE)
|
|
||||||
rigol_ds_set_wait_event(devc, WAIT_BLOCK);
|
|
||||||
} else
|
|
||||||
sr_dbg("%d of %d block bytes read", devc->num_block_read, devc->num_block_bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
devc->num_frame_samples += len;
|
|
||||||
|
|
||||||
if (devc->num_frame_samples < devc->analog_frame_size)
|
|
||||||
/* Don't have the whole frame yet. */
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
sr_dbg("Frame completed, %d samples", devc->num_frame_samples);
|
|
||||||
} else {
|
} else {
|
||||||
logic.length = len - 10;
|
logic.length = len - 10;
|
||||||
logic.unitsize = 2;
|
logic.unitsize = 2;
|
||||||
|
@ -547,13 +526,32 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data)
|
||||||
packet.type = SR_DF_LOGIC;
|
packet.type = SR_DF_LOGIC;
|
||||||
packet.payload = &logic;
|
packet.payload = &logic;
|
||||||
sr_session_send(cb_data, &packet);
|
sr_session_send(cb_data, &packet);
|
||||||
|
|
||||||
if (len != DIGITAL_WAVEFORM_SIZE)
|
|
||||||
/* Don't have the whole frame yet. */
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (devc->num_block_read == devc->num_block_bytes) {
|
||||||
|
sr_dbg("Block has been completed");
|
||||||
|
if (devc->model->protocol == PROTOCOL_IEEE488_2) {
|
||||||
|
/* Discard the terminating linefeed and prepare for
|
||||||
|
possible next block */
|
||||||
|
sr_scpi_read(scpi, (char *)devc->buffer, 1);
|
||||||
|
devc->num_block_bytes = 0;
|
||||||
|
if (devc->data_source != DATA_SOURCE_LIVE)
|
||||||
|
rigol_ds_set_wait_event(devc, WAIT_BLOCK);
|
||||||
|
}
|
||||||
|
devc->num_block_read = 0;
|
||||||
|
} else {
|
||||||
|
sr_dbg("%d of %d block bytes read", devc->num_block_read, devc->num_block_bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
devc->num_frame_samples += len;
|
||||||
|
|
||||||
|
if (devc->num_frame_samples < (probe->type == SR_PROBE_ANALOG ?
|
||||||
|
devc->analog_frame_size : DIGITAL_WAVEFORM_SIZE))
|
||||||
|
/* Don't have the whole frame yet. */
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
/* End of the frame. */
|
/* End of the frame. */
|
||||||
|
sr_dbg("Frame completed, %d samples", devc->num_frame_samples);
|
||||||
packet.type = SR_DF_FRAME_END;
|
packet.type = SR_DF_FRAME_END;
|
||||||
sr_session_send(sdi, &packet);
|
sr_session_send(sdi, &packet);
|
||||||
if (devc->model->protocol == PROTOCOL_IEEE488_2) {
|
if (devc->model->protocol == PROTOCOL_IEEE488_2) {
|
||||||
|
|
Loading…
Reference in New Issue