]> sigrok.org Git - libsigrok.git/commitdiff
saleae logic: fix triggers after style changes
authorBert Vermeulen <redacted>
Sun, 18 Jul 2010 19:57:27 +0000 (21:57 +0200)
committerBert Vermeulen <redacted>
Sun, 18 Jul 2010 19:57:27 +0000 (21:57 +0200)
hardware/saleae-logic/saleae-logic.c

index 07491fa085427889112e05bcb12b5e22a9773959..75bf6c13889267e041aa234b4f47b4b86a595e62 100644 (file)
@@ -536,59 +536,6 @@ static int receive_data(int fd, int revents, void *user_data)
        return TRUE;
 }
 
-static void trigger_helper(int i, unsigned char *cur_buf,
-                          struct datafeed_packet *packet, void *user_data,
-                          int *trigger_offset)
-{
-       if ((cur_buf[i] & trigger_mask[trigger_stage])
-           == trigger_value[trigger_stage]) {
-               /* Match on this trigger stage. */
-               trigger_buffer[trigger_stage] = cur_buf[i];
-               trigger_stage++;
-               if (trigger_stage == NUM_TRIGGER_STAGES
-                   || trigger_mask[trigger_stage] == 0) {
-                       /* Match on all trigger stages, we're done. */
-                       *trigger_offset = i + 1;
-
-                       /*
-                        * TODO: Send pre-trigger buffer to session bus.
-                        * Tell the frontend we hit the trigger here.
-                        */
-                       packet->type = DF_TRIGGER;
-                       packet->length = 0;
-                       session_bus(user_data, packet);
-
-                       /*
-                        * Send the samples that triggered it, since we're
-                        * skipping past them.
-                        */
-                       packet->type = DF_LOGIC8;
-                       packet->length = trigger_stage;
-                       packet->payload = trigger_buffer;
-                       session_bus(user_data, packet);
-                       // break; // FIXME???
-
-                       trigger_stage = TRIGGER_FIRED;
-               }
-               return;
-       }
-
-       /*
-        * We had a match before, but not in the next sample. However, we may
-        * have a match on this stage in the next bit -- trigger on 0001 will
-        * fail on seeing 00001, so we need to go back to stage 0 -- but at
-        * the next sample from the one that matched originally, which the
-        * counter increment at the end of the loop takes care of.
-        */
-       if (trigger_stage > 0) {
-               i -= trigger_stage;
-               if (i < -1)
-                       i = -1; /* Oops, went back past this buffer. */
-               /* Reset trigger stage. */
-               trigger_stage = 0;
-       }
-}
-
 void receive_transfer(struct libusb_transfer *transfer)
 {
        static int num_samples = 0;
@@ -646,8 +593,54 @@ void receive_transfer(struct libusb_transfer *transfer)
        trigger_offset = 0;
        if (trigger_stage >= 0) {
                for (i = 0; i < cur_buflen; i++) {
-                       trigger_helper(i, cur_buf, &packet, user_data,
-                                      &trigger_offset);
+
+                       if ((cur_buf[i] & trigger_mask[trigger_stage]) == trigger_value[trigger_stage]) {
+                               /* Match on this trigger stage. */
+                               trigger_buffer[trigger_stage] = cur_buf[i];
+                               trigger_stage++;
+                               if (trigger_stage == NUM_TRIGGER_STAGES || trigger_mask[trigger_stage] == 0) {
+                                       /* Match on all trigger stages, we're done. */
+                                       trigger_offset = i + 1;
+
+                                       /*
+                                        * TODO: Send pre-trigger buffer to session bus.
+                                        * Tell the frontend we hit the trigger here.
+                                        */
+                                       packet.type = DF_TRIGGER;
+                                       packet.length = 0;
+                                       session_bus(user_data, &packet);
+
+                                       /*
+                                        * Send the samples that triggered it, since we're
+                                        * skipping past them.
+                                        */
+                                       packet.type = DF_LOGIC8;
+                                       packet.length = trigger_stage;
+                                       packet.payload = trigger_buffer;
+                                       session_bus(user_data, &packet);
+
+                                       trigger_stage = TRIGGER_FIRED;
+                                       break;
+                               }
+                               return;
+                       }
+
+                       /*
+                        * We had a match before, but not in the next sample. However, we may
+                        * have a match on this stage in the next bit -- trigger on 0001 will
+                        * fail on seeing 00001, so we need to go back to stage 0 -- but at
+                        * the next sample from the one that matched originally, which the
+                        * counter increment at the end of the loop takes care of.
+                        */
+                       if (trigger_stage > 0) {
+                               i -= trigger_stage;
+                               if (i < -1)
+                                       i = -1; /* Oops, went back past this buffer. */
+                               /* Reset trigger stage. */
+                               trigger_stage = 0;
+                       }
+
+
                }
        }