From 587d1b334b9368759b2afba3114bc5590e7aee09 Mon Sep 17 00:00:00 2001 From: Peter Lawrence <12226419+majbthrd@users.noreply.github.com> Date: Sat, 23 Jan 2021 20:19:10 -0600 Subject: [PATCH 1/2] rp2040_hcd: check pointer before using --- src/portable/raspberrypi/rp2040/hcd_rp2040.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/portable/raspberrypi/rp2040/hcd_rp2040.c b/src/portable/raspberrypi/rp2040/hcd_rp2040.c index c74578c3..5ea9c7d5 100644 --- a/src/portable/raspberrypi/rp2040/hcd_rp2040.c +++ b/src/portable/raspberrypi/rp2040/hcd_rp2040.c @@ -444,6 +444,7 @@ bool hcd_edpt_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr, uint8_t * // Get appropriate ep. Either EPX or interrupt endpoint struct hw_endpoint *ep = get_dev_ep(dev_addr, ep_addr); + assert(ep); if (ep_addr != ep->ep_addr) { From edc2224118ca18d8c9dd9d6d77d66f6a6d904230 Mon Sep 17 00:00:00 2001 From: Peter Lawrence <12226419+majbthrd@users.noreply.github.com> Date: Sat, 23 Jan 2021 20:21:58 -0600 Subject: [PATCH 2/2] rp2040: start to adopt TU coding conventions --- src/portable/raspberrypi/rp2040/dcd_rp2040.c | 16 ++++++++-------- src/portable/raspberrypi/rp2040/hcd_rp2040.c | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/portable/raspberrypi/rp2040/dcd_rp2040.c b/src/portable/raspberrypi/rp2040/dcd_rp2040.c index 80e5d3c4..8ad1729e 100644 --- a/src/portable/raspberrypi/rp2040/dcd_rp2040.c +++ b/src/portable/raspberrypi/rp2040/dcd_rp2040.c @@ -38,8 +38,6 @@ #include "device/dcd.h" -#include "pico/stdlib.h" - /*------------------------------------------------------------------*/ /* Low level controller *------------------------------------------------------------------*/ @@ -67,11 +65,7 @@ static struct hw_endpoint *hw_endpoint_get_by_addr(uint8_t ep_addr) } static void _hw_endpoint_alloc(struct hw_endpoint *ep) { - uint size = 64; - if (ep->wMaxPacketSize > 64) - { - size = ep->wMaxPacketSize; - } + uint size = TU_MIN(64, ep->wMaxPacketSize); // Assumes single buffered for now ep->hw_data_buf = next_buffer_ptr; @@ -244,7 +238,7 @@ static void reset_ep0(void) // If we have finished this transfer on EP0 set pid back to 1 for next // setup transfer. Also clear a stall in case uint8_t addrs[] = {0x0, 0x80}; - for (uint i = 0 ; i < count_of(addrs); i++) + for (uint i = 0 ; i < TU_ARRAY_SIZE(addrs); i++) { struct hw_endpoint *ep = hw_endpoint_get_by_addr(addrs[i]); ep->next_pid = 1u; @@ -479,4 +473,10 @@ void dcd_edpt_close (uint8_t rhport, uint8_t ep_addr) } +void dcd_int_handler(uint8_t rhport) +{ + (void) rhport; + dcd_rp2040_irq(); +} + #endif diff --git a/src/portable/raspberrypi/rp2040/hcd_rp2040.c b/src/portable/raspberrypi/rp2040/hcd_rp2040.c index 5ea9c7d5..efb2bd43 100644 --- a/src/portable/raspberrypi/rp2040/hcd_rp2040.c +++ b/src/portable/raspberrypi/rp2040/hcd_rp2040.c @@ -86,7 +86,7 @@ static void set_dev_ep(uint8_t dev_addr, uint8_t ep_addr, struct hw_endpoint *ep uint8_t num = tu_edpt_number(ep_addr); uint8_t in = (ep_addr & TUSB_DIR_IN_MASK) ? 1 : 0; uint32_t index = ep - eps; - hard_assert(index < count_of(eps)); + hard_assert(index < TU_ARRAY_SIZE(eps)); // todo revisit why dev_addr can be 0 here if (dev_addr) { dev_ep_map[dev_addr-1][num][in] = 128u | index; @@ -245,7 +245,7 @@ static void hcd_rp2040_irq(void) static struct hw_endpoint *_next_free_interrupt_ep(void) { struct hw_endpoint *ep = NULL; - for (uint i = 1; i < count_of(eps); i++) + for (uint i = 1; i < TU_ARRAY_SIZE(eps); i++) { ep = &eps[i]; if (!ep->configured)