mirror of
https://github.com/espressif/openthread.git
synced 2026-08-29 13:29:54 +00:00
Set PAN ID to 0xffff when performing an active scan. (#630)
This commit is contained in:
+11
-9
@@ -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:
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user