6 #ifndef ACE_TIME_SYSTEM_CLOCK_LOOP_H
7 #define ACE_TIME_SYSTEM_CLOCK_LOOP_H
10 #include <AceCommon.h>
11 #include "SystemClock.h"
13 class SystemClockLoopTest_loop;
60 Clock* referenceClock ,
62 uint16_t syncPeriodSeconds = 3600,
63 uint16_t initialSyncPeriodSeconds = 5,
64 uint16_t requestTimeoutMillis = 1000,
65 ace_common::TimingStats* timingStats =
nullptr):
67 mSyncPeriodSeconds(syncPeriodSeconds),
68 mRequestTimeoutMillis(requestTimeoutMillis),
69 mTimingStats(timingStats),
70 mCurrentSyncPeriodSeconds(initialSyncPeriodSeconds) {}
78 if (mReferenceClock ==
nullptr)
return;
83 switch (mRequestStatus) {
86 mRequestStartMillis = nowMillis;
92 if (mTimingStats !=
nullptr) {
93 uint16_t elapsedMillis = nowMillis - mRequestStartMillis;
94 mTimingStats->update(elapsedMillis);
96 if (nowSeconds == kInvalidSeconds) {
100 mCurrentSyncPeriodSeconds = mSyncPeriodSeconds;
101 mLastSyncMillis = nowMillis;
105 unsigned long waitMillis = nowMillis - mRequestStartMillis;
106 if (waitMillis >= mRequestTimeoutMillis) {
112 unsigned long millisSinceLastSync = nowMillis - mLastSyncMillis;
113 if (millisSinceLastSync >= mCurrentSyncPeriodSeconds * 1000UL) {
121 unsigned long waitMillis = nowMillis - mRequestStartMillis;
122 if (waitMillis >= mCurrentSyncPeriodSeconds * 1000UL) {
123 if (mCurrentSyncPeriodSeconds >= mSyncPeriodSeconds / 2) {
124 mCurrentSyncPeriodSeconds = mSyncPeriodSeconds;
126 mCurrentSyncPeriodSeconds *= 2;
136 friend class ::SystemClockLoopTest_loop;
142 uint16_t
const mSyncPeriodSeconds;
143 uint16_t
const mRequestTimeoutMillis;
144 ace_common::TimingStats*
const mTimingStats;
146 unsigned long mLastSyncMillis;
147 unsigned long mRequestStartMillis;
148 uint16_t mCurrentSyncPeriodSeconds;