6 #ifndef ACE_TIME_SYSTEM_CLOCK_LOOP_H
7 #define ACE_TIME_SYSTEM_CLOCK_LOOP_H
10 #include "SystemClock.h"
12 class SystemClockLoopTest_loop;
59 Clock* referenceClock ,
61 uint16_t syncPeriodSeconds = 3600,
62 uint16_t initialSyncPeriodSeconds = 5,
63 uint16_t requestTimeoutMillis = 1000,
66 mSyncPeriodSeconds(syncPeriodSeconds),
67 mRequestTimeoutMillis(requestTimeoutMillis),
68 mTimingStats(timingStats),
69 mCurrentSyncPeriodSeconds(initialSyncPeriodSeconds) {}
77 if (mReferenceClock ==
nullptr)
return;
82 switch (mRequestStatus) {
85 mRequestStartMillis = nowMillis;
91 if (mTimingStats !=
nullptr) {
92 uint16_t elapsedMillis = nowMillis - mRequestStartMillis;
93 mTimingStats->update(elapsedMillis);
95 if (nowSeconds == kInvalidSeconds) {
99 mCurrentSyncPeriodSeconds = mSyncPeriodSeconds;
100 mLastSyncMillis = nowMillis;
104 unsigned long waitMillis = nowMillis - mRequestStartMillis;
105 if (waitMillis >= mRequestTimeoutMillis) {
111 unsigned long millisSinceLastSync = nowMillis - mLastSyncMillis;
112 if (millisSinceLastSync >= mCurrentSyncPeriodSeconds * 1000UL) {
120 unsigned long waitMillis = nowMillis - mRequestStartMillis;
121 if (waitMillis >= mCurrentSyncPeriodSeconds * 1000UL) {
122 if (mCurrentSyncPeriodSeconds >= mSyncPeriodSeconds / 2) {
123 mCurrentSyncPeriodSeconds = mSyncPeriodSeconds;
125 mCurrentSyncPeriodSeconds *= 2;
135 friend class ::SystemClockLoopTest_loop;
141 uint16_t
const mSyncPeriodSeconds;
142 uint16_t
const mRequestTimeoutMillis;
145 unsigned long mLastSyncMillis;
146 unsigned long mRequestStartMillis;
147 uint16_t mCurrentSyncPeriodSeconds;