serial_transmit(&piob);
}
+static SegmentNum waggle_settle_seg;
+static int waggle_settle_feat;
+
static void waggle_settle_check(void) {
- SEG_IV;
- int feat;
-
- FOR_SEG {
- if (seg->movposcomb<0) continue;
- for (feat=0; feat < seg->i->n_movfeats; feat++) {
- const MovFeatInfo *feati= &seg->i->movfeats[feat];
- if (feati->kind != mfk_relay) continue;
- assert(feati->posns==2);
- waggle.f.ready= 0;
- waggle_do(&waggle, feati, (seg->movposcomb / feati->weight) & 1);
- return;
+ for (;;) {
+ if (waggle_settle_seg >= info_nsegments) return;
+
+ Segment *seg= &segments[waggle_settle_seg];
+ if (waggle_settle_feat >= seg->i->n_movfeats) {
+ waggle_settle_seg++; waggle_settle_feat=0; continue;
+ }
+
+ const MovFeatInfo *feati= &seg->i->movfeats[waggle_settle_feat];
+ if (feati->kind != mfk_relay) {
+ waggle_settle_feat++; continue;
}
+
+ waggle.f.ready= 0;
+ waggle_do(&waggle, feati, (seg->movposcomb / feati->weight) & 1);
+ waggle_settle_feat++;
}
}
}
void waggle_settle(void) {
+ waggle_settle_seg= 0;
+ waggle_settle_feat= 0;
waggle.f.ready= 1;
waggle_settle_check();
}