aboutsummaryrefslogtreecommitdiff
path: root/embassy-time-driver/src/lib.rs
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-12-08 23:27:32 +0100
committerDániel Buga <[email protected]>2024-12-13 21:20:59 +0100
commitb268b1795fed58544c166c41842ce0d66328aa3e (patch)
tree55b6fb09f6694b5e3355d344770b36bfe1550415 /embassy-time-driver/src/lib.rs
parentec96395d084d5edc8be25ddaea8547e2ebd447a6 (diff)
Merge time-driver and time-queue-driver traits, make HALs own and handle the queue.
Diffstat (limited to 'embassy-time-driver/src/lib.rs')
-rw-r--r--embassy-time-driver/src/lib.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/embassy-time-driver/src/lib.rs b/embassy-time-driver/src/lib.rs
index ffb363cd7..090969d8c 100644
--- a/embassy-time-driver/src/lib.rs
+++ b/embassy-time-driver/src/lib.rs
@@ -38,6 +38,8 @@
38//! # Example 38//! # Example
39//! 39//!
40//! ``` 40//! ```
41//! use core::task::Waker;
42//!
41//! use embassy_time_driver::Driver; 43//! use embassy_time_driver::Driver;
42//! 44//!
43//! struct MyDriver{} // not public! 45//! struct MyDriver{} // not public!
@@ -46,6 +48,10 @@
46//! fn now(&self) -> u64 { 48//! fn now(&self) -> u64 {
47//! todo!() 49//! todo!()
48//! } 50//! }
51//!
52//! fn schedule_wake(&self, at: u64, waker: &Waker) {
53//! todo!()
54//! }
49//! } 55//! }
50//! 56//!
51//! embassy_time_driver::time_driver_impl!(static DRIVER: MyDriver = MyDriver{}); 57//! embassy_time_driver::time_driver_impl!(static DRIVER: MyDriver = MyDriver{});
@@ -54,6 +60,8 @@
54//! ## Feature flags 60//! ## Feature flags
55#![doc = document_features::document_features!(feature_label = r#"<span class="stab portability"><code>{feature}</code></span>"#)] 61#![doc = document_features::document_features!(feature_label = r#"<span class="stab portability"><code>{feature}</code></span>"#)]
56 62
63use core::task::Waker;
64
57mod tick; 65mod tick;
58 66
59/// Ticks per second of the global timebase. 67/// Ticks per second of the global timebase.
@@ -74,6 +82,10 @@ pub trait Driver: Send + Sync + 'static {
74 /// you MUST extend them to 64-bit, for example by counting overflows in software, 82 /// you MUST extend them to 64-bit, for example by counting overflows in software,
75 /// or chaining multiple timers together. 83 /// or chaining multiple timers together.
76 fn now(&self) -> u64; 84 fn now(&self) -> u64;
85
86 /// Schedules a waker to be awoken at moment `at`.
87 /// If this moment is in the past, the waker might be awoken immediately.
88 fn schedule_wake(&self, at: u64, waker: &Waker);
77} 89}
78 90
79extern "Rust" { 91extern "Rust" {
@@ -97,5 +109,10 @@ macro_rules! time_driver_impl {
97 fn _embassy_time_now() -> u64 { 109 fn _embassy_time_now() -> u64 {
98 <$t as $crate::Driver>::now(&$name) 110 <$t as $crate::Driver>::now(&$name)
99 } 111 }
112
113 #[no_mangle]
114 fn _embassy_time_schedule_wake(at: u64, waker: &core::task::Waker) {
115 <$t as $crate::Driver>::schedule_wake(&$name, at, waker);
116 }
100 }; 117 };
101} 118}