diff options
| author | hathach <[email protected]> | 2018-10-25 15:02:43 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2018-10-25 15:02:43 +0700 |
| commit | b2f18744feefa77b30c7547d7aff11c53024570f (patch) | |
| tree | 466f06ced61ec9846011dd109c79e594c4d86249 /src | |
| parent | 8144be262bf418c96d16e26418e058a622c37007 (diff) | |
add dcd event helper setup_recieved and bus_signal
Diffstat (limited to 'src')
| -rw-r--r-- | src/device/dcd.h | 33 | ||||
| -rw-r--r-- | src/portable/nordic/nrf5x/dcd_nrf5x.c | 13 |
2 files changed, 27 insertions, 19 deletions
diff --git a/src/device/dcd.h b/src/device/dcd.h index 662496701..87837df20 100644 --- a/src/device/dcd.h +++ b/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
diff --git a/src/portable/nordic/nrf5x/dcd_nrf5x.c b/src/portable/nordic/nrf5x/dcd_nrf5x.c index d1ca91173..69e001240 100644 --- a/src/portable/nordic/nrf5x/dcd_nrf5x.c +++ b/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); } } |
