Pull out frames in Disabled and Sleep states. (#292)

This change avoids:
* processing stale messages that are queued in the socket.
* busy-looping in the Disabled and Sleep states.
This commit is contained in:
Jonathan Hui
2016-07-27 23:26:17 -07:00
committed by GitHub
parent ad94ff6703
commit d1dcccfabb
+12 -15
View File
@@ -419,14 +419,16 @@ bool otPlatRadioGetPromiscuous(void)
void radioReceive(void)
{
int rval = recvfrom(sSockFd, &sReceiveMessage, sizeof(sReceiveMessage), 0, NULL, NULL);
assert(rval >= 0);
sReceiveFrame.mLength = rval - 1;
if (sAckWait)
if (sState != kStateTransmit || sAckWait)
{
if (isFrameTypeAck(sReceiveFrame.mPsdu))
int rval = recvfrom(sSockFd, &sReceiveMessage, sizeof(sReceiveMessage), 0, NULL, NULL);
assert(rval >= 0);
sReceiveFrame.mLength = rval - 1;
if (sAckWait &&
sTransmitFrame.mChannel == sReceiveMessage.mChannel &&
isFrameTypeAck(sReceiveFrame.mPsdu))
{
uint8_t tx_sequence = getDsn(sTransmitFrame.mPsdu);
uint8_t rx_sequence = getDsn(sReceiveFrame.mPsdu);
@@ -438,10 +440,8 @@ void radioReceive(void)
otPlatRadioTransmitDone(isFramePending(sReceiveFrame.mPsdu), kThreadError_None);
}
}
}
else
{
if (sReceiveFrame.mChannel == sReceiveMessage.mChannel)
else if (sState == kStateReceive &&
sReceiveFrame.mChannel == sReceiveMessage.mChannel)
{
radioProcessFrame();
}
@@ -493,10 +493,7 @@ void posixRadioProcess(void)
if (poll(&pollfd, 1, 0) > 0 && (pollfd.revents & flags) != 0)
{
if (sAckWait || sState == kStateReceive)
{
radioReceive();
}
radioReceive();
}
if (sState == kStateTransmit && !sAckWait)