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

add dcd event helper setup_recieved and bus_signal

hathach 7 лет назад
Родитель
Сommit
b2f18744fe
2 измененных файлов с 27 добавлено и 19 удалено
  1. 24 9
      src/device/dcd.h
  2. 3 10
      src/portable/nordic/nrf5x/dcd_nrf5x.c

+ 24 - 9
src/device/dcd.h

@@ -68,7 +68,7 @@ typedef enum
   DCD_EVENT_XFER_COMPLETE,
 
   USBD_EVT_FUNC_CALL
-}usbd_eventid_t;
+} dcd_eventid_t;
 
 typedef struct ATTR_ALIGNED(4)
 {
@@ -112,21 +112,35 @@ void dcd_disconnect       (uint8_t rhport) ATTR_WEAK;
  *------------------------------------------------------------------*/
 void dcd_event_handler(dcd_event_t const * event, bool in_isr);
 
-static inline void dcd_event_xfer_complete(uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr)
+// helper to send bus signal event
+static inline void dcd_event_bus_signal (uint8_t rhport, dcd_eventid_t eid, bool in_isr)
 {
-  dcd_event_t event =
-  {
-   .rhport   = 0,
-   .event_id = DCD_EVENT_XFER_COMPLETE,
-  };
+  dcd_event_t event = { .rhport = 0, .event_id = eid, };
+  dcd_event_handler(&event, in_isr);
+}
+
+// helper to send setup received
+static inline void dcd_event_setup_recieved(uint8_t rhport, uint8_t const * setup, bool in_isr)
+{
+  dcd_event_t event = { .rhport = 0, .event_id = DCD_EVENT_SETUP_RECEIVED };
+  memcpy(&event.setup_received, setup, 8);
+
+  dcd_event_handler(&event, true);
+}
+
+// helper to send transfer complete event
+static inline void dcd_event_xfer_complete (uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr)
+{
+  dcd_event_t event = { .rhport = 0, .event_id = DCD_EVENT_XFER_COMPLETE };
 
   event.xfer_complete.ep_addr = ep_addr;
   event.xfer_complete.len     = xferred_bytes;
   event.xfer_complete.result  = result;
 
-  dcd_event_handler(&event, true);
+  dcd_event_handler(&event, in_isr);
 }
 
+
 /*------------------------------------------------------------------*/
 /* Endpoint API
  *------------------------------------------------------------------*/
@@ -143,7 +157,8 @@ bool dcd_edpt_stalled     (uint8_t rhport, uint8_t ep_addr);
 //------------- Control Endpoint -------------//
 bool dcd_control_xfer     (uint8_t rhport, uint8_t dir, uint8_t * buffer, uint16_t length);
 
-// Note input dir is value of direction bit in setup packet (i.e DATA stage direction)
+// Helper to send STATUS (zero length) packet
+// Note dir is value of direction bit in setup packet (i.e DATA stage direction)
 static inline bool dcd_control_status(uint8_t rhport, uint8_t dir)
 {
   // status direction is reversed to one in the setup packet

+ 3 - 10
src/portable/nordic/nrf5x/dcd_nrf5x.c

@@ -418,9 +418,7 @@ void USBD_IRQHandler(void)
   if ( int_status & USBD_INTEN_USBRESET_Msk )
   {
     bus_reset();
-
-    dcd_event_t event = { .rhport = 0, .event_id = DCD_EVENT_BUS_RESET };
-    dcd_event_handler(&event, true);
+    dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
   }
 
   if ( int_status & EDPT_END_ALL_MASK )
@@ -436,11 +434,7 @@ void USBD_IRQHandler(void)
         NRF_USBD->BMREQUESTTYPE , NRF_USBD->BREQUEST, NRF_USBD->WVALUEL , NRF_USBD->WVALUEH,
         NRF_USBD->WINDEXL       , NRF_USBD->WINDEXH , NRF_USBD->WLENGTHL, NRF_USBD->WLENGTHH
     };
-
-    dcd_event_t event = { .rhport = 0, .event_id = DCD_EVENT_SETUP_RECEIVED };
-    memcpy(&event.setup_received, setup, 8);
-
-    dcd_event_handler(&event, true);
+    dcd_event_setup_recieved(0, setup, true);
   }
 
   if ( int_status & USBD_INTEN_EP0DATADONE_Msk )
@@ -561,8 +555,7 @@ void USBD_IRQHandler(void)
   // SOF interrupt
   if ( int_status & USBD_INTEN_SOF_Msk )
   {
-    dcd_event_t event = { .rhport = 0, .event_id = DCD_EVENT_SOF };
-    dcd_event_handler(&event, true);
+    dcd_event_bus_signal(0, DCD_EVENT_SOF, true);
   }
 }