]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/beaglelogic/protocol.c
std_init(): Drop check if pass in driver is non-NULL
[libsigrok.git] / src / hardware / beaglelogic / protocol.c
index 05dcccf1ffac25bc0a1f0e3784e150f94bd68c7e..ce6c2ae9881067137eb06ea399d715f63a1d41e8 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "protocol.h"
-#include <errno.h>
+#include <config.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#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,18 +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, NULL);
+                                       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;
                        }
@@ -99,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, LOG_PREFIX);
                sr_session_source_remove_pollfd(sdi->session, &devc->pollfd);
        }