From b584cc03bd5fdded6ec463fd954762f011d0a45a Mon Sep 17 00:00:00 2001 From: Markus Ransberger Date: Sun, 7 Apr 2024 01:14:17 +0200 Subject: [PATCH] Minor refactoring. --- include/time_manager.h | 47 +++++++---- src/connectivity/time_manager.cpp | 136 +++++++++++++++--------------- 2 files changed, 97 insertions(+), 86 deletions(-) diff --git a/include/time_manager.h b/include/time_manager.h index 8c81d41..d5095e1 100644 --- a/include/time_manager.h +++ b/include/time_manager.h @@ -30,22 +30,7 @@ class TimeManager #define NTP_MAX_UPDATE_TIME_US (500 * 1000) // 500ms max update time public: - bool ntp_sync_successful(void) const; // was there a NTP sync once? - bool ntp_update_failed_prolonged(void); // indicates if maximum time since last NTP update was too long - NtpUpdateState ntp_time_update(); - struct tm time_info(void); - TimeManagerState tm_state(void) const; - void increment_time_now_local(void); - void log_time() const; // log _time_info - void log_time(struct tm time_info) const; // log argument time_info - - int tm_min(void); - int tm_hour(void); - int tm_day(void); - int tm_mon(void); - int tm_year(void); - bool tm_isdst(void); // true if summertime - + // constructor TimeManager(const char *tz, const char *ntp_server, uint32 ntp_update_period_s, @@ -53,9 +38,35 @@ public: uint32 ntp_max_offline_time_s, UDPLogger *logger); + // ntp methods + bool ntp_sync_successful(void) const; // was there a NTP sync once? + bool ntp_update_failed_prolonged(void); // indicates if maximum time since last NTP update was too long + NtpUpdateState ntp_time_update(); // main NTP time update method, called in loop + + // ISR method + void increment_time_now_local(void); // should be called by timer ISR + + // getter for time values + bool tm_isdst(void); // true if summertime + int tm_day(void); + int tm_hour(void); + int tm_min(void); + int tm_mon(void); + int tm_year(void); + struct tm time_info(void); + + // getter + TimeManagerState tm_state(void) const; // get current state + + // logging + void log_time() const; // log _time_info + void log_time(struct tm time_info) const; // log argument time_info + private: - void _set_up_ntp(void); // set up NTP server - void _set_up_timer_isr(void); // set up timer interrupt + // setup methods + void _set_up_ntp(void); // set up NTP server + void _set_up_timer_isr(void); // set up timer interrupt + const char *_tz; // timezone const char *_ntp_server; // ntp server address UDPLogger *_logger; // logger instance diff --git a/src/connectivity/time_manager.cpp b/src/connectivity/time_manager.cpp index 7141d27..c6f321d 100644 --- a/src/connectivity/time_manager.cpp +++ b/src/connectivity/time_manager.cpp @@ -3,7 +3,7 @@ #include "wordclock_constants.h" #include "time.h" -extern UDPLogger logger; +extern UDPLogger logger; // logging instance extern ESP8266Timer ITimer; // ESP8266 Timer extern void IRAM_ATTR TimerHandler(); // ISR function @@ -25,22 +25,22 @@ TimeManager::TimeManager(const char *tz, _logger = logger; } -struct tm TimeManager::time_info(void) -{ - localtime_r(&_time_now_local, &_time_info); // convert time - return _time_info; -} - -TimeManagerState TimeManager::tm_state(void) const -{ - return _tm_state; -} - bool TimeManager::ntp_sync_successful(void) const { return (_time_now_ntp > 0); } +bool TimeManager::ntp_update_failed_prolonged(void) +{ + bool retval = false; + if (_time_now_local >= (_time_now_ntp + (time_t)_ntp_max_offline_time_s)) + { + _tm_state = TM_PROLONGED_SYNC_FAIL; + retval = true; + } + return retval; +} + /** * @brief NTP time update, should be called in loop(). * @@ -118,27 +118,10 @@ NtpUpdateState TimeManager::ntp_time_update() return retval; } -bool TimeManager::ntp_update_failed_prolonged(void) -{ - bool retval = false; - if (_time_now_local >= (_time_now_ntp + (time_t)_ntp_max_offline_time_s)) - { - _tm_state = TM_PROLONGED_SYNC_FAIL; - retval = true; - } - return retval; -} - -int TimeManager::tm_min(void) +bool TimeManager::tm_isdst(void) { localtime_r(&_time_now_local, &_time_info); // convert time - return _time_info.tm_min; -} - -int TimeManager::tm_hour(void) -{ - localtime_r(&_time_now_local, &_time_info); // convert time - return _time_info.tm_hour; + return _time_info.tm_isdst > 0; } int TimeManager::tm_day(void) @@ -147,10 +130,16 @@ int TimeManager::tm_day(void) return _time_info.tm_mday + 1; // add 1 to get actual day } -int TimeManager::tm_year(void) +int TimeManager::tm_hour(void) { localtime_r(&_time_now_local, &_time_info); // convert time - return _time_info.tm_year + NTP_START_YEAR; // add start year to get actual year + return _time_info.tm_hour; +} + +int TimeManager::tm_min(void) +{ + localtime_r(&_time_now_local, &_time_info); // convert time + return _time_info.tm_min; } int TimeManager::tm_mon(void) @@ -159,49 +148,21 @@ int TimeManager::tm_mon(void) return _time_info.tm_mon + 1; // add 1 to get actual month } -bool TimeManager::tm_isdst(void) +int TimeManager::tm_year(void) { localtime_r(&_time_now_local, &_time_info); // convert time - return _time_info.tm_isdst > 0; + return _time_info.tm_year + NTP_START_YEAR; // add start year to get actual year } -/** - * @brief Sets up the timer ISR - * - */ -void TimeManager::_set_up_timer_isr(void) +struct tm TimeManager::time_info(void) { - // set up timer interrupt after NTP update is done - if (ITimer.attachInterruptInterval(PERIOD_CLOCK_UPDATE_US, TimerHandler)) - { - _tm_state = TM_NORMAL; - logger.log_string(String("Timer ISR was attached successfully!")); - } - else - { - _tm_state = TM_SETUP_FAILED; - logger.log_string("WARNING: Timer interrupt was not attached!"); - } + localtime_r(&_time_now_local, &_time_info); // convert time + return _time_info; } -/** - * @brief Sets up the NTP server config - * - */ -void TimeManager::_set_up_ntp(void) +TimeManagerState TimeManager::tm_state(void) const { - if ((_tz != nullptr) && (_ntp_server != nullptr)) - { - // set up NTP server and timezone at init - configTime(_tz, _ntp_server); - _tm_state = TM_INITIAL_SYNC; - logger.log_string(String("NTP server connection was set up successfully!")); - } - else - { - _tm_state = TM_SETUP_FAILED; - logger.log_string(String("ERROR: Timezone and/or NTP-Server were not given correctly!")); - } + return _tm_state; } /** @@ -225,3 +186,42 @@ void TimeManager::log_time(struct tm time_info) const strftime(strftime_buf, sizeof(strftime_buf), "%c", &time_info); logger.log_string(String(strftime_buf)); } + +/** + * @brief Sets up the NTP server config + * + */ +void TimeManager::_set_up_ntp(void) +{ + if ((_tz != nullptr) && (_ntp_server != nullptr)) + { + // set up NTP server and timezone at init + configTime(_tz, _ntp_server); + _tm_state = TM_INITIAL_SYNC; + logger.log_string(String("NTP configuration was set up successfully!")); + } + else + { + _tm_state = TM_SETUP_FAILED; + logger.log_string(String("ERROR: Timezone and/or NTP-Server were not given correctly!")); + } +} + +/** + * @brief Sets up the timer ISR + * + */ +void TimeManager::_set_up_timer_isr(void) +{ + // set up timer interrupt after NTP update is done + if (ITimer.attachInterruptInterval(PERIOD_CLOCK_UPDATE_US, TimerHandler)) + { + _tm_state = TM_NORMAL; + logger.log_string(String("Timer ISR was attached successfully!")); + } + else + { + _tm_state = TM_SETUP_FAILED; + logger.log_string("WARNING: Timer interrupt was not attached!"); + } +}