From d1b6202693997c54ed0419417bef9f219d13b691 Mon Sep 17 00:00:00 2001 From: "Kwabena W. Agyeman" Date: Thu, 13 May 2021 12:50:52 -0700 Subject: [PATCH] Fixed usb command draining --- src/omv/common/usbdbg.c | 5 +++++ src/omv/common/usbdbg.h | 4 ++++ src/omv/ports/nrf/main.c | 2 ++ src/omv/ports/stm32/main.c | 2 ++ 4 files changed, 13 insertions(+) diff --git a/src/omv/common/usbdbg.c b/src/omv/common/usbdbg.c index fc56657b4..e926e701f 100644 --- a/src/omv/common/usbdbg.c +++ b/src/omv/common/usbdbg.c @@ -55,6 +55,11 @@ void usbdbg_init() mp_const_ide_interrupt = mp_obj_new_exception_msg(&mp_type_Exception, "IDE interrupt"); } +void usbdbg_wait_for_command(uint32_t timeout) +{ + for (mp_uint_t ticks = mp_hal_ticks_ms(); ((mp_hal_ticks_ms() - ticks) < timeout) && (cmd != USBDBG_NONE); ); +} + bool usbdbg_script_ready() { return script_ready; diff --git a/src/omv/common/usbdbg.h b/src/omv/common/usbdbg.h index 16797ad74..a4f8627ec 100644 --- a/src/omv/common/usbdbg.h +++ b/src/omv/common/usbdbg.h @@ -10,6 +10,7 @@ */ #ifndef __USBDBG_H__ #define __USBDBG_H__ + /** * Firmware version (major, minor and patch numbers). * @@ -47,7 +48,9 @@ enum usbdbg_cmd { USBDBG_TX_BUF =0x8F, USBDBG_SENSOR_ID =0x90 }; + void usbdbg_init(); +void usbdbg_wait_for_command(uint32_t timeout); bool usbdbg_script_ready(); vstr_t *usbdbg_get_script(); bool usbdbg_get_irq_enabled(); @@ -56,4 +59,5 @@ void usbdbg_set_script_running(bool running); void usbdbg_data_in(void *buffer, int length); void usbdbg_data_out(void *buffer, int length); void usbdbg_control(void *buffer, uint8_t brequest, uint32_t wlength); + #endif /* __USBDBG_H__ */ diff --git a/src/omv/ports/nrf/main.c b/src/omv/ports/nrf/main.c index da5d53d6c..8efcc0a86 100644 --- a/src/omv/ports/nrf/main.c +++ b/src/omv/ports/nrf/main.c @@ -286,6 +286,8 @@ soft_reset: } } + usbdbg_wait_for_command(1000); + usbdbg_set_irq_enabled(false); mp_deinit(); diff --git a/src/omv/ports/stm32/main.c b/src/omv/ports/stm32/main.c index 1c3f7052e..23953a00d 100644 --- a/src/omv/ports/stm32/main.c +++ b/src/omv/ports/stm32/main.c @@ -761,6 +761,8 @@ soft_reset: } } while (openmv_config.wifidbg == true); + usbdbg_wait_for_command(1000); + #if MICROPY_PY_LWIP // Must call GC sweep here to close open sockets. gc_sweep_all();