use core::time::Duration;
use esp_idf_hal::delay::{FreeRtos, TickType};
use esp_idf_hal::io::EspIOError;
use esp_idf_hal::uart::UartDriver;
use crate::device::Xy;
use crate::transport::BlockingRead;
use crate::types::Model;
use crate::uart::UartTransport;
impl BlockingRead for UartDriver<'_> {
type Error = EspIOError;
fn read(&mut self, buf: &mut [u8], timeout_ms: u32) -> Result<usize, Self::Error> {
let ticks = TickType::from(Duration::from_millis(timeout_ms as u64)).ticks();
UartDriver::read(self, buf, ticks).map_err(EspIOError)
}
}
pub type EspIdfTransport<'d> = UartTransport<UartDriver<'d>, FreeRtos>;
impl<'d> Xy<EspIdfTransport<'d>> {
pub fn from_esp_uart(uart: UartDriver<'d>, model: Model) -> Self {
Self::new(UartTransport::new(uart, FreeRtos), model)
}
}