Advertisement
Guest User

Untitled

a guest
Apr 10th, 2017
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.22 KB | None | 0 0
  1. nrf_radio_signal_callback_return_param_t * radio_callback(uint8_t signal_type)
  2. {
  3.     LOG_MSG("radio_callback: %d\n", signal_type);
  4.     switch(signal_type)
  5.     {
  6.         case NRF_RADIO_CALLBACK_SIGNAL_TYPE_START:
  7.             LOG_MSG("NRF_RADIO_CALLBACK_SIGNAL_TYPE_START\n");
  8.             //Start of the timeslot - set up timer interrupt
  9.             signal_callback_return_param.params.request.p_next = NULL;
  10.             signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE;
  11.  
  12.             NRF_TIMER0->MODE = TIMER_MODE_MODE_Timer;  // Set the timer in Counter Mode
  13.             NRF_TIMER0->TASKS_STOP = 1;               // clear the task first to be usable for later
  14.             NRF_TIMER0->TASKS_CLEAR = 1;               // clear the task first to be usable for later
  15.             NRF_TIMER0->PRESCALER = 6;                             //Set prescaler. Higher number gives slower timer. Prescaler = 0 gives 16MHz timer
  16.             NRF_TIMER0->CC[0] = 1000;                             //Set value for TIMER2 compare register 0
  17.             NRF_TIMER0->INTENCLR    = 0xffffffff;
  18.             NRF_TIMER0->INTENSET    = TIMER_INTENSET_COMPARE0_Msk;
  19.             NVIC_ClearPendingIRQ(TIMER0_IRQn);
  20.             NVIC_EnableIRQ(TIMER0_IRQn);
  21.             NRF_TIMER0->TASKS_START = 1;
  22.             break;
  23.  
  24.         case NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO:
  25.             LOG_MSG("NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO\n");
  26.             signal_callback_return_param.params.request.p_next = NULL;
  27.             signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE;
  28.             break;
  29.  
  30.         case NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0:
  31.             LOG_MSG("NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0\n");
  32.             //Timer interrupt - do graceful shutdown - schedule next timeslot
  33.             // configure_next_event_normal();
  34.             // signal_callback_return_param.params.request.p_next = &m_timeslot_request;
  35.             // signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END;
  36.             signal_callback_return_param.params.extend.length_us = 300000; // 300ms
  37.             signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND;
  38.             break;
  39.         case NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED:
  40.             LOG_MSG("NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED\n");
  41.             NRF_TIMER0->TASKS_CLEAR = 1;
  42.             break;
  43.         case NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED:
  44.             LOG_MSG("NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED\n");
  45.             //Try scheduling a new timeslot
  46.             // configure_next_event_earliest();
  47.             // signal_callback_return_param.params.request.p_next = &m_timeslot_request;
  48.             // signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END;
  49.             signal_callback_return_param.params.request.p_next = NULL;
  50.             signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_END;
  51.             break;
  52.         default:
  53.             //No implementation needed
  54.             break;
  55.     }
  56.     LOG_MSG("radio_callback: return\n");
  57.     return (&signal_callback_return_param);
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement