max counts
authorNIIBE Yutaka <gniibe@fsij.org>
Fri, 12 Oct 2012 01:36:38 +0000 (10:36 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Fri, 12 Oct 2012 01:36:38 +0000 (10:36 +0900)
ChangeLog
THANKS
src/main.c
src/neug.h
src/random.c
tool/neug_check.py

index 1c52772..00f4937 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2012-10-12  Niibe Yutaka  <gniibe@fsij.org>
+
+       * src/main.c (neug_setup): Support neug_*_max.
+
+       * src/random.c (ep_process): Enable health tests for
+       NEUG_MODE_RAW_DATA.
+       (rng): Don't use the result on error for NEUG_MODE_RAW_DATA.
+       (neug_rc_max, neug_p64_max, neug_p4k_max): New.
+       (repetition_count_test, adaptive_proportion_64_test)
+       (adaptive_proportion_4096_test): Record maximum counts.
+       (noise_source_cnt_max_reset): New.
+       (neug_mode_select): Call noise_source_cnt_max_reset on mode
+       change.
+
+       * tool/neug_check.py (get_info): Rename.
+       (main): Support max counts.
+
 2012-10-11  Niibe Yutaka  <gniibe@fsij.org>
 
        * src/random.c (EP_ROUND_RAW_DATA_INPUTS): Set it to 32.
diff --git a/THANKS b/THANKS
index fde2d6c..3846c4f 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -9,3 +9,4 @@ Hironobu SUZUKI         hironobu@h2np.net
 Jan Suhr               jan@suhr.info
 Kaz Kojima             kkojima@rr.iij4u.or.jp
 Shane Coughlan         scoughlan@openinventionnetwork.com
+Seth Schoen            seth@eff.org
index a085085..75a2fda 100644 (file)
@@ -397,6 +397,14 @@ neug_setup (uint8_t req, uint8_t req_no,
                usb_lld_set_data_to_send (&neug_err_cnt_p64, sizeof (uint16_t));
              else if (index == 4)
                usb_lld_set_data_to_send (&neug_err_cnt_p4k, sizeof (uint16_t));
+             else if (index == 5)
+               usb_lld_set_data_to_send (&neug_rc_max, sizeof (uint16_t));
+             else if (index == 6)
+               usb_lld_set_data_to_send (&neug_p64_max, sizeof (uint16_t));
+             else if (index == 7)
+               usb_lld_set_data_to_send (&neug_p4k_max, sizeof (uint16_t));
+             else
+               return USB_UNSUPPORT;
 
              return USB_SUCCESS;
            }
index dd22619..4b54b93 100644 (file)
@@ -12,6 +12,9 @@ extern uint16_t neug_err_cnt;
 extern uint16_t neug_err_cnt_rc;
 extern uint16_t neug_err_cnt_p64;
 extern uint16_t neug_err_cnt_p4k;
+extern uint16_t neug_rc_max;
+extern uint16_t neug_p64_max;
+extern uint16_t neug_p4k_max;
 
 void neug_init (uint32_t *buf, uint8_t size);
 void neug_prng_reseed (void);
index a1786f2..b0a2916 100644 (file)
@@ -158,7 +158,7 @@ static int ep_process (int mode)
   else if (ep_round == EP_ROUND_RAW_DATA)
     {
       for (i = 0; i < EP_ROUND_RAW_DATA_INPUTS / 4; i++)
-       ep_fill_wbuf (i, 0, 0);
+       ep_fill_wbuf (i, 0, 1);
 
       ep_init (mode);
       return EP_ROUND_RAW_DATA_INPUTS / 4;
@@ -220,6 +220,25 @@ uint16_t neug_err_cnt_rc;
 uint16_t neug_err_cnt_p64;
 uint16_t neug_err_cnt_p4k;
 
+uint16_t neug_rc_max;
+uint16_t neug_p64_max;
+uint16_t neug_p4k_max;
+
+#include "board.h"
+
+static void noise_source_cnt_max_reset (void)
+{
+  neug_err_cnt = neug_err_cnt_rc = neug_err_cnt_p64 = neug_err_cnt_p4k = 0;
+  neug_rc_max = neug_p64_max = neug_p4k_max = 0;
+
+#if defined(BOARD_FST_01)
+  palClearPad (IOPORT1, 2);
+#endif
+#if defined(BOARD_STBEE_MINI)
+  palSetPad (IOPORT1, GPIOA_LED2);
+#endif
+}
+
 static void noise_source_error_reset (void)
 {
   neug_err_state = 0;
@@ -237,7 +256,6 @@ static void noise_source_error (uint32_t err)
   if ((err & ADAPTIVE_PROPORTION_4096))
     neug_err_cnt_p4k++;
 
-#include "board.h"
 #if defined(BOARD_FST_01)
   palSetPad (IOPORT1, 2);
 #endif
@@ -270,6 +288,8 @@ static void repetition_count_test (uint8_t sample)
       rct_b++;
       if (rct_b >= REPITITION_COUNT_TEST_CUTOFF)
        noise_source_error (REPETITION_COUNT);
+      if (rct_b > neug_rc_max)
+       neug_rc_max = rct_b;
    }
   else
     {
@@ -302,6 +322,8 @@ static void adaptive_proportion_64_test (uint8_t sample)
          ap64t_b++;
          if (ap64t_b > ADAPTIVE_PROPORTION_64_TEST_CUTOFF)
            noise_source_error (ADAPTIVE_PROPORTION_64);
+         if (ap64t_b > neug_p64_max)
+           neug_p64_max = ap64t_b;
        }
     }
 }
