Reworked how the time is tracked by the system in general. The external RTC is now only used to set the internal time once. This also allows cleaner File System time handling since we don't need to define a custom callback anymore
This commit is contained in:
parent
720f2e9579
commit
eb0a370cda
@ -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);
|
||||
}
|
||||
timeval tv = {.tv_sec = dateTime.unixtime(), .tv_usec = 0};
|
||||
|
||||
boolean RtcManager::hasLostPower() const
|
||||
{
|
||||
return _rtcRef.lostPower();
|
||||
}
|
||||
|
||||
float RtcManager::getTemperature() const
|
||||
{
|
||||
return _rtcRef.getTemperature();
|
||||
settimeofday(&tv, nullptr);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
#ifndef RTCMANAGER_H
|
||||
#define RTCMANAGER_H
|
||||
#include <sys/time.h>
|
||||
#include <RTClib.h>
|
||||
|
||||
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
|
||||
|
@ -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
|
||||
|
@ -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<WEBClient> _webServer;
|
||||
@ -65,7 +64,6 @@ class SAB
|
||||
IOManager _ioManager;
|
||||
TaskSchedulerManager _taskSchedulerManager;
|
||||
PowerManager _powerManager;
|
||||
DateTime _powerUpTime;
|
||||
uint8_t _error = NO_ERROR;
|
||||
};
|
||||
|
||||
|
@ -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(),
|
||||
|
Loading…
Reference in New Issue
Block a user