/************************************************************************************************** * @fn macSleepWakeUp * * @brief Wake up the radio from sleep mode. * * @param none * * @return none ************************************************************************************************** */ void macSleepWakeUp(void) { /* don't wake up radio if it's already awake */ if (macSleepState == MAC_SLEEP_STATE_AWAKE) { return; } /* wake up MAC timer */ MAC_RADIO_TIMER_WAKE_UP(); /* if radio was completely off, restore from that state first */ if (macSleepState == MAC_SLEEP_STATE_RADIO_OFF) { /* turn on radio power (turns on oscillator too) */ MAC_RADIO_TURN_ON_POWER(); /* power-up initialization of receive logic */ macRxRadioPowerUpInit(); } else { MAC_ASSERT(macSleepState == MAC_SLEEP_STATE_OSC_OFF); /* turn on the oscillator */ MAC_RADIO_TURN_ON_OSC(); } /* update sleep state here before requesting to turn on receiver */ macSleepState = MAC_SLEEP_STATE_AWAKE; /* turn on the receiver if enabled */ macRxOnRequest(); }
/************************************************************************************************** * @fn macRadioUpdateChannel * * @brief Update the radio channel if a new channel has been requested. * * @param none * * @return none ************************************************************************************************** */ MAC_INTERNAL_API void macRadioUpdateChannel(void) { halIntState_t s; MAC_ASSERT(!macTxActive); /* cannot change channel during a transmit */ /* if the channel has changed, set the radio to the new channel */ HAL_ENTER_CRITICAL_SECTION(s); if (reqChannel != macPhyChannel) { macPhyChannel = reqChannel; HAL_EXIT_CRITICAL_SECTION(s); /* changing the channel stops any receive in progress */ macRxOff(); MAC_RADIO_SET_CHANNEL(macPhyChannel); /* If the channel is updated in the middle of receiving a frame, we must * clean up the Rx logic. */ macRxHaltCleanup(); macRxOnRequest(); } else { HAL_EXIT_CRITICAL_SECTION(s); } }
/************************************************************************************************** * @fn macSleepWakeUp * * @brief Wake up the radio from sleep mode. * * @param none * * @return none ************************************************************************************************** */ void macSleepWakeUp(void) { /* don't wake up radio if it's already awake */ if (macSleepState == MAC_SLEEP_STATE_AWAKE) { return; } /* wake up MAC timer */ MAC_RADIO_TIMER_WAKE_UP(); /* if chip was completely off, restore from that state first */ if (macSleepState == MAC_SLEEP_STATE_CHIP_OFF) { /* enable chip power, initialize */ MAC_RADIO_ENABLE_VREG_SEQUENCE(); MAC_RADIO_VREG_ON_RADIO_INIT(); /* restore settings from pre-sleep */ MAC_RADIO_RESTORE_FROM_VREG_OFF(); } /* turn on oscillator, restore settings from pre-sleep */ MAC_RADIO_ENABLE_OSC_SEQUENCE(); MAC_RADIO_RESTORE_FROM_OSC_OFF(); /* turn on the receiver if enabled */ macRxOnRequest(); /* set state variable */ macSleepState = MAC_SLEEP_STATE_AWAKE; }
/************************************************************************************************** * @fn macRadioUpdateChannel * * @brief Update the radio channel if a new channel has been requested. * * @param none * * @return none ************************************************************************************************** */ void macRadioUpdateChannel(void) { halIntState_t s; MAC_ASSERT(!macTxActive); /* cannot change channel during a transmit */ /* if the channel has changed, set the radio to the new channel */ HAL_ENTER_CRITICAL_SECTION(s); if (reqChannel != macPhyChannel) { macPhyChannel = reqChannel; HAL_EXIT_CRITICAL_SECTION(s); /* changing the channel stops any receive in progress */ macRxOff(); MAC_RADIO_SET_CHANNEL(macPhyChannel); macRxOnRequest(); } else { HAL_EXIT_CRITICAL_SECTION(s); } }