+ if (discard >= PACKET_SIZE / 4) {
+ discard -= PACKET_SIZE / 4;
+ continue;
+ }
+
+ len = PACKET_SIZE - discard * 4;
+ buf_offset = discard * 4;
+ discard = 0;
+
+ /* Check if we've read all the samples */
+ if (samples_read + len / 4 >= valid_samples)
+ len = (valid_samples - samples_read) * 4;
+ if (!len)
+ break;
+
+ if (samples_read < trigger_offset &&
+ samples_read + len / 4 > trigger_offset) {
+ /* Send out samples remaining before trigger */
+ packet.type = SR_DF_LOGIC;
+ packet.payload = &logic;
+ logic.length = (trigger_offset - samples_read) * 4;
+ logic.unitsize = 4;
+ logic.data = buf + buf_offset;
+ sr_session_send(cb_data, &packet);
+ len -= logic.length;
+ samples_read += logic.length / 4;
+ buf_offset += logic.length;
+ }
+
+ if (samples_read == trigger_offset) {
+ /* Send out trigger */
+ packet.type = SR_DF_TRIGGER;
+ packet.payload = NULL;
+ sr_session_send(cb_data, &packet);
+ }
+
+ /* Send out data (or data after trigger) */