Ver Fonte

add usbd_event_handler for users

sakumisu há 2 anos atrás
pai
commit
d7c0add7ef
4 ficheiros alterados com 59 adições e 19 exclusões
  1. 1 11
      class/cdc/usbd_cdc.c
  2. 23 4
      common/usb_dc.h
  3. 33 4
      core/usbd_core.c
  4. 2 0
      core/usbd_core.h

+ 1 - 11
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;
 }

+ 23 - 4
common/usb_dc.h

@@ -143,15 +143,37 @@ 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

+ 33 - 4
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;
+    }
+}

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