diff options
| author | Dario Nieuwenhuis <[email protected]> | 2025-05-18 20:51:57 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-05-18 20:51:57 +0200 |
| commit | 51d0252194cd69f73bade2aaeef3163f3cc7453f (patch) | |
| tree | cac023f3457123f2fbc7686f2f90414987eae264 /embassy-nrf | |
| parent | e8b1ea14c7fb151aa5e296ca8f9724f175bdeaef (diff) | |
| parent | e4fc48764491f8981e4a145a72e9b6e72df8c546 (diff) | |
Merge pull request #4217 from embassy-rs/rand09
Add rand-core v0.9 support.
Diffstat (limited to 'embassy-nrf')
| -rw-r--r-- | embassy-nrf/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-nrf/src/rng.rs | 47 |
2 files changed, 37 insertions, 14 deletions
diff --git a/embassy-nrf/Cargo.toml b/embassy-nrf/Cargo.toml index 6ca099599..e4e143c65 100644 --- a/embassy-nrf/Cargo.toml +++ b/embassy-nrf/Cargo.toml | |||
| @@ -154,6 +154,9 @@ embedded-hal-async = { version = "1.0" } | |||
| 154 | embedded-io = { version = "0.6.0" } | 154 | embedded-io = { version = "0.6.0" } |
| 155 | embedded-io-async = { version = "0.6.1" } | 155 | embedded-io-async = { version = "0.6.1" } |
| 156 | 156 | ||
| 157 | rand-core-06 = { package = "rand_core", version = "0.6" } | ||
| 158 | rand-core-09 = { package = "rand_core", version = "0.9" } | ||
| 159 | |||
| 157 | nrf-pac = "0.1.0" | 160 | nrf-pac = "0.1.0" |
| 158 | 161 | ||
| 159 | defmt = { version = "0.3", optional = true } | 162 | defmt = { version = "0.3", optional = true } |
| @@ -162,7 +165,6 @@ log = { version = "0.4.14", optional = true } | |||
| 162 | cortex-m-rt = ">=0.6.15,<0.8" | 165 | cortex-m-rt = ">=0.6.15,<0.8" |
| 163 | cortex-m = "0.7.6" | 166 | cortex-m = "0.7.6" |
| 164 | critical-section = "1.1" | 167 | critical-section = "1.1" |
| 165 | rand_core = "0.6.3" | ||
| 166 | fixed = "1.10.0" | 168 | fixed = "1.10.0" |
| 167 | embedded-storage = "0.3.1" | 169 | embedded-storage = "0.3.1" |
| 168 | embedded-storage-async = "0.4.1" | 170 | embedded-storage-async = "0.4.1" |
diff --git a/embassy-nrf/src/rng.rs b/embassy-nrf/src/rng.rs index e75ffda00..7e42dc938 100644 --- a/embassy-nrf/src/rng.rs +++ b/embassy-nrf/src/rng.rs | |||
| @@ -167,6 +167,21 @@ impl<'d, T: Instance> Rng<'d, T> { | |||
| 167 | 167 | ||
| 168 | self.stop(); | 168 | self.stop(); |
| 169 | } | 169 | } |
| 170 | |||
| 171 | /// Generate a random u32 | ||
| 172 | pub fn blocking_next_u32(&mut self) -> u32 { | ||
| 173 | let mut bytes = [0; 4]; | ||
| 174 | self.blocking_fill_bytes(&mut bytes); | ||
| 175 | // We don't care about the endianness, so just use the native one. | ||
| 176 | u32::from_ne_bytes(bytes) | ||
| 177 | } | ||
| 178 | |||
| 179 | /// Generate a random u64 | ||
| 180 | pub fn blocking_next_u64(&mut self) -> u64 { | ||
| 181 | let mut bytes = [0; 8]; | ||
| 182 | self.blocking_fill_bytes(&mut bytes); | ||
| 183 | u64::from_ne_bytes(bytes) | ||
| 184 | } | ||
| 170 | } | 185 | } |
| 171 | 186 | ||
| 172 | impl<'d, T: Instance> Drop for Rng<'d, T> { | 187 | impl<'d, T: Instance> Drop for Rng<'d, T> { |
| @@ -180,31 +195,37 @@ impl<'d, T: Instance> Drop for Rng<'d, T> { | |||
| 180 | } | 195 | } |
| 181 | } | 196 | } |
| 182 | 197 | ||
| 183 | impl<'d, T: Instance> rand_core::RngCore for Rng<'d, T> { | 198 | impl<'d, T: Instance> rand_core_06::RngCore for Rng<'d, T> { |
| 184 | fn fill_bytes(&mut self, dest: &mut [u8]) { | 199 | fn fill_bytes(&mut self, dest: &mut [u8]) { |
| 185 | self.blocking_fill_bytes(dest); | 200 | self.blocking_fill_bytes(dest); |
| 186 | } | 201 | } |
| 187 | |||
| 188 | fn next_u32(&mut self) -> u32 { | 202 | fn next_u32(&mut self) -> u32 { |
| 189 | let mut bytes = [0; 4]; | 203 | self.blocking_next_u32() |
| 190 | self.blocking_fill_bytes(&mut bytes); | ||
| 191 | // We don't care about the endianness, so just use the native one. | ||
| 192 | u32::from_ne_bytes(bytes) | ||
| 193 | } | 204 | } |
| 194 | |||
| 195 | fn next_u64(&mut self) -> u64 { | 205 | fn next_u64(&mut self) -> u64 { |
| 196 | let mut bytes = [0; 8]; | 206 | self.blocking_next_u64() |
| 197 | self.blocking_fill_bytes(&mut bytes); | ||
| 198 | u64::from_ne_bytes(bytes) | ||
| 199 | } | 207 | } |
| 200 | 208 | fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand_core_06::Error> { | |
| 201 | fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand_core::Error> { | ||
| 202 | self.blocking_fill_bytes(dest); | 209 | self.blocking_fill_bytes(dest); |
| 203 | Ok(()) | 210 | Ok(()) |
| 204 | } | 211 | } |
| 205 | } | 212 | } |
| 206 | 213 | ||
| 207 | impl<'d, T: Instance> rand_core::CryptoRng for Rng<'d, T> {} | 214 | impl<'d, T: Instance> rand_core_06::CryptoRng for Rng<'d, T> {} |
| 215 | |||
| 216 | impl<'d, T: Instance> rand_core_09::RngCore for Rng<'d, T> { | ||
| 217 | fn fill_bytes(&mut self, dest: &mut [u8]) { | ||
| 218 | self.blocking_fill_bytes(dest); | ||
| 219 | } | ||
| 220 | fn next_u32(&mut self) -> u32 { | ||
| 221 | self.blocking_next_u32() | ||
| 222 | } | ||
| 223 | fn next_u64(&mut self) -> u64 { | ||
| 224 | self.blocking_next_u64() | ||
| 225 | } | ||
| 226 | } | ||
| 227 | |||
| 228 | impl<'d, T: Instance> rand_core_09::CryptoRng for Rng<'d, T> {} | ||
| 208 | 229 | ||
| 209 | /// Peripheral static state | 230 | /// Peripheral static state |
| 210 | pub(crate) struct State { | 231 | pub(crate) struct State { |
