From f2a5335417004cdc9398e3beac1f4861a5e29e0a Mon Sep 17 00:00:00 2001 From: Peter Lawrence <12226419+majbthrd@users.noreply.github.com> Date: Tue, 14 Jan 2020 22:07:38 -0600 Subject: [PATCH 1/2] nuc121: fix handling of OUT transfers larger than max packet size --- src/portable/nuvoton/nuc121/dcd_nuc121.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/portable/nuvoton/nuc121/dcd_nuc121.c b/src/portable/nuvoton/nuc121/dcd_nuc121.c index afe2cf001..892a20aa4 100644 --- a/src/portable/nuvoton/nuc121/dcd_nuc121.c +++ b/src/portable/nuvoton/nuc121/dcd_nuc121.c @@ -395,9 +395,11 @@ void USBD_IRQHandler(void) xfer->remaining_bytes -= available_bytes; xfer->data_ptr += available_bytes; - /* when the transfer is finished, alert TinyUSB */ + /* when the transfer is finished, alert TinyUSB; otherwise, accept more data */ if ( (0 == xfer->remaining_bytes) || (available_bytes < xfer->max_packet_size) ) dcd_event_xfer_complete(0, ep_addr, available_bytes, XFER_RESULT_SUCCESS, true); + else if (xfer->remaining_bytes) + ep->MXPLD = xfer->max_packet_size; } else { From 7f2db321bf8e1f97d4759cf2efef0f684a461916 Mon Sep 17 00:00:00 2001 From: Peter Lawrence <12226419+majbthrd@users.noreply.github.com> Date: Wed, 15 Jan 2020 10:23:23 -0600 Subject: [PATCH 2/2] nuc121: better fix for handling large OUT transfers --- src/portable/nuvoton/nuc121/dcd_nuc121.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/portable/nuvoton/nuc121/dcd_nuc121.c b/src/portable/nuvoton/nuc121/dcd_nuc121.c index 892a20aa4..237a5fd9a 100644 --- a/src/portable/nuvoton/nuc121/dcd_nuc121.c +++ b/src/portable/nuvoton/nuc121/dcd_nuc121.c @@ -397,7 +397,7 @@ void USBD_IRQHandler(void) /* when the transfer is finished, alert TinyUSB; otherwise, accept more data */ if ( (0 == xfer->remaining_bytes) || (available_bytes < xfer->max_packet_size) ) - dcd_event_xfer_complete(0, ep_addr, available_bytes, XFER_RESULT_SUCCESS, true); + dcd_event_xfer_complete(0, ep_addr, xfer->total_bytes, XFER_RESULT_SUCCESS, true); else if (xfer->remaining_bytes) ep->MXPLD = xfer->max_packet_size; }