From 67d9d675c60617370b18c4cdb52ebe8db114535c Mon Sep 17 00:00:00 2001 From: Andrew Leech Date: Wed, 31 Jul 2024 21:40:05 +1000 Subject: [PATCH] shared/tinyusb: Wake main task if needed at end of USB ISR. Signed-off-by: Andrew Leech --- ports/mimxrt/mphalport.h | 4 ++++ ports/nrf/mphalport.h | 4 ++++ ports/renesas-ra/mphalport.h | 6 ++++-- ports/rp2/mphalport.h | 4 ++++ ports/samd/mphalport.h | 4 ++++ shared/tinyusb/mp_usbd.c | 2 ++ 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ports/mimxrt/mphalport.h b/ports/mimxrt/mphalport.h index c69ebf58106b..a0e457502442 100644 --- a/ports/mimxrt/mphalport.h +++ b/ports/mimxrt/mphalport.h @@ -109,6 +109,10 @@ __attribute__((always_inline)) static inline uint32_t disable_irq(void) { void mp_hal_set_interrupt_char(int c); +static inline void mp_hal_wake_main_task_from_isr(void) { + // Defined for tinyusb support, nothing needs to be done here. +} + static inline mp_uint_t mp_hal_ticks_ms(void) { return ticks_ms32(); } diff --git a/ports/nrf/mphalport.h b/ports/nrf/mphalport.h index 50c61aefcdd5..a0bca58a625b 100644 --- a/ports/nrf/mphalport.h +++ b/ports/nrf/mphalport.h @@ -53,6 +53,10 @@ void mp_hal_set_interrupt_char(int c); // -1 to disable int mp_hal_stdin_rx_chr(void); void mp_hal_stdout_tx_str(const char *str); +static inline void mp_hal_wake_main_task_from_isr(void) { + // Defined for tinyusb support, nothing needs to be done here. +} + void mp_hal_delay_ms(mp_uint_t ms); void mp_hal_delay_us(mp_uint_t us); diff --git a/ports/renesas-ra/mphalport.h b/ports/renesas-ra/mphalport.h index 14e6ee0c3eea..00cf00b5484a 100644 --- a/ports/renesas-ra/mphalport.h +++ b/ports/renesas-ra/mphalport.h @@ -52,6 +52,10 @@ static inline int mp_hal_status_to_neg_errno(HAL_StatusTypeDef status) { NORETURN void mp_hal_raise(HAL_StatusTypeDef status); void mp_hal_set_interrupt_char(int c); // -1 to disable +static inline void mp_hal_wake_main_task_from_isr(void) { + // Defined for tinyusb support, nothing needs to be done here. +} + // timing functions #include "irq.h" @@ -117,5 +121,3 @@ enum { }; void mp_hal_get_mac(int idx, uint8_t buf[6]); - -void mp_hal_set_interrupt_char(int c); // -1 to disable diff --git a/ports/rp2/mphalport.h b/ports/rp2/mphalport.h index 16ac4259a6fe..09ad54dd1eb7 100644 --- a/ports/rp2/mphalport.h +++ b/ports/rp2/mphalport.h @@ -77,6 +77,10 @@ void mp_thread_end_atomic_section(uint32_t); void mp_hal_set_interrupt_char(int c); void mp_hal_time_ns_set_from_rtc(void); +static inline void mp_hal_wake_main_task_from_isr(void) { + // Defined for tinyusb support, nothing needs to be done here. +} + static inline void mp_hal_delay_us_fast(mp_uint_t us) { busy_wait_us(us); } diff --git a/ports/samd/mphalport.h b/ports/samd/mphalport.h index ee1ebf7aea2b..6c9e525bb916 100644 --- a/ports/samd/mphalport.h +++ b/ports/samd/mphalport.h @@ -50,6 +50,10 @@ uint64_t mp_hal_ticks_us_64(void); void mp_hal_set_interrupt_char(int c); +static inline void mp_hal_wake_main_task_from_isr(void) { + // Defined for tinyusb support, nothing needs to be done here. +} + __attribute__((always_inline)) static inline void enable_irq(uint32_t state) { __set_PRIMASK(state); } diff --git a/shared/tinyusb/mp_usbd.c b/shared/tinyusb/mp_usbd.c index 436314dcde5c..81d770e83a74 100644 --- a/shared/tinyusb/mp_usbd.c +++ b/shared/tinyusb/mp_usbd.c @@ -25,6 +25,7 @@ */ #include "py/mpconfig.h" +#include "mphalport.h" #if MICROPY_HW_ENABLE_USBDEV @@ -55,6 +56,7 @@ extern void __real_dcd_event_handler(dcd_event_t const *event, bool in_isr); TU_ATTR_FAST_FUNC void __wrap_dcd_event_handler(dcd_event_t const *event, bool in_isr) { __real_dcd_event_handler(event, in_isr); mp_usbd_schedule_task(); + mp_hal_wake_main_task_from_isr(); } TU_ATTR_FAST_FUNC void mp_usbd_schedule_task(void) {