mirror of
https://github.com/espressif/openthread.git
synced 2026-08-10 12:47:47 +00:00
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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user