mirror of
https://github.com/espressif/openthread.git
synced 2026-10-22 07:28:17 +00:00
Do not regenerate frame when retransmitting. (#883)
This commit is contained in:
+35
-32
@@ -711,40 +711,43 @@ void Mac::HandleBeginTransmit(void)
|
|||||||
Frame &sendFrame(*static_cast<Frame *>(otPlatRadioGetTransmitBuffer(mNetif.GetInstance())));
|
Frame &sendFrame(*static_cast<Frame *>(otPlatRadioGetTransmitBuffer(mNetif.GetInstance())));
|
||||||
ThreadError error = kThreadError_None;
|
ThreadError error = kThreadError_None;
|
||||||
|
|
||||||
sendFrame.SetPower(mMaxTransmitPower);
|
if (mCsmaAttempts == 0 && mTransmitAttempts == 0)
|
||||||
|
|
||||||
switch (mState)
|
|
||||||
{
|
|
||||||
case kStateActiveScan:
|
|
||||||
otPlatRadioSetPanId(mNetif.GetInstance(), kPanIdBroadcast);
|
|
||||||
sendFrame.SetChannel(mScanChannel);
|
|
||||||
SendBeaconRequest(sendFrame);
|
|
||||||
sendFrame.SetSequence(0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kStateTransmitBeacon:
|
|
||||||
sendFrame.SetChannel(mChannel);
|
|
||||||
SendBeacon(sendFrame);
|
|
||||||
sendFrame.SetSequence(mBeaconSequence++);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kStateTransmitData:
|
|
||||||
sendFrame.SetChannel(mChannel);
|
|
||||||
SuccessOrExit(error = mSendHead->HandleFrameRequest(sendFrame));
|
|
||||||
sendFrame.SetSequence(mDataSequence);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
assert(false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Security Processing
|
|
||||||
ProcessTransmitSecurity(sendFrame);
|
|
||||||
|
|
||||||
if (sendFrame.GetPower() > mMaxTransmitPower)
|
|
||||||
{
|
{
|
||||||
sendFrame.SetPower(mMaxTransmitPower);
|
sendFrame.SetPower(mMaxTransmitPower);
|
||||||
|
|
||||||
|
switch (mState)
|
||||||
|
{
|
||||||
|
case kStateActiveScan:
|
||||||
|
otPlatRadioSetPanId(mNetif.GetInstance(), kPanIdBroadcast);
|
||||||
|
sendFrame.SetChannel(mScanChannel);
|
||||||
|
SendBeaconRequest(sendFrame);
|
||||||
|
sendFrame.SetSequence(0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kStateTransmitBeacon:
|
||||||
|
sendFrame.SetChannel(mChannel);
|
||||||
|
SendBeacon(sendFrame);
|
||||||
|
sendFrame.SetSequence(mBeaconSequence++);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kStateTransmitData:
|
||||||
|
sendFrame.SetChannel(mChannel);
|
||||||
|
SuccessOrExit(error = mSendHead->HandleFrameRequest(sendFrame));
|
||||||
|
sendFrame.SetSequence(mDataSequence);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
assert(false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Security Processing
|
||||||
|
ProcessTransmitSecurity(sendFrame);
|
||||||
|
|
||||||
|
if (sendFrame.GetPower() > mMaxTransmitPower)
|
||||||
|
{
|
||||||
|
sendFrame.SetPower(mMaxTransmitPower);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
error = otPlatRadioReceive(mNetif.GetInstance(), sendFrame.GetChannel());
|
error = otPlatRadioReceive(mNetif.GetInstance(), sendFrame.GetChannel());
|
||||||
|
|||||||
Reference in New Issue
Block a user