diff --git a/src/cdc.rs b/src/cdc.rs index 9b57c4b..7308a28 100644 --- a/src/cdc.rs +++ b/src/cdc.rs @@ -75,9 +75,17 @@ impl UsbInterfaceHandler for UsbCdcAcmHandler { return Ok(vec![]); } else { // bulk in - // TODO: handle max packet size - let resp = self.tx_buffer.clone(); - self.tx_buffer.clear(); + // Handle max packet size - return data in chunks of max_packet_size + let max_packet_size = ep.max_packet_size as usize; + let resp = if self.tx_buffer.len() > max_packet_size { + // Return only the first chunk (max_packet_size bytes) + self.tx_buffer.drain(..max_packet_size).collect::>() + } else { + // Return all data if it fits in one packet + let resp = self.tx_buffer.clone(); + self.tx_buffer.clear(); + resp + }; return Ok(resp); } }