timekeeper code sanitizations
This commit is contained in:
parent
c02b8bc751
commit
171207af22
@ -8,9 +8,8 @@
|
|||||||
|
|
||||||
extern RtcDS3231<TwoWire> Rtc; // make RTC instance globally available
|
extern RtcDS3231<TwoWire> Rtc; // make RTC instance globally available
|
||||||
|
|
||||||
int rtc_init(void);
|
uint8_t rtc_init(void);
|
||||||
int set_rtctime(uint32_t t);
|
uint8_t set_rtctime(time_t t);
|
||||||
int set_rtctime(time_t t);
|
|
||||||
void sync_rtctime(void);
|
void sync_rtctime(void);
|
||||||
time_t get_rtctime(void);
|
time_t get_rtctime(void);
|
||||||
float get_rtctemp(void);
|
float get_rtctemp(void);
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#include "dcf77.h"
|
#include "dcf77.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum timesources { pps, rtc, lora, unsynced };
|
enum timesources { _gps, _rtc, _lora, _unsynced };
|
||||||
|
|
||||||
void IRAM_ATTR CLOCKIRQ(void);
|
void IRAM_ATTR CLOCKIRQ(void);
|
||||||
void clock_init(void);
|
void clock_init(void);
|
||||||
|
@ -472,7 +472,7 @@ void user_request_network_time_callback(void *pVoidUserUTCTime,
|
|||||||
*pUserUTCTime += requestDelaySec;
|
*pUserUTCTime += requestDelaySec;
|
||||||
|
|
||||||
// Update system time with time read from the network
|
// Update system time with time read from the network
|
||||||
if (syncTime(*pUserUTCTime, lora)) { // have we got a valid time?
|
if (syncTime(*pUserUTCTime, _lora)) { // have we got a valid time?
|
||||||
ESP_LOGI(TAG, "LORA has set the system time");
|
ESP_LOGI(TAG, "LORA has set the system time");
|
||||||
} else
|
} else
|
||||||
ESP_LOGI(TAG, "Unable to sync system time with LORA");
|
ESP_LOGI(TAG, "Unable to sync system time with LORA");
|
||||||
|
@ -361,8 +361,10 @@ void setup() {
|
|||||||
ESP_LOGI(TAG, "Starting Timekeeper...");
|
ESP_LOGI(TAG, "Starting Timekeeper...");
|
||||||
assert(timepulse_init()); // setup timepulse
|
assert(timepulse_init()); // setup timepulse
|
||||||
timepulse_start();
|
timepulse_start();
|
||||||
time_sync(); // sync time
|
time_sync(); // sync time
|
||||||
|
#ifdef TIME_SYNC_INTERVAL
|
||||||
setSyncInterval(TIME_SYNC_INTERVAL * 60); // controls timeStatus()
|
setSyncInterval(TIME_SYNC_INTERVAL * 60); // controls timeStatus()
|
||||||
|
#endif
|
||||||
|
|
||||||
// start wifi in monitor mode and start channel rotation timer
|
// start wifi in monitor mode and start channel rotation timer
|
||||||
ESP_LOGI(TAG, "Starting Wifi...");
|
ESP_LOGI(TAG, "Starting Wifi...");
|
||||||
|
@ -8,7 +8,7 @@ static const char TAG[] = "main";
|
|||||||
RtcDS3231<TwoWire> Rtc(Wire); // RTC hardware i2c interface
|
RtcDS3231<TwoWire> Rtc(Wire); // RTC hardware i2c interface
|
||||||
|
|
||||||
// initialize RTC
|
// initialize RTC
|
||||||
int rtc_init(void) {
|
uint8_t rtc_init(void) {
|
||||||
|
|
||||||
if (I2C_MUTEX_LOCK()) { // block i2c bus access
|
if (I2C_MUTEX_LOCK()) { // block i2c bus access
|
||||||
|
|
||||||
@ -24,6 +24,7 @@ int rtc_init(void) {
|
|||||||
Rtc.SetIsRunning(true);
|
Rtc.SetIsRunning(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If you want to initialize a fresh RTC to compiled time, use this code
|
||||||
/*
|
/*
|
||||||
RtcDateTime tt = Rtc.GetDateTime();
|
RtcDateTime tt = Rtc.GetDateTime();
|
||||||
time_t t = tt.Epoch32Time(); // sec2000 -> epoch
|
time_t t = tt.Epoch32Time(); // sec2000 -> epoch
|
||||||
@ -45,7 +46,7 @@ int rtc_init(void) {
|
|||||||
|
|
||||||
} // rtc_init()
|
} // rtc_init()
|
||||||
|
|
||||||
int set_rtctime(time_t t) { // t is UTC in seconds epoch time
|
uint8_t set_rtctime(time_t t) { // t is UTC in seconds epoch time
|
||||||
if (I2C_MUTEX_LOCK()) {
|
if (I2C_MUTEX_LOCK()) {
|
||||||
Rtc.SetDateTime(RtcDateTime(t - SECS_YR_2000)); // epoch -> sec2000
|
Rtc.SetDateTime(RtcDateTime(t - SECS_YR_2000)); // epoch -> sec2000
|
||||||
I2C_MUTEX_UNLOCK();
|
I2C_MUTEX_UNLOCK();
|
||||||
@ -57,11 +58,6 @@ int set_rtctime(time_t t) { // t is UTC in seconds epoch time
|
|||||||
} // failure
|
} // failure
|
||||||
} // set_rtctime()
|
} // set_rtctime()
|
||||||
|
|
||||||
int set_rtctime(uint32_t t) { // t is UTC in seconds epoch time
|
|
||||||
return set_rtctime(static_cast<time_t>(t));
|
|
||||||
// set_rtctime()
|
|
||||||
}
|
|
||||||
|
|
||||||
time_t get_rtctime(void) {
|
time_t get_rtctime(void) {
|
||||||
// !! never call now() or delay in this function, this would break this
|
// !! never call now() or delay in this function, this would break this
|
||||||
// function to be used as SyncProvider for Time.h
|
// function to be used as SyncProvider for Time.h
|
||||||
|
@ -13,13 +13,13 @@ void time_sync() {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef HAS_GPS
|
#ifdef HAS_GPS
|
||||||
if (syncTime(get_gpstime(), pps))
|
if (syncTime(get_gpstime(), _gps))
|
||||||
return; // attempt sync with GPS time
|
return; // attempt sync with GPS time
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// no GPS -> fallback to RTC time
|
// no GPS -> fallback to RTC time while trying lora sync
|
||||||
#ifdef HAS_RTC
|
#ifdef HAS_RTC
|
||||||
if (!syncTime(get_rtctime(), rtc)) // sync with RTC time
|
if (!syncTime(get_rtctime(), _rtc)) // sync with RTC time
|
||||||
ESP_LOGW(TAG, "no confident RTC time");
|
ESP_LOGW(TAG, "no confident RTC time");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -40,20 +40,20 @@ uint8_t syncTime(time_t const t, uint8_t const caller) {
|
|||||||
if (TimeIsValid(t)) {
|
if (TimeIsValid(t)) {
|
||||||
uint8_t const TimeIsPulseSynced =
|
uint8_t const TimeIsPulseSynced =
|
||||||
wait_for_pulse(); // wait for next 1pps timepulse
|
wait_for_pulse(); // wait for next 1pps timepulse
|
||||||
setTime(t);
|
setTime(t); // sync time and reset timeStatus() to timeSet
|
||||||
adjustTime(1); // forward time to next second
|
adjustTime(1); // forward time to next second
|
||||||
timeSource = timeSetSymbols[caller];
|
timeSource = timeSetSymbols[caller];
|
||||||
ESP_LOGD(TAG, "Time source %c set time to %02d:%02d:%02d", timeSource,
|
ESP_LOGD(TAG, "Time source %c set time to %02d:%02d:%02d", timeSource,
|
||||||
hour(t), minute(t), second(t));
|
hour(t), minute(t), second(t));
|
||||||
#ifdef HAS_RTC
|
#ifdef HAS_RTC
|
||||||
if ((TimeIsPulseSynced) && (caller != rtc))
|
if ((TimeIsPulseSynced) && (caller != _rtc))
|
||||||
set_rtctime(now());
|
set_rtctime(now());
|
||||||
#endif
|
#endif
|
||||||
return 1; // success
|
return 1; // success
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGD(TAG, "Time source %c sync attempt failed", timeSetSymbols[caller]);
|
ESP_LOGD(TAG, "Time source %c sync attempt failed", timeSetSymbols[caller]);
|
||||||
timeSource = timeSetSymbols[unsynced];
|
timeSource = timeSetSymbols[_unsynced];
|
||||||
return 0; // failure
|
return 0; // failure
|
||||||
}
|
}
|
||||||
} // syncTime()
|
} // syncTime()
|
||||||
|
Loading…
Reference in New Issue
Block a user