diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-12-08 23:27:32 +0100 |
|---|---|---|
| committer | Dániel Buga <[email protected]> | 2024-12-13 21:20:59 +0100 |
| commit | b268b1795fed58544c166c41842ce0d66328aa3e (patch) | |
| tree | 55b6fb09f6694b5e3355d344770b36bfe1550415 /embassy-time-driver/src | |
| parent | ec96395d084d5edc8be25ddaea8547e2ebd447a6 (diff) | |
Merge time-driver and time-queue-driver traits, make HALs own and handle the queue.
Diffstat (limited to 'embassy-time-driver/src')
| -rw-r--r-- | embassy-time-driver/src/lib.rs | 17 |
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 | ||
| 63 | use core::task::Waker; | ||
| 64 | |||
| 57 | mod tick; | 65 | mod 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 | ||
| 79 | extern "Rust" { | 91 | extern "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 | } |
