Skip to content

Commit 6110895

Browse files
committed
Update i2c slave for swmbx
1 parent 4715091 commit 6110895

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

src/i2c/ast1060_i2c.rs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)