mirror of
https://github.com/espressif/openthread.git
synced 2026-10-21 15:08:19 +00:00
Disable receiver after receiving data frame during a poll. (#937)
This commit is contained in:
+11
-3
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user