more debug
diff --git a/services/mctp/transport-i2c/src/sender.rs b/services/mctp/transport-i2c/src/sender.rs index c41fe49..ec3d4df 100644 --- a/services/mctp/transport-i2c/src/sender.rs +++ b/services/mctp/transport-i2c/src/sender.rs
@@ -78,8 +78,13 @@ let packet = encoder.encode(addr, p, &mut out, true)?; pw_log::debug!("Encoded packet length: 0x{:04x}", packet.len() as u32); - let packet_len = packet.len(); - if let Err(i2c_err) = self.i2c.write(self.bus, dest_address, packet) { + // Skip the first byte (destination address) since the I2C driver + // automatically prepends it. mctp-estack's encode() includes the + // full I2C frame [dest][cmd][bc][src][...], but embedded-hal I2C + // write() expects [cmd][bc][src][...] and adds [dest] itself. + let packet_without_dest = &packet[1..]; + let packet_len = packet_without_dest.len(); + if let Err(i2c_err) = self.i2c.write(self.bus, dest_address, packet_without_dest) { use embedded_hal::i2c::Error as _; let kind = i2c_err.kind(); let kind_code = match kind {