Clean up mac/radio interaction. (#538)

- Remove unnecessary calls to otPlatRadioReceive().
- Allow calls to otPlatRadioReceiveDone() whenever the radio is active.
This commit is contained in:
Jonathan Hui
2016-09-08 08:47:01 -07:00
committed by GitHub
parent cd355f574f
commit bcc1261749
2 changed files with 24 additions and 33 deletions
+23 -31
View File
@@ -445,43 +445,35 @@ bool otPlatRadioGetPromiscuous(void)
void radioReceive(void)
{
if (sState != kStateTransmit || sAckWait)
ssize_t rval = recvfrom(sSockFd, &sReceiveMessage, sizeof(sReceiveMessage), 0, NULL, NULL);
assert(rval >= 0);
sReceiveFrame.mLength = (uint8_t)(rval - 1);
if (sAckWait &&
sTransmitFrame.mChannel == sReceiveMessage.mChannel &&
isFrameTypeAck(sReceiveFrame.mPsdu) &&
getDsn(sReceiveFrame.mPsdu) == getDsn(sTransmitFrame.mPsdu))
{
ssize_t rval = recvfrom(sSockFd, &sReceiveMessage, sizeof(sReceiveMessage), 0, NULL, NULL);
assert(rval >= 0);
sReceiveFrame.mLength = (uint8_t)(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);
if (tx_sequence == rx_sequence)
{
sState = kStateReceive;
sAckWait = false;
sState = kStateReceive;
sAckWait = false;
#if OPENTHREAD_ENABLE_DIAG
if (otPlatDiagModeGet())
{
otPlatDiagRadioTransmitDone(isFramePending(sReceiveFrame.mPsdu), kThreadError_None);
}
else
#endif
{
otPlatRadioTransmitDone(isFramePending(sReceiveFrame.mPsdu), kThreadError_None);
}
}
}
else if (sState == kStateReceive &&
sReceiveFrame.mChannel == sReceiveMessage.mChannel)
if (otPlatDiagModeGet())
{
radioProcessFrame();
otPlatDiagRadioTransmitDone(isFramePending(sReceiveFrame.mPsdu), kThreadError_None);
}
else
#endif
{
otPlatRadioTransmitDone(isFramePending(sReceiveFrame.mPsdu), kThreadError_None);
}
}
else if ((sState == kStateReceive || sState == kStateTransmit) &&
(sReceiveFrame.mChannel == sReceiveMessage.mChannel))
{
radioProcessFrame();
}
}
+1 -2
View File
@@ -192,6 +192,7 @@ bool Mac::GetRxOnWhenIdle(void) const
void Mac::SetRxOnWhenIdle(bool aRxOnWhenIdle)
{
mRxOnWhenIdle = aRxOnWhenIdle;
NextOperation();
}
const ExtAddress *Mac::GetExtAddress(void) const
@@ -1019,8 +1020,6 @@ exit:
break;
}
}
NextOperation();
}
ThreadError Mac::HandleMacCommand(Frame &aFrame)