From f4017f4bf7ea12cbf670fc072e9a71d3f308d090 Mon Sep 17 00:00:00 2001 From: dingari Date: Mon, 15 Jun 2026 18:48:12 +0000 Subject: [PATCH] fix(rockusb/nusb): Bulk reads should request a length that is a multiple of EP max packet size --- rockusb/src/nusb.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rockusb/src/nusb.rs b/rockusb/src/nusb.rs index 6b7bbc1..8226be8 100644 --- a/rockusb/src/nusb.rs +++ b/rockusb/src/nusb.rs @@ -67,11 +67,14 @@ impl crate::device::TransportAsync for Transport { } UsbStep::ReadBulk { data } => { // For IN transfers, requested_len must be a multiple of max_packet_size - let buf = Buffer::new(data.len()); + let max_packet_size = self.ep_in.max_packet_size(); + let requested_len = data.len().next_multiple_of(max_packet_size); + let buf = Buffer::new(requested_len); self.ep_in.submit(buf); let completion = self.ep_in.next_complete().await; let result_buf = completion.into_result()?; - data.copy_from_slice(&result_buf); + let copy_len = data.len().min(result_buf.len()); + data[..copy_len].copy_from_slice(&result_buf[..copy_len]); } UsbStep::WriteControl { request_type,