/** * @file app.ino * @author Anatole SCHRAMM-HENRY * @brief SAB App entry point. * @date 24/02/2019 * * @copyright MIT * */ #include "definition.h" #include "SAB.h" #include "views.h" #include "webApi.h" #include "tasks.h" #include "CFGDictionary.h" #include "CFGParameterValue.h" #include "EventHandler.h" #include "NonBlockingDelay.h" #define DEBUG SAB sab; EventHandler evHan; EventHandler::Event evt; NonBlockingDelay dataRefreshNBD(1000); volatile boolean ioStateChange(false); View1Packet v1p = {sab.getRtcManager().getDateTime(), sab.getSdCardManager().getSize(GBYTE), sab.getPowerManager().getPowerInfo(),0, sab.getSoftVersion(), &sab}; ViewAPPacket vap = {sab.getConnectivityManager().softAPmacAddress(), sab.getConnectivityManager().softAPSSID(), sab.getConnectivityManager().softAPIP(), sab.getConnectivityManager().softAPgetStationNum(), sab.getConnectivityManager().isAPEnabled()}; ViewSTAPacket vstap = {sab.getConnectivityManager().macAddress(), sab.getConnectivityManager().localIP(), sab.getConnectivityManager().RSSI(), sab.getConnectivityManager().isSTAEnabled()}; ViewIoInfoPacket vio = {{0},{0}}; SdCardApiPacket sdCardApiPacket = {NULL, NULL}; //DataLogger dataLogger = {HttpClient("192.168.0.17", "/esp8266/dataLogger.php", 1234), 0, false}; void setup() { // put your setup code here, to run once: Serial.println("Starting setup"); CFGFileParser cfgFileParser(sab.getSdCardManager(), AP_CFG_FILE); CFGDictionary *cfgDictionary = (CFGDictionary *) cfgFileParser.parseFile(); if(cfgDictionary != NULL) { Serial.printf("AP PASSWORD : %s\n", (*cfgDictionary)("PASSWORD") ? (*cfgDictionary)("PASSWORD")->stringValue() : ""); } #if 0 CFGFileParser cfgFileParsert1(sab.getSdCardManager(), "/CONFIG/TEST1.CFG"); CFGFileParser cfgFileParsert2(sab.getSdCardManager(), "/CONFIG/TEST2.CFG"); Serial.print("TEST1 : ");Serial.println(cfgFileParsert1.save(cfgDictionary)); Serial.print("TEST2 : ");Serial.println(cfgFileParsert2.save(cfgDictionary)); #endif delete cfgDictionary; sab.getScreenManager().addView(&(homeInfo), &v1p, 0); sab.getScreenManager().addView(&(rtcInfo), &sab, 1); sab.getScreenManager().addView(&(apInfo), &vap, 2); sab.getScreenManager().addView(&(staInfo), &vstap, 3); sab.getScreenManager().addView(&(memInfo), NULL, 4); sab.getScreenManager().addView(&(ioInfo), &vio, 5); sab.getScreenManager().addView(&(sysErrorInfo), &sab, 6); sab.getScreenManager().addView(NULL, NULL, 7); //for testing purposes sab.getScreenManager().addView(&(dummy), NULL, 8); //for testing purposes sab.getScreenManager().displayView(0); if(sab.getRTC_DS3231().lostPower()) { Serial.println("Clock lost power"); sab.getRTC_DS3231().adjust(DateTime(F(__DATE__), F(__TIME__))); sab.getRtcManager().setDateTime(sab.getRTC_DS3231().now()); } sab.getWebServer().addApiRoutine("/sab/web/apitester", &(apiTesterApi), NULL); sab.getWebServer().addApiRoutine("/sab/view/next", &(nextViewApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/view/reloadcfg", &(reloadViewApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/view", &(viewByUIDApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/rtc/get/datetime", &(rtcGetTimeApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/rtc/set/datetime", &(rtcSetTimeApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/sdcard/size", &(sdCardSizeApi), &sab, WEBServer::GET); sdCardApiPacket.pSab = &sab;sdCardApiPacket.pView = &v1p; sab.getWebServer().addApiRoutine("/sab/sdcard/action", &(sdCardActionApi), &sdCardApiPacket, WEBServer::GET); sab.getWebServer().addApiRoutine("/esp/restart", &(espRestartApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/esp/reset", &(espResetApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/wifi/stainfo", &(staWifiInfoApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/wifi/scanner", &(apScannerApi), NULL, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/systeminfo", &(systemInfoApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/power/info", &(powerInfoApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/io/get/level", &(ioGetLevelApi), vio.ioState, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/io/set/level", &(ioSetLevelApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/io/get/mode", &(ioGetModeApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/io/set/mode", &(ioSetModeApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/sw/version", &(swVersionApi), &sab, WEBServer::GET); sab.getWebServer().addApiRoutine("/sab/ota/update", &(otaUpdateApi), NULL, WEBServer::POST); sab.getIoManager().setISROnIOChange(&(ioISR), GPIO_3_RX); sab.getTaskSchedulerManager().addTask((uint16_t)0, TaskSchedulerManagerHelper::Schedule::scheduleBuilder()->setMillis(5000), &(task_blink), &sab); sab.getTaskSchedulerManager().addTask(1, TaskSchedulerManagerHelper::Schedule::scheduleBuilder()->setSeconds(10), &(task_sys_info), &v1p); //dataLogger.client.keepAlive(true); //sab.getTaskSchedulerManager().addTask(2, TaskSchedulerManagerHelper::Schedule::scheduleBuilder()->setSeconds(1)->setTriggerRightAway(false), &(task_post_data_logger), &dataLogger); Serial.println("End setup"); } void loop() { if(dataRefreshNBD || ioStateChange) { v1p.dateTime = sab.getRtcManager().getDateTime(); v1p.nbViews = sab.getScreenManager().getViewCount(); vap.ipAddr = sab.getConnectivityManager().softAPIP(); vap.macAddr = sab.getConnectivityManager().softAPmacAddress(); vap.nbOfCon = sab.getConnectivityManager().softAPgetStationNum(); vstap.macAddr = sab.getConnectivityManager().macAddress(); vstap.ipAddr = sab.getConnectivityManager().localIP(); vstap.sigStrength = sab.getConnectivityManager().RSSI(); sab.getIoManager().getPcf().digitalReadAll(vio.ioState); sab.getIoManager().getPcf().getPinModeAll(vio.ioMode); if(ioStateChange) { sab.getScreenManager().forceRefresh(); Serial.println(F("ISR triggered")); ioStateChange = false; } } evt = evHan.getEvent(); switch(evt) { case EventHandler::Event::FLASH_BUTTON_PRESS: sab.getScreenManager().displayNextView(); #ifdef DEBUG Serial.printf("Changing view\nSelected view is : %d\n",sab.getScreenManager().getCurrentViewUID()); #endif break; case EventHandler::Event::FLASH_BUTTON_LONG_PRESS: sab.getScreenManager().displayPreviousView(); #ifdef DEBUG Serial.printf("Changing view\nSelected view is : %d\n",sab.getScreenManager().getCurrentViewUID()); #endif break; default: //NO_EVENT break; } //Run the different services sab.run(); evHan.run(); } IRAM_ATTR void ioISR() { ioStateChange = true; }