X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;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); }