Forráskód Böngészése

fix(core): adjust init&deinit event callback position

Signed-off-by: sakumisu <1203593632@qq.com>
sakumisu 1 hónapja
szülő
commit
3d97aeebde
3 módosított fájl, 6 hozzáadás és 7 törlés
  1. 2 1
      class/hub/usbh_hub.c
  2. 3 4
      core/usbd_core.c
  3. 1 2
      core/usbh_core.c

+ 2 - 1
class/hub/usbh_hub.c

@@ -681,8 +681,9 @@ static void usbh_hub_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV)
 
     struct usbh_bus *bus = (struct usbh_bus *)CONFIG_USB_OSAL_THREAD_GET_ARGV;
 
-    usb_hc_init(bus);
     bus->event_handler(bus->busid, USB_HUB_INDEX_ANY, USB_HUB_PORT_ANY, USB_INTERFACE_ANY, USBH_EVENT_INIT);
+    usb_hc_init(bus);
+
     while (1) {
         ret = usb_osal_mq_recv(bus->hub_mq, (uintptr_t *)&hub, USB_OSAL_WAITING_FOREVER);
         if (ret < 0) {

+ 3 - 4
core/usbd_core.c

@@ -1364,9 +1364,9 @@ int usbd_initialize(uint8_t busid, uintptr_t reg_base, void (*event_handler)(uin
 #endif
 
     g_usbd_core[busid].event_handler = event_handler;
-    ret = usb_dc_init(busid);
     usbd_class_event_notify_handler(busid, USBD_EVENT_INIT, NULL);
     g_usbd_core[busid].event_handler(busid, USBD_EVENT_INIT);
+    ret = usb_dc_init(busid);
     return ret;
 }
 
@@ -1374,8 +1374,6 @@ int usbd_deinitialize(uint8_t busid)
 {
     USB_ASSERT_MSG(busid < CONFIG_USBDEV_MAX_BUS, "bus overflow\r\n");
 
-    g_usbd_core[busid].event_handler(busid, USBD_EVENT_DEINIT);
-    usbd_class_event_notify_handler(busid, USBD_EVENT_DEINIT, NULL);
     usb_dc_deinit(busid);
 #ifdef CONFIG_USBDEV_EP0_THREAD
     if (g_usbd_core[busid].usbd_ep0_thread) {
@@ -1385,6 +1383,7 @@ int usbd_deinitialize(uint8_t busid)
         usb_osal_mq_delete(g_usbd_core[busid].usbd_ep0_mq);
     }
 #endif
-
+    g_usbd_core[busid].event_handler(busid, USBD_EVENT_DEINIT);
+    usbd_class_event_notify_handler(busid, USBD_EVENT_DEINIT, NULL);
     return 0;
 }

+ 1 - 2
core/usbh_core.c

@@ -666,9 +666,8 @@ int usbh_deinitialize(uint8_t busid)
 
     bus = &g_usbhost_bus[busid];
 
-    bus->event_handler(bus->busid, USB_HUB_INDEX_ANY, USB_HUB_PORT_ANY, USB_INTERFACE_ANY, USBH_EVENT_DEINIT);
-
     usbh_hub_deinitialize(bus);
+    bus->event_handler(bus->busid, USB_HUB_INDEX_ANY, USB_HUB_PORT_ANY, USB_INTERFACE_ANY, USBH_EVENT_DEINIT);
 
     usb_slist_remove(&g_bus_head, &bus->list);