aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrik Alsér <[email protected]>2022-07-06 23:25:38 +0200
committerDario Nieuwenhuis <[email protected]>2022-07-07 15:46:30 +0200
commit2460d21fa43e0f454ce4068761ac34f36929df8d (patch)
treebbca1915d03b8eabb90630576a6776bfedfa9158
parent1fb70e2fac11afb4139ec2ed89293ce7ae1f6e65 (diff)
Add EH 1.0 impls for stm32 i2c
-rw-r--r--embassy-stm32/src/i2c/v1.rs69
-rw-r--r--embassy-stm32/src/i2c/v2.rs44
2 files changed, 113 insertions, 0 deletions
diff --git a/embassy-stm32/src/i2c/v1.rs b/embassy-stm32/src/i2c/v1.rs
index 87a4f9699..cf6011c26 100644
--- a/embassy-stm32/src/i2c/v1.rs
+++ b/embassy-stm32/src/i2c/v1.rs
@@ -280,6 +280,75 @@ impl<'d, T: Instance> embedded_hal_02::blocking::i2c::WriteRead for I2c<'d, T> {
280 } 280 }
281} 281}
282 282
283#[cfg(feature = "unstable-traits")]
284mod eh1 {
285 use super::super::{RxDma, TxDma};
286 use super::*;
287
288 impl embedded_hal_1::i2c::Error for Error {
289 fn kind(&self) -> embedded_hal_1::i2c::ErrorKind {
290 match *self {
291 Self::Bus => embedded_hal_1::i2c::ErrorKind::Bus,
292 Self::Arbitration => embedded_hal_1::i2c::ErrorKind::ArbitrationLoss,
293 Self::Nack => {
294 embedded_hal_1::i2c::ErrorKind::NoAcknowledge(embedded_hal_1::i2c::NoAcknowledgeSource::Unknown)
295 }
296 Self::Timeout => embedded_hal_1::i2c::ErrorKind::Other,
297 Self::Crc => embedded_hal_1::i2c::ErrorKind::Other,
298 Self::Overrun => embedded_hal_1::i2c::ErrorKind::Overrun,
299 Self::ZeroLengthTransfer => embedded_hal_1::i2c::ErrorKind::Other,
300 }
301 }
302 }
303
304 impl<'d, T: Instance, TXDMA: TxDma<T>, RXDMA: RxDma<T>> embedded_hal_1::i2c::ErrorType for I2c<'d, T, TXDMA, RXDMA> {
305 type Error = Error;
306 }
307
308 impl<'d, T: Instance> embedded_hal_1::i2c::blocking::I2c for I2c<'d, T> {
309 fn read(&mut self, address: u8, buffer: &mut [u8]) -> Result<(), Self::Error> {
310 self.blocking_read(address, buffer)
311 }
312
313 fn write(&mut self, address: u8, buffer: &[u8]) -> Result<(), Self::Error> {
314 self.blocking_write(address, buffer)
315 }
316
317 fn write_iter<B>(&mut self, _address: u8, _bytes: B) -> Result<(), Self::Error>
318 where
319 B: IntoIterator<Item = u8>,
320 {
321 todo!();
322 }
323
324 fn write_iter_read<B>(&mut self, _address: u8, _bytes: B, _buffer: &mut [u8]) -> Result<(), Self::Error>
325 where
326 B: IntoIterator<Item = u8>,
327 {
328 todo!();
329 }
330
331 fn write_read(&mut self, address: u8, wr_buffer: &[u8], rd_buffer: &mut [u8]) -> Result<(), Self::Error> {
332 self.blocking_write_read(address, wr_buffer, rd_buffer)
333 }
334
335 fn transaction<'a>(
336 &mut self,
337 _address: u8,
338 _operations: &mut [embedded_hal_1::i2c::blocking::Operation<'a>],
339 ) -> Result<(), Self::Error> {
340 todo!();
341 }
342
343 fn transaction_iter<'a, O>(&mut self, _address: u8, _operations: O) -> Result<(), Self::Error>
344 where
345 O: IntoIterator<Item = embedded_hal_1::i2c::blocking::Operation<'a>>,
346 {
347 todo!();
348 }
349 }
350}
351
283enum Mode { 352enum Mode {
284 Fast, 353 Fast,
285 Standard, 354 Standard,
diff --git a/embassy-stm32/src/i2c/v2.rs b/embassy-stm32/src/i2c/v2.rs
index 1a085e782..69988fd6e 100644
--- a/embassy-stm32/src/i2c/v2.rs
+++ b/embassy-stm32/src/i2c/v2.rs
@@ -854,6 +854,50 @@ mod eh1 {
854 impl<'d, T: Instance, TXDMA: TxDma<T>, RXDMA: RxDma<T>> embedded_hal_1::i2c::ErrorType for I2c<'d, T, TXDMA, RXDMA> { 854 impl<'d, T: Instance, TXDMA: TxDma<T>, RXDMA: RxDma<T>> embedded_hal_1::i2c::ErrorType for I2c<'d, T, TXDMA, RXDMA> {
855 type Error = Error; 855 type Error = Error;
856 } 856 }
857
858
859 impl<'d, T: Instance> embedded_hal_1::i2c::blocking::I2c for I2c<'d, T> {
860 fn read(&mut self, address: u8, buffer: &mut [u8]) -> Result<(), Self::Error> {
861 self.blocking_read(address, buffer)
862 }
863
864 fn write(&mut self, address: u8, buffer: &[u8]) -> Result<(), Self::Error> {
865 self.blocking_write(address, buffer)
866 }
867
868 fn write_iter<B>(&mut self, _address: u8, _bytes: B) -> Result<(), Self::Error>
869 where
870 B: IntoIterator<Item = u8>,
871 {
872 todo!();
873 }
874
875 fn write_iter_read<B>(&mut self, _address: u8, _bytes: B, _buffer: &mut [u8]) -> Result<(), Self::Error>
876 where
877 B: IntoIterator<Item = u8>,
878 {
879 todo!();
880 }
881
882 fn write_read(&mut self, address: u8, wr_buffer: &[u8], rd_buffer: &mut [u8]) -> Result<(), Self::Error> {
883 self.blocking_write_read(address, wr_buffer, rd_buffer)
884 }
885
886 fn transaction<'a>(
887 &mut self,
888 _address: u8,
889 _operations: &mut [embedded_hal_1::i2c::blocking::Operation<'a>],
890 ) -> Result<(), Self::Error> {
891 todo!();
892 }
893
894 fn transaction_iter<'a, O>(&mut self, _address: u8, _operations: O) -> Result<(), Self::Error>
895 where
896 O: IntoIterator<Item = embedded_hal_1::i2c::blocking::Operation<'a>>,
897 {
898 todo!();
899 }
900 }
857} 901}
858 902
859cfg_if::cfg_if! { 903cfg_if::cfg_if! {