X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_trng_send.c;h=7cda053d3ff2263d9bb7c89b55d6947a786b52d1;hb=2f8fce1cf6ce4bd12a836cc8ee15f4edbc95c95e;hp=85034efd767f7337ebbabbff75a428fccd6b8e73;hpb=826ad792389150ea8d80e341cb8ea023db83c9a2;p=fw%2Faltos diff --git a/src/drivers/ao_trng_send.c b/src/drivers/ao_trng_send.c index 85034efd..7cda053d 100644 --- a/src/drivers/ao_trng_send.c +++ b/src/drivers/ao_trng_send.c @@ -104,7 +104,7 @@ ao_trng_get_cooked(uint16_t *buf) { uint16_t i; uint16_t t; - uint32_t *rnd = (uint32_t *) ao_adc_ring; + uint32_t *rnd = (uint32_t *) (void *) ao_adc_ring; uint8_t mismatch = 0; t = ao_adc_get(AO_USB_IN_SIZE) >> 1; /* one 16-bit value per output byte */ @@ -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)); }