Set PAN ID to 0xffff when performing an active scan. (#630)

This commit is contained in:
Jonathan Hui
2016-09-19 15:11:45 -07:00
committed by GitHub
parent 78b2d7d13e
commit ff8f8b8f62
2 changed files with 14 additions and 12 deletions
+11 -9
View File
@@ -75,7 +75,7 @@ void Mac::StartCsmaBackoff(void)
Mac::Mac(ThreadNetif &aThreadNetif): Mac::Mac(ThreadNetif &aThreadNetif):
mBeginTransmit(aThreadNetif.GetIp6().mTaskletScheduler, &Mac::HandleBeginTransmit, this), mBeginTransmit(aThreadNetif.GetIp6().mTaskletScheduler, &Mac::HandleBeginTransmit, this),
mAckTimer(aThreadNetif.GetIp6().mTimerScheduler, &Mac::HandleAckTimer, this), mMacTimer(aThreadNetif.GetIp6().mTimerScheduler, &Mac::HandleMacTimer, this),
mBackoffTimer(aThreadNetif.GetIp6().mTimerScheduler, &Mac::HandleBeginTransmit, this), mBackoffTimer(aThreadNetif.GetIp6().mTimerScheduler, &Mac::HandleBeginTransmit, this),
mReceiveTimer(aThreadNetif.GetIp6().mTimerScheduler, &Mac::HandleReceiveTimer, this), mReceiveTimer(aThreadNetif.GetIp6().mTimerScheduler, &Mac::HandleReceiveTimer, this),
mKeyManager(aThreadNetif.GetKeyManager()), mKeyManager(aThreadNetif.GetKeyManager()),
@@ -214,7 +214,7 @@ void Mac::StartEnergyScan(void)
{ {
mState = kStateEnergyScan; mState = kStateEnergyScan;
mEnergyScanCurrentMaxRssi = kInvalidRssiValue; mEnergyScanCurrentMaxRssi = kInvalidRssiValue;
mAckTimer.Start(mScanDuration); mMacTimer.Start(mScanDuration);
mEnergyScanSampleRssiTask.Post(); mEnergyScanSampleRssiTask.Post();
NextOperation(); NextOperation();
} }
@@ -610,6 +610,7 @@ void Mac::HandleBeginTransmit(void)
switch (mState) switch (mState)
{ {
case kStateActiveScan: case kStateActiveScan:
otPlatRadioSetPanId(NULL, kPanIdBroadcast);
sendFrame.SetChannel(mScanChannel); sendFrame.SetChannel(mScanChannel);
SendBeaconRequest(sendFrame); SendBeaconRequest(sendFrame);
sendFrame.SetSequence(0); sendFrame.SetSequence(0);
@@ -644,7 +645,7 @@ void Mac::HandleBeginTransmit(void)
if (sendFrame.GetAckRequest() && !(otPlatRadioGetCaps(NULL) & kRadioCapsAckTimeout)) if (sendFrame.GetAckRequest() && !(otPlatRadioGetCaps(NULL) & kRadioCapsAckTimeout))
{ {
mAckTimer.Start(kAckTimeout); mMacTimer.Start(kAckTimeout);
otLogDebgMac("ack timer start\n"); otLogDebgMac("ack timer start\n");
} }
@@ -663,7 +664,7 @@ extern "C" void otPlatRadioTransmitDone(otInstance *, bool aRxPending, ThreadErr
void Mac::TransmitDoneTask(bool aRxPending, ThreadError aError) void Mac::TransmitDoneTask(bool aRxPending, ThreadError aError)
{ {
mAckTimer.Stop(); mMacTimer.Stop();
mCounters.mTxTotal++; mCounters.mTxTotal++;
@@ -708,13 +709,13 @@ exit:
NextOperation(); NextOperation();
} }
void Mac::HandleAckTimer(void *aContext) void Mac::HandleMacTimer(void *aContext)
{ {
Mac *obj = reinterpret_cast<Mac *>(aContext); Mac *obj = reinterpret_cast<Mac *>(aContext);
obj->HandleAckTimer(); obj->HandleMacTimer();
} }
void Mac::HandleAckTimer(void) void Mac::HandleMacTimer(void)
{ {
otPlatRadioReceive(NULL, mChannel); otPlatRadioReceive(NULL, mChannel);
@@ -728,6 +729,7 @@ void Mac::HandleAckTimer(void)
if (mScanChannels == 0 || mScanChannel > kPhyMaxChannel) if (mScanChannels == 0 || mScanChannel > kPhyMaxChannel)
{ {
otPlatRadioSetPanId(NULL, mPanId);
mActiveScanHandler(mScanContext, NULL); mActiveScanHandler(mScanContext, NULL);
ScheduleNextTransmission(); ScheduleNextTransmission();
ExitNow(); ExitNow();
@@ -763,7 +765,7 @@ void Mac::HandleAckTimer(void)
while ((mScanChannels & 1) == 0); while ((mScanChannels & 1) == 0);
mEnergyScanCurrentMaxRssi = kInvalidRssiValue; mEnergyScanCurrentMaxRssi = kInvalidRssiValue;
mAckTimer.Start(mScanDuration); mMacTimer.Start(mScanDuration);
break; break;
case kStateTransmitData: case kStateTransmitData:
@@ -837,7 +839,7 @@ void Mac::SentFrame(bool aAcked)
{ {
case kStateActiveScan: case kStateActiveScan:
mCounters.mTxBeaconRequest++; mCounters.mTxBeaconRequest++;
mAckTimer.Start(mScanDuration); mMacTimer.Start(mScanDuration);
break; break;
case kStateTransmitBeacon: case kStateTransmitBeacon:
+3 -3
View File
@@ -527,8 +527,8 @@ private:
void StartEnergyScan(void); void StartEnergyScan(void);
ThreadError HandleMacCommand(Frame &aFrame); ThreadError HandleMacCommand(Frame &aFrame);
static void HandleAckTimer(void *aContext); static void HandleMacTimer(void *aContext);
void HandleAckTimer(void); void HandleMacTimer(void);
static void HandleBeginTransmit(void *aContext); static void HandleBeginTransmit(void *aContext);
void HandleBeginTransmit(void); void HandleBeginTransmit(void);
static void HandleReceiveTimer(void *aContext); static void HandleReceiveTimer(void *aContext);
@@ -540,7 +540,7 @@ private:
ThreadError Scan(ScanType aType, uint32_t aScanChannels, uint16_t aScanDuration, void *aContext); ThreadError Scan(ScanType aType, uint32_t aScanChannels, uint16_t aScanDuration, void *aContext);
Tasklet mBeginTransmit; Tasklet mBeginTransmit;
Timer mAckTimer; Timer mMacTimer;
Timer mBackoffTimer; Timer mBackoffTimer;
Timer mReceiveTimer; Timer mReceiveTimer;