summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2024-01-16 22:50:29 +0800
committersakumisu <[email protected]>2024-01-16 22:50:48 +0800
commit0f5e05052f53cd3bdc7ff0e9a2f535a532748bbf (patch)
tree3a879205bcbdeb477add46a44749098ad65b419f
parentb773cecd2eff3d71250c00064d240c13e1c6d1d6 (diff)
add usbd init and deinit event macro
-rw-r--r--class/msc/usbd_msc.c32
-rw-r--r--core/usbd_core.c11
-rw-r--r--core/usbd_core.h2
3 files changed, 34 insertions, 11 deletions
diff --git a/class/msc/usbd_msc.c b/class/msc/usbd_msc.c
index 26ca70bf..45df1b3c 100644
--- a/class/msc/usbd_msc.c
+++ b/class/msc/usbd_msc.c
@@ -85,6 +85,28 @@ static int msc_storage_class_interface_request_handler(struct usb_setup_packet *
void msc_storage_notify_handler(uint8_t event, void *arg)
{
switch (event) {
+ case USBD_EVENT_INIT:
+#ifdef CONFIG_USBDEV_MSC_THREAD
+ g_usbd_msc.usbd_msc_mq = usb_osal_mq_create(1);
+ if (g_usbd_msc.usbd_msc_mq == NULL) {
+ USB_LOG_ERR("No memory to alloc for g_usbd_msc.usbd_msc_mq\r\n");
+ }
+ g_usbd_msc.usbd_msc_thread = usb_osal_thread_create("usbd_msc", CONFIG_USBDEV_MSC_STACKSIZE, CONFIG_USBDEV_MSC_PRIO, usbdev_msc_thread, NULL);
+ if (g_usbd_msc.usbd_msc_thread == NULL) {
+ USB_LOG_ERR("No memory to alloc for g_usbd_msc.usbd_msc_thread\r\n");
+ }
+#endif
+ break;
+ case USBD_EVENT_DEINIT:
+#ifdef CONFIG_USBDEV_MSC_THREAD
+ if (g_usbd_msc.usbd_msc_mq) {
+ usb_osal_mq_delete(g_usbd_msc.usbd_msc_mq);
+ }
+ if (g_usbd_msc.usbd_msc_thread) {
+ usb_osal_thread_delete(g_usbd_msc.usbd_msc_thread);
+ }
+#endif
+ break;
case USBD_EVENT_RESET:
usbd_msc_reset();
break;
@@ -888,16 +910,6 @@ struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf, const uin
return NULL;
}
-#ifdef CONFIG_USBDEV_MSC_THREAD
- g_usbd_msc.usbd_msc_mq = usb_osal_mq_create(1);
- if (g_usbd_msc.usbd_msc_mq == NULL) {
- return NULL;
- }
- g_usbd_msc.usbd_msc_thread = usb_osal_thread_create("usbd_msc", CONFIG_USBDEV_MSC_STACKSIZE, CONFIG_USBDEV_MSC_PRIO, usbdev_msc_thread, NULL);
- if (g_usbd_msc.usbd_msc_thread == NULL) {
- return NULL;
- }
-#endif
return intf;
}
diff --git a/core/usbd_core.c b/core/usbd_core.c
index fd36019c..2768419d 100644
--- a/core/usbd_core.c
+++ b/core/usbd_core.c
@@ -1202,19 +1202,28 @@ bool usb_device_is_configured(void)
int usbd_initialize(void)
{
- return usb_dc_init();
+ int ret;
+
+ ret = usb_dc_init();
+ usbd_class_event_notify_handler(USBD_EVENT_INIT, NULL);
+ return ret;
}
int usbd_deinitialize(void)
{
g_usbd_core.intf_offset = 0;
usb_dc_deinit();
+ usbd_class_event_notify_handler(USBD_EVENT_DEINIT, NULL);
return 0;
}
__WEAK void usbd_event_handler(uint8_t event)
{
switch (event) {
+ case USBD_EVENT_INIT:
+ break;
+ case USBD_EVENT_DEINIT:
+ break;
case USBD_EVENT_RESET:
break;
case USBD_EVENT_CONNECTED:
diff --git a/core/usbd_core.h b/core/usbd_core.h
index 85d53677..ca70fc69 100644
--- a/core/usbd_core.h
+++ b/core/usbd_core.h
@@ -38,6 +38,8 @@ enum usbd_event_type {
USBD_EVENT_SET_INTERFACE, /** USB interface selected */
USBD_EVENT_SET_REMOTE_WAKEUP, /** USB set remote wakeup */
USBD_EVENT_CLR_REMOTE_WAKEUP, /** USB clear remote wakeup */
+ USBD_EVENT_INIT, /** USB init done when call usbd_initialize */
+ USBD_EVENT_DEINIT, /** USB deinit done when call usbd_deinitialize */
USBD_EVENT_UNKNOWN
};