use embassy_time::{Duration, Timer};
use embedded_hal::digital::{Error, ErrorKind, ErrorType};
use embedded_hal_async::digital::Wait;
pub struct TimeOutWait {
pub timeout: Duration,
}
#[derive(Debug)]
pub struct TimeoutWaitError;
impl Error for TimeoutWaitError {
fn kind(&self) -> ErrorKind {
ErrorKind::Other
}
}
impl ErrorType for TimeOutWait { type Error = TimeoutWaitError; }
impl Default for TimeOutWait {
#[inline]
fn default() -> Self {
Self::new(Duration::from_millis(100))
}
}
impl TimeOutWait {
#[inline]
pub fn new(timeout: Duration) -> Self {
Self { timeout }
}
}
impl Wait for TimeOutWait {
async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
Timer::after(self.timeout).await;
Ok(())
}
async fn wait_for_low(&mut self) -> Result<(), Self::Error> {
Timer::after(self.timeout).await;
Ok(())
}
async fn wait_for_rising_edge(&mut self) -> Result<(), Self::Error> {
Timer::after(self.timeout).await;
Ok(())
}
async fn wait_for_falling_edge(&mut self) -> Result<(), Self::Error> {
Timer::after(self.timeout).await;
Ok(())
}
async fn wait_for_any_edge(&mut self) -> Result<(), Self::Error> {
Timer::after(self.timeout).await;
Ok(())
}
}