diff --git a/src/core/thread/csl_tx_scheduler.cpp b/src/core/thread/csl_tx_scheduler.cpp index 6516f064f..c8893dc4e 100644 --- a/src/core/thread/csl_tx_scheduler.cpp +++ b/src/core/thread/csl_tx_scheduler.cpp @@ -75,9 +75,7 @@ void CslTxScheduler::InitFrameRequestAhead(void) // longest frame on bus is 127 bytes with some metadata, use 150 bytes for bus Tx time estimation uint32_t busTxTimeUs = ((busSpeedHz == 0) ? 0 : (150 * 8 * 1000000 + busSpeedHz - 1) / busSpeedHz); - // Use ceiling to get next closest integer - mCslFrameRequestAhead = - (OPENTHREAD_CONFIG_MAC_CSL_REQUEST_AHEAD_US + busTxTimeUs + kUsPerTenSymbols - 1) / kUsPerTenSymbols; + mCslFrameRequestAheadUs = OPENTHREAD_CONFIG_MAC_CSL_REQUEST_AHEAD_US + busTxTimeUs; } void CslTxScheduler::Update(void) @@ -161,11 +159,11 @@ uint32_t CslTxScheduler::GetNextCslTransmissionDelay(const Child &aChild, uint64_t firstTxWindow = aChild.GetLastRxTimestamp() + aChild.GetCslPhase() * kUsPerTenSymbols; uint64_t nextTxWindow = aRadioNow - (aRadioNow % periodInUs) + (firstTxWindow % periodInUs); - while (aRadioNow + mCslFrameRequestAhead >= nextTxWindow) nextTxWindow += periodInUs; + while (aRadioNow + mCslFrameRequestAheadUs >= nextTxWindow) nextTxWindow += periodInUs; aDelayFromLastRx = static_cast(nextTxWindow - aChild.GetLastRxTimestamp()); - return static_cast(nextTxWindow - aRadioNow); + return static_cast(nextTxWindow - aRadioNow - mCslFrameRequestAheadUs); } otError CslTxScheduler::HandleFrameRequest(Mac::TxFrame &aFrame) diff --git a/src/core/thread/csl_tx_scheduler.hpp b/src/core/thread/csl_tx_scheduler.hpp index 584018d98..7b12af4cd 100644 --- a/src/core/thread/csl_tx_scheduler.hpp +++ b/src/core/thread/csl_tx_scheduler.hpp @@ -202,7 +202,7 @@ private: void HandleSentFrame(const Mac::TxFrame &aFrame, otError aError, Child &aChild); - uint32_t mCslFrameRequestAhead; + uint32_t mCslFrameRequestAheadUs; Child * mCslTxChild; Message * mCslTxMessage; Callbacks::FrameContext mFrameContext;