Skip to content

Commit fd6316f

Browse files
committed
src/SystemClockCoroutine: Update to latest COROUTINE_DELAY_SECONDS() API from AceRoutine v0.3
1 parent 3e8aab0 commit fd6316f

File tree

4 files changed

+21
-7
lines changed

4 files changed

+21
-7
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Changelog
22

33
* Unreleased
4+
* Update `SystemClockCoroutine` to be compatible with
5+
`COROUTINE_DELAY_SECONDS()` API changed in AceRoutine v0.3.
46
* 0.8
57
* Handle `Fri<=1` correctly in various python scripts. (#17)
68
* Improve resolution of zonedb files and ZoneProcessor classes. (#18)

src/ace_time/clock/SystemClockCoroutine.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class SystemClockCoroutine: public SystemClock, public ace_routine::Coroutine {
8787
COROUTINE_LOOP() {
8888
// Send request
8989
mReferenceClock->sendRequest();
90-
mRequestStartMillis = this->millis();
90+
mRequestStartMillis = coroutineMillis();
9191
mRequestStatus = kStatusSent;
9292

9393
// Wait for request
@@ -102,7 +102,7 @@ class SystemClockCoroutine: public SystemClock, public ace_routine::Coroutine {
102102
// goto in COROUTINE_LOOP() 16skip past it in clang++. g++ seems to
103103
// be fine without it.
104104
uint16_t waitMillis =
105-
(uint16_t) this->millis() - mRequestStartMillis;
105+
(uint16_t) coroutineMillis() - mRequestStartMillis;
106106
if (waitMillis >= mRequestTimeoutMillis) {
107107
mRequestStatus = kStatusTimedOut;
108108
break;
@@ -117,14 +117,14 @@ class SystemClockCoroutine: public SystemClock, public ace_routine::Coroutine {
117117
acetime_t nowSeconds = mReferenceClock->readResponse();
118118
if (mTimingStats != nullptr) {
119119
uint16_t elapsedMillis =
120-
(uint16_t) this->millis() - mRequestStartMillis;
120+
(uint16_t) coroutineMillis() - mRequestStartMillis;
121121
mTimingStats->update(elapsedMillis);
122122
}
123123
syncNow(nowSeconds);
124124
mCurrentSyncPeriodSeconds = mSyncPeriodSeconds;
125125
}
126126

127-
COROUTINE_DELAY_SECONDS(mDelayLoopCounter, mCurrentSyncPeriodSeconds);
127+
COROUTINE_DELAY_SECONDS(mCurrentSyncPeriodSeconds);
128128

129129
// Determine the retry delay time based on success or failure. If
130130
// failure, retry with exponential backoff, until the delay becomes
@@ -155,7 +155,6 @@ class SystemClockCoroutine: public SystemClock, public ace_routine::Coroutine {
155155

156156
uint16_t mRequestStartMillis; // lower 16-bit of millis()
157157
uint16_t mCurrentSyncPeriodSeconds;
158-
uint16_t mDelayLoopCounter;
159158
uint8_t mRequestStatus = kStatusUnknown;
160159
};
161160

src/ace_time/testing/TestableSystemClockCoroutine.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,14 @@ class TestableSystemClockCoroutine: public clock::SystemClockCoroutine {
2626
SystemClockCoroutine(referenceClock, backupClock),
2727
mFakeMillis(fakeMillis) {}
2828

29-
// Override Coroutine::millis().
30-
unsigned long millis() const override {
29+
unsigned long coroutineMillis() const override {
3130
return mFakeMillis->millis();
3231
}
3332

33+
unsigned long coroutineSeconds() const override {
34+
return mFakeMillis->millis() / 1000;
35+
}
36+
3437
unsigned long clockMillis() const override {
3538
return mFakeMillis->millis();
3639
}

tests/SystemClockTest/SystemClockTest.ino

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include <ace_time/testing/TestableSystemClockLoop.h>
99
#include <ace_time/testing/TestableSystemClockCoroutine.h>
1010

11+
#define SYSTEM_CLOCK_TEST_DEBUG 0
12+
1113
using namespace aunit;
1214
using namespace ace_time;
1315
using namespace ace_time::clock;
@@ -234,9 +236,17 @@ testF(SystemClockCoroutineTest, runCoroutine) {
234236
// retry with exponential backoff 10 times, doubling the delay on each
235237
// iteration
236238
uint16_t expectedDelaySeconds = 5;
239+
#if SYSTEM_CLOCK_TEST_DEBUG
240+
int iter = 0;
241+
#endif
237242
for (; expectedDelaySeconds < systemClock->mSyncPeriodSeconds;
238243
expectedDelaySeconds *= 2) {
239244

245+
#if SYSTEM_CLOCK_TEST_DEBUG
246+
logging::printf("Iteration %i\n", iter);
247+
iter++;
248+
#endif
249+
240250
// t = 0, sends request and waits for response
241251
systemClock->runCoroutine();
242252
assertTrue(systemClock->isYielding());

0 commit comments

Comments
 (0)