@@ -1399,11 +1399,14 @@ impl<'a, I2C: Instance, I2CT: I2CTarget, L: Logger> Ast1060I2c<'a, I2C, I2CT, L>
13991399 I2cXferMode :: DmaMode => {
14001400 let slave_rx_len = self . i2c . i2cs4c ( ) . read ( ) . dmarx_actual_len_byte ( ) . bits ( ) ;
14011401 i2c_debug ! ( self . logger, "dma write_received: len={:#x}" , slave_rx_len) ;
1402- let slice = self . sdma_buf . as_slice ( 0 , slave_rx_len as usize ) ;
1403- if let Some ( target) = self . i2c_data . slave_target . as_mut ( ) {
1404- target. on_write ( slice) . unwrap ( ) ;
1402+ //target expects one byte each time
1403+ for i in 0 ..slave_rx_len {
1404+ let slice = self . sdma_buf . as_slice ( i as usize , i as usize + 1 ) ;
1405+ if let Some ( target) = self . i2c_data . slave_target . as_mut ( ) {
1406+ target. on_write ( slice) . unwrap ( ) ;
1407+ }
1408+ i2c_debug ! ( self . logger, "write_received: data={:?}" , slice) ;
14051409 }
1406- i2c_debug ! ( self . logger, "write_received: data={:?}" , slice) ;
14071410 }
14081411 I2cXferMode :: BuffMode => {
14091412 let slave_rx_len = u16:: from (
@@ -1414,16 +1417,19 @@ impl<'a, I2C: Instance, I2CT: I2CTarget, L: Logger> Ast1060I2c<'a, I2C, I2CT, L>
14141417 . bits ( ) ,
14151418 ) ;
14161419 i2c_debug ! ( self . logger, "buff write_received: len={:#x}" , slave_rx_len) ;
1417- if let Some ( target) = self . i2c_data . slave_target . as_mut ( ) {
1418- target
1419- . on_write ( & self . i2c_data . msg . buf [ ..( slave_rx_len as usize ) ] )
1420- . unwrap ( ) ;
1420+ //target expects one byte each time
1421+ for i in 0 ..slave_rx_len {
1422+ if let Some ( target) = self . i2c_data . slave_target . as_mut ( ) {
1423+ target
1424+ . on_write ( & self . i2c_data . msg . buf [ ( i as usize ) ..( i as usize + 1 ) ] )
1425+ . unwrap ( ) ;
1426+ }
1427+ i2c_debug ! (
1428+ self . logger,
1429+ "write_received data={:?}" ,
1430+ & self . i2c_data. msg. buf[ ( i as usize ) ..( i as usize + 1 ) ]
1431+ ) ;
14211432 }
1422- i2c_debug ! (
1423- self . logger,
1424- "write_received data={:?}" ,
1425- & self . i2c_data. msg. buf[ 0 ..( slave_rx_len as usize ) ]
1426- ) ;
14271433 }
14281434 I2cXferMode :: ByteMode => { }
14291435 }
0 commit comments