X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Frigol-ds1xx2%2Fprotocol.c;h=95ff3263dedde5ba48e96c04469f0ce41f66136e;hb=a789b61087f156f3f5b38de6c56c7744fde2c3eb;hp=d95716d7a59e3abef63dc487e7f40501adeac3b9;hpb=169dbe8577c2f7570f61799a064f95b39b3b6fe3;p=libsigrok.git diff --git a/hardware/rigol-ds1xx2/protocol.c b/hardware/rigol-ds1xx2/protocol.c index d95716d7..95ff3263 100644 --- a/hardware/rigol-ds1xx2/protocol.c +++ b/hardware/rigol-ds1xx2/protocol.c @@ -47,12 +47,12 @@ SR_PRIV int rigol_ds1xx2_receive(int fd, int revents, void *cb_data) return TRUE; if (revents == G_IO_IN) { - len = read(fd, buf, WAVEFORM_SIZE); + len = read(fd, buf, WAVEFORM_SIZE - devc->num_frame_bytes); sr_dbg("Received %d bytes.", len); if (len == -1) return TRUE; - if (devc->num_frame_samples == 0) { + if (devc->num_frame_bytes == 0) { /* Start of a new frame. */ packet.type = SR_DF_FRAME_BEGIN; sr_session_send(sdi, &packet); @@ -75,13 +75,17 @@ SR_PRIV int rigol_ds1xx2_receive(int fd, int revents, void *cb_data) sr_session_send(cb_data, &packet); g_slist_free(analog.probes); - if (len != WAVEFORM_SIZE) + devc->num_frame_bytes += len; + + if (devc->num_frame_bytes != WAVEFORM_SIZE) { /* Don't have the whole frame yet. */ return TRUE; + } /* End of the frame. */ packet.type = SR_DF_FRAME_END; sr_session_send(sdi, &packet); + devc->num_frame_bytes = 0; if (devc->channel_frame == devc->enabled_probes->data && devc->enabled_probes->next != NULL) {