From 88f0289920a9d54eb26efaea1b72b1fd20b6f6c0 Mon Sep 17 00:00:00 2001 From: Onno-Dirkzwager Date: Thu, 13 Jun 2019 00:39:15 +0200 Subject: [PATCH] Updated keywords. Renamed server functions and made them public (#126) * Update keywords.txt Removed redundant keywords. And added: - writeConfig - readConfig - espRestart - eraseEEPROM - WiFiSetupAndConnect - WiFiDisconnect - setClock - iotUpdater - espInstaller - iasLog - strRetWifiScan - strRetWifiCred - strRetCertScan - strRetHtmlRoot - strRetDevInfo - strRetAppInfo - servSaveFngPrint - servSaveWifiCred - servSaveAppInfo - servSaveActcode * Rearranged, Regrouped & renamed some functions - Rearranged & Regrouped functions / vars to beter represent the order they are used in - Renamed the server functions to beter represent wat they do and keep consistency in the naming scheme * Update IOTAppStory.cpp - Renamed the server functions to beter represent wat they do and keep consistency in the naming scheme - Made server functions public so end users can use them in their sketch. - Changed 4 String functions to bool as String was not necessary. * Update configServer.cpp - Renamed the server functions to beter represent wat they do and keep consistency in the naming scheme --- keywords.txt | 41 +++++++++-- src/IOTAppStory.cpp | 40 +++++------ src/IOTAppStory.h | 123 ++++++++++++++++----------------- src/espressif/configServer.cpp | 31 +++++---- 4 files changed, 133 insertions(+), 102 deletions(-) diff --git a/keywords.txt b/keywords.txt index 20c2d58c..777cef9e 100644 --- a/keywords.txt +++ b/keywords.txt @@ -7,16 +7,14 @@ ####################################### IOTAppStory KEYWORD1 -IAS_Xtra_Func KEYWORD1 ####################################### # Methods and Functions (KEYWORD2) ####################################### -serialdebug KEYWORD2 -preSetConfig KEYWORD2 +# preSets preSetDeviceName KEYWORD2 preSetAppName KEYWORD2 preSetAppVersion KEYWORD2 @@ -24,27 +22,56 @@ preSetAutoUpdate KEYWORD2 preSetAutoConfig KEYWORD2 preSetWifi KEYWORD2 +# callbacks +onFirstBoot KEYWORD2 onModeButtonNoPress KEYWORD2 onModeButtonShortPress KEYWORD2 onModeButtonLongPress KEYWORD2 onModeButtonVeryLongPress KEYWORD2 -onFirstBoot KEYWORD2 +onConfigMode KEYWORD2 onFirmwareUpdateCheck KEYWORD2 onFirmwareUpdateDownload KEYWORD2 onFirmwareUpdateProgress KEYWORD2 onFirmwareUpdateError KEYWORD2 onFirmwareUpdateSuccess KEYWORD2 -onConfigMode KEYWORD2 +# regular functions addField KEYWORD2 begin KEYWORD2 -loop KEYWORD2 -callHome KEYWORD2 setCallHome KEYWORD2 setCallHomeInterval KEYWORD2 +loop KEYWORD2 + +writeConfig KEYWORD2 +readConfig KEYWORD2 +espRestart KEYWORD2 +eraseEEPROM KEYWORD2 + +WiFiSetupAndConnect KEYWORD2 +WiFiDisconnect KEYWORD2 +setClock KEYWORD2 + +callHome KEYWORD2 +iotUpdater KEYWORD2 +espInstaller KEYWORD2 + +iasLog KEYWORD2 dPinConv KEYWORD2 eepFreeFrom KEYWORD2 +#server functions +strRetWifiScan KEYWORD2 +strRetWifiCred KEYWORD2 +strRetCertScan KEYWORD2 +strRetHtmlRoot KEYWORD2 +strRetDevInfo KEYWORD2 +strRetAppInfo KEYWORD2 +servSaveFngPrint KEYWORD2 +servSaveWifiCred KEYWORD2 +servSaveAppInfo KEYWORD2 +servSaveActcode KEYWORD2 + + ####################################### # Constants (LITERAL1) ####################################### diff --git a/src/IOTAppStory.cpp b/src/IOTAppStory.cpp index 86d49b99..fe9ff2e2 100644 --- a/src/IOTAppStory.cpp +++ b/src/IOTAppStory.cpp @@ -1289,7 +1289,7 @@ void IOTAppStory::onConfigMode(THandlerFunction value) { /** Handle root */ -String IOTAppStory::servHdlRoot() { +String IOTAppStory::strRetHtmlRoot() { String retHtml; retHtml += FPSTR(HTTP_TEMP_START); @@ -1302,7 +1302,7 @@ String IOTAppStory::servHdlRoot() { retHtml.replace("{h}", FPSTR(HTTP_AP_CSS)); retHtml += FPSTR(HTTP_WIFI_FORM); - retHtml.replace("{r}", strWifiScan()); + retHtml.replace("{r}", strRetWifiScan()); retHtml += FPSTR(HTTP_AP_JS); } @@ -1313,7 +1313,7 @@ String IOTAppStory::servHdlRoot() { /** Handle device information */ -String IOTAppStory::servHdlDevInfo(){ +String IOTAppStory::strRetDevInfo(){ #if DEBUG_LVL >= 3 DEBUG_PRINTLN(SER_SERV_DEV_INFO); #endif @@ -1351,7 +1351,7 @@ String IOTAppStory::servHdlDevInfo(){ /** Handle wifi scan */ -String IOTAppStory::strWifiScan(){ +String IOTAppStory::strRetWifiScan(){ #if DEBUG_LVL >= 3 DEBUG_PRINTLN(SER_SERV_WIFI_SCAN_RES); @@ -1407,7 +1407,7 @@ String IOTAppStory::strWifiScan(){ /** Handle wifi scan */ -String IOTAppStory::strWifiCred(){ +String IOTAppStory::strRetWifiCred(){ #if DEBUG_LVL >= 3 DEBUG_PRINTLN(SER_SERV_WIFI_CRED); @@ -1455,7 +1455,7 @@ String IOTAppStory::strWifiCred(){ /** Handle save wifi credentials */ -String IOTAppStory::servHdlWifiSave(const char* newSSID, const char* newPass, const int apNr) { +bool IOTAppStory::servSaveWifiCred(const char* newSSID, const char* newPass, const int apNr) { WiFiConnector WiFiConn; if(apNr==0){ @@ -1464,13 +1464,13 @@ String IOTAppStory::servHdlWifiSave(const char* newSSID, const char* newPass, co WiFiConn.addAPtoEEPROM(newSSID, newPass, apNr); } - return F("1"); // ok + return true; // ok } /** Handle save wifi credentials */ -String IOTAppStory::servHdlWifiSave(const char* newSSID, const char* newPass, String ip, String subnet, String gateway, String dnsserv) { +bool IOTAppStory::servSaveWifiCred(const char* newSSID, const char* newPass, String ip, String subnet, String gateway, String dnsserv) { WiFiConnector WiFiConn; if((ip+subnet+gateway+dnsserv) == ""){ @@ -1479,13 +1479,13 @@ String IOTAppStory::servHdlWifiSave(const char* newSSID, const char* newPass, St WiFiConn.addAPtoEEPROM(newSSID, newPass, ip, subnet, gateway, dnsserv); } - return F("1"); // ok + return true; // ok } /** Handle app / firmware information */ -String IOTAppStory::servHdlAppInfo(){ +String IOTAppStory::strRetAppInfo(){ #if DEBUG_LVL >= 3 DEBUG_PRINTLN(SER_SERV_APP_SETTINGS); #endif @@ -1572,7 +1572,7 @@ String IOTAppStory::servHdlAppInfo(){ Only used if ESP8266 && HTTPS_8266_TYPE == FNGPRINT */ #if defined ESP8266 && HTTPS_8266_TYPE == FNGPRINT -String IOTAppStory::servHdlFngPrintSave(String fngprint){ +bool IOTAppStory::servSaveFngPrint(String fngprint){ // get config from EEPROM configStruct config; @@ -1591,7 +1591,7 @@ String IOTAppStory::servHdlFngPrintSave(String fngprint){ // write config to EEPROM this->writeConfig(config); - return F("1"); + return true; } #endif @@ -1599,7 +1599,7 @@ String IOTAppStory::servHdlFngPrintSave(String fngprint){ #if defined ESP32 /** Get all root certificates */ -String IOTAppStory::strCertScan(String path){ +String IOTAppStory::strRetCertScan(String path){ #if DEBUG_LVL >= 3 DEBUG_PRINTLN(SER_SERV_CERT_SCAN_RES); @@ -1648,7 +1648,7 @@ String IOTAppStory::strCertScan(String path){ return retHtml; } #else -String IOTAppStory::strCertScan(String path){ +String IOTAppStory::strRetCertScan(String path){ #if DEBUG_LVL >= 3 DEBUG_PRINTLN(SER_SERV_CERT_SCAN_RES); @@ -1708,7 +1708,7 @@ String IOTAppStory::strCertScan(String path){ /** Save App Settings */ -String IOTAppStory::servHdlAppSave(AsyncWebServerRequest *request) { +bool IOTAppStory::servSaveAppInfo(AsyncWebServerRequest *request) { #if DEBUG_LVL >= 3 DEBUG_PRINTLN(SER_SAVE_APP_SETTINGS); #endif @@ -1784,16 +1784,16 @@ String IOTAppStory::servHdlAppSave(AsyncWebServerRequest *request) { EEPROM.end(); delay(200); - return F("1"); + return true; } - return F("0"); + return false; } /** Save activation code */ -String IOTAppStory::servHdlactcodeSave(String actcode) { +bool IOTAppStory::servSaveActcode(String actcode) { #if DEBUG_LVL >= 3 DEBUG_PRINT(SER_REC_ACT_CODE); DEBUG_PRINTLN(actcode); @@ -1809,8 +1809,8 @@ String IOTAppStory::servHdlactcodeSave(String actcode) { // write config to EEPROM this->writeConfig(config); - return F("1"); + return true; } - return F("0"); + return false; } diff --git a/src/IOTAppStory.h b/src/IOTAppStory.h index 4d7d14b5..a883bc2f 100644 --- a/src/IOTAppStory.h +++ b/src/IOTAppStory.h @@ -2,7 +2,6 @@ #define IOTAppStory_h - /** ------ ------ ------ ------ ------ ------ library includes ------ ------ ------ ------ ------ ------ */ @@ -17,7 +16,6 @@ /** ------ ------ ------ ------ ------ ------ macros for debugging ------ ------ ------ ------ ------ ------ */ - #if DEBUG_LVL >= 1 // set to true to include code for show EEPROM contents in debug @@ -44,7 +42,6 @@ /** ------ ------ ------ ------ ------ ------ STRUCTURES ------ ------ ------ ------ ------ ------ **/ - struct addFieldStruct{ const char* fieldLabel; int length; @@ -82,21 +79,28 @@ }; enum ModeButtonState{ - ModeButtonNoPress, // mode button is not pressed - ModeButtonShortPress, // short press - will enter in firmware update mode - ModeButtonLongPress, // long press - will enter in configuration mode - ModeButtonVeryLongPress, // very long press - won't do anything (but the app developer might want to do something) - ModeButtonFirmwareUpdate, // about to enter in firmware update mode - ModeButtonConfigMode // about to enter in configuration mode + ModeButtonNoPress, // mode button is not pressed + ModeButtonShortPress, // short press - will enter in firmware update mode + ModeButtonLongPress, // long press - will enter in configuration mode + ModeButtonVeryLongPress, // very long press - won't do anything (but the app developer might want to do something) + ModeButtonFirmwareUpdate, // about to enter in firmware update mode + ModeButtonConfigMode // about to enter in configuration mode }; - - // callback template definition - typedef std::function THandlerFunction; - typedef std::function THandlerFunctionArg; - - extern UpdateESPClass UpdateESP; + // similar to the ModeButtonState but has some extra states + // that are used internally by the state machine method + enum AppState { + AppStateNoPress, // mode button is not pressed + AppStateWaitPress, // mode button is pressed but not long enough for a short press + AppStateShortPress, // mode button is pressed for a short time. Releasing it will make it go to firmware update mode. + AppStateLongPress, // mode button is pressed for a long time. Releasing it will make it go to config mode. + AppStateVeryLongPress, // mode button is pressed for a very long time. Releasing it won't do anything. + AppStateFirmwareUpdate, // about to enter in firmware update mode + AppStateConfigMode // about to enter in config mode + }; + + /** ------ ------ ------ ------ ------ ------ PROGMEM ------ ------ ------ ------ ------ ------ @@ -131,8 +135,19 @@ const char HTTP_DEV_INFO[] PROGMEM = "{\"cid\":\"{cid}\", \"fid\":\"{fid}\", \"fss\":\"{fss}\", \"ss\":\"{ss}\", \"fs\":\"{fs}\", \"ab\":\"{ab}\", \"ac\":\"{ac}\", \"mc\":\"{mc}\", \"xf\":\"{xf}\"}"; #endif + + + + // callback template definition + typedef std::function THandlerFunction; + typedef std::function THandlerFunctionArg; + + // external classes + extern UpdateESPClass UpdateESP; + + class IOTAppStory { public: @@ -140,29 +155,14 @@ /** ------ ------ ------ ------ ------ ------ VARIABLES ------ ------ ------ ------ ------ ------ */ - int bootTimes; char boardMode = 'N'; // Normal operation or Configuration mode? String statusMessage = ""; - // similar to the ModeButtonState but has some extra states - // that are used internally by the state machine method - enum AppState { - AppStateNoPress, // mode button is not pressed - AppStateWaitPress, // mode button is pressed but not long enough for a short press - AppStateShortPress, // mode button is pressed for a short time. Releasing it will make it go to firmware update mode. - AppStateLongPress, // mode button is pressed for a long time. Releasing it will make it go to config mode. - AppStateVeryLongPress, // mode button is pressed for a very long time. Releasing it won't do anything. - AppStateFirmwareUpdate, // about to enter in firmware update mode - AppStateConfigMode // about to enter in config mode - }; - - /** ------ ------ ------ ------ ------ ------ FUCNTION DEFINITIONS ------ ------ ------ ------ ------ ------ */ - IOTAppStory(const char *compDate, const int modeButton); // function for pre setting config parameters ssid & password, deviceName, automatic update, HOST1 and FILE1 @@ -173,15 +173,15 @@ void preSetAutoConfig(bool automaticConfig); void preSetWifi(const char *ssid, const char *password); - void setCallHome(bool callHome) __attribute__((deprecated));// <----- deprecated left for compatibility. This will be removed with version 3.0.0 - void setCallHomeInterval(unsigned long interval); - + + void addField(char* &defaultVal, const char *fieldLabel, const int length, const char type = 'L'); void begin(const char ea) __attribute__((deprecated));// <----- deprecated left for compatibility. This will be removed with version 3.0.0 void begin(); - + void setCallHome(bool callHome) __attribute__((deprecated));// <----- deprecated left for compatibility. This will be removed with version 3.0.0 + void setCallHomeInterval(unsigned long interval); void loop(); - + void writeConfig(configStruct &config); void readConfig(configStruct &config); void espRestart(char mmode); @@ -195,29 +195,44 @@ void callHome(bool spiffs = true); bool iotUpdater(int command = U_FLASH); bool espInstaller(Stream &streamPtr, firmwareStruct *firmwareStruct, UpdateClassVirt& devObj, int command = U_FLASH); - - void addField(char* &defaultVal, const char *fieldLabel, const int length, const char type = 'L'); - - void iasLog(String msg); int dPinConv(String orgVal); + void onFirstBoot(THandlerFunction fn); // called at the end of firstBoot void onModeButtonNoPress(THandlerFunction fn); // called when state is changed to idle (mode button is not pressed) void onModeButtonShortPress(THandlerFunction fn); // called when state is changed to short press void onModeButtonLongPress(THandlerFunction fn); // called when state is changed to long press void onModeButtonVeryLongPress(THandlerFunction fn); // called when state is changed to very long press void onConfigMode(THandlerFunction fn); // called when the app is about to enter in configuration mode - void onFirmwareUpdateCheck(THandlerFunction fn); // called when the app checks for firmware updates void onFirmwareUpdateDownload(THandlerFunction fn); // called when firmware download starts void onFirmwareUpdateProgress(THandlerFunctionArg fn); // called during update process void onFirmwareUpdateError(THandlerFunction fn); // called when firmware update ends in an error void onFirmwareUpdateSuccess(THandlerFunction fn); // called when firmware update ends in success - private: + String strRetWifiScan(); + String strRetWifiCred(); + String strRetCertScan(String path = ""); + String strRetHtmlRoot(); + String strRetDevInfo(); + String strRetAppInfo(); + #if defined ESP8266 && HTTPS_8266_TYPE == FNGPRINT // prevent compile errors on the ESP32 + bool servSaveFngPrint(String fngprint); + #endif + bool servSaveWifiCred(const char* newSSID, const char* newPass, const int apNr=0); + bool servSaveWifiCred(const char* newSSID, const char* newPass, String ip, String subnet, String gateway, String dnsserv); + bool servSaveAppInfo(AsyncWebServerRequest *request); + bool servSaveActcode(String actcode=""); + + + private: + + /** + ------ ------ ------ ------ ------ ------ VARIABLES ------ ------ ------ ------ ------ ------ + */ #if WIFI_MULTI == true #ifdef ESP32 WiFiMulti wifiMulti; @@ -244,14 +259,12 @@ unsigned long _debugEntry; AppState _appState; - THandlerFunction _firstBootCallback; THandlerFunction _noPressCallback; THandlerFunction _shortPressCallback; THandlerFunction _longPressCallback; THandlerFunction _veryLongPressCallback; THandlerFunction _configModeCallback; - THandlerFunction _firmwareUpdateCheckCallback; THandlerFunction _firmwareUpdateDownloadCallback; THandlerFunctionArg _firmwareUpdateProgressCallback; @@ -262,37 +275,18 @@ /** ------ ------ ------ ------ ------ ------ FUNCTION DEFINITIONS ------ ------ ------ ------ ------ ------ */ - void firstBoot(); void printBoardInfo(); - - String strWifiScan(); - String strWifiCred(); - String strCertScan(String path = ""); - String servHdlRoot(); - String servHdlDevInfo(); - String servHdlAppInfo(); - #if defined ESP8266 && HTTPS_8266_TYPE == FNGPRINT - String servHdlFngPrintSave(String fngprint); - #endif - String servHdlWifiSave(const char* newSSID, const char* newPass, const int apNr=0); - String servHdlWifiSave(const char* newSSID, const char* newPass, String ip, String subnet, String gateway, String dnsserv); - String servHdlAppSave(AsyncWebServerRequest *request); - String servHdlactcodeSave(String actcode=""); - void updateLoop(); bool isModeButtonPressed(); ModeButtonState getModeButtonState(); ModeButtonState buttonLoop(); - - friend class configServer; - + /** ------ ------ ------ ------ ------ ------ AUXILIARY FUNCTIONS ------ ------ ------ ------ ------ ------ */ - bool SetConfigValueCharArray(char* a, String &b, int len, bool &changeFlag) { if (b != a) { b.toCharArray(a, len); @@ -314,6 +308,9 @@ return String("[" + String(value, DEC) + "]"); } } + + + friend class configServer; }; #endif diff --git a/src/espressif/configServer.cpp b/src/espressif/configServer.cpp index 2839db3d..e7b387ed 100644 --- a/src/espressif/configServer.cpp +++ b/src/espressif/configServer.cpp @@ -68,18 +68,18 @@ void configServer::run(){ #endif #if CFG_STORAGE == ST_CLOUD || CFG_STORAGE == ST_HYBRID // serv the index page or force wifi setup - server->on("/", HTTP_GET, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->servHdlRoot()); }); + server->on("/", HTTP_GET, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->strRetHtmlRoot()); }); #endif #if CFG_PAGE_INFO == true // serv this device information in json format (first page in config) - server->on("/i", HTTP_GET, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->servHdlDevInfo(), F("text/json")); }); + server->on("/i", HTTP_GET, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->strRetDevInfo(), F("text/json")); }); #endif // serv the wifi scan results - server->on("/wsc", HTTP_GET, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->strWifiScan(), F("text/json")); }); + server->on("/wsc", HTTP_GET, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->strRetWifiScan(), F("text/json")); }); // serv the wifi credentials - server->on("/wc", HTTP_GET, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->strWifiCred(), F("text/json")); }); + server->on("/wc", HTTP_GET, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->strRetWifiCred(), F("text/json")); }); // save the received ssid & pass for the received APnr(i) ans serv results server->on("/wsa", HTTP_POST, [&](AsyncWebServerRequest *request){ @@ -108,7 +108,7 @@ void configServer::run(){ if(postAPnr > 0){ hdlReturn( request, - _ias->servHdlWifiSave( + _ias->servSaveWifiCred( charSSID, charPass, #if WIFI_DHCP_ONLY == true @@ -143,7 +143,7 @@ void configServer::run(){ _connChangeMode = true; _tryToConn = false; - _ias->servHdlWifiSave( + _ias->servSaveWifiCred( charSSID, charPass #if WIFI_DHCP_ONLY == false @@ -176,16 +176,16 @@ void configServer::run(){ // save the received fingerprint and serv results #if defined ESP8266 && HTTPS_8266_TYPE == FNGPRINT - server->on("/fp", HTTP_POST, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->servHdlFngPrintSave(request->getParam("f", true)->value())); }); + server->on("/fp", HTTP_POST, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->servSaveFngPrint(request->getParam("f", true)->value())); }); #endif // serv cert scan in json format server->on("/csr", HTTP_GET, [&](AsyncWebServerRequest *request){ if(request->hasParam("d")){ - hdlReturn(request, _ias->strCertScan(request->getParam("d")->value()), F("text/json")); + hdlReturn(request, _ias->strRetCertScan(request->getParam("d")->value()), F("text/json")); }else{ - hdlReturn(request, _ias->strCertScan(), F("text/json")); + hdlReturn(request, _ias->strRetCertScan(), F("text/json")); } }); @@ -301,13 +301,13 @@ void configServer::run(){ #endif // serv the app fields in json format - server->on("/app", HTTP_GET, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->servHdlAppInfo(), F("text/json")); }); + server->on("/app", HTTP_GET, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->strRetAppInfo(), F("text/json")); }); // save the received app fields and serv results - server->on("/as", HTTP_POST, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->servHdlAppSave(request)); }); + server->on("/as", HTTP_POST, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->servSaveAppInfo(request)); }); // save the received device activation code - server->on("/ds", HTTP_POST, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->servHdlactcodeSave(request->getParam("ac", true)->value())); }); + server->on("/ds", HTTP_POST, [&](AsyncWebServerRequest *request){ hdlReturn(request, _ias->servSaveActcode(request->getParam("ac", true)->value())); }); // close and exit the web server server->on("/close", HTTP_GET, [&](AsyncWebServerRequest *request){ exitConfig = true; }); @@ -428,4 +428,11 @@ void configServer::hdlReturn(AsyncWebServerRequest *request, String retHtml, Str } #endif } + + + +/** return page handler */ +void configServer::hdlReturn(AsyncWebServerRequest *request, int ret) { + this->hdlReturn(request, String(ret)); +} #endif