mirror of
https://github.com/espressif/openthread.git
synced 2026-09-03 15:50:06 +00:00
[random] add helper function to add random jitter to a value (#2703)
This commit is contained in:
committed by
Jonathan Hui
parent
0824818646
commit
a4330998af
@@ -146,6 +146,22 @@ inline void FillBuffer(uint8_t *aBuffer, uint16_t aSize)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function adds a random jitter within a given range to a given value.
|
||||
*
|
||||
* @param[in] aValue A value to which the random jitter is added.
|
||||
* @param[in] aJitter Maximum jitter. Random jitter is selected from the range `[-aJitter, aJitter]`.
|
||||
*
|
||||
* @returns The given value with an added random jitter.
|
||||
*
|
||||
*/
|
||||
inline uint32_t AddJitter(uint32_t aValue, uint16_t aJitter)
|
||||
{
|
||||
aJitter = (aJitter <= aValue) ? aJitter : static_cast<uint16_t>(aValue);
|
||||
|
||||
return aValue + GetUint32InRange(0, 2 * aJitter + 1) - aJitter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
|
||||
@@ -104,29 +104,6 @@ exit:
|
||||
return occupancy;
|
||||
}
|
||||
|
||||
void ChannelMonitor::RestartTimer(void)
|
||||
{
|
||||
uint16_t interval = kTimerInterval;
|
||||
int16_t jitter;
|
||||
|
||||
jitter = static_cast<int16_t>(Random::GetUint16InRange(0, 2 * kMaxJitterInterval)) - kMaxJitterInterval;
|
||||
|
||||
if (jitter >= kTimerInterval)
|
||||
{
|
||||
jitter = kTimerInterval - 1;
|
||||
}
|
||||
|
||||
if (jitter <= -kTimerInterval)
|
||||
{
|
||||
jitter = -kTimerInterval + 1;
|
||||
}
|
||||
|
||||
interval += jitter;
|
||||
mTimer.StartAt(mTimer.GetFireTime(), interval);
|
||||
|
||||
otLogDebgUtil(GetInstance(), "ChannelMonitor: Timer interval %u, jitter %d", interval, jitter);
|
||||
}
|
||||
|
||||
void ChannelMonitor::HandleTimer(Timer &aTimer)
|
||||
{
|
||||
aTimer.GetOwner<ChannelMonitor>().HandleTimer();
|
||||
@@ -136,7 +113,8 @@ void ChannelMonitor::HandleTimer(void)
|
||||
{
|
||||
GetInstance().Get<Mac::Mac>().EnergyScan(mScanChannelMasks[mChannelMaskIndex], 0,
|
||||
&ChannelMonitor::HandleEnergyScanResult, this);
|
||||
RestartTimer();
|
||||
|
||||
mTimer.StartAt(mTimer.GetFireTime(), Random::AddJitter(kTimerInterval, kMaxJitterInterval));
|
||||
}
|
||||
|
||||
void ChannelMonitor::HandleEnergyScanResult(void *aContext, otEnergyScanResult *aResult)
|
||||
|
||||
@@ -194,7 +194,6 @@ private:
|
||||
kMaxOccupancy = 0xffff,
|
||||
};
|
||||
|
||||
void RestartTimer(void);
|
||||
static void HandleTimer(Timer &aTimer);
|
||||
void HandleTimer(void);
|
||||
static void HandleEnergyScanResult(void *aContext, otEnergyScanResult *aResult);
|
||||
|
||||
Reference in New Issue
Block a user