lr-wpan: Fixes issues during MAC scan

This commit is contained in:
Alberto Gallegos Ramonet
2023-03-28 17:01:31 +09:00
parent eed35c2131
commit 1e49101c39
3 changed files with 26 additions and 20 deletions

View File

@@ -25,6 +25,8 @@ Release 3-dev
### Bugs fixed
- (lr-wpan) !1406 - Fixes issues during MAC scan
Release 3.38
------------

View File

@@ -1393,14 +1393,14 @@ LrWpanMac::EndChannelScan()
NS_LOG_ERROR(this << " Invalid scan type");
}
m_pendPrimitive = MLME_NONE;
m_channelScanIndex = 0;
m_scanParams = {};
if (!m_mlmeScanConfirmCallback.IsNull())
{
m_mlmeScanConfirmCallback(confirmParams);
}
m_pendPrimitive = MLME_NONE;
m_channelScanIndex = 0;
m_scanParams = {};
}
}
@@ -1443,19 +1443,21 @@ LrWpanMac::EndChannelEnergyScan()
// (i.e when a coordinator perform a scan and it was already transmitting beacons)
// All channels scanned, report success
if (!m_mlmeScanConfirmCallback.IsNull())
{
MlmeScanConfirmParams confirmParams;
confirmParams.m_status = MLMESCAN_SUCCESS;
confirmParams.m_chPage = m_phy->GetCurrentPage();
confirmParams.m_scanType = m_scanParams.m_scanType;
confirmParams.m_energyDetList = m_energyDetectList;
confirmParams.m_resultListSize = m_energyDetectList.size();
m_mlmeScanConfirmCallback(confirmParams);
}
MlmeScanConfirmParams confirmParams;
confirmParams.m_status = MLMESCAN_SUCCESS;
confirmParams.m_chPage = m_phy->GetCurrentPage();
confirmParams.m_scanType = m_scanParams.m_scanType;
confirmParams.m_energyDetList = m_energyDetectList;
confirmParams.m_resultListSize = m_energyDetectList.size();
m_pendPrimitive = MLME_NONE;
m_channelScanIndex = 0;
m_scanParams = {};
if (!m_mlmeScanConfirmCallback.IsNull())
{
m_mlmeScanConfirmCallback(confirmParams);
}
}
}
@@ -3361,10 +3363,10 @@ LrWpanMac::PlmeSetAttributeConfirm(LrWpanPhyEnumeration status, LrWpanPibAttribu
}
else
{
uint64_t scanDuration =
lrwpan::aBaseSuperframeDuration *
((static_cast<uint32_t>(1 << m_scanParams.m_scanDuration)) + 1);
nextScanTime = Seconds(static_cast<double>(scanDuration / symbolRate));
uint64_t scanDurationSym =
lrwpan::aBaseSuperframeDuration * (pow(2, m_scanParams.m_scanDuration) + 1);
nextScanTime = Seconds(static_cast<double>(scanDurationSym) / symbolRate);
}
switch (m_scanParams.m_scanType)

View File

@@ -510,8 +510,10 @@ struct MlmeScanRequestParams
uint32_t m_scanChannels{0x7FFF800}; //!< The channel numbers to be scanned.
//!< Default: (0x7FFF800 = Ch11-Ch26)
//!< 27 LSB (b0,b1,...,b26) = channels
uint8_t m_scanDuration{14}; //!< A value used to calculate the length of time to spend scanning
//!< [aBaseSuperframeDuration * (2^m_scanDuration +)].
uint8_t m_scanDuration{14}; //!< The factor (0-14) used to calculate the length of time
//!< to spend scanning.
//!< scanDurationSymbols =
//!< [aBaseSuperframeDuration * (2^m_scanDuration + 1)].
uint32_t m_chPage{0}; //!< The channel page on which to perform scan.
};