Skip to main content

prns_runtime_embassy/manifold/
timebase.rs

1use embassy_time::Instant as EmbassyInstant;
2
3use crate::engine::InstantMillis;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub struct EmbassyTimebase {
7    raw_start: EmbassyInstant,
8    logical_start: InstantMillis,
9}
10
11impl EmbassyTimebase {
12    pub fn capture_now() -> Self {
13        let raw_start = EmbassyInstant::now();
14        Self {
15            raw_start,
16            logical_start: InstantMillis(raw_start.as_millis()),
17        }
18    }
19
20    pub fn start_at(logical_start: InstantMillis) -> Self {
21        Self {
22            raw_start: EmbassyInstant::now(),
23            logical_start,
24        }
25    }
26
27    pub fn now(&self) -> InstantMillis {
28        let elapsed = EmbassyInstant::now()
29            .saturating_duration_since(self.raw_start)
30            .as_millis();
31        InstantMillis(self.logical_start.0.saturating_add(elapsed))
32    }
33}