/************************************************************************************************** * @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(); }
/************************************************************************************************** * @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(); }
/************************************************************************************************** * @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(¶ms); params.startFlag = FALSE; params.period = 0; macBackoffWakeupClock = Clock_create((Clock_FuncPtr) macBackoffTimerICallTimerCback, 1, ¶ms, 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); }