- 
                Notifications
    You must be signed in to change notification settings 
- Fork 248
Closed
Labels
Description
Almost all the hal implementations:
- have the same time.rs module defining time object like Hz
- implement (more or less right) a Delay object on each timer.
I think that this can be solved in embedded-hal by:
- Defining something like time.rs
- Having a trait CalibratedCountDownthat provide the needed function to implement delay
- A Wrapper type over a CalibratedCountDownthat provide theDelayimplementation.
Then, the hal only have to provide a CalibratedCountDown object that can be created from a timer and a Clock object.
An idea of the implementation:
pub trait CalibratedCountDown {
    /// The duration of a tick.
    fn tick(&self) -> Duration;
    /// Maximum ticks the counter can count.
    fn max_ticks(&self) -> usize;
    /// Start a new countdown of `count` ticks.
    fn start<T>(&mut self, count: usize);
    /// Non-blockingly "waits" until the count down finishes.
    fn wait(&mut self) -> Result<(), Void>
}Then you can generically implement Delay as atsamd-rs/atsamd#14
droogmic and ryankurte