/**@brief Function for receiving callbacks from the micro-esb library. */ static void uesb_event_handler(void) { // NOTE: This will be executed at the RADIO_IRQHandler priority so execution time // should be kept as short as possible. uint32_t rf_interrupts; uesb_get_clear_interrupts(&rf_interrupts); if(rf_interrupts & UESB_INT_TX_SUCCESS_MSK) { if (UESB_SUCCESS != uesb_disable()) { app_error_handler(PROPRIETARY_RF_DEBUG, __LINE__, (const uint8_t*)__FILE__); } timeslot_finished(); } if(rf_interrupts & UESB_INT_TX_FAILED_MSK) { uesb_flush_tx(); } if(rf_interrupts & UESB_INT_RX_DR_MSK) { // The Syma X4 does not transmit. } }
/**@brief Function for receiving callbacks from the micro-esb library. */ static void uesb_event_handler(void) { uint32_t rf_interrupts; uesb_get_clear_interrupts(&rf_interrupts); if(rf_interrupts & UESB_INT_TX_FAILED_MSK) { // Transmit failed: flush buffer uesb_flush_tx(); m_tx_attempts += 1; m_ut_state = UT_STATE_RX; } if (rf_interrupts & UESB_INT_TX_SUCCESS_MSK) { uesb_payload_t payload; uint32_t payload_len; // Successful transmission. Can now remove packet from our FIFO payload_len = sizeof(payload); fifo_get_pkt(&m_transmit_fifo, (uint8_t *) &payload, &payload_len); APP_ERROR_CHECK_BOOL(payload_len == sizeof(payload)); m_tx_attempts = 0; m_ut_state = UT_STATE_RX; } if(rf_interrupts & UESB_INT_RX_DR_MSK) { // Data reception is handled in a lower priority interrupt NVIC_SetPendingIRQ(UESB_RX_HANDLE_IRQn); } }
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; }