Просмотр исходного кода

add usbd init and deinit event macro

sakumisu 2 лет назад
Родитель
Сommit
0f5e05052f
3 измененных файлов с 34 добавлено и 11 удалено
  1. 22 10
      class/msc/usbd_msc.c
  2. 10 1
      core/usbd_core.c
  3. 2 0
      core/usbd_core.h

+ 22 - 10
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;
 }
 

+ 10 - 1
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:

+ 2 - 0
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
 };