@@ -6,6 +6,8 @@ use crate::dma::{
66 traits:: { Channel , DMASet , DmaFlagExt , PeriAddress , Stream , StreamISR } ,
77 ChannelX , MemoryToPeripheral , PeripheralToMemory , Transfer ,
88} ;
9+ use crate :: hal:: i2c;
10+ use crate :: i2c:: dma:: i2c:: { ErrorType , Operation } ;
911use crate :: ReadFlags ;
1012
1113use nb;
@@ -601,6 +603,36 @@ where
601603 }
602604}
603605
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+
604636impl < I2C , TX_STREAM , const TX_CH : u8 > I2CMasterHandleIT
605637 for I2CMasterDma < I2C , TxDMA < I2C , TX_STREAM , TX_CH > , NoDMA >
606638where
0 commit comments