diff --git a/mctp-estack/src/usb.rs b/mctp-estack/src/usb.rs index d3c0fb2..4aab570 100644 --- a/mctp-estack/src/usb.rs +++ b/mctp-estack/src/usb.rs @@ -127,12 +127,18 @@ impl MctpUsbHandler { return r.unborrowed().unwrap() } }; - if Self::header(len, hdr).is_err() { - return SendOutput::Error { - err: Error::InternalError, - cookie: None, - }; - } + + match Self::header(len) { + Ok(header) => hdr.copy_from_slice(&header), + Err(_) => { + trace!("USB transfer error"); + return SendOutput::Error { + err: Error::TxFailure, + cookie: None, + }; + } + }; + let slice = &self.tx_xfer[0..len + 4]; let res = xfer.send_xfer(slice); if let Err(_e) = res { @@ -150,22 +156,13 @@ impl MctpUsbHandler { /// `mctplen` is the length of the remaining MCTP packet /// after the header. /// `hdr` must be a 4 byte slice. - pub fn header(mctp_len: usize, hdr: &mut [u8]) -> Result<()> { - if hdr.len() != 4 { - return Err(Error::BadArgument); - } - + pub fn header(mctp_len: usize) -> Result<[u8; 4]> { let usb_len: u8 = mctp_len .checked_add(4) .ok_or(Error::BadArgument)? .try_into() .map_err(|_| Error::BadArgument)?; - - hdr[0] = 0x1a; - hdr[1] = 0xb4; - hdr[2] = 0; - hdr[3] = usb_len; - Ok(()) + Ok([0x1a, 0xb4, 0, usb_len]) } } diff --git a/mctp-usb-embassy/src/mctpusb.rs b/mctp-usb-embassy/src/mctpusb.rs index 2ae733f..70e0685 100644 --- a/mctp-usb-embassy/src/mctpusb.rs +++ b/mctp-usb-embassy/src/mctpusb.rs @@ -59,8 +59,7 @@ impl<'d, D: Driver<'d>> Sender<'d, D> { return Err(mctp::Error::NoSpace); } - let mut hdr = [0u8; 4]; - MctpUsbHandler::header(pkt.len(), &mut hdr)?; + let hdr = MctpUsbHandler::header(pkt.len())?; let _ = self.buf.extend_from_slice(&hdr); let _ = self.buf.extend_from_slice(pkt); Ok(())