diff options
| author | sakumisu <[email protected]> | 2023-03-22 15:00:34 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2023-03-22 15:00:34 +0800 |
| commit | d7c0add7ef58cfa711cf152c088a7e1c65fa5886 (patch) | |
| tree | 1bc9c59cf5d8afd6eb470bbd33023613887bd9ef | |
| parent | e9ad3bdc21c9f223edad45679cb863bd3f8b0e09 (diff) | |
add usbd_event_handler for users
| -rw-r--r-- | class/cdc/usbd_cdc.c | 12 | ||||
| -rw-r--r-- | common/usb_dc.h | 27 | ||||
| -rw-r--r-- | core/usbd_core.c | 37 | ||||
| -rw-r--r-- | core/usbd_core.h | 2 |
4 files changed, 59 insertions, 19 deletions
diff --git a/class/cdc/usbd_cdc.c b/class/cdc/usbd_cdc.c index 2f4977f4..1820037e 100644 --- a/class/cdc/usbd_cdc.c +++ b/class/cdc/usbd_cdc.c @@ -80,22 +80,12 @@ static int cdc_acm_class_interface_request_handler(struct usb_setup_packet *setu return 0; } -static void cdc_notify_handler(uint8_t event, void *arg) -{ - switch (event) { - case USBD_EVENT_RESET: - break; - default: - break; - } -} - struct usbd_interface *usbd_cdc_acm_init_intf(struct usbd_interface *intf) { intf->class_interface_handler = cdc_acm_class_interface_request_handler; intf->class_endpoint_handler = NULL; intf->vendor_handler = NULL; - intf->notify_handler = cdc_notify_handler; + intf->notify_handler = NULL; return intf; } diff --git a/common/usb_dc.h b/common/usb_dc.h index ca45150a..a541330a 100644 --- a/common/usb_dc.h +++ b/common/usb_dc.h @@ -144,14 +144,36 @@ int usbd_ep_start_read(const uint8_t ep, uint8_t *data, uint32_t data_len); /* usb dcd irq callback */ /** + * @brief Usb connect irq callback. + */ +void usbd_event_connect_handler(void); + +/** + * @brief Usb disconnect irq callback. + */ +void usbd_event_disconnect_handler(void); + +/** + * @brief Usb resume irq callback. + */ +void usbd_event_resume_handler(void); + +/** + * @brief Usb suspend irq callback. + */ +void usbd_event_suspend_handler(void); + +/** * @brief Usb reset irq callback. */ void usbd_event_reset_handler(void); + /** * @brief Usb setup packet recv irq callback. * @param[in] psetup setup packet. */ void usbd_event_ep0_setup_complete_handler(uint8_t *psetup); + /** * @brief In ep transfer complete irq callback. * @param[in] ep Endpoint address corresponding to the one @@ -159,6 +181,7 @@ void usbd_event_ep0_setup_complete_handler(uint8_t *psetup); * @param[in] nbytes How many nbytes have transferred. */ void usbd_event_ep_in_complete_handler(uint8_t ep, uint32_t nbytes); + /** * @brief Out ep transfer complete irq callback. * @param[in] ep Endpoint address corresponding to the one @@ -167,10 +190,6 @@ void usbd_event_ep_in_complete_handler(uint8_t ep, uint32_t nbytes); */ void usbd_event_ep_out_complete_handler(uint8_t ep, uint32_t nbytes); -/** - * @} - */ - #ifdef __cplusplus } #endif diff --git a/core/usbd_core.c b/core/usbd_core.c index b73a5caf..c6904b40 100644 --- a/core/usbd_core.c +++ b/core/usbd_core.c @@ -553,6 +553,7 @@ static bool usbd_std_device_req_handler(struct usb_setup_packet *setup, uint8_t usbd_core_cfg.configuration = value; usbd_core_cfg.configured = true; usbd_class_event_notify_handler(USBD_EVENT_CONFIGURED, NULL); + usbd_event_handler(USBD_EVENT_CONFIGURED); usbd_configure_done_callback(); } *len = 0; @@ -947,22 +948,22 @@ static void usbd_class_event_notify_handler(uint8_t event, void *arg) void usbd_event_connect_handler(void) { - usbd_class_event_notify_handler(USBD_EVENT_CONNECTED, NULL); + usbd_event_handler(USBD_EVENT_CONNECTED); } void usbd_event_disconnect_handler(void) { - usbd_class_event_notify_handler(USBD_EVENT_DISCONNECTED, NULL); + usbd_event_handler(USBD_EVENT_DISCONNECTED); } void usbd_event_resume_handler(void) { - usbd_class_event_notify_handler(USBD_EVENT_RESUME, NULL); + usbd_event_handler(USBD_EVENT_RESUME); } void usbd_event_suspend_handler(void) { - usbd_class_event_notify_handler(USBD_EVENT_SUSPEND, NULL); + usbd_event_handler(USBD_EVENT_SUSPEND); } void usbd_event_reset_handler(void) @@ -985,6 +986,7 @@ void usbd_event_reset_handler(void) usbd_ep_open(&ep0_cfg); usbd_class_event_notify_handler(USBD_EVENT_RESET, NULL); + usbd_event_handler(USBD_EVENT_RESET); } void usbd_event_ep0_setup_complete_handler(uint8_t *psetup) @@ -1174,8 +1176,11 @@ static void usbdev_rx_thread(void *argument) #ifdef CONFIG_USBDEV_ADVANCE_DESC void usbd_desc_register(struct usb_descriptor *desc) { + memset(&usbd_core_cfg, 0, sizeof(struct usbd_core_cfg_priv)); + usbd_core_cfg.descriptors = desc; usbd_core_cfg.intf_offset = 0; + tx_msg[0].ep = 0x80; tx_msg[0].cb = usbd_event_ep0_in_complete_handler; rx_msg[0].ep = 0x00; @@ -1184,8 +1189,11 @@ void usbd_desc_register(struct usb_descriptor *desc) #else void usbd_desc_register(const uint8_t *desc) { + memset(&usbd_core_cfg, 0, sizeof(struct usbd_core_cfg_priv)); + usbd_core_cfg.descriptors = desc; usbd_core_cfg.intf_offset = 0; + tx_msg[0].ep = 0x80; tx_msg[0].cb = usbd_event_ep0_in_complete_handler; rx_msg[0].ep = 0x00; @@ -1267,3 +1275,24 @@ int usbd_deinitialize(void) #endif return 0; } + +__WEAK void usbd_event_handler(uint8_t event) +{ + switch (event) { + case USBD_EVENT_RESET: + break; + case USBD_EVENT_CONNECTED: + break; + case USBD_EVENT_DISCONNECTED: + break; + case USBD_EVENT_RESUME: + break; + case USBD_EVENT_SUSPEND: + break; + case USBD_EVENT_CONFIGURED: + break; + + default: + break; + } +} diff --git a/core/usbd_core.h b/core/usbd_core.h index 1c978d19..3273b5e3 100644 --- a/core/usbd_core.h +++ b/core/usbd_core.h @@ -93,6 +93,8 @@ void usbd_configure_done_callback(void); int usbd_initialize(void); int usbd_deinitialize(void); +void usbd_event_handler(uint8_t event); + #ifdef __cplusplus } #endif |
