@@ -6,6 +6,8 @@ use crate::dma::{
6
6
traits:: { Channel , DMASet , DmaFlagExt , PeriAddress , Stream , StreamISR } ,
7
7
ChannelX , MemoryToPeripheral , PeripheralToMemory , Transfer ,
8
8
} ;
9
+ use crate :: hal:: i2c;
10
+ use crate :: i2c:: dma:: i2c:: { ErrorType , Operation } ;
9
11
use crate :: ReadFlags ;
10
12
11
13
use nb;
@@ -601,6 +603,36 @@ where
601
603
}
602
604
}
603
605
606
+ impl < I2C , TX_TRANSFER , RX_TRANSFER > ErrorType for I2CMasterDma < I2C , TX_TRANSFER , RX_TRANSFER >
607
+ where
608
+ I2C : Instance ,
609
+ TX_TRANSFER : DMATransfer < & ' static [ u8 ] > ,
610
+ RX_TRANSFER : DMATransfer < & ' static mut [ u8 ] > ,
611
+ {
612
+ type Error = super :: Error ;
613
+ }
614
+
615
+ impl < I2C , TX_TRANSFER , RX_TRANSFER > i2c:: I2c for I2CMasterDma < I2C , TX_TRANSFER , RX_TRANSFER >
616
+ where
617
+ I2C : Instance ,
618
+ TX_TRANSFER : DMATransfer < & ' static [ u8 ] > ,
619
+ RX_TRANSFER : DMATransfer < & ' static mut [ u8 ] > ,
620
+ {
621
+ fn transaction (
622
+ & mut self ,
623
+ addr : u8 ,
624
+ operations : & mut [ Operation < ' _ > ] ,
625
+ ) -> Result < ( ) , Self :: Error > {
626
+ for operation in operations {
627
+ match operation {
628
+ Operation :: Read ( dest) => self . hal_i2c . read ( addr, dest) ,
629
+ Operation :: Write ( data) => self . hal_i2c . write ( addr, data) ,
630
+ } ?;
631
+ }
632
+ Ok ( ( ) )
633
+ }
634
+ }
635
+
604
636
impl < I2C , TX_STREAM , const TX_CH : u8 > I2CMasterHandleIT
605
637
for I2CMasterDma < I2C , TxDMA < I2C , TX_STREAM , TX_CH > , NoDMA >
606
638
where
0 commit comments