ESP8266_swiss_army_board/src/app/SAB.cpp

168 lines
3.8 KiB
C++

#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<WEBClient>& SAB::getWebServer()
{
return _webServer;
}
FTPServer<FTPClient>& 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();
}