lorawan_device/async_device/
embassy_time.rs

1use embassy_time::{Duration, Instant};
2
3use super::radio::Timer;
4
5/// A [`Timer`] implementation based on [`embassy-time`].
6pub struct EmbassyTimer {
7    start: Instant,
8}
9
10impl EmbassyTimer {
11    pub fn new() -> Self {
12        Self { start: Instant::now() }
13    }
14}
15
16impl Default for EmbassyTimer {
17    fn default() -> Self {
18        Self::new()
19    }
20}
21
22impl Timer for EmbassyTimer {
23    fn reset(&mut self) {
24        self.start = Instant::now();
25    }
26
27    async fn at(&mut self, millis: u64) {
28        embassy_time::Timer::at(self.start + Duration::from_millis(millis)).await
29    }
30
31    async fn delay_ms(&mut self, millis: u64) {
32        embassy_time::Timer::after_millis(millis).await
33    }
34}