コード例 #1
0
ファイル: mac_backoff_timer.c プロジェクト: gxp/node
/**************************************************************************************************
 * @fn          macBackoffTimerInit
 *
 * @brief       Intializes backoff timer.
 *
 * @param       none
 *
 * @return      none
 **************************************************************************************************
 */
void macBackoffTimerInit(void)
{
  compareState = COMPARE_STATE_ROLLOVER;
  MAC_RADIO_BACKOFF_SET_COUNT(0);
  macBackoffTimerSetRollover(MAC_BACKOFF_TIMER_DEFAULT_ROLLOVER);
  MAC_RADIO_BACKOFF_COMPARE_CLEAR_INTERRUPT();
  MAC_RADIO_BACKOFF_COMPARE_ENABLE_INTERRUPT();
}
コード例 #2
0
/**************************************************************************************************
 * @fn          macBackoffTimerInit
 *
 * @brief       Intializes backoff timer.
 *
 * @param       none
 *
 * @return      none
 **************************************************************************************************
 */
MAC_INTERNAL_API void macBackoffTimerInit(void)
{
  MAC_RADIO_BACKOFF_SET_COUNT(0);
  macBackoffTimerSetRollover(MAC_BACKOFF_TIMER_DEFAULT_NONBEACON_ROLLOVER);
  MAC_RADIO_BACKOFF_PERIOD_CLEAR_INTERRUPT();
  MAC_RADIO_BACKOFF_PERIOD_ENABLE_INTERRUPT();
  MAC_RADIO_BACKOFF_COMPARE_CLEAR_INTERRUPT();
  MAC_RADIO_BACKOFF_COMPARE_ENABLE_INTERRUPT();
}
コード例 #3
0
/**************************************************************************************************
 * @fn          macBackoffTimerInit
 *
 * @brief       Intializes backoff timer.
 *
 * @param       none
 *
 * @return      none
 **************************************************************************************************
 */
MAC_INTERNAL_API void macBackoffTimerInit(void)
{
  macPrevPeriodRatCount = macBackoffTimerRollover = 0;

  /* backoffTimerTrigger has to be set to maximum possible value of
   * macBackoffTimerRollover value initially.
   * Otherwise, incorrect backoffTimerTrigger value shall be compared
   * all the time in macBackoffTimerUpdateWakeup() function, casting
   * incorrect vote.
   */
  backoffTimerTrigger = MAC_BACKOFF_TIMER_DEFAULT_NONBEACON_ROLLOVER;

  MAC_RADIO_CLEAR_BACKOFF_COUNT();
#if defined USE_ICALL || defined OSAL_PORT2TIRTOS
  // Clear events
  macBackoffTimerEvents = 0;

#ifdef USE_ICALL
  // Register hook function to handle events.
  if (!osal_eventloop_hook)
  {
    /* Don't overwrite if the hook is already set up.
     * Note that the hook might have been set up to perform other things
     * as well in which case the other hook function has to call
     * macBackoffTimerEventHandler.
     */
    osal_eventloop_hook = macBackoffTimerEventHandler;
  }
#endif /* USE_ICALL */

  macBackoffTimerImpending = FALSE;

#ifdef USE_ICALL
  /* Start timer just to initialize the timer ID to reuse in the module.
   * This also serves the purpose of allocating resources upfront,
   * in order to prevent a case of running out of timer resource
   * when the timer has to be started.
   * Note that macBackoffTimerSetRollover() may trigger setting timer
   * and hence the timer set up must happen before macBackoffTimerSetRollover()
   * call. */
  if (ICall_setTimer(1, macBackoffTimerICallTimerCback, NULL,
                     &macBackoffTimerICallTimerID) != ICALL_ERRNO_SUCCESS)
  {
    MAC_ASSERT(0);
  }
#endif /* USE_ICALL */
#ifdef OSAL_PORT2TIRTOS
  if (!macBackoffWakeupClock)
  {
    /* Creates a wakeup clock */
    Clock_Params params;
    Clock_Params_init(&params);
    params.startFlag = FALSE;
    params.period = 0;
    macBackoffWakeupClock =
      Clock_create((Clock_FuncPtr) macBackoffTimerICallTimerCback,
                   1, &params, NULL);
    MAC_ASSERT(macBackoffWakeupClock);
    /* No need to stop clock, the clock event will reprogram next wake time */
  }
#endif /* OSAL_PORT2TIRTOS */

  /* Note that macPwrVote() is called done from macBackoffTimerSetRollover()
   * call and hence there is no need to make the call here. */
#endif /* defined USE_ICALL || defined OSAL_PORT2TIRTOS */

  macBackoffTimerSetRollover(MAC_BACKOFF_TIMER_DEFAULT_NONBEACON_ROLLOVER);

  /* Since interrupt disable/enable mechanism is not implemented for backoff
   * timer trigger interrupt for CC26xx, comparator value has to be set
   * so that the timer trigger interrupt is not triggered.
   * See comment inside macBackoffTimerCancelTrigger() for relevant
   * information */
  MAC_RADIO_BACKOFF_SET_COMPARE(backoffTimerTrigger);
}