commit
7991b05e4c
9
embassy-traits/src/delay.rs
Normal file
9
embassy-traits/src/delay.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
use core::future::Future;
|
||||||
|
use core::pin::Pin;
|
||||||
|
|
||||||
|
pub trait Delay {
|
||||||
|
type DelayFuture<'a>: Future<Output = ()> + 'a;
|
||||||
|
|
||||||
|
fn delay_ms<'a>(self: Pin<&'a mut Self>, millis: u64) -> Self::DelayFuture<'a>;
|
||||||
|
fn delay_us<'a>(self: Pin<&'a mut Self>, micros: u64) -> Self::DelayFuture<'a>;
|
||||||
|
}
|
@ -5,6 +5,7 @@
|
|||||||
#![feature(const_option)]
|
#![feature(const_option)]
|
||||||
#![allow(incomplete_features)]
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
|
pub mod delay;
|
||||||
pub mod flash;
|
pub mod flash;
|
||||||
pub mod gpio;
|
pub mod gpio;
|
||||||
pub mod uart;
|
pub mod uart;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use core::future::Future;
|
use core::future::Future;
|
||||||
|
use core::marker::PhantomData;
|
||||||
use core::pin::Pin;
|
use core::pin::Pin;
|
||||||
use core::task::{Context, Poll};
|
use core::task::{Context, Poll};
|
||||||
use futures::Stream;
|
use futures::Stream;
|
||||||
@ -6,6 +7,29 @@ use futures::Stream;
|
|||||||
use super::raw;
|
use super::raw;
|
||||||
use crate::time::{Duration, Instant};
|
use crate::time::{Duration, Instant};
|
||||||
|
|
||||||
|
pub struct Delay {
|
||||||
|
_data: PhantomData<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Delay {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Delay {
|
||||||
|
_data: PhantomData {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl crate::traits::delay::Delay for Delay {
|
||||||
|
type DelayFuture<'a> = impl Future<Output = ()> + 'a;
|
||||||
|
|
||||||
|
fn delay_ms<'a>(self: Pin<&'a mut Self>, millis: u64) -> Self::DelayFuture<'a> {
|
||||||
|
Timer::after(Duration::from_millis(millis))
|
||||||
|
}
|
||||||
|
fn delay_us<'a>(self: Pin<&'a mut Self>, micros: u64) -> Self::DelayFuture<'a> {
|
||||||
|
Timer::after(Duration::from_micros(micros))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Timer {
|
pub struct Timer {
|
||||||
expires_at: Instant,
|
expires_at: Instant,
|
||||||
yielded_once: bool,
|
yielded_once: bool,
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#![feature(const_fn_fn_ptr_basics)]
|
#![feature(const_fn_fn_ptr_basics)]
|
||||||
#![feature(const_option)]
|
#![feature(const_option)]
|
||||||
#![allow(incomplete_features)]
|
#![allow(incomplete_features)]
|
||||||
|
#![feature(type_alias_impl_trait)]
|
||||||
|
|
||||||
// This mod MUST go first, so that the others see its macros.
|
// This mod MUST go first, so that the others see its macros.
|
||||||
pub(crate) mod fmt;
|
pub(crate) mod fmt;
|
||||||
|
@ -45,9 +45,9 @@ impl Duration {
|
|||||||
/*
|
/*
|
||||||
NOTE: us delays may not be as accurate
|
NOTE: us delays may not be as accurate
|
||||||
*/
|
*/
|
||||||
pub const fn from_micros(millis: u64) -> Duration {
|
pub const fn from_micros(micros: u64) -> Duration {
|
||||||
Duration {
|
Duration {
|
||||||
ticks: millis * TICKS_PER_SECOND / 1_000_000,
|
ticks: micros * TICKS_PER_SECOND / 1_000_000,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user