norace bool m_resume;
norace ieee154_txframe_t *m_currentFrame;
norace ieee154_txframe_t *m_lastFrame;
- norace ieee154_macRxOnWhenIdle_t macRxOnWhenIdle;
+ norace ieee154_macRxOnWhenIdle_t m_macRxOnWhenIdle;
/* variables for the unslotted CSMA-CA */
norace ieee154_csma_t m_csma;
norace ieee154_status_t m_txStatus;
norace uint32_t m_transactionTime;
norace bool m_indirectTxPending = FALSE;
- norace ieee154_macMaxFrameTotalWaitTime_t m_macMaxFrameTotalWaitTime;
/* function / task prototypes */
- next_state_t tryReceive(bool startIndirectTxTimer);
+ next_state_t tryReceive();
next_state_t tryTransmit();
next_state_t trySwitchOff();
void backupCurrentFrame();
// m_transactionTime += call MLME_GET.macMinLIFSPeriod();
// else
// m_transactionTime += call MLME_GET.macMinSIFSPeriod();
- m_macMaxFrameTotalWaitTime = call MLME_GET.macMaxFrameTotalWaitTime();
m_currentFrame = frame;
}
// Check 1: was an indirect transmission successfully started
// and are we now waiting for a frame from the coordinator?
if (m_indirectTxPending) {
- next = tryReceive(TRUE);
+ next = tryReceive();
}
// Check 2: is some other operation (like MLME-SCAN or MLME-RESET) pending?
}
// Check 4: should we be in receive mode?
- else if (call IsRxEnableActive.getNow() || macRxOnWhenIdle) {
- next = tryReceive(FALSE);
+ else if (call IsRxEnableActive.getNow() || m_macRxOnWhenIdle) {
+ next = tryReceive();
if (next == DO_NOTHING) {
// if there was an active MLME_RX_ENABLE.request then we'll
// inform the next higher layer that radio is now in Rx mode
return next;
}
- next_state_t tryReceive(bool startIndirectTxTimer)
+ next_state_t tryReceive()
{
next_state_t next;
if (call RadioRx.isReceiving())
next = SWITCH_OFF;
else {
call RadioRx.enableRx(0, 0);
- if (startIndirectTxTimer)
- post startIndirectTxTimerTask();
next = WAIT_FOR_RXDONE;
}
return next;
return next;
}
- async event void RadioOff.offDone() { m_lock = FALSE; updateState();}
- async event void RadioRx.enableRxDone() { m_lock = FALSE; updateState();}
- event void RxEnableStateChange.notify(bool whatever) {
+ async event void RadioOff.offDone()
+ {
+ m_lock = FALSE;
+ updateState();
+ }
+
+ async event void RadioRx.enableRxDone()
+ {
+ if (m_indirectTxPending) // indirect transmission, now waiting for data
+ post startIndirectTxTimerTask();
+ m_lock = FALSE;
+ updateState();
+ }
+
+ event void RxEnableStateChange.notify(bool whatever)
+ {
if (!call RadioToken.isOwner())
call RadioToken.request();
else
updateState();
}
- event void PIBUpdateMacRxOnWhenIdle.notify( const void* val ) {
- atomic macRxOnWhenIdle = *((ieee154_macRxOnWhenIdle_t*) val);
+
+ event void PIBUpdateMacRxOnWhenIdle.notify( const void* val )
+ {
+ atomic m_macRxOnWhenIdle = *((ieee154_macRxOnWhenIdle_t*) val);
signal RxEnableStateChange.notify(TRUE);
}
task void startIndirectTxTimerTask()
{
- call IndirectTxWaitTimer.startOneShot(m_macMaxFrameTotalWaitTime);
+ call IndirectTxWaitTimer.startOneShot(call MLME_GET.macMaxFrameTotalWaitTime());
}
async event void UnslottedCsmaCa.transmitDone(ieee154_txframe_t *frame,