LED blink change
authorNIIBE Yutaka <gniibe@fsij.org>
Wed, 18 May 2016 12:57:34 +0000 (21:57 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Wed, 18 May 2016 12:57:34 +0000 (21:57 +0900)
src/gnuk.h
src/gnuk.ld.in
src/main.c
src/usb-icc.c
src/usb_ctrl.c

index 9cf95e8..1247a82 100644 (file)
@@ -424,8 +424,7 @@ extern const uint8_t gnuk_string_serial[];
 #define LED_START_COMMAND        8
 #define LED_FINISH_COMMAND      16
 #define LED_FATAL               32
-#define LED_USB_RESET           64
-#define LED_GNUK_EXEC          128
+#define LED_GNUK_EXEC           64
 void led_blink (int spec);
 
 #if defined(PINPAD_SUPPORT)
index 1ec4033..9ec8617 100644 (file)
@@ -2,7 +2,7 @@
  * ST32F103 memory setup.
  */
 __main_stack_size__      = 0x0080;      /* Exception handlers     */
-__process0_stack_size__  = 0x0180;      /* main */
+__process0_stack_size__  = 0x0120;      /* main */
 __process1_stack_size__  = 0x0160;      /* ccid */
 __process2_stack_size__  = 0x0160;      /* rng */
 __process3_stack_size__  = 0x1640;      /* gpg */
index 2580ce0..1cf97a7 100644 (file)
@@ -41,8 +41,6 @@
 /*
  * main thread does 1-bit LED display output
  */
-#define MAIN_TIMEOUT_INTERVAL  (5000*1000)
-
 #define LED_TIMEOUT_INTERVAL   (75*1000)
 #define LED_TIMEOUT_ZERO       (25*1000)
 #define LED_TIMEOUT_ONE                (100*1000)
@@ -122,59 +120,38 @@ static void display_fatal_code (void)
 
 static uint8_t led_inverted;
 
-static eventmask_t emit_led (int on_time, int off_time)
+static void emit_led (int on_time, int off_time)
 {
-  eventmask_t m;
-
   set_led (!led_inverted);
-  m = eventflag_wait_timeout (&led_event, on_time);
+  chopstx_usec_wait (on_time);
   set_led (led_inverted);
-  if (m) return m;
-  if ((m = eventflag_wait_timeout (&led_event, off_time)))
-    return m;
-  return 0;
+  chopstx_usec_wait (off_time);
 }
 
-static eventmask_t display_status_code (void)
+static void display_status_code (void)
 {
-  eventmask_t m;
   enum icc_state icc_state = *icc_state_p;
 
   if (icc_state == ICC_STATE_START)
-    return emit_led (LED_TIMEOUT_ONE, LED_TIMEOUT_STOP);
+    emit_led (LED_TIMEOUT_ONE, LED_TIMEOUT_STOP);
   else
-    /* OpenPGP card thread  running */
+    /* OpenPGP card thread is running */
     {
-      if ((m = emit_led ((auth_status & AC_ADMIN_AUTHORIZED)?
-                         LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO,
-                         LED_TIMEOUT_INTERVAL)))
-       return m;
-      if ((m = emit_led ((auth_status & AC_OTHER_AUTHORIZED)?
-                         LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO,
-                         LED_TIMEOUT_INTERVAL)))
-       return m;
-      if ((m = emit_led ((auth_status & AC_PSO_CDS_AUTHORIZED)?
-                         LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO,
-                         LED_TIMEOUT_INTERVAL)))
-       return m;
+      emit_led ((auth_status & AC_ADMIN_AUTHORIZED)?
+               LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
+      emit_led ((auth_status & AC_OTHER_AUTHORIZED)?
+               LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
+      emit_led ((auth_status & AC_PSO_CDS_AUTHORIZED)?
+               LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
 
       if (icc_state == ICC_STATE_WAIT)
-       {
-         if ((m = eventflag_wait_timeout (&led_event, LED_TIMEOUT_STOP * 2)))
-           return m;
-       }
+       chopstx_usec_wait (LED_TIMEOUT_STOP * 2);
       else
        {
-         if ((m = eventflag_wait_timeout (&led_event, LED_TIMEOUT_INTERVAL)))
-           return m;
-
-         if ((m = emit_led (icc_state == ICC_STATE_RECEIVE?
-                             LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO,
-                             LED_TIMEOUT_STOP)))
-           return m;
+         chopstx_usec_wait (LED_TIMEOUT_INTERVAL);
+         emit_led (icc_state == ICC_STATE_RECEIVE?
+                   LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP);
        }
-
-      return 0;
     }
 }
 
@@ -221,7 +198,6 @@ extern uint32_t bDeviceState;
 int
 main (int argc, char *argv[])
 {
-  unsigned int count = 0;
   uint32_t entry;
   chopstx_t ccid_thd;
 
@@ -267,56 +243,37 @@ main (int argc, char *argv[])
     {
       eventmask_t m;
 
-      m = eventflag_wait_timeout (&led_event, MAIN_TIMEOUT_INTERVAL);
-    got_it:
-      count++;
+      m = eventflag_wait (&led_event);
       switch (m)
        {
        case LED_ONESHOT:
-         if ((m = emit_led (100*1000, MAIN_TIMEOUT_INTERVAL))) goto got_it;
+         emit_led (100*1000, LED_TIMEOUT_STOP);
          break;
        case LED_TWOSHOTS:
-         if ((m = emit_led (50*1000, 50*1000))) goto got_it;
-         if ((m = emit_led (50*1000, MAIN_TIMEOUT_INTERVAL))) goto got_it;
+         emit_led (50*1000, 50*1000);
+         emit_led (50*1000, LED_TIMEOUT_STOP);
          break;
        case LED_SHOW_STATUS:
-         if ((count & 0x07) != 0) continue; /* Display once for eight times */
-         if ((m = display_status_code ())) goto got_it;
+         display_status_code ();
          break;
        case LED_START_COMMAND:
          set_led (1);
          led_inverted = 1;
          break;
        case LED_FINISH_COMMAND:
-         m = eventflag_wait_timeout (&led_event, LED_TIMEOUT_STOP);
+         chopstx_usec_wait (LED_TIMEOUT_STOP);
          led_inverted = 0;
          set_led (0);
-         if (m)
-           goto got_it;
          break;
        case LED_FATAL:
          display_fatal_code ();
          break;
-       case LED_USB_RESET:
-         ccid_usb_reset ();
-         break;
        case LED_GNUK_EXEC:
          goto exec;
        default:
-         if ((m = emit_led (LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP)))
-           goto got_it;
+         emit_led (LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP);
          break;
        }
-
-#ifdef DEBUG_MORE
-      if (stdout.connected && (count % 10) == 0)
-       {
-         DEBUG_SHORT (count / 10);
-         _write ("\r\nThis is Gnuk on STM32F103.\r\n"
-                 "Testing USB driver.\n\n"
-                 "Hello world\r\n\r\n", 30+21+15);
-       }
-#endif
     }
 
  exec:
index f7d7cb7..b15ef87 100644 (file)
@@ -849,7 +849,6 @@ icc_send_status (struct ccid *c)
   c->epi->tx_done = 1;
   usb_lld_write (c->epi->ep_num, icc_reply, ICC_MSG_HEADER_SIZE);
 
-  led_blink (LED_SHOW_STATUS);
 #ifdef DEBUG_MORE
   DEBUG_INFO ("St\r\n");
 #endif
@@ -1331,12 +1330,12 @@ icc_handle_timeout (struct ccid *c)
     {
     case ICC_STATE_EXECUTE:
       icc_send_data_block_time_extension (c);
-      led_blink (LED_ONESHOT);
       break;
     default:
       break;
     }
 
+  led_blink (LED_SHOW_STATUS);
   return next_state;
 }
 
index 86ace5f..e558d3a 100644 (file)
@@ -210,7 +210,7 @@ usb_cb_device_reset (void)
     gnuk_setup_endpoints_for_interface (i, 1);
 
   bDeviceState = ATTACHED;
-  led_blink (LED_USB_RESET);   /* Notify the main.  */
+  ccid_usb_reset ();
 }
 
 #define USB_CCID_REQ_ABORT                     0x01