tweak NUM_NOISE_INPUTS, etc.
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 20 Sep 2012 04:12:17 +0000 (13:12 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 20 Sep 2012 04:12:17 +0000 (13:12 +0900)
ChangeLog
src/main.c
src/random.c

index dffec33..bf9ffa0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,4 @@
-2012-09-19  Niibe Yutaka  <gniibe@fsij.org>
+2012-09-20  Niibe Yutaka  <gniibe@fsij.org>
 
        * src/main.c (main): Call neug_select.
        * src/random.c (neug_select): New.
index 0f3c104..eab0328 100644 (file)
@@ -204,6 +204,8 @@ static const struct Descriptor string_descs[] = {
 
 uint32_t bDeviceState = UNCONNECTED; /* USB device status */
 
+#define NEUG_WAIT_FOR_TX_READY 1
+static uint8_t neug_state;
 
 static void
 neug_device_reset (void)
@@ -274,20 +276,29 @@ static void neug_ctrl_write_finish (uint8_t req, uint8_t req_no,
 
   if (type_rcp == (VENDOR_REQUEST | DEVICE_RECIPIENT)
       && USB_SETUP_SET (req) && len == 0)
-    if (req_no == USB_FSIJ_EXEC)
-      {
-       if (fsij_device_state != FSIJ_DEVICE_EXITED)
-         return;
-
-       (void)value; (void)index;
-       usb_lld_prepare_shutdown (); /* No further USB communication */
-       fsij_device_state = FSIJ_DEVICE_EXEC_REQUESTED;
-      }
-    else if (req_no == USB_NEUG_EXIT)
-      {
-       chEvtSignalFlagsI (main_thread, 1);
-       chSchReadyI (main_thread);
-      }
+    {
+      if (req_no == USB_FSIJ_EXEC)
+       {
+         if (fsij_device_state != FSIJ_DEVICE_EXITED)
+           return;
+
+         (void)value; (void)index;
+         usb_lld_prepare_shutdown (); /* No further USB communication */
+         fsij_device_state = FSIJ_DEVICE_EXEC_REQUESTED;
+       }
+      else if (req_no == USB_NEUG_EXIT)
+       {
+         if (neug_state == NEUG_WAIT_FOR_TX_READY)
+           {
+             chSysLockFromIsr ();
+             main_thread->p_u.rdymsg = RDY_OK;
+             chSchReadyI (main_thread);
+             chSysUnlockFromIsr ();
+           }
+         else
+           chEvtSignalFlagsI (main_thread, 1);
+       }
+    }
 }
 
 struct line_coding
@@ -334,8 +345,20 @@ vcom_port_data_setup (uint8_t req, uint8_t req_no, uint16_t value)
                connected++;
            }
          else
-           /* Close call */
-           connected++;
+           {
+             if (connected)
+               {
+                 /* Close call */
+                 connected = 0;
+                 if (neug_state == NEUG_WAIT_FOR_TX_READY)
+                   {
+                     chSysLockFromIsr ();
+                     main_thread->p_u.rdymsg = RDY_OK;
+                     chSchReadyI (main_thread);
+                     chSysUnlockFromIsr ();
+                   }
+               }
+           }
 
          return USB_SUCCESS;
        }
@@ -601,8 +624,9 @@ EP3_OUT_Callback (void)
 \f
 static WORKING_AREA(wa_led, 64);
 
-#define LED_ONESHOT_SHORT ((eventmask_t)1)
-#define LED_ONESHOT_LONG  ((eventmask_t)2)
+#define LED_ONESHOT_SHORT      ((eventmask_t)1)
+#define LED_TWOSHOTS           ((eventmask_t)2)
+#define LED_ONESHOT_LONG       ((eventmask_t)4)
 static Thread *led_thread;
 
 /*
@@ -626,6 +650,14 @@ static msg_t led_blinker (void *arg)
       set_led (1);
       if (m == LED_ONESHOT_SHORT)
        chThdSleep (MS2ST (100));
+      else if (m == LED_TWOSHOTS)
+       {
+         chThdSleep (MS2ST (50));
+         set_led (0);
+         chThdSleep (MS2ST (50));
+         set_led (1);
+         chThdSleep (MS2ST (50));
+       }
       else
        chThdSleep (MS2ST (250));
       set_led (0);
@@ -664,7 +696,6 @@ main (int argc, char **argv)
   while (1)
     {
       unsigned int count = 0;
-      uint32_t bitrate_saved;
 
       if (fsij_device_state != FSIJ_DEVICE_RUNNING)
        break;
@@ -683,30 +714,25 @@ main (int argc, char **argv)
        }
 
     waiting_connection:
-      bitrate_saved = line_coding.bitrate;
-      while ((connected & 1) == 0)
+      while (connected == 0)
        {
          if (fsij_device_state != FSIJ_DEVICE_RUNNING)
            break;
 
          neug_flush ();
-         chEvtSignalFlags (led_thread, LED_ONESHOT_LONG);
-         chEvtWaitOneTimeout (ALL_EVENTS, MS2ST (2500));
+         chEvtSignalFlags (led_thread, LED_TWOSHOTS);
+         chEvtWaitOneTimeout (ALL_EVENTS, MS2ST (5000));
        }
 
       /* The connection opened.  */
       count = 0;
