- packet.type = SR_DF_LOGIC;
- packet.payload = &logic;
- logic.length = sending_now * devc->logic_unitsize;
- logic.unitsize = devc->logic_unitsize;
- logic.data = devc->logic_data;
- logic_fixup_feed(devc, &logic);
- sr_session_send(sdi, &packet);
- logic_done += sending_now;
+ /* Trigger */
+ if (!devc->trigger_fired) {
+ trigger_offset = soft_trigger_logic_check(devc->stl,
+ devc->logic_data, sending_now * devc->logic_unitsize,
+ &pre_trigger_samples);
+ if (trigger_offset > -1)
+ devc->trigger_fired = TRUE;
+ logic_done = pre_trigger_samples;
+ } else
+ trigger_offset = 0;
+
+ /* Remaining data */
+ if (devc->trigger_fired && trigger_offset < (unsigned int)sending_now) {
+ packet.type = SR_DF_LOGIC;
+ packet.payload = &logic;
+ logic.length = (sending_now - trigger_offset) * devc->logic_unitsize;
+ logic.unitsize = devc->logic_unitsize;
+ logic.data = devc->logic_data + trigger_offset * devc->logic_unitsize;
+ logic_fixup_feed(devc, &logic);
+ sr_session_send(sdi, &packet);
+ logic_done += sending_now - trigger_offset;
+ }