mirror of
https://github.com/espressif/openthread.git
synced 2026-07-12 23:24:09 +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())));
|
||||
ThreadError error = kThreadError_None;
|
||||
|
||||
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)
|
||||
if (mCsmaAttempts == 0 && mTransmitAttempts == 0)
|
||||
{
|
||||
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());
|
||||
|
||||
Reference in New Issue
Block a user