X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhardware%2Fbeaglelogic%2Fprotocol.c;h=8f3ce26593175b50aff04570dc481a633684071b;hb=1aba65727015e298f213c851dbc8d2d57d27d37b;hp=1c01b64f758405955e5715d3b9a4a67998b51c9d;hpb=155b680da482cea2381becb73c51cfb838bff31e;p=libsigrok.git
diff --git a/src/hardware/beaglelogic/protocol.c b/src/hardware/beaglelogic/protocol.c
index 1c01b64f..8f3ce265 100644
--- a/src/hardware/beaglelogic/protocol.c
+++ b/src/hardware/beaglelogic/protocol.c
@@ -17,11 +17,11 @@
* along with this program. If not, see .
*/
-#include "protocol.h"
-#include
+#include
#include
#include
#include
+#include "protocol.h"
/* Define data packet size independent of packet (bufunitsize bytes) size
* from the BeagleLogic kernel module */
@@ -40,6 +40,7 @@ SR_PRIV int beaglelogic_receive_data(int fd, int revents, void *cb_data)
struct sr_datafeed_logic logic;
int trigger_offset;
+ int pre_trigger_samples;
uint32_t packetsize;
uint64_t bytes_remaining;
@@ -63,20 +64,19 @@ SR_PRIV int beaglelogic_receive_data(int fd, int revents, void *cb_data)
if (devc->trigger_fired) {
/* Send the incoming transfer to the session bus. */
- sr_session_send(devc->cb_data, &packet);
+ sr_session_send(sdi, &packet);
} else {
/* Check for trigger */
trigger_offset = soft_trigger_logic_check(devc->stl,
- logic.data,
- packetsize);
-
+ logic.data, packetsize, &pre_trigger_samples);
if (trigger_offset > -1) {
+ devc->bytes_read += pre_trigger_samples * logic.unitsize;
trigger_offset *= logic.unitsize;
logic.length = MIN(packetsize - trigger_offset,
bytes_remaining);
logic.data += trigger_offset;
- sr_session_send(devc->cb_data, &packet);
+ sr_session_send(sdi, &packet);
devc->trigger_fired = TRUE;
}
@@ -101,10 +101,7 @@ SR_PRIV int beaglelogic_receive_data(int fd, int revents, void *cb_data)
if (devc->bytes_read >= devc->limit_samples * logic.unitsize ||
packetsize == 0) {
/* Send EOA Packet, stop polling */
- packet.type = SR_DF_END;
- packet.payload = NULL;
- sr_session_send(devc->cb_data, &packet);
-
+ std_session_send_df_end(sdi);
sr_session_source_remove_pollfd(sdi->session, &devc->pollfd);
}