diff --git a/src/spi.rs b/src/spi.rs index df7b6a6d..795333c5 100644 --- a/src/spi.rs +++ b/src/spi.rs @@ -227,6 +227,7 @@ pub struct SpiBusDriver { _driver: T, trans_len: usize, hardware_cs: bool, + last_word: u8, } impl SpiBusDriver { @@ -262,6 +263,7 @@ impl SpiBusDriver { _driver: driver, trans_len, hardware_cs: false, + last_word: 0, }) } @@ -350,6 +352,25 @@ impl SpiBusDriver { } } +impl embedded_hal_0_2::spi::FullDuplex for SpiBusDriver { + type Error = EspError; + + fn read(&mut self) -> nb::Result { + Ok(self.last_word) + } + fn send(&mut self, word: u8) -> nb::Result<(), Self::Error> { + polling_transmit( + self.handle.0, + std::ptr::addr_of_mut!(self.last_word), + std::ptr::addr_of!(word), + 1, + 1, + false, + ) + .map_err(|e| e.into()) + } +} + impl embedded_hal::spi::ErrorType for SpiBusDriver { type Error = SpiError; } @@ -606,6 +627,7 @@ where _driver: (), trans_len, hardware_cs: self.with_cs_pin, + last_word: 0, }; let trans_result = f(&mut bus);