- logic_generator(sdi, sending_now * devc->logic_unitsize);
- 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;
- sr_session_send(sdi, &packet);
+ if (devc->num_logic_probes > 0) {
+ sending_now = MIN(samples_to_send,
+ LOGIC_BUFSIZE / devc->logic_unitsize);
+ logic_generator(sdi, sending_now * devc->logic_unitsize);
+ 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;
+ sr_session_send(sdi, &packet);
+ }
+
+ /* Analog, one probe at a time */
+ if (devc->num_analog_probes > 0) {
+ sending_now = 0;
+ for (l = devc->analog_probe_groups; l; l = l->next) {
+ pg = l->data;
+ ag = pg->priv;
+ packet.type = SR_DF_ANALOG;
+ packet.payload = &ag->packet;
+ analog_samples = MIN(samples_to_send, ag->num_samples);
+ /* Whichever probe group gets there first. */
+ sending_now = MAX(sending_now, analog_samples);
+ ag->packet.num_samples = analog_samples;
+ sr_session_send(sdi, &packet);
+ }
+ }
+
+ samples_to_send -= sending_now;