From 1e49101c392c1ab3ea891c3fb6ae359cfc36cf2c Mon Sep 17 00:00:00 2001 From: Alberto Gallegos Ramonet Date: Tue, 28 Mar 2023 17:01:31 +0900 Subject: [PATCH] lr-wpan: Fixes issues during MAC scan --- RELEASE_NOTES.md | 2 ++ src/lr-wpan/model/lr-wpan-mac.cc | 38 +++++++++++++++++--------------- src/lr-wpan/model/lr-wpan-mac.h | 6 +++-- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 76ca88fd5..df2396f74 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -25,6 +25,8 @@ Release 3-dev ### Bugs fixed +- (lr-wpan) !1406 - Fixes issues during MAC scan + Release 3.38 ------------ diff --git a/src/lr-wpan/model/lr-wpan-mac.cc b/src/lr-wpan/model/lr-wpan-mac.cc index 95653b64e..87b8bdf0e 100644 --- a/src/lr-wpan/model/lr-wpan-mac.cc +++ b/src/lr-wpan/model/lr-wpan-mac.cc @@ -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(1 << m_scanParams.m_scanDuration)) + 1); - nextScanTime = Seconds(static_cast(scanDuration / symbolRate)); + uint64_t scanDurationSym = + lrwpan::aBaseSuperframeDuration * (pow(2, m_scanParams.m_scanDuration) + 1); + + nextScanTime = Seconds(static_cast(scanDurationSym) / symbolRate); } switch (m_scanParams.m_scanType) diff --git a/src/lr-wpan/model/lr-wpan-mac.h b/src/lr-wpan/model/lr-wpan-mac.h index a1024106f..73b132642 100644 --- a/src/lr-wpan/model/lr-wpan-mac.h +++ b/src/lr-wpan/model/lr-wpan-mac.h @@ -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. };