Add std impl for rand
This commit is contained in:
parent
1aae27270e
commit
80c504cd95
4 changed files with 23 additions and 2 deletions
|
@ -5,7 +5,7 @@ authors = ["Dario Nieuwenhuis <dirbaio@dirbaio.net>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
std = ["futures/std"]
|
std = ["futures/std", "rand_core"]
|
||||||
defmt-trace = []
|
defmt-trace = []
|
||||||
defmt-debug = []
|
defmt-debug = []
|
||||||
defmt-info = []
|
defmt-info = []
|
||||||
|
@ -16,6 +16,9 @@ defmt-error = []
|
||||||
defmt = { version = "0.1.3", optional = true }
|
defmt = { version = "0.1.3", optional = true }
|
||||||
log = { version = "0.4.11", optional = true }
|
log = { version = "0.4.11", optional = true }
|
||||||
|
|
||||||
|
# std-only
|
||||||
|
rand_core = { version = "0.5.1", optional = true, features = ["std"] }
|
||||||
|
|
||||||
cortex-m = "0.6.4"
|
cortex-m = "0.6.4"
|
||||||
futures = { version = "0.3.5", default-features = false }
|
futures = { version = "0.3.5", default-features = false }
|
||||||
pin-project = { version = "1.0.2", default-features = false }
|
pin-project = { version = "1.0.2", default-features = false }
|
||||||
|
|
|
@ -4,6 +4,9 @@ pub trait Rand {
|
||||||
fn rand(&self, buf: &mut [u8]);
|
fn rand(&self, buf: &mut [u8]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
static mut RAND: Option<&'static dyn Rand> = Some(&if_std::Rand);
|
||||||
|
#[cfg(not(feature = "std"))]
|
||||||
static mut RAND: Option<&'static dyn Rand> = None;
|
static mut RAND: Option<&'static dyn Rand> = None;
|
||||||
|
|
||||||
pub unsafe fn set_rand(rand: &'static dyn Rand) {
|
pub unsafe fn set_rand(rand: &'static dyn Rand) {
|
||||||
|
@ -13,3 +16,15 @@ pub unsafe fn set_rand(rand: &'static dyn Rand) {
|
||||||
pub fn rand(buf: &mut [u8]) {
|
pub fn rand(buf: &mut [u8]) {
|
||||||
unsafe { unwrap!(RAND, "No rand set").rand(buf) }
|
unsafe { unwrap!(RAND, "No rand set").rand(buf) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
mod if_std {
|
||||||
|
use rand_core::{OsRng, RngCore};
|
||||||
|
|
||||||
|
pub(crate) struct Rand;
|
||||||
|
impl super::Rand for Rand {
|
||||||
|
fn rand(&self, buf: &mut [u8]) {
|
||||||
|
OsRng.fill_bytes(buf)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -5,7 +5,10 @@ set -euxo pipefail
|
||||||
# examples
|
# examples
|
||||||
(cd examples; cargo build --target thumbv7em-none-eabi --bins)
|
(cd examples; cargo build --target thumbv7em-none-eabi --bins)
|
||||||
|
|
||||||
# embassy
|
# embassy std
|
||||||
|
(cd embassy; cargo build --features log,std)
|
||||||
|
|
||||||
|
# embassy embedded
|
||||||
(cd embassy; cargo build --target thumbv7em-none-eabi)
|
(cd embassy; cargo build --target thumbv7em-none-eabi)
|
||||||
(cd embassy; cargo build --target thumbv7em-none-eabi --features log)
|
(cd embassy; cargo build --target thumbv7em-none-eabi --features log)
|
||||||
(cd embassy; cargo build --target thumbv7em-none-eabi --features defmt)
|
(cd embassy; cargo build --target thumbv7em-none-eabi --features defmt)
|
||||||
|
|
Loading…
Reference in a new issue