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) {}
88 switch (mRequestStatus) {
91 mRequestStartMillis = nowMillis;
92 mRequestStatus = kStatusSent;
95 + mCurrentSyncPeriodSeconds * (uint32_t) 1000);
99 uint32_t elapsedMillis = nowMillis - mRequestStartMillis;
100 if (mTimingStats) mTimingStats->update((uint16_t) elapsedMillis);
107 mRequestStatus = kStatusWaitForRetry;
112 mCurrentSyncPeriodSeconds = mSyncPeriodSeconds;
113 mRequestStatus = kStatusOk;
118 if (elapsedMillis >= mRequestTimeoutMillis) {
119 mRequestStatus = kStatusWaitForRetry;
128 uint32_t elapsedMillis = nowMillis - mRequestStartMillis;
129 if (elapsedMillis >= mCurrentSyncPeriodSeconds * (uint32_t) 1000) {
130 mRequestStatus = kStatusReady;
138 case kStatusWaitForRetry: {
139 uint32_t elapsedMillis = nowMillis - mRequestStartMillis;
141 if (elapsedMillis >= mCurrentSyncPeriodSeconds * (uint32_t) 1000) {
142 if (mCurrentSyncPeriodSeconds >= mSyncPeriodSeconds / 2) {
143 mCurrentSyncPeriodSeconds = mSyncPeriodSeconds;
145 mCurrentSyncPeriodSeconds *= 2;
147 mRequestStatus = kStatusReady;
163 friend class ::SystemClockLoopTest_loop;
166 static const uint8_t kStatusReady = 0;
169 static const uint8_t kStatusSent = 1;
172 static const uint8_t kStatusOk = 2;
175 static const uint8_t kStatusWaitForRetry = 3;
177 uint16_t
const mSyncPeriodSeconds = 3600;
178 uint16_t
const mRequestTimeoutMillis = 1000;
179 ace_common::TimingStats*
const mTimingStats =
nullptr;
181 uint32_t mRequestStartMillis;
182 uint16_t mCurrentSyncPeriodSeconds = 5;
183 uint8_t mRequestStatus = kStatusReady;