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;
otMacBlacklistEntry *blacklistEntry;
int8_t rssi;
bool receive = false;
ThreadError error = aError;
mCounters.mRxTotal++;
@@ -1257,9 +1258,10 @@ void Mac::ReceiveDoneTask(Frame *aFrame, ThreadError aError)
break;
default:
if (dstaddr.mLength != 0)
if (!mRxOnWhenIdle && dstaddr.mLength != 0)
{
mReceiveTimer.Stop();
otPlatRadioSleep(mNetif.GetInstance());
}
switch (aFrame->GetType())
@@ -1270,14 +1272,17 @@ void Mac::ReceiveDoneTask(Frame *aFrame, ThreadError aError)
ExitNow(error = kThreadError_None);
}
receive = true;
break;
case Frame::kFcfFrameBeacon:
mCounters.mRxBeacon++;
receive = true;
break;
case Frame::kFcfFrameData:
mCounters.mRxData++;
receive = true;
break;
default:
@@ -1285,9 +1290,12 @@ void Mac::ReceiveDoneTask(Frame *aFrame, ThreadError aError)
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;