/**@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);
    }
}
Esempio n. 3
0
File: main.c Progetto: JulianYG/WNR
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;
}