1use super::{Duration, Instant};
2use crate::Timer;
3
4pub fn block_for(duration: Duration) {
6 let expires_at = Instant::now() + duration;
7 while Instant::now() < expires_at {}
8}
9
10#[derive(Clone)]
17pub struct Delay;
18
19impl embedded_hal_1::delay::DelayNs for Delay {
20 fn delay_ns(&mut self, ns: u32) {
21 block_for(Duration::from_nanos(ns as u64))
22 }
23
24 fn delay_us(&mut self, us: u32) {
25 block_for(Duration::from_micros(us as u64))
26 }
27
28 fn delay_ms(&mut self, ms: u32) {
29 block_for(Duration::from_millis(ms as u64))
30 }
31}
32
33impl embedded_hal_async::delay::DelayNs for Delay {
34 async fn delay_ns(&mut self, ns: u32) {
35 Timer::after_nanos(ns as _).await
36 }
37
38 async fn delay_us(&mut self, us: u32) {
39 Timer::after_micros(us as _).await
40 }
41
42 async fn delay_ms(&mut self, ms: u32) {
43 Timer::after_millis(ms as _).await
44 }
45}
46
47impl embedded_hal_02::blocking::delay::DelayMs<u8> for Delay {
48 fn delay_ms(&mut self, ms: u8) {
49 block_for(Duration::from_millis(ms as u64))
50 }
51}
52
53impl embedded_hal_02::blocking::delay::DelayMs<u16> for Delay {
54 fn delay_ms(&mut self, ms: u16) {
55 block_for(Duration::from_millis(ms as u64))
56 }
57}
58
59impl embedded_hal_02::blocking::delay::DelayMs<u32> for Delay {
60 fn delay_ms(&mut self, ms: u32) {
61 block_for(Duration::from_millis(ms as u64))
62 }
63}
64
65impl embedded_hal_02::blocking::delay::DelayUs<u8> for Delay {
66 fn delay_us(&mut self, us: u8) {
67 block_for(Duration::from_micros(us as u64))
68 }
69}
70
71impl embedded_hal_02::blocking::delay::DelayUs<u16> for Delay {
72 fn delay_us(&mut self, us: u16) {
73 block_for(Duration::from_micros(us as u64))
74 }
75}
76
77impl embedded_hal_02::blocking::delay::DelayUs<u32> for Delay {
78 fn delay_us(&mut self, us: u32) {
79 block_for(Duration::from_micros(us as u64))
80 }
81}