diff options
| author | Ha Thach <[email protected]> | 2021-05-22 22:56:17 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-05-22 22:56:17 +0700 |
| commit | 56577d9fcab58680b22d86be6ecac0a16f96f659 (patch) | |
| tree | 445278bc5e2aba1e9fbdc8cd064c5e4f09ee8ac2 /src/device | |
| parent | cdb063f007f16f5cfad7b4c05fc117da5f251b26 (diff) | |
| parent | f13a3c04f790a865472a7ed0b57182f401189977 (diff) | |
Merge pull request #834 from hathach/host-hid
Rework Host hid
Diffstat (limited to 'src/device')
| -rw-r--r-- | src/device/usbd.c | 28 | ||||
| -rw-r--r-- | src/device/usbd.h | 6 | ||||
| -rw-r--r-- | src/device/usbd_pvt.h | 2 |
3 files changed, 26 insertions, 10 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c index 2853b619b..9fddbc299 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 //--------------------------------------------------------------------+ @@ -241,6 +242,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); @@ -368,8 +371,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); @@ -399,8 +410,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; } @@ -1077,7 +1090,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) @@ -1171,7 +1184,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 diff --git a/src/device/usbd.h b/src/device/usbd.h index 7c50a6db0..c707cecfc 100644 --- a/src/device/usbd.h +++ b/src/device/usbd.h @@ -41,7 +41,10 @@ extern "C" { //--------------------------------------------------------------------+ // Init device stack -bool tud_init (void); +bool tud_init (uint8_t rhport); + +// Check if device stack is already initialized +bool tud_inited(void); // Task function should be called in main/rtos loop void tud_task (void); @@ -67,6 +70,7 @@ bool tud_mounted(void); bool tud_suspended(void); // Check if device is ready to transfer +TU_ATTR_ALWAYS_INLINE static inline bool tud_ready(void) { return tud_mounted() && !tud_suspended(); diff --git a/src/device/usbd_pvt.h b/src/device/usbd_pvt.h index 412a97a5d..44310f022 100644 --- a/src/device/usbd_pvt.h +++ b/src/device/usbd_pvt.h @@ -47,7 +47,7 @@ typedef struct void (* reset ) (uint8_t rhport); uint16_t (* open ) (uint8_t rhport, tusb_desc_interface_t const * desc_intf, uint16_t max_len); bool (* control_xfer_cb ) (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request); - bool (* xfer_cb ) (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); + bool (* xfer_cb ) (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes); void (* sof ) (uint8_t rhport); /* optional */ } usbd_class_driver_t; |
