change feedback
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 27 Sep 2012 07:08:24 +0000 (16:08 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 27 Sep 2012 07:08:54 +0000 (16:08 +0900)
ChangeLog
README
src/main.c
src/neug.h
src/random.c

index 6216ce2..f2685e2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2012-09-27  Niibe Yutaka  <gniibe@fsij.org>
 
+       * src/random.c (ep_process): Feedback "additiona input" is now
+       half of previous output.
+
        * boards/STBEE_MINI/board.h (NEUG_NON_DEFAULT_ADC_CHANNEL): New.
        (VAL_GPIOACRL): Use PA1 and PA2 for NeuG's analog input.
        (VAL_GPIOCCRL): Revert previous change.
diff --git a/README b/README
index 9928c24..d6f5281 100644 (file)
--- a/README
+++ b/README
@@ -186,7 +186,7 @@ Here is a figure of the circuit.
       |     |    by        |
       |     |  SHA-256     |
       |     |              |
-      |     |              |   256
+      |     |              |   128
       |     |              |<---/---+
       |     +--------------+        |
       |                             |
@@ -210,7 +210,7 @@ environment.
 
 By 556 samplings of two channels, we can get 1112-bit, as we can get
 two bits (LSB of IN10 and LSB of IN11) from one sampling.  We put this
-1112-bit and previous output of 256-bit to conditioning component.
+1112-bit and half of previous output to conditioning component.
 
 Conditioning component is implemented by Hash_df function by SHA-256.
 Since the noise source is not "white", signal is whiten by this
index 88f67c2..321d068 100644 (file)
@@ -340,7 +340,7 @@ vcom_port_data_setup (uint8_t req, uint8_t req_no, uint16_t value)
        {
          if (value != 0)
            {
-             if ((connected & 1) == 0)
+             if (connected == 0)
                /* It's Open call */
                connected++;
            }
@@ -669,6 +669,8 @@ static msg_t led_blinker (void *arg)
 #define RANDOM_BYTES_LENGTH 32
 static uint32_t random_word[RANDOM_BYTES_LENGTH/sizeof (uint32_t)];
 
+extern void adc2_init (void);
+
 /*
  * Entry point.
  *
@@ -682,17 +684,18 @@ main (int argc, char **argv)
 
   fill_serial_no_by_unique_id ();
 
-  halInit();
-  chSysInit();
+  halInit ();
+  adc2_init ();
+  chSysInit ();
 
   main_thread = chThdSelf ();
 
-  usb_lld_init (config_desc.Descriptor[7]);
-
   chThdCreateStatic (wa_led, sizeof (wa_led), NORMALPRIO, led_blinker, NULL);
 
   neug_init (random_word, RANDOM_BYTES_LENGTH/sizeof (uint32_t));
 
+  usb_lld_init (config_desc.Descriptor[7]);
+
   while (1)
     {
       unsigned int count = 0;
@@ -700,14 +703,15 @@ main (int argc, char **argv)
       if (fsij_device_state != FSIJ_DEVICE_RUNNING)
        break;
 
-      connected = 0;
       while (count < NEUG_PRE_LOOP || bDeviceState != CONFIGURED)
        {
          if (fsij_device_state != FSIJ_DEVICE_RUNNING)
            break;
 
-         (void)neug_get (NEUG_KICK_FILLING);
-         if ((count & 0x000f) == 0)
+         neug_wait_full ();
+         neug_flush ();
+
+         if ((count & 0x0007) == 0)
            chEvtSignalFlags (led_thread, LED_ONESHOT_SHORT);
          chEvtWaitOneTimeout (ALL_EVENTS, MS2ST (25));
          count++;
index c4ea3bd..75b2d24 100644 (file)
@@ -1,7 +1,7 @@
 #define NEUG_NO_KICK      0
 #define NEUG_KICK_FILLING 1
 
-#define NEUG_PRE_LOOP 64
+#define NEUG_PRE_LOOP 32
 
 void neug_init (uint32_t *buf, uint8_t size);
 void neug_prng_reseed (void);
index 48b0720..63b2d3f 100644 (file)
@@ -37,8 +37,9 @@ static Thread *rng_thread;
 /* Depth of the conversion buffer, channels are sampled one time each.*/
 #define ADC_GRP1_BUF_DEPTH      256
 
-static void adc2_start (void)
+void adc2_init (void)
 {
+  chSysLock ();
   rccEnableAPB2 (RCC_APB2ENR_ADC2EN, FALSE);
   ADC2->CR1 = 0;
   ADC2->CR2 = ADC_CR2_ADON;
@@ -49,6 +50,15 @@ static void adc2_start (void)
   while ((ADC2->CR2 & ADC_CR2_CAL) != 0)
     ;
   ADC2->CR2 = 0;
+  rccDisableAPB2 (RCC_APB2ENR_ADC2EN, FALSE);
+  chSysUnlock ();
+}
+
+static void adc2_start (void)
+{
+  chSysLock ();
+
+  rccEnableAPB2 (RCC_APB2ENR_ADC2EN, FALSE);
 
   ADC2->CR1 = ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0;
   ADC2->CR2 = ADC_CR2_DMA | ADC_CR2_CONT | ADC_CR2_ADON;
@@ -68,6 +78,8 @@ static void adc2_start (void)
 #endif
 
   ADC2->CR2 |= ADC_CR2_EXTTRIG | ADC_CR2_SWSTART;
+
+  chSysUnlock ();
 }
 
 static void adc2_stop (void)
@@ -295,7 +307,7 @@ static int ep_process (int raw)
        }
       else
        {
-         n = SHA256_DIGEST_SIZE;
+         n = SHA256_DIGEST_SIZE / 2;
          ep_init (0);
          memcpy (((uint8_t *)sha256_ctx_data.wbuf)+EP_ROUND_2_INPUTS,
                  sha256_output, n);