-      if (bitrate_saved != line_coding.bitrate)
-       neug_select (line_coding.bitrate != 115200);
+      neug_select (line_coding.bitrate != 115200);
 
       while (1)
        {
          if (fsij_device_state != FSIJ_DEVICE_RUNNING)
            break;
 
-         if ((connected & 1) == 0)
-           goto waiting_connection;
-
          if (bDeviceState != CONFIGURED)
            break;
 
@@ -719,8 +745,18 @@ main (int argc, char **argv)
          neug_flush ();
 
          chSysLock ();
-         usb_lld_tx_enable (ENDP1, RANDOM_BYTES_LENGTH);
-         chSchGoSleepS (THD_STATE_SUSPENDED);
+         if (connected == 0)
+           {
+             chSysUnlock();
+             goto waiting_connection;
+           }
+         else
+           {
+             neug_state = NEUG_WAIT_FOR_TX_READY;
+             usb_lld_tx_enable (ENDP1, RANDOM_BYTES_LENGTH);
+             chSchGoSleepS (THD_STATE_SUSPENDED);
+             neug_state = 0;
+           }
          chSysUnlock();
 
          count++;
index c9ed4fe..4193923 100644 (file)
@@ -112,13 +112,13 @@ static uint32_t sha256_output[SHA256_DIGEST_SIZE/sizeof (uint32_t)];
  * For us, cryptographic primitive is SHA-256 and its blocksize is 512-bit
  * (64-byte), N >= 128.
  *
- * We chose N=149, since we love prime number, and we have "additional bits"
+ * We chose N=131, since we love prime number, and we have "additional bits"
  * of 32-byte for last block (feedback from previous output of SHA-256).
  *
- * This corresponds to min-entropy >= 3.44.
+ * This corresponds to min-entropy >= 3.91.
  *
  */
-#define NUM_NOISE_INPUTS 149
+#define NUM_NOISE_INPUTS 131
 
 static const uint8_t hash_df_initial_string[5] = {
   1,          /* counter = 1 */
@@ -173,9 +173,9 @@ static void noise_source_error (uint32_t err)
 }
 
 
-/* Cuttoff = 10, when min-entropy = 3.5, W= 2^-30 */
-/* ceiling of (1+30/3.5) */
-#define REPITITION_COUNT_TEST_CUTOFF 10
+/* Cuttoff = 9, when min-entropy = 4.0, W= 2^-30 */
+/* ceiling of (1+30/4.0) */
+#define REPITITION_COUNT_TEST_CUTOFF 9
 
 static uint8_t rct_a;
 static uint8_t rct_b;
@@ -195,9 +195,9 @@ static void repetition_count_test (uint8_t sample)
     }
 }
 
-/* Cuttoff = 16, when min-entropy = 3.5, W= 2^-30 */
-/* With R, qbinom(1-2^-30,64,2^-3.5) */
-#define ADAPTIVE_PROPORTION_64_TEST_CUTOFF 23
+/* Cuttoff = 20, when min-entropy = 4.0, W= 2^-30 */
+/* With R, qbinom(1-2^-30,64,2^-4.0) */
+#define ADAPTIVE_PROPORTION_64_TEST_CUTOFF 20
 
 static uint8_t ap64t_a;
 static uint8_t ap64t_b;
@@ -223,9 +223,9 @@ static void adaptive_proportion_64_test (uint8_t sample)
     }
 }
 
-/* Cuttoff = 476, when min-entropy = 3.5, W= 2^-30 */
-/* With R, qbinom(1-2^-30,4096,2^-3.5) */
-#define ADAPTIVE_PROPORTION_4096_TEST_CUTOFF 476
+/* Cuttoff = 354, when min-entropy = 4.0, W= 2^-30 */
+/* With R, qbinom(1-2^-30,4096,2^-4.0) */
+#define ADAPTIVE_PROPORTION_4096_TEST_CUTOFF 354
 
 static uint8_t ap4096t_a;
 static uint16_t ap4096t_b;