Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- nrf_radio_signal_callback_return_param_t * radio_callback(uint8_t signal_type)
- {
- LOG_MSG("radio_callback: %d\n", signal_type);
- switch(signal_type)
- {
- case NRF_RADIO_CALLBACK_SIGNAL_TYPE_START:
- LOG_MSG("NRF_RADIO_CALLBACK_SIGNAL_TYPE_START\n");
- //Start of the timeslot - set up timer interrupt
- signal_callback_return_param.params.request.p_next = NULL;
- signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE;
- NRF_TIMER0->MODE = TIMER_MODE_MODE_Timer; // Set the timer in Counter Mode
- NRF_TIMER0->TASKS_STOP = 1; // clear the task first to be usable for later
- NRF_TIMER0->TASKS_CLEAR = 1; // clear the task first to be usable for later
- NRF_TIMER0->PRESCALER = 6; //Set prescaler. Higher number gives slower timer. Prescaler = 0 gives 16MHz timer
- NRF_TIMER0->CC[0] = 1000; //Set value for TIMER2 compare register 0
- NRF_TIMER0->INTENCLR = 0xffffffff;
- NRF_TIMER0->INTENSET = TIMER_INTENSET_COMPARE0_Msk;
- NVIC_ClearPendingIRQ(TIMER0_IRQn);
- NVIC_EnableIRQ(TIMER0_IRQn);
- NRF_TIMER0->TASKS_START = 1;
- break;
- case NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO:
- LOG_MSG("NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO\n");
- signal_callback_return_param.params.request.p_next = NULL;
- signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE;
- break;
- case NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0:
- LOG_MSG("NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0\n");
- //Timer interrupt - do graceful shutdown - schedule next timeslot
- // configure_next_event_normal();
- // signal_callback_return_param.params.request.p_next = &m_timeslot_request;
- // signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END;
- signal_callback_return_param.params.extend.length_us = 300000; // 300ms
- signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND;
- break;
- case NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED:
- LOG_MSG("NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED\n");
- NRF_TIMER0->TASKS_CLEAR = 1;
- break;
- case NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED:
- LOG_MSG("NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED\n");
- //Try scheduling a new timeslot
- // configure_next_event_earliest();
- // signal_callback_return_param.params.request.p_next = &m_timeslot_request;
- // signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END;
- signal_callback_return_param.params.request.p_next = NULL;
- signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_END;
- break;
- default:
- //No implementation needed
- break;
- }
- LOG_MSG("radio_callback: return\n");
- return (&signal_callback_return_param);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement