summaryrefslogtreecommitdiff
path: root/src/drivers/ao_trng_send.c
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2017-09-18 20:35:00 -0600
committerBdale Garbee <bdale@gag.com>2017-09-18 20:35:00 -0600
commitb12e982259817328e348f1aaa91c5c824891e7b9 (patch)
tree52ae2d2068fd637dd03938d592e8a7492e49ab9f /src/drivers/ao_trng_send.c
parentb1cf0dab1e28433e06ab02cec033951ea0149ea3 (diff)
parente87d56b665ca30a3e5920c23cd60c99b84341aa2 (diff)
Merge branch 'master' into branch-1.8
Diffstat (limited to 'src/drivers/ao_trng_send.c')
-rw-r--r--src/drivers/ao_trng_send.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/drivers/ao_trng_send.c b/src/drivers/ao_trng_send.c
index b1227aaa..7cda053d 100644
--- a/src/drivers/ao_trng_send.c
+++ b/src/drivers/ao_trng_send.c
@@ -153,10 +153,20 @@ ao_trng_send(void)
ao_crc_reset();
- ao_delay(TRNG_ENABLE_DELAY);
-
for (s = 0; s < AO_TRNG_START_WAIT; s++) {
- if (ao_trng_get_cooked(buffer[0]))
+ int i;
+ uint16_t min, max;
+ uint16_t buf[AO_USB_IN_SIZE>>1];
+
+ ao_trng_get_raw(buf);
+ min = max = buf[0];
+ for (i = 1; i < (AO_USB_IN_SIZE>>1); i++) {
+ uint16_t v = buf[i];
+ if (v < min) min = v;
+ if (v > max) max = v;
+ }
+ /* Wait for at least 10 bits of range */
+ if ((uint16_t) (max - min) >= 1024)
break;
ao_delay(AO_MS_TO_TICKS(10));
}