#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), _dbWSServer(81), _pcf(_boardConfig.getI2C_IOExpanderAddress(), Wire), _ioManager(_pcf), _taskSchedulerManager(_rtcManager) { initCommonConfig(); } SAB::SAB(const BoardConfig boardConfig, const unsigned int webServerPort, const unsigned int ftpServerPort) : _boardConfig(boardConfig), _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), _dbWSServer(81), _pcf(_boardConfig.getI2C_IOExpanderAddress(), Wire), _ioManager(_pcf), _taskSchedulerManager(_rtcManager) { initCommonConfig(); } void SAB::initCommonConfig() { //We set the gpio up initGPIO(); Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY); Serial.println(); delay(1000); //We initialize the pins for the I2C communication Wire.begin(_boardConfig.getI2C_sda(), _boardConfig.getI2C_scl()); if(!_rtc.begin()) _error |= RTC_BEGIN_ERR; else { SAB::_rtcManagerP = &_rtcManager; } if(!_display.begin(SSD1306_SWITCHCAPVCC, _boardConfig.getI2C_screenAddress())){ _error |= DISP_BEGIN_ERR;} if(!_sdCardManager.mountSD()) { _error |= SDCARD_INIT_ERR; Serial.printf_P(PSTR("Failed to init SDCard :\n\tSpeed -> %u\n\tCS Pin -> %u\n"), _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); //We start the servers _dbWSServer.begin(); _webServer.enableTCPKeepAlive(15,5,5); _ftpServer.enableTCPKeepAlive(15,5,5); } void SAB::initGPIO() { } time_t SAB::myTimeCallback() { if(SAB::_rtcManagerP != NULL) return SAB::_rtcManagerP->getDateTime().unixtime(); else return 0; } ScreenManager& SAB::getScreenManager() { return _screenManager; } RtcManager& SAB::getRtcManager() { return _rtcManager; } SDCardManager& SAB::getSdCardManager() { return _sdCardManager; } ConnectivityManager& SAB::getConnectivityManager() { return _connectivityManager; } WEBServer& SAB::getWebServer() { return _webServer; } FTPServer& SAB::getFtpServer() { return _ftpServer; } IOManager& SAB::getIoManager() { return _ioManager; } TaskSchedulerManager& SAB::getTaskSchedulerManager() { return _taskSchedulerManager; } PowerManager& SAB::getPowerManager() { return _powerManager; } TimeSpan SAB::getUpTime() { return _rtcManager.getDateTime() - _powerUpTime; } BoardConfig SAB::getBoardConfig() const { return _boardConfig; } const char *SAB::getSoftVersion() const { return SOFT_VERSION; } uint8_t SAB::getError() const { return _error; } void SAB::run() { _webServer.run(); _ftpServer.run(); _taskSchedulerManager.run(); _screenManager.run(); _dbWSServer.loop(); }