summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2023-03-22 15:00:34 +0800
committersakumisu <[email protected]>2023-03-22 15:00:34 +0800
commitd7c0add7ef58cfa711cf152c088a7e1c65fa5886 (patch)
tree1bc9c59cf5d8afd6eb470bbd33023613887bd9ef
parente9ad3bdc21c9f223edad45679cb863bd3f8b0e09 (diff)
add usbd_event_handler for users
-rw-r--r--class/cdc/usbd_cdc.c12
-rw-r--r--common/usb_dc.h27
-rw-r--r--core/usbd_core.c37
-rw-r--r--core/usbd_core.h2
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