add usbd init and deinit event macro

This commit is contained in:
sakumisu
2024-01-16 22:50:29 +08:00
parent b773cecd2e
commit 0f5e05052f
3 changed files with 34 additions and 11 deletions

View File

@@ -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) void msc_storage_notify_handler(uint8_t event, void *arg)
{ {
switch (event) { 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: case USBD_EVENT_RESET:
usbd_msc_reset(); usbd_msc_reset();
break; break;
@@ -888,16 +910,6 @@ struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf, const uin
return NULL; 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; return intf;
} }

View File

@@ -1202,19 +1202,28 @@ bool usb_device_is_configured(void)
int usbd_initialize(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) int usbd_deinitialize(void)
{ {
g_usbd_core.intf_offset = 0; g_usbd_core.intf_offset = 0;
usb_dc_deinit(); usb_dc_deinit();
usbd_class_event_notify_handler(USBD_EVENT_DEINIT, NULL);
return 0; return 0;
} }
__WEAK void usbd_event_handler(uint8_t event) __WEAK void usbd_event_handler(uint8_t event)
{ {
switch (event) { switch (event) {
case USBD_EVENT_INIT:
break;
case USBD_EVENT_DEINIT:
break;
case USBD_EVENT_RESET: case USBD_EVENT_RESET:
break; break;
case USBD_EVENT_CONNECTED: case USBD_EVENT_CONNECTED:

View File

@@ -38,6 +38,8 @@ enum usbd_event_type {
USBD_EVENT_SET_INTERFACE, /** USB interface selected */ USBD_EVENT_SET_INTERFACE, /** USB interface selected */
USBD_EVENT_SET_REMOTE_WAKEUP, /** USB set remote wakeup */ USBD_EVENT_SET_REMOTE_WAKEUP, /** USB set remote wakeup */
USBD_EVENT_CLR_REMOTE_WAKEUP, /** USB clear 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 USBD_EVENT_UNKNOWN
}; };