From 09868434cd9f53394350cce682333ada97f796c3 Mon Sep 17 00:00:00 2001 From: ndinsmore <45537276+ndinsmore@users.noreply.github.com> Date: Fri, 12 Feb 2021 03:16:46 -0500 Subject: [PATCH] Fixes RP2040 buffer reallocation overrun problem (#642) Fix running out of memory on a device that repeatedly closes and opens an endpoint. This is a workaround at the moment. A better solution would be to implement reclaiming usb buffer memory when closing an endpoint (i.e. implement dcd_edpt_close). --- src/portable/raspberrypi/rp2040/dcd_rp2040.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/portable/raspberrypi/rp2040/dcd_rp2040.c b/src/portable/raspberrypi/rp2040/dcd_rp2040.c index a54f579b..95b0963a 100644 --- a/src/portable/raspberrypi/rp2040/dcd_rp2040.c +++ b/src/portable/raspberrypi/rp2040/dcd_rp2040.c @@ -164,8 +164,12 @@ static void _hw_endpoint_init(struct hw_endpoint *ep, uint8_t ep_addr, uint wMax ep->endpoint_control = &usb_dpram->ep_ctrl[num-1].out; } - // Now alloc a buffer and fill in endpoint control register - _hw_endpoint_alloc(ep); + // Now if it hasn't already been done + //alloc a buffer and fill in endpoint control register + if(!(ep->configured)) + { + _hw_endpoint_alloc(ep); + } } ep->configured = true;