[random] add helper function to add random jitter to a value (#2703)

This commit is contained in:
Abtin Keshavarzian
2018-05-15 09:24:12 -07:00
committed by Jonathan Hui
parent 0824818646
commit a4330998af
3 changed files with 18 additions and 25 deletions
+16
View File
@@ -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;
}
/**
* @}
*
+2 -24
View File
@@ -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)
-1
View File
@@ -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);