@@ -330,6 +352,8 @@ static void adaptive_proportion_4096_test (uint8_t sample)
          ap4096t_b++;
          if (ap4096t_b > ADAPTIVE_PROPORTION_4096_TEST_CUTOFF)
            noise_source_error (ADAPTIVE_PROPORTION_4096);
+         if (ap4096t_b > neug_p4k_max)
+           neug_p4k_max = ap4096t_b;
        }
     }
 }
@@ -419,7 +443,7 @@ static msg_t rng (void *arg)
          const uint32_t *vp;
 
          if (neug_err_state != 0
-             && neug_mode == NEUG_MODE_CONDITIONED)
+             && (mode == NEUG_MODE_CONDITIONED || mode == NEUG_MODE_RAW_DATA))
            {
              /* Don't use the result and do it again.  */
              noise_source_error_reset ();
@@ -556,17 +580,16 @@ neug_fini (void)
 void
 neug_mode_select (uint8_t mode)
 {
+  if (neug_mode == mode)
+    return;
+
   neug_wait_full ();
+
   while (rng_thread->p_state != THD_STATE_WTCOND)
     chThdSleep (MS2ST (1));
 
-  if (neug_mode != mode)
-    ep_init (mode);
-
-#if defined(BOARD_FST_01)
-  palClearPad (IOPORT1, 2);
-#endif
-
+  ep_init (mode);
+  noise_source_cnt_max_reset ();
   neug_mode = mode;
   neug_flush ();
 }
index 5b13263..46047e2 100755 (executable)
@@ -70,7 +70,7 @@ class neug(object):
         else:
             return "Raw data (ADC samples)"
 
-    def get_err_cnt(self, index):
+    def get_info(self, index):
         err = self.__devhandle.controlMsg(requestType = 0xc0, request = 254,
                                           value = 0, index = index, buffer = 2,
                                           timeout = 1000)
@@ -105,10 +105,13 @@ def main():
         raise ValueError, "No NeuG Device Present"
     print
     print "mode: %s" % com.get_mode()
-    print "Repeat errors: %d" % com.get_err_cnt(2)
-    print "PP 64  errors: %d" % com.get_err_cnt(3)
-    print "PP 4k  errors: %d" % com.get_err_cnt(4)
-    print "Total  errors: %d" % com.get_err_cnt(1)
+    print "Repeat errors: %d" % com.get_info(2)
+    print "PP 64  errors: %d" % com.get_info(3)
+    print "PP 4k  errors: %d" % com.get_info(4)
+    print "Total  errors: %d" % com.get_info(1)
+    print "Repeat max counts: %d" % com.get_info(5)
+    print "PP 64  max counts: %d" % com.get_info(6)
+    print "PP 4k  max counts: %d" % com.get_info(7)
     return 0