use crate::driver::AskDriver;
use embedded_hal::delay::DelayNs;
use embedded_hal::digital::{InputPin, OutputPin};
pub fn run_ask_tick_loop<D, TX, RX, PTT>(
driver: &mut AskDriver<TX, RX, PTT>,
delay: &mut D,
tick_us: u32,
) where
D: DelayNs,
TX: OutputPin,
RX: InputPin,
PTT: OutputPin,
{
driver.tick();
delay.delay_us(tick_us);
}
#[cfg(test)]
mod tests {
use super::*;
use embedded_hal_mock::eh1::delay::NoopDelay as MockDelay;
use embedded_hal_mock::eh1::digital::{
Mock as PinMock, State as PinState, Transaction as PinTransaction,
};
#[test]
fn test_run_ask_tick_loop_invokes_tick_and_delay() {
let tx = PinMock::new(&[PinTransaction::set(PinState::Low)]);
let rx = PinMock::new(&[]);
let ptt = PinMock::new(&[]);
let mut driver = AskDriver::new(tx, rx, Some(ptt), 8, Some(false), Some(false));
let mut delay = MockDelay::new();
delay.delay_us(63);
run_ask_tick_loop(&mut driver, &mut delay, 63);
driver.tx.done();
driver.rx.done();
let _ = driver.ptt.map(|mut ptt| ptt.done());
}
}