diff options
| author | Jeremiah McCarthy <[email protected]> | 2021-05-25 09:27:35 -0400 |
|---|---|---|
| committer | Jeremiah McCarthy <[email protected]> | 2021-05-25 09:27:35 -0400 |
| commit | ce59d69520166b37869cf83a3dab929c1b2c4ac4 (patch) | |
| tree | 1f1e1352941aa8c64d59e0e1bd426593ea77ae25 /src/device/usbd.c | |
| parent | 05892a5a1ee9c50cb966b2e8ec8243ef97f794e2 (diff) | |
| parent | ca8724ee08375e85c3a8fd15b5088d38c20c1ae8 (diff) | |
Merge remote-tracking branch 'official/master'
Diffstat (limited to 'src/device/usbd.c')
| -rw-r--r-- | src/device/usbd.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c index 863add2c5..8454a2951 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -44,6 +44,10 @@ //--------------------------------------------------------------------+ // Device Data //--------------------------------------------------------------------+ + +// Invalid driver ID in itf2drv[] ep2drv[][] mapping +enum { DRVID_INVALID = 0xFFu }; + typedef struct { struct TU_ATTR_PACKED @@ -76,9 +80,6 @@ typedef struct static usbd_device_t _usbd_dev; -// Invalid driver ID in itf2drv[] ep2drv[][] mapping -enum { DRVID_INVALID = 0xFFu }; - //--------------------------------------------------------------------+ // Class Driver //--------------------------------------------------------------------+ @@ -253,6 +254,8 @@ static inline usbd_class_driver_t const * get_driver(uint8_t drvid) // DCD Event //--------------------------------------------------------------------+ +static bool _usbd_initialized = false; + // Event queue // OPT_MODE_DEVICE is used by OS NONE for mutex (disable usb isr) OSAL_QUEUE_DEF(OPT_MODE_DEVICE, _usbd_qdef, CFG_TUD_TASK_QUEUE_SZ, dcd_event_t); @@ -380,8 +383,16 @@ bool tud_connect(void) //--------------------------------------------------------------------+ // USBD Task //--------------------------------------------------------------------+ -bool tud_init (void) +bool tud_inited(void) +{ + return _usbd_initialized; +} + +bool tud_init (uint8_t rhport) { + // skip if already initialized + if (_usbd_initialized) return _usbd_initialized; + TU_LOG2("USBD init\r\n"); tu_varclr(&_usbd_dev); @@ -411,8 +422,10 @@ bool tud_init (void) } // Init device controller driver - dcd_init(TUD_OPT_RHPORT); - dcd_int_enable(TUD_OPT_RHPORT); + dcd_init(rhport); + dcd_int_enable(rhport); + + _usbd_initialized = true; return true; } @@ -1089,7 +1102,7 @@ void dcd_event_xfer_complete (uint8_t rhport, uint8_t ep_addr, uint32_t xferred_ } //--------------------------------------------------------------------+ -// Helper +// USBD API For Class Driver //--------------------------------------------------------------------+ // Parse consecutive endpoint descriptors (IN & OUT) @@ -1183,7 +1196,6 @@ bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr) #if CFG_TUSB_OS != OPT_OS_NONE // pre-check to help reducing mutex lock TU_VERIFY((_usbd_dev.ep_status[epnum][dir].busy == 0) && (_usbd_dev.ep_status[epnum][dir].claimed == 0)); - osal_mutex_lock(_usbd_mutex, OSAL_TIMEOUT_WAIT_FOREVER); #endif |
