/**@brief IRQHandler used for execution context management. * Any available handler can be used as we're not using the associated hardware. * This handler is used to notify of received data */ void UESB_RX_HANDLE_IRQHandler(void) { uesb_payload_t payload; uint32_t err_code; // Get packet from UESB buffer uesb_read_rx_payload(&payload); // Give packet to main application via the scheduler err_code = app_sched_event_put(payload.data, payload.length, m_evt_handler); APP_ERROR_CHECK(err_code); }
static uesb_event_handler_t uesb_event_handler() { static uint32_t rf_interrupts; static uint32_t tx_attempts; uesb_get_clear_interrupts(&rf_interrupts); if (rf_interrupts & UESB_INT_TX_SUCCESS_MSK) {} if (rf_interrupts & UESB_INT_TX_FAILED_MSK) { uesb_flush_tx(); } if (rf_interrupts & UESB_INT_RX_DR_MSK) { uesb_read_rx_payload(&rx_payload); NRF_GPIO->OUTCLR = 0xFUL << 8; NRF_GPIO->OUTSET = (uint32_t)((rx_payload.data[2] & 0x0F) << 8); } uesb_get_tx_attempts(&tx_attempts); NRF_GPIO->OUTCLR = 0xFUL << 12; NRF_GPIO->OUTSET = (tx_attempts & 0x0F) << 12; }