Fix LED oneshot
authorNIIBE Yutaka <gniibe@fsij.org>
Fri, 22 Jul 2011 06:31:22 +0000 (15:31 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Fri, 22 Jul 2011 06:31:22 +0000 (15:31 +0900)
ChangeLog
src/main.c

index 1922b7a..fa31bfb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2011-07-22  NIIBE Yutaka  <gniibe@fsij.org>
+
+       * src/main.c (main): Fix one shot logic.
+
 2011-07-21  NIIBE Yutaka  <gniibe@fsij.org>
 
        * src/neug.h (NEUG_PRE_LOOP): New.
index ad8b809..c2a3a25 100644 (file)
@@ -353,6 +353,9 @@ static WORKING_AREA(wa_led, 64);
 #define LED_ONESHOT ((eventmask_t)1)
 static Thread *led_thread;
 
+/*
+ * LED blinker: When notified, let LED emit for 100ms.
+ */
 static msg_t led_blinker (void *arg)
 {
   (void)arg;
@@ -408,18 +411,16 @@ main (int argc, char **argv)
       uint32_t v;
       const uint8_t *s = (const uint8_t *)&v;
 
-      while (SDU1.config->usbp->state != USB_ACTIVE)
+      while (count++ < NEUG_PRE_LOOP
+            || SDU1.config->usbp->state != USB_ACTIVE)
        {
          v = neug_get (NEUG_KICK_FILLING);
-         if ((count & 15) == 0)
+         if ((count & 0x000f) == 0)
            chEvtSignalFlags (led_thread, LED_ONESHOT);
          chThdSleep (MS2ST (25));
          count++;
        }
 
-      while (count++ < NEUG_PRE_LOOP)
-       v = neug_get (NEUG_KICK_FILLING);
-
       count = 0;
 
       while (1)
@@ -431,7 +432,7 @@ main (int argc, char **argv)
 
          v = neug_get (NEUG_KICK_FILLING);
 
-         if ((count & 0x800) == 0)
+         if ((count & 0x07ff) == 0)
            chEvtSignalFlags (led_thread, LED_ONESHOT);
          /*
           * Ignore input, just in case /dev/ttyACM0 echos our output