Experimental code to allow timer resyncing after NTP resync
Some checks are pending
Compile / Compile (push) Has started running
Some checks are pending
Compile / Compile (push) Has started running
This commit is contained in:
parent
3ada2fb9a9
commit
5367843ac1
3 changed files with 33 additions and 12 deletions
|
@ -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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue