Disable receiver after receiving data frame during a poll. (#937)

This commit is contained in:
Jonathan Hui
2016-11-06 22:01:04 -08:00
committed by GitHub
parent 82e85a7300
commit 8fde07f842
+11 -3
View File
@@ -1139,6 +1139,7 @@ void Mac::ReceiveDoneTask(Frame *aFrame, ThreadError aError)
otMacWhitelistEntry *whitelistEntry; otMacWhitelistEntry *whitelistEntry;
otMacBlacklistEntry *blacklistEntry; otMacBlacklistEntry *blacklistEntry;
int8_t rssi; int8_t rssi;
bool receive = false;
ThreadError error = aError; ThreadError error = aError;
mCounters.mRxTotal++; mCounters.mRxTotal++;
@@ -1257,9 +1258,10 @@ void Mac::ReceiveDoneTask(Frame *aFrame, ThreadError aError)
break; break;
default: default:
if (dstaddr.mLength != 0) if (!mRxOnWhenIdle && dstaddr.mLength != 0)
{ {
mReceiveTimer.Stop(); mReceiveTimer.Stop();
otPlatRadioSleep(mNetif.GetInstance());
} }
switch (aFrame->GetType()) switch (aFrame->GetType())
@@ -1270,14 +1272,17 @@ void Mac::ReceiveDoneTask(Frame *aFrame, ThreadError aError)
ExitNow(error = kThreadError_None); ExitNow(error = kThreadError_None);
} }
receive = true;
break; break;
case Frame::kFcfFrameBeacon: case Frame::kFcfFrameBeacon:
mCounters.mRxBeacon++; mCounters.mRxBeacon++;
receive = true;
break; break;
case Frame::kFcfFrameData: case Frame::kFcfFrameData:
mCounters.mRxData++; mCounters.mRxData++;
receive = true;
break; break;
default: default:
@@ -1285,9 +1290,12 @@ void Mac::ReceiveDoneTask(Frame *aFrame, ThreadError aError)
break; break;
} }
for (Receiver *receiver = mReceiveHead; receiver; receiver = receiver->mNext) if (receive)
{ {
receiver->HandleReceivedFrame(*aFrame); for (Receiver *receiver = mReceiveHead; receiver; receiver = receiver->mNext)
{
receiver->HandleReceivedFrame(*aFrame);
}
} }
break; break;