diff --git a/src/app/RtcManager.cpp b/src/app/RtcManager.cpp index 35c7ad5..bc023bc 100644 --- a/src/app/RtcManager.cpp +++ b/src/app/RtcManager.cpp @@ -1,37 +1,37 @@ #include "RtcManager.h" -RtcManager::RtcManager(RTC_DS3231 &rtc) : _rtcRef(rtc) +RtcManager::RtcManager() { } DateTime RtcManager::getDateTime() const { - return _rtcRef.now(); + return DateTime(time(nullptr)); } void RtcManager::setDate(const DateTime dateTime) { - DateTime timePart = _rtcRef.now(); - _rtcRef.adjust(DateTime(dateTime.year(), dateTime.month(), dateTime.day(), timePart.hour(), timePart.minute(), timePart.second())); + DateTime timePart = getDateTime(); + DateTime toSet(dateTime.year(), dateTime.month(), dateTime.day(), timePart.hour(), timePart.minute(), timePart.second()); + + timeval tv = {.tv_sec = toSet.unixtime(), .tv_usec = 0}; + + settimeofday(&tv, nullptr); } void RtcManager::setTime(const DateTime dateTime) { - DateTime datePart = _rtcRef.now(); - _rtcRef.adjust(DateTime(datePart.year(), datePart.month(), datePart.day(), dateTime.hour(), dateTime.minute(), dateTime.second())); + DateTime datePart = getDateTime(); + DateTime toSet(datePart.year(), datePart.month(), datePart.day(), dateTime.hour(), dateTime.minute(), dateTime.second()); + + timeval tv = {.tv_sec = toSet.unixtime(), .tv_usec = 0}; + + settimeofday(&tv, nullptr); } void RtcManager::setDateTime(const DateTime dateTime) { - _rtcRef.adjust(dateTime); -} - -boolean RtcManager::hasLostPower() const -{ - return _rtcRef.lostPower(); -} - -float RtcManager::getTemperature() const -{ - return _rtcRef.getTemperature(); + timeval tv = {.tv_sec = dateTime.unixtime(), .tv_usec = 0}; + + settimeofday(&tv, nullptr); } diff --git a/src/app/RtcManager.h b/src/app/RtcManager.h index 8fded85..3f21859 100644 --- a/src/app/RtcManager.h +++ b/src/app/RtcManager.h @@ -1,5 +1,6 @@ #ifndef RTCMANAGER_H #define RTCMANAGER_H +#include #include class RtcManager @@ -10,12 +11,9 @@ class RtcManager void setDate(const DateTime dateTime); void setTime(const DateTime dateTime); void setDateTime(const DateTime dateTime); - boolean hasLostPower() const; - float getTemperature() const; protected: - RtcManager(RTC_DS3231 &rtc); + RtcManager(); private: - RTC_DS3231 &_rtcRef; }; #endif //RTCMANAGER_H diff --git a/src/app/SAB.cpp b/src/app/SAB.cpp index f74b3ad..982c124 100644 --- a/src/app/SAB.cpp +++ b/src/app/SAB.cpp @@ -1,15 +1,8 @@ #include "SAB.h" -//Initializing the static pointer to the RtcManager -//Ugly, but I don't know how to do it an other way -//This static member is used to declare the callback necessary to set the file system's time -RtcManager *SAB::_rtcManagerP = NULL; - SAB::SAB() : _sdCardManager(_boardConfig.getSPI_SDCard_cs(), _boardConfig.getSPISpeed()), _display(_boardConfig.getScreenWidth(),_boardConfig.getScreenHeight(), &Wire), _screenManager(_display, &_sdCardManager), -_rtc(), -_rtcManager(_rtc), _connectivityManager(_sdCardManager), _webServer(80, &_sdCardManager, 10), _ftpServer(21, &_sdCardManager, "ESP8266", "12345678", 10), @@ -25,8 +18,6 @@ SAB::SAB(const BoardConfig boardConfig, const unsigned int webServerPort, const _sdCardManager(_boardConfig.getSPI_SDCard_cs(), _boardConfig.getSPISpeed()), _display(_boardConfig.getScreenWidth(), _boardConfig.getScreenHeight(), &Wire), _screenManager(_display, &_sdCardManager), -_rtc(), -_rtcManager(_rtc), _connectivityManager(_sdCardManager), _webServer(webServerPort, &_sdCardManager, 10), _ftpServer(ftpServerPort, &_sdCardManager, "ESP8266", "12345678", 10), @@ -51,7 +42,7 @@ void SAB::initCommonConfig() if(!_rtc.begin()) _error |= RTC_BEGIN_ERR; else { - SAB::_rtcManagerP = &_rtcManager; + _rtcManager.setDateTime(_rtc.now()); } if(!_display.begin(SSD1306_SWITCHCAPVCC, _boardConfig.getI2C_screenAddress())){ _error |= DISP_BEGIN_ERR;} if(!_sdCardManager.mountSD()) @@ -61,16 +52,10 @@ void SAB::initCommonConfig() _boardConfig.getSPISpeed(), _boardConfig.getSPI_SDCard_cs()); } - else - { - _sdCardManager.setTimeCallback(&(SAB::myTimeCallback)); - } _screenManager.init(); if(!_connectivityManager.connect()){ _error |= CONNECT_ERR;} if(!_pcf.begin()){_error |= IO_INIT_ERR;} - _powerUpTime = _rtcManager.getDateTime(); - //We set the different servers : _webServer.setWWWDir(WWW_DIR); _ftpServer.setFTPDir(FTP_DIR); @@ -84,14 +69,6 @@ void SAB::initGPIO() { } -time_t SAB::myTimeCallback() -{ - if(SAB::_rtcManagerP != NULL) - return SAB::_rtcManagerP->getDateTime().unixtime(); - else - return 0; -} - ScreenManager& SAB::getScreenManager() { return _screenManager; @@ -102,6 +79,11 @@ RtcManager& SAB::getRtcManager() return _rtcManager; } +RTC_DS3231& SAB::getRTC_DS3231() +{ + return _rtc; +} + SDCardManager& SAB::getSdCardManager() { return _sdCardManager; @@ -137,9 +119,9 @@ PowerManager& SAB::getPowerManager() return _powerManager; } -TimeSpan SAB::getUpTime() +TimeSpan SAB::getUpTime() const { - return _rtcManager.getDateTime() - _powerUpTime; + return TimeSpan(millis() / 1000); } BoardConfig SAB::getBoardConfig() const diff --git a/src/app/SAB.h b/src/app/SAB.h index 68b28d8..76c1395 100644 --- a/src/app/SAB.h +++ b/src/app/SAB.h @@ -30,6 +30,7 @@ class SAB ScreenManager& getScreenManager(); RtcManager& getRtcManager(); + RTC_DS3231& getRTC_DS3231(); SDCardManager& getSdCardManager(); ConnectivityManager& getConnectivityManager(); //WEBServerManager& getWebServerManager(); @@ -38,7 +39,7 @@ class SAB IOManager& getIoManager(); TaskSchedulerManager& getTaskSchedulerManager(); PowerManager& getPowerManager(); - TimeSpan getUpTime(); + TimeSpan getUpTime() const; BoardConfig getBoardConfig() const; void run(); @@ -46,7 +47,6 @@ class SAB uint8_t getError() const; private: void initGPIO(); - static time_t myTimeCallback(); void initCommonConfig(); const BoardConfig _boardConfig; @@ -55,7 +55,6 @@ class SAB ScreenManager _screenManager; RTC_DS3231 _rtc; RtcManager _rtcManager; - static RtcManager *_rtcManagerP; ConnectivityManager _connectivityManager; //WEBServerManager _webServerManager; WEBServer _webServer; @@ -65,7 +64,6 @@ class SAB IOManager _ioManager; TaskSchedulerManager _taskSchedulerManager; PowerManager _powerManager; - DateTime _powerUpTime; uint8_t _error = NO_ERROR; }; diff --git a/src/app/tasks.cpp b/src/app/tasks.cpp index 458eef1..290494c 100644 --- a/src/app/tasks.cpp +++ b/src/app/tasks.cpp @@ -17,8 +17,10 @@ boolean task_sys_info(void *pData) uint8_t HEAPfrag; ESP.getHeapStats(&freeRAM, &biggestContigMemBlock, &HEAPfrag); - Serial.printf_P(PSTR("BATT SENSING...\nRunning since : %d s\nSystem error : %u\nStation IP : %s, %d dBm\nAP IP : %s\nWEB Server clients : %u\nMemory info:\n\tFree RAM : %u\n\tHeap frag : %u\n\tMax block %u\n"), - millis()/1000, + TimeSpan ts(p->sab->getUpTime()); + + Serial.printf_P(PSTR("BATT SENSING...\nUp Time : %d d %d h %d m %d s\nSystem error : %u\nStation IP : %s, %d dBm\nAP IP : %s\nWEB Server clients : %u\nMemory info:\n\tFree RAM : %u\n\tHeap frag : %u\n\tMax block %u\n"), + ts.days(), ts.hours(), ts.minutes(), ts.seconds(), p->sab->getError(), p->sab->getConnectivityManager().localIP().toString().c_str(), p->sab->getConnectivityManager().RSSI(),