1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use embedded_hal::blocking::rng::Read;
use esp8266::RNG;
use void::Void;

pub trait RngExt {
    fn rng(self) -> Rng;
}

impl RngExt for RNG {
    fn rng(self) -> Rng {
        Rng { rng: self }
    }
}

pub struct Rng {
    rng: RNG,
}

impl Read for Rng {
    type Error = Void;

    fn read(&mut self, buffer: &mut [u8]) -> Result<(), Self::Error> {
        for byte in buffer.iter_mut() {
            *byte = self.rng.rng.read().bits() as u8;
        }

        Ok(())
    }
}