From 40de723d417e253e3346b58cd2ce8b5dbf60d0ac Mon Sep 17 00:00:00 2001 From: hathach Date: Thu, 5 Jul 2018 00:23:47 +0700 Subject: [PATCH] allow tusb_init() to call multiple times enhance nrf5x --- src/portable/nordic/nrf5x/hal_nrf5x.c | 34 ++++++++++++++++----------- src/tusb.c | 8 +++++++ 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/portable/nordic/nrf5x/hal_nrf5x.c b/src/portable/nordic/nrf5x/hal_nrf5x.c index f616264f..68e19a42 100644 --- a/src/portable/nordic/nrf5x/hal_nrf5x.c +++ b/src/portable/nordic/nrf5x/hal_nrf5x.c @@ -134,6 +134,12 @@ static void hfclk_disable(void) *------------------------------------------------------------------*/ bool tusb_hal_init(void) { + // TODO may move to application + + // USB power may already be ready at this time -> no event generated + // We need to execute the handler based on the status + uint32_t usb_reg; + #ifdef SOFTDEVICE_PRESENT if ( is_sd_enabled() ) { @@ -141,22 +147,22 @@ bool tusb_hal_init(void) sd_power_usbpwrrdy_enable(true); sd_power_usbremoved_enable(true); - // USB power may already be ready at this time -> no event generated - // We need to execute the handler based on the status - uint32_t usb_reg; sd_power_usbregstatus_get(&usb_reg); - - if (usb_reg & POWER_USBREGSTATUS_VBUSDETECT_Msk ) - { - tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_DETECTED); - } - - if (usb_reg & POWER_USBREGSTATUS_OUTPUTRDY_Msk ) - { - tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_READY); - } - } + }else #endif + { + usb_reg = NRF_POWER->USBREGSTATUS; + } + + if (usb_reg & POWER_USBREGSTATUS_VBUSDETECT_Msk ) + { + tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_DETECTED); + } + + if (usb_reg & POWER_USBREGSTATUS_OUTPUTRDY_Msk ) + { + tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_READY); + } return true; } diff --git a/src/tusb.c b/src/tusb.c index dd3be72e..fde29c24 100644 --- a/src/tusb.c +++ b/src/tusb.c @@ -41,8 +41,14 @@ #include "tusb.h" #include "device/usbd_pvt.h" +static bool _initialized = false; + + tusb_error_t tusb_init(void) { + // skip if already initialized + if (_initialized) return TUSB_ERROR_NONE; + VERIFY( tusb_hal_init(), TUSB_ERROR_FAILED ) ; // hardware init #if MODE_HOST_SUPPORTED @@ -53,6 +59,8 @@ tusb_error_t tusb_init(void) TU_ASSERT_ERR ( usbd_init() ); // device stack init #endif + _initialized = true; + return TUSB_ERROR_NONE; }