1pub use core::time::Duration;
4
5pub type TimeValue = Duration;
10
11#[cfg(feature = "irq")]
12pub use crate::platform::irq::TIMER_IRQ_NUM;
13#[cfg(feature = "irq")]
14pub use crate::platform::time::set_oneshot_timer;
15pub use crate::platform::time::{current_ticks, epochoffset_nanos, nanos_to_ticks, ticks_to_nanos};
16
17pub const MILLIS_PER_SEC: u64 = 1_000;
19pub const MICROS_PER_SEC: u64 = 1_000_000;
21pub const NANOS_PER_SEC: u64 = 1_000_000_000;
23pub const NANOS_PER_MILLIS: u64 = 1_000_000;
25pub const NANOS_PER_MICROS: u64 = 1_000;
27
28pub fn monotonic_time_nanos() -> u64 {
30 ticks_to_nanos(current_ticks())
31}
32
33pub fn monotonic_time() -> TimeValue {
35 TimeValue::from_nanos(monotonic_time_nanos())
36}
37
38pub fn wall_time_nanos() -> u64 {
40 monotonic_time_nanos() + epochoffset_nanos()
41}
42
43pub fn wall_time() -> TimeValue {
45 TimeValue::from_nanos(monotonic_time_nanos() + epochoffset_nanos())
46}
47
48pub fn busy_wait(dur: Duration) {
50 busy_wait_until(wall_time() + dur);
51}
52
53pub fn busy_wait_until(deadline: TimeValue) {
55 while wall_time() < deadline {
56 core::hint::spin_loop();
57 }
58}