+ if (devc->trigger_stage != 0) {
+ for (i = 0; i < sending_now; i++) {
+ if (devc->trigger_edge == 0) {
+ if ((*(buf + i) | devc->trigger_mask) ==
+ (devc->trigger_value | devc->trigger_mask)) {
+ devc->trigger_stage = 0;
+ break;
+ }
+ } else {
+ cur_sample = *(buf + i);
+ if (((last_sample & devc->trigger_edge) ==
+ (~devc->trigger_value & devc->trigger_edge)) &&
+ ((cur_sample | devc->trigger_mask) ==
+ (devc->trigger_value | devc->trigger_mask)) &&
+ ((cur_sample & devc->trigger_edge) ==
+ (devc->trigger_value & devc->trigger_edge))) {
+ devc->trigger_stage = 0;
+ break;
+ }
+ last_sample = cur_sample;
+ }
+ }
+ if (devc->trigger_stage == 0) {
+ struct ds_trigger_pos demo_trigger_pos;
+ demo_trigger_pos.real_pos = i;
+ packet.type = SR_DF_TRIGGER;
+ packet.payload = &demo_trigger_pos;
+ sr_session_send(sdi, &packet);
+ }
+ }
+
+ if (devc->trigger_stage == 0){
+ samples_to_send -= sending_now;
+ if (sdi->mode == LOGIC) {
+ packet.type = SR_DF_LOGIC;
+ packet.payload = &logic;
+ logic.length = sending_now * (NUM_PROBES >> 3);
+ logic.unitsize = (NUM_PROBES >> 3);
+ logic.data = buf;
+ } else if (sdi->mode == ANALOG) {
+ packet.type = SR_DF_ANALOG;
+ packet.payload = &analog;
+ analog.probes = sdi->probes;
+ analog.num_samples = sending_now;
+ analog.mq = SR_MQ_VOLTAGE;
+ analog.unit = SR_UNIT_VOLT;
+ analog.mqflags = SR_MQFLAG_AC;
+ analog.data = buf;
+ }
+
+ sr_session_send(sdi, &packet);
+ if (sdi->mode == LOGIC)
+ devc->samples_counter += sending_now;
+ else if (sdi->mode == ANALOG)
+ devc->samples_counter = (devc->samples_counter + sending_now) % devc->limit_samples;
+ } else {
+ break;
+ }