本文整理汇总了C++中MAC_ASSERT函数的典型用法代码示例。如果您正苦于以下问题:C++ MAC_ASSERT函数的具体用法?C++ MAC_ASSERT怎么用?C++ MAC_ASSERT使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MAC_ASSERT函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: macSleep
/**************************************************************************************************
* @fn macSleep
*
* @brief Puts radio into the selected sleep mode.
*
* @param sleepState - selected sleep level, see #defines in .h file
*
* @return TRUE if radio was successfully put into selected sleep mode.
* FALSE if it was not safe for radio to go to sleep.
**************************************************************************************************
*/
uint8 macSleep(uint8 sleepState)
{
MAC_ASSERT(macSleepState == MAC_SLEEP_STATE_AWAKE); /* radio must be awake to put it to sleep */
MAC_ASSERT(macRxFilter == RX_FILTER_OFF); /* do not sleep when scanning or in promiscuous mode */
MAC_ASSERT(!HAL_INTERRUPTS_ARE_ENABLED()); /* interrupts should be disabled to call this function */
/* check to see if anything would prevent sleep */
if (macRxActive || macTxActive || macRxEnableFlags)
{
/* sleep is not allowed */
return(FALSE);
}
/* put MAC timer to sleep */
MAC_RADIO_TIMER_SLEEP();
/* update sleep state variable */
macSleepState = sleepState;
/* put radio in selected sleep mode */
if (sleepState == MAC_SLEEP_STATE_OSC_OFF)
{
MAC_RADIO_TURN_OFF_OSC();
}
else
{
MAC_ASSERT(sleepState == MAC_SLEEP_STATE_CHIP_OFF);
MAC_RADIO_TURN_OFF_VREG();
}
/* radio successfully put to sleep */
return(TRUE);
}
示例2: macRadioStartScan
/**************************************************************************************************
* @fn macRadioStartScan
*
* @brief Puts radio into selected scan mode.
*
* @param scanMode - scan mode, see #defines in .h file
*
* @return none
**************************************************************************************************
*/
MAC_INTERNAL_API void macRadioStartScan(uint8 scanMode)
{
MAC_ASSERT(macSleepState == MAC_SLEEP_STATE_AWAKE); /* radio must be awake */
MAC_ASSERT(macRxFilter == RX_FILTER_OFF); /* all filtering must be off to start scan */
/* set the receive filter based on the selected scan mode */
if (scanMode == MAC_SCAN_ED)
{
macRxFilter = RX_FILTER_ALL;
}
else if (scanMode == MAC_SCAN_ORPHAN)
{
macRxFilter = RX_FILTER_NON_COMMAND_FRAMES;
}
else
{
#ifdef FEATURE_ENHANCED_BEACON
MAC_ASSERT((scanMode == MAC_SCAN_ACTIVE_ENHANCED) || (scanMode == MAC_SCAN_ACTIVE) ||
(scanMode == MAC_SCAN_PASSIVE)); /* invalid scan type */
#else
MAC_ASSERT((scanMode == MAC_SCAN_ACTIVE) ||
(scanMode == MAC_SCAN_PASSIVE)); /* invalid scan type */
#endif
macRxFilter = RX_FILTER_NON_BEACON_FRAMES;
/* for active and passive scans, per spec the pan ID must be 0xFFFF */
MAC_RADIO_SET_PAN_ID(0xFFFF);
}
}
示例3: macBackoffTimerSetCount
/**************************************************************************************************
* @fn macBackoffTimerSetCount
*
* @brief Sets the count of the backoff timer.
*
* @param backoff - new count
*
* @return none
**************************************************************************************************
*/
MAC_INTERNAL_API void macBackoffTimerSetCount(uint32 backoff)
{
halIntState_t s;
MAC_ASSERT(backoff < backoffTimerRollover); /* count must be less than rollover value */
MAC_ASSERT(!(backoff & 0x80000000)); /* count must not represent negative value for int32 */
HAL_ENTER_CRITICAL_SECTION(s);
MAC_RADIO_BACKOFF_SET_COUNT(backoff);
HAL_EXIT_CRITICAL_SECTION(s);
}
示例4: macBackoffTimerSetCount
/**************************************************************************************************
* @fn macBackoffTimerSetCount
*
* @brief Sets the count of the backoff timer.
*
* @param backoff - new count
*
* @return none
**************************************************************************************************
*/
void macBackoffTimerSetCount(uint32 backoff)
{
halIntState_t s;
MAC_ASSERT(compareState == COMPARE_STATE_ROLLOVER); /* trigger cannot be active if changing count */
MAC_ASSERT(backoff < backoffTimerRollover); /* count must be less than rollover value */
MAC_ASSERT(!(backoff & 0x80000000)); /* count must not represent negative value for int32 */
HAL_ENTER_CRITICAL_SECTION(s);
MAC_RADIO_BACKOFF_SET_COUNT(backoff);
HAL_EXIT_CRITICAL_SECTION(s);
}
示例5: macBackoffTimerSetCount
/**************************************************************************************************
* @fn macBackoffTimerSetCount
*
* @brief Sets the count of the backoff timer.
*
* @param backoff - new count
*
* @return none
**************************************************************************************************
*/
MAC_INTERNAL_API void macBackoffTimerSetCount(uint32 backoff)
{
#if defined( FEATURE_BEACON_MODE )
halIntState_t s;
MAC_ASSERT(backoff < macBackoffTimerRollover); /* count must be less than rollover value */
MAC_ASSERT(!(backoff & 0x80000000)); /* count must not represent negative value for int32 */
DBG_PRINT2(DBGSYS, "MAC_RADIO_BACKOFF_SET_COUNT(%u), RAT BACKOFF = %u", backoff, MAC_RADIO_BACKOFF_COUNT());
HAL_ENTER_CRITICAL_SECTION(s);
MAC_RADIO_BACKOFF_SET_COUNT(backoff);
MAC_BACKOFF_TIMER_UPDATE_WAKEUP();
HAL_EXIT_CRITICAL_SECTION(s);
#endif /* FEATURE_BEACON_MODE */
}
示例6: macTxTimestampCallback
/**************************************************************************************************
* @fn macTxTimestampCallback
*
* @brief This callback function records the timestamp into the receive data structure.
* It should be called as soon as possible after there is a valid timestamp.
*
* @param none
*
* @return none
**************************************************************************************************
*/
MAC_INTERNAL_API void macTxTimestampCallback(void)
{
MAC_ASSERT(pMacDataTx != NULL); /* transmit structure must be there */
pMacDataTx->internal.timestamp = macBackoffTimerCapture();
pMacDataTx->internal.timestamp2 = MAC_RADIO_TIMER_CAPTURE();
}
示例7: macTxTimestampCallback
/**************************************************************************************************
* @fn macTxTimestampCallback
*
* @brief -
*
* @param none
*
* @return none
**************************************************************************************************
*/
void macTxTimestampCallback(void)
{
MAC_ASSERT(pMacDataTx != NULL); /* must have data to transmit */
pMacDataTx->internal.timestamp = MAC_RADIO_BACKOFF_CAPTURE();
pMacDataTx->internal.timestamp2 = MAC_RADIO_TIMER_CAPTURE();
}
示例8: macBackoffTimerSetTrigger
/**************************************************************************************************
* @fn macBackoffTimerSetTrigger
*
* @brief Sets the trigger count for the backoff counter. A callback is exectuted when
* the backoff count reaches the trigger
*
* @param triggerBackoff - backoff count for new trigger
*
* @return none
**************************************************************************************************
*/
void macBackoffTimerSetTrigger(uint32 triggerBackoff)
{
halIntState_t s;
MAC_ASSERT(triggerBackoff < backoffTimerRollover); /* trigger backoff must be less than rollover backoff */
HAL_ENTER_CRITICAL_SECTION(s);
backoffTimerTrigger = triggerBackoff;
if (triggerBackoff > MAC_RADIO_BACKOFF_COUNT())
{
compareState = COMPARE_STATE_TRIGGER;
MAC_RADIO_BACKOFF_SET_COMPARE(triggerBackoff);
}
else
{
if (triggerBackoff == 0)
{
compareState = COMPARE_STATE_ROLLOVER_AND_TRIGGER;
}
else
{
compareState = COMPARE_STATE_ROLLOVER_AND_ARM_TRIGGER;
}
MAC_RADIO_BACKOFF_SET_COMPARE(backoffTimerRollover);
}
HAL_EXIT_CRITICAL_SECTION(s);
}
示例9: macSleepWakeUp
/**************************************************************************************************
* @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();
}
示例10: macRadioUpdateChannel
/**************************************************************************************************
* @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);
}
}
示例11: macBackoffTimerPeriodIsr
/**************************************************************************************************
* @fn macBackoffTimerPeriodIsr
*
* @brief Interrupt service routine that fires when the backoff count rolls over on
* overflow period.
*
* @param none
*
* @return none
**************************************************************************************************
*/
MAC_INTERNAL_API void macBackoffTimerPeriodIsr(void)
{
halIntState_t s;
uint32 macRatCount = MAC_RAT_COUNT;
uint32 backoffRolloverRat = macBackoffTimerRollover * MAC_BACKOFF_TO_RAT_RATIO;
uint32 ratCompensation = (macRatCount - macPrevPeriodRatCount) % MAC_BACKOFF_TO_RAT_RATIO;
MAC_ASSERT( macBackoffTimerRollover <= MAC_BACKOFF_MAXIMUM_ROLLOVER );
if (macRatCount < backoffRolloverRat)
{
/* RAT wraparound has occurred. This would occur once in a blue moon (1073.74 seconds).
*/
DBG_PRINTL1(DBGSYS, "!!! RAT wraparound !!! RAT = %u", macRatCount);
}
DBG_PRINTL2(DBGSYS, "macRatChanA Period ISR, Rollover Period = %u, RAT Compensation = %u", macBackoffTimerRollover, ratCompensation);
/* Convert count to RAT count and set MAC Channel A Compare. The modulus calculation will
* compensate the math or interrupt latency error and prevent it from being accumulated.
* Note that MAC_BACKOFF_TO_RAT_RATIO is used as part of compensation. This means the
* maximum error that can be compensated is 320us. If the interrupt latency is greater
* than 320us, more elaborated compensation scheme must be used for Beacon mode.
* Non-beacon mode does not require absolute timing. Longer interrupt latency can be
* tolerated.
*/
macPrevPeriodRatCount = macRatCount - ratCompensation;
macSetupRATChanCompare( macRatChanA, backoffRolloverRat + macPrevPeriodRatCount );
macBackoffTimerRolloverCallback();
HAL_ENTER_CRITICAL_SECTION(s);
MAC_BACKOFF_TIMER_UPDATE_WAKEUP();
HAL_EXIT_CRITICAL_SECTION(s);
}
示例12: macTxDoneCallback
/**************************************************************************************************
* @fn macTxDoneCallback
*
* @brief -
*
* @param -
*
* @return none
**************************************************************************************************
*/
void macTxDoneCallback(uint8 status)
{
if (status == MAC_TXDONE_SUCCESS)
{
/* see if ACK was requested */
if (!txAckReq)
{
/* ACK was not requested, transmit is complete */
txComplete(MAC_SUCCESS);
}
else
{
/*
* ACK was requested - must wait to receive it. A timer is set
* to expire after the timeout duration for waiting for an ACK.
* If an ACK is received, the function macTxAckReceived() is called.
* If an ACK is not received within the timeout period,
* the function macTxAckTimeoutCallback() is called.
*/
macTxListenForAck = TRUE;
MAC_RADIO_TX_REQUEST_ACK_TIMEOUT_CALLBACK();
}
}
else if (status == MAC_TXDONE_CHANNEL_BUSY)
{
MAC_ASSERT((macTxType == MAC_TX_TYPE_SLOTTED_CSMA) || (macTxType == MAC_TX_TYPE_UNSLOTTED_CSMA));
/* clear channel assement failed, follow through with CSMA algorithm */
nb++;
if (nb > macPib.maxCsmaBackoffs)
{
txComplete(MAC_CHANNEL_ACCESS_FAILURE);
}
else
{
macTxBe = MIN(macTxBe+1, macPib.maxBe);
txCsmaPrep();
txCsmaGo();
}
}
else
{
MAC_ASSERT(status == MAC_TXDONE_INSUFFICIENT_TIME);
txComplete(MAC_NO_TIME);
}
}
示例13: rxAddrIsr
/*=================================================================================================
* @fn rxAddrIsr
*
* @brief Receive ISR state for decoding address. Reads and stores the address information
* from the incoming packet.
*
* @param none
*
* @return none
*=================================================================================================
*/
static void rxAddrIsr(void)
{
uint8 buf[MAX_ADDR_FIELDS_LEN];
uint8 dstAddrMode;
uint8 srcAddrMode;
uint8 * p;
MAC_ASSERT(rxNextLen != 0); /* logic assumes at least one address byte in buffer */
/* read out address fields into local buffer in one shot */
MAC_RADIO_READ_RX_FIFO(buf, rxNextLen);
/* set pointer to buffer with addressing fields */
p = buf;
/* destination address */
dstAddrMode = MAC_DEST_ADDR_MODE(&rxBuf[1]);
if (dstAddrMode != SADDR_MODE_NONE)
{
pRxBuf->mac.srcPanId = pRxBuf->mac.dstPanId = BUILD_UINT16(p[0], p[1]);
p += MAC_PAN_ID_FIELD_LEN;
if (dstAddrMode == SADDR_MODE_EXT)
{
sAddrExtCpy(pRxBuf->mac.dstAddr.addr.extAddr, p);
p += MAC_EXT_ADDR_FIELD_LEN;
}
else
{
pRxBuf->mac.dstAddr.addr.shortAddr = BUILD_UINT16(p[0], p[1]);
p += MAC_SHORT_ADDR_FIELD_LEN;
}
}
/* sources address */
srcAddrMode = MAC_SRC_ADDR_MODE(&rxBuf[1]);
if (srcAddrMode != SADDR_MODE_NONE)
{
if (!(pRxBuf->internal.flags & MAC_RX_FLAG_INTRA_PAN))
{
pRxBuf->mac.srcPanId = BUILD_UINT16(p[0], p[1]);
p += MAC_PAN_ID_FIELD_LEN;
}
if (srcAddrMode == SADDR_MODE_EXT)
{
sAddrExtCpy(pRxBuf->mac.srcAddr.addr.extAddr, p);
}
else
{
pRxBuf->mac.srcAddr.addr.shortAddr = BUILD_UINT16(p[0], p[1]);
}
}
/*-------------------------------------------------------------------------------
* Prepare for payload interrupts.
*/
pFuncRxState = &rxPayloadIsr;
rxPrepPayload();
}
示例14: macSleep
/**************************************************************************************************
* @fn macSleep
*
* @brief Puts radio into the selected sleep mode.
*
* @param sleepState - selected sleep level, see #defines in .h file
*
* @return TRUE if radio was successfully put into selected sleep mode.
* FALSE if it was not safe for radio to go to sleep.
**************************************************************************************************
*/
uint8 macSleep(uint8 sleepState)
{
halIntState_t s;
/* disable interrupts until macSleepState can be set */
HAL_ENTER_CRITICAL_SECTION(s);
/* assert checks */
MAC_ASSERT(macSleepState == MAC_SLEEP_STATE_AWAKE); /* radio must be awake to put it to sleep */
MAC_ASSERT(macRxFilter == RX_FILTER_OFF); /* do not sleep when scanning or in promiscuous mode */
/* if either RX or TX is active or any RX enable flags are set, it's not OK to sleep */
if (macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags)
{
HAL_EXIT_CRITICAL_SECTION(s);
return(FALSE);
}
/* turn off the receiver */
macRxOff();
/* update sleep state variable */
macSleepState = sleepState;
/* macSleepState is now set, re-enable interrupts */
HAL_EXIT_CRITICAL_SECTION(s);
/* put MAC timer to sleep */
MAC_RADIO_TIMER_SLEEP();
/* put radio in selected sleep mode */
if (sleepState == MAC_SLEEP_STATE_OSC_OFF)
{
MAC_RADIO_TURN_OFF_OSC();
}
else
{
MAC_ASSERT(sleepState == MAC_SLEEP_STATE_RADIO_OFF); /* unknown sleep state */
MAC_RADIO_TURN_OFF_POWER();
}
/* radio successfully entered sleep mode */
return(TRUE);
}
示例15: macBackoffTimerSetRollover
/**************************************************************************************************
* @fn macBackoffTimerSetRollover
*
* @brief Set rollover count of backoff timer.
*
* @param rolloverBackoff - backoff count where count is reset to zero
*
* @return none
**************************************************************************************************
*/
void macBackoffTimerSetRollover(uint32 rolloverBackoff)
{
halIntState_t s;
MAC_ASSERT(rolloverBackoff > MAC_RADIO_BACKOFF_COUNT()); /* rollover value must be greater than count */
HAL_ENTER_CRITICAL_SECTION(s);
backoffTimerRollover = rolloverBackoff;
MAC_RADIO_BACKOFF_SET_COMPARE(rolloverBackoff);
HAL_EXIT_CRITICAL_SECTION(s);
}