From 79b360f0a6b980cb8b4826bbad0d2d6a4c9dae4b Mon Sep 17 00:00:00 2001 From: Nicholas R Dinsmore Date: Wed, 17 Feb 2021 13:22:34 -0500 Subject: [PATCH 1/4] Enable iso buffers per rp2040 spec --- src/portable/raspberrypi/rp2040/rp2040_usb.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/portable/raspberrypi/rp2040/rp2040_usb.c b/src/portable/raspberrypi/rp2040/rp2040_usb.c index 5c536e31..036b5219 100644 --- a/src/portable/raspberrypi/rp2040/rp2040_usb.c +++ b/src/portable/raspberrypi/rp2040/rp2040_usb.c @@ -154,6 +154,14 @@ void _hw_endpoint_xfer_start(struct hw_endpoint *ep, uint8_t *buffer, uint16_t t ep->total_len = total_len; ep->len = 0; // FIXME: What if low speed + if(ep->transfer_type == TUSB_XFER_ISOCHRONOUS) + { + ep->transfer_size = total_len; //There is an assumption that the max buffer size of 1023 or 1024 was checked before this + } + else + { + ep->transfer_size = total_len > 64 ? 64 : total_len; + } ep->transfer_size = total_len > 64 ? 64 : total_len; ep->active = true; ep->user_buf = buffer; From 27f4b6f5a4e122ba0413315472ff663e5b8417be Mon Sep 17 00:00:00 2001 From: Nicholas R Dinsmore Date: Wed, 17 Feb 2021 18:22:24 -0500 Subject: [PATCH 2/4] Included size check for ISO buffers --- src/portable/raspberrypi/rp2040/rp2040_usb.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/portable/raspberrypi/rp2040/rp2040_usb.c b/src/portable/raspberrypi/rp2040/rp2040_usb.c index 036b5219..d3cbb2a2 100644 --- a/src/portable/raspberrypi/rp2040/rp2040_usb.c +++ b/src/portable/raspberrypi/rp2040/rp2040_usb.c @@ -156,13 +156,12 @@ void _hw_endpoint_xfer_start(struct hw_endpoint *ep, uint8_t *buffer, uint16_t t // FIXME: What if low speed if(ep->transfer_type == TUSB_XFER_ISOCHRONOUS) { - ep->transfer_size = total_len; //There is an assumption that the max buffer size of 1023 or 1024 was checked before this + ep->transfer_size = total_len > ep->wMaxPacketSize ? ep->wMaxPacketSize : total_len; } else { ep->transfer_size = total_len > 64 ? 64 : total_len; } - ep->transfer_size = total_len > 64 ? 64 : total_len; ep->active = true; ep->user_buf = buffer; // Recalculate if this is the last buffer @@ -240,7 +239,16 @@ bool _hw_endpoint_xfer_continue(struct hw_endpoint *ep) // Now we have synced our state with the hardware. Is there more data to transfer? uint remaining_bytes = ep->total_len - ep->len; - ep->transfer_size = remaining_bytes > 64 ? 64 : remaining_bytes; + // ep->transfer_size = remaining_bytes > 64 ? 64 : remaining_bytes; + + if(ep->transfer_type == TUSB_XFER_ISOCHRONOUS) + { + ep->transfer_size = remaining_bytes > ep->wMaxPacketSize ? ep->wMaxPacketSize : remaining_bytes; + } + else + { + ep->transfer_size = remaining_bytes > 64 ? 64 : remaining_bytes; + } _hw_endpoint_update_last_buf(ep); // Can happen because of programmer error so check for it From ac87a4547d520fd41815ccb5155ed6680de46ce0 Mon Sep 17 00:00:00 2001 From: ndinsmore <45537276+ndinsmore@users.noreply.github.com> Date: Thu, 18 Feb 2021 08:25:04 -0500 Subject: [PATCH 3/4] Change to using tu_min32 This was a github edit, not tested --- src/portable/raspberrypi/rp2040/rp2040_usb.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/portable/raspberrypi/rp2040/rp2040_usb.c b/src/portable/raspberrypi/rp2040/rp2040_usb.c index d3cbb2a2..9bf35952 100644 --- a/src/portable/raspberrypi/rp2040/rp2040_usb.c +++ b/src/portable/raspberrypi/rp2040/rp2040_usb.c @@ -156,11 +156,11 @@ void _hw_endpoint_xfer_start(struct hw_endpoint *ep, uint8_t *buffer, uint16_t t // FIXME: What if low speed if(ep->transfer_type == TUSB_XFER_ISOCHRONOUS) { - ep->transfer_size = total_len > ep->wMaxPacketSize ? ep->wMaxPacketSize : total_len; + ep->transfer_size = tu_min32(total_len, ep->wMaxPacketSize); } else { - ep->transfer_size = total_len > 64 ? 64 : total_len; + ep->transfer_size = tu_min32(total_len, 64); } ep->active = true; ep->user_buf = buffer; @@ -243,11 +243,11 @@ bool _hw_endpoint_xfer_continue(struct hw_endpoint *ep) if(ep->transfer_type == TUSB_XFER_ISOCHRONOUS) { - ep->transfer_size = remaining_bytes > ep->wMaxPacketSize ? ep->wMaxPacketSize : remaining_bytes; + ep->transfer_size = tu_min32(remaining_bytes,ep->wMaxPacketSize); } else { - ep->transfer_size = remaining_bytes > 64 ? 64 : remaining_bytes; + ep->transfer_size = tu_min32(remaining_bytes, 64); } _hw_endpoint_update_last_buf(ep); From cb5b9eb2f671a6d1a00205e0df01b0d68725ec60 Mon Sep 17 00:00:00 2001 From: ndinsmore <45537276+ndinsmore@users.noreply.github.com> Date: Fri, 19 Feb 2021 08:33:06 -0500 Subject: [PATCH 4/4] Remove stray. commented out line --- src/portable/raspberrypi/rp2040/rp2040_usb.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/portable/raspberrypi/rp2040/rp2040_usb.c b/src/portable/raspberrypi/rp2040/rp2040_usb.c index 9bf35952..a6e0ed56 100644 --- a/src/portable/raspberrypi/rp2040/rp2040_usb.c +++ b/src/portable/raspberrypi/rp2040/rp2040_usb.c @@ -239,7 +239,6 @@ bool _hw_endpoint_xfer_continue(struct hw_endpoint *ep) // Now we have synced our state with the hardware. Is there more data to transfer? uint remaining_bytes = ep->total_len - ep->len; - // ep->transfer_size = remaining_bytes > 64 ? 64 : remaining_bytes; if(ep->transfer_type == TUSB_XFER_ISOCHRONOUS) {