diff options
| -rw-r--r-- | embassy-embedded-hal/src/adapter/blocking_async.rs | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/embassy-embedded-hal/src/adapter/blocking_async.rs b/embassy-embedded-hal/src/adapter/blocking_async.rs index bafc31583..bc965fbdd 100644 --- a/embassy-embedded-hal/src/adapter/blocking_async.rs +++ b/embassy-embedded-hal/src/adapter/blocking_async.rs | |||
| @@ -63,16 +63,16 @@ where | |||
| 63 | 63 | ||
| 64 | impl<T, E> embedded_hal_async::spi::ErrorType for BlockingAsync<T> | 64 | impl<T, E> embedded_hal_async::spi::ErrorType for BlockingAsync<T> |
| 65 | where | 65 | where |
| 66 | E: embedded_hal_1::spi::Error, | 66 | E: embedded_hal_async::spi::Error, |
| 67 | T: blocking::spi::Transfer<u8, Error = E> + blocking::spi::Write<u8, Error = E>, | 67 | T: embedded_hal_1::spi::SpiBus<Error = E>, |
| 68 | { | 68 | { |
| 69 | type Error = E; | 69 | type Error = E; |
| 70 | } | 70 | } |
| 71 | 71 | ||
| 72 | impl<T, E> embedded_hal_async::spi::SpiBus<u8> for BlockingAsync<T> | 72 | impl<T, E> embedded_hal_async::spi::SpiBus<u8> for BlockingAsync<T> |
| 73 | where | 73 | where |
| 74 | E: embedded_hal_1::spi::Error + 'static, | 74 | E: embedded_hal_async::spi::Error, |
| 75 | T: blocking::spi::Transfer<u8, Error = E> + blocking::spi::Write<u8, Error = E>, | 75 | T: embedded_hal_1::spi::SpiBus<Error = E>, |
| 76 | { | 76 | { |
| 77 | async fn flush(&mut self) -> Result<(), Self::Error> { | 77 | async fn flush(&mut self) -> Result<(), Self::Error> { |
| 78 | Ok(()) | 78 | Ok(()) |
| @@ -84,21 +84,17 @@ where | |||
| 84 | } | 84 | } |
| 85 | 85 | ||
| 86 | async fn read(&mut self, data: &mut [u8]) -> Result<(), Self::Error> { | 86 | async fn read(&mut self, data: &mut [u8]) -> Result<(), Self::Error> { |
| 87 | self.wrapped.transfer(data)?; | 87 | self.wrapped.read(data)?; |
| 88 | Ok(()) | 88 | Ok(()) |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | async fn transfer(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Self::Error> { | 91 | async fn transfer(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Self::Error> { |
| 92 | // Ensure we write the expected bytes | 92 | self.wrapped.transfer(read, write)?; |
| 93 | for i in 0..core::cmp::min(read.len(), write.len()) { | ||
| 94 | read[i] = write[i].clone(); | ||
| 95 | } | ||
| 96 | self.wrapped.transfer(read)?; | ||
| 97 | Ok(()) | 93 | Ok(()) |
| 98 | } | 94 | } |
| 99 | 95 | ||
| 100 | async fn transfer_in_place(&mut self, data: &mut [u8]) -> Result<(), Self::Error> { | 96 | async fn transfer_in_place(&mut self, data: &mut [u8]) -> Result<(), Self::Error> { |
| 101 | self.wrapped.transfer(data)?; | 97 | self.wrapped.transfer_in_place(data)?; |
| 102 | Ok(()) | 98 | Ok(()) |
| 103 | } | 99 | } |
| 104 | } | 100 | } |
