Experimental code to allow timer resyncing after NTP resync
Some checks are pending
Compile / Compile (push) Has started running

This commit is contained in:
Lewis Jackson 2023-05-31 21:20:55 +03:00
parent 3ada2fb9a9
commit 5367843ac1
3 changed files with 33 additions and 12 deletions

View file

@ -13,10 +13,6 @@ WatchyRTC::WatchyRTC()
void WatchyRTC::Init()
{
tmElements_t tm;
Get(tm, 0);
rtc_pcf.initClock();
Set(tm);
}
void WatchyRTC::Get(tmElements_t & tm, int offsetInSeconds)
@ -43,14 +39,7 @@ void WatchyRTC::Set(tmElements_t tm)
void WatchyRTC::SetTimer()
{
if (!m_timerSet) {
rtc_pcf.getDateTime();
// Sleep just long enough to get to a multiple of the update interval, makes updates happen on exact turn of the minute
int seconds = UPDATE_INTERVAL - (rtc_pcf.getSecond() % UPDATE_INTERVAL);
// Non repeating
rtc_pcf.setTimer(seconds, TMR_1Hz, false);
m_timerSet = true;
m_initialTimer = true;
Resync();
}
}
@ -133,10 +122,40 @@ bool WatchyRTC::CheckWakeup()
interval = UPDATE_INTERVAL;
}
// Timer doesn't work reliably unless it's cleared first
rtc_pcf.clearTimer();
rtc_pcf.setTimer(interval, frequency, true);
return true;
}
return true;
}
void WatchyRTC::Resync()
{
rtc_pcf.getDateTime();
// Sleep just long enough to get to a multiple of the update interval, makes updates happen on exact turn of the minute
int seconds = UPDATE_INTERVAL - (rtc_pcf.getSecond() % UPDATE_INTERVAL);
if (seconds < 0) {
seconds = 0;
}
// Timer doesn't work reliably unless it's cleared first
rtc_pcf.clearTimer();
if (seconds == 0) {
// If there's no time to wait, just call CheckWakeup() immediately and it'll set the repeating timer
m_timerSet = true;
m_initialTimer = true;
CheckWakeup();
} else {
rtc_pcf.setTimer(seconds, TMR_1Hz, false);
m_timerSet = true;
m_initialTimer = true;
}
seconds = 0;
}