diff --git a/src/configuration.h b/src/configuration.h index 242060987..dbd09235e 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -29,11 +29,8 @@ along with this program. If not, see . #if __has_include("Melopero_RV3028.h") #include "Melopero_RV3028.h" #endif -#if __has_include("SensorPCF8563.hpp") -#include "SensorPCF8563.hpp" -#endif -#if __has_include("SensorPCF85063.hpp") -#include "SensorPCF85063.hpp" +#if __has_include("SensorRtcHelper.hpp") +#include "SensorRtcHelper.hpp" #endif // ----------------------------------------------------------------------------- diff --git a/src/gps/RTC.cpp b/src/gps/RTC.cpp index c36a9b837..10af90d08 100644 --- a/src/gps/RTC.cpp +++ b/src/gps/RTC.cpp @@ -69,48 +69,14 @@ RTCSetResult readFromRTC() } else { LOG_WARN("RV3028_RTC mismatch (0x%02X)", rtc_found.address); } -#elif defined(PCF8563_RTC) +#elif defined(PCF8563_RTC) || defined(PCF85063_RTC) +#if defined(PCF8563_RTC) if (rtc_found.address == PCF8563_RTC) { - uint32_t now = millis(); - SensorPCF8563 rtc; - -#if WIRE_INTERFACES_COUNT == 2 - rtc.begin(rtc_found.port == ScanI2C::I2CPort::WIRE1 ? Wire1 : Wire); -#else - rtc.begin(Wire); -#endif - - RTC_DateTime datetime = rtc.getDateTime(); - tm t = datetime.toUnixTime(); - tv.tv_sec = gm_mktime(&t); - tv.tv_usec = 0; - uint32_t printableEpoch = tv.tv_sec; // Print lib only supports 32 bit but time_t can be 64 bit on some platforms - -#ifdef BUILD_EPOCH - if (tv.tv_sec < BUILD_EPOCH) { - if (Throttle::isWithinTimespanMs(lastTimeValidationWarning, TIME_VALIDATION_WARNING_INTERVAL_MS) == false) { - LOG_WARN("Ignore time (%ld) before build epoch (%ld)!", printableEpoch, BUILD_EPOCH); - lastTimeValidationWarning = millis(); - } - return RTCSetResultInvalidTime; - } -#endif - - LOG_DEBUG("Read RTC time from PCF8563 getDateTime as %02d-%02d-%02d %02d:%02d:%02d (%ld)", t.tm_year + 1900, t.tm_mon + 1, - t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, printableEpoch); - if (currentQuality == RTCQualityNone) { - timeStartMsec = now; - zeroOffsetSecs = tv.tv_sec; - currentQuality = RTCQualityDevice; - } - return RTCSetResultSuccess; - } else { - LOG_WARN("PCF8563_RTC mismatch (0x%02X)", rtc_found.address); - } #elif defined(PCF85063_RTC) if (rtc_found.address == PCF85063_RTC) { +#endif uint32_t now = millis(); - SensorPCF85063 rtc; + SensorRtcHelper rtc; #if WIRE_INTERFACES_COUNT == 2 rtc.begin(rtc_found.port == ScanI2C::I2CPort::WIRE1 ? Wire1 : Wire); @@ -134,7 +100,7 @@ RTCSetResult readFromRTC() } #endif - LOG_DEBUG("Read RTC time from PCF85063 getDateTime as %02d-%02d-%02d %02d:%02d:%02d (%ld)", t.tm_year + 1900, + LOG_DEBUG("Read RTC time from %s getDateTime as %02d-%02d-%02d %02d:%02d:%02d (%ld)", rtc.getChipName(), t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, printableEpoch); if (currentQuality == RTCQualityNone) { timeStartMsec = now; @@ -143,7 +109,7 @@ RTCSetResult readFromRTC() } return RTCSetResultSuccess; } else { - LOG_WARN("PCF85063_RTC mismatch (0x%02X)", rtc_found.address); + LOG_WARN("RTC not found (found address 0x%02X)", rtc_found.address); } #else if (!gettimeofday(&tv, NULL)) { @@ -238,25 +204,13 @@ RTCSetResult perhapsSetRTC(RTCQuality q, const struct timeval *tv, bool forceUpd } else { LOG_WARN("RV3028_RTC mismatch (0x%02X)", rtc_found.address); } -#elif defined(PCF8563_RTC) +#elif defined(PCF8563_RTC) || defined(PCF85063_RTC) +#if defined(PCF8563_RTC) if (rtc_found.address == PCF8563_RTC) { - SensorPCF8563 rtc; - -#if WIRE_INTERFACES_COUNT == 2 - rtc.begin(rtc_found.port == ScanI2C::I2CPort::WIRE1 ? Wire1 : Wire); -#else - rtc.begin(Wire); -#endif - tm *t = gmtime(&tv->tv_sec); - rtc.setDateTime(*t); - LOG_DEBUG("PCF8563_RTC setDateTime %02d-%02d-%02d %02d:%02d:%02d (%ld)", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, - t->tm_hour, t->tm_min, t->tm_sec, printableEpoch); - } else { - LOG_WARN("PCF8563_RTC mismatch (0x%02X)", rtc_found.address); - } #elif defined(PCF85063_RTC) if (rtc_found.address == PCF85063_RTC) { - SensorPCF85063 rtc; +#endif + SensorRtcHelper rtc; #if WIRE_INTERFACES_COUNT == 2 rtc.begin(rtc_found.port == ScanI2C::I2CPort::WIRE1 ? Wire1 : Wire); @@ -265,10 +219,10 @@ RTCSetResult perhapsSetRTC(RTCQuality q, const struct timeval *tv, bool forceUpd #endif tm *t = gmtime(&tv->tv_sec); rtc.setDateTime(*t); - LOG_DEBUG("PCF85063_RTC setDateTime %02d-%02d-%02d %02d:%02d:%02d (%ld)", t->tm_year + 1900, t->tm_mon + 1, + LOG_DEBUG("%s setDateTime %02d-%02d-%02d %02d:%02d:%02d (%ld)", rtc.getChipName(), t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, printableEpoch); } else { - LOG_WARN("PCF85063_RTC mismatch (0x%02X)", rtc_found.address); + LOG_WARN("RTC not found (found address 0x%02X)", rtc_found.address); } #elif defined(ARCH_ESP32) settimeofday(tv, NULL);