From 2728b467a15cc0e4d1bad67582c3f6be442b420c Mon Sep 17 00:00:00 2001 From: luc lebosse Date: Sun, 21 Aug 2016 17:11:50 +0200 Subject: [PATCH] Code Cleaning Implement define for MONITORING_FEATURE and MSG_FEATURE Add better FM for SD Files Light review of printer UI to separate sections Add more control on Serial commands Fix Github address Change version to 0.8.0 Change default baud to 115200 Add Marlinkimbra support --- esp3d/command.cpp | 73 +++- esp3d/config.cpp | 145 ++++++- esp3d/config.h | 58 ++- esp3d/data/css2.inc | 13 + esp3d/data/printer.tpl | 745 ++++++++++++++++++++++++-------- esp3d/data/settings.tpl | 26 +- esp3d/esp3d.ino | 19 +- esp3d/webinterface.cpp | 919 ++++++++++++++++++++++------------------ esp3d/webinterface.h | 42 +- 9 files changed, 1412 insertions(+), 628 deletions(-) diff --git a/esp3d/command.cpp b/esp3d/command.cpp index f9fc2b62..1cf2414c 100644 --- a/esp3d/command.cpp +++ b/esp3d/command.cpp @@ -35,10 +35,12 @@ void COMMAND::execute_command(int cmd,String cmd_params) switch(cmd) { byte mode; case 800: + Serial.print(cmd_params); Serial.print("\nFW version:"); Serial.println(FW_VERSION); break; case 100: + if (!CONFIG::isSSIDValid(cmd_params.c_str()))Serial.println("\nError"); if(!CONFIG::write_string(EP_SSID,cmd_params.c_str())) { Serial.println("\nError"); } else { @@ -52,7 +54,8 @@ void COMMAND::execute_command(int cmd,String cmd_params) Serial.println("\nOk"); } break; - case 102: + case 102: + if (!CONFIG::isHostnameValid(cmd_params.c_str()))Serial.println("\nError"); if(!CONFIG::write_string(EP_HOSTNAME,cmd_params.c_str())) { Serial.println("\nError"); } else { @@ -60,6 +63,7 @@ void COMMAND::execute_command(int cmd,String cmd_params) } break; case 103: + if (cmd_params=="STA") { mode = CLIENT_MODE; } else { @@ -142,7 +146,7 @@ void COMMAND::execute_command(int cmd,String cmd_params) if ((web_interface->blockserial)) break; cmd_params.trim() ; if ((cmd_params.length() > 0) && (cmd_params[0] != '/')) cmd_params = "/" + cmd_params; - File currentfile = SPIFFS.open(cmd_params, "r"); + FSFILE currentfile = SPIFFS.open(cmd_params, "r"); if (currentfile) {//if file open success //flush to be sure send buffer is empty Serial.flush(); @@ -172,16 +176,31 @@ void COMMAND::execute_command(int cmd,String cmd_params) } break; case 999: +#ifdef ERROR_MSG_FEATURE if (cmd_params=="ERROR") { web_interface->error_msg.clear(); - } else if (cmd_params=="INFO") { + } +#endif +#ifdef INFO_MSG_FEATURE + if (cmd_params=="INFO") { web_interface->info_msg.clear(); - } else if (cmd_params=="STATUS") { + } +#endif +#ifdef STATUS_MSG_FEATURE + if (cmd_params=="STATUS") { web_interface->status_msg.clear(); - } else if (cmd_params=="ALL") { + } +#endif + if (cmd_params=="ALL") { +#ifdef ERROR_MSG_FEATURE web_interface->error_msg.clear(); +#endif +#ifdef STATUS_MSG_FEATURE web_interface->status_msg.clear(); +#endif +#ifdef INFO_MSG_FEATURE web_interface->info_msg.clear(); +#endif } break; //default: @@ -191,8 +210,8 @@ void COMMAND::execute_command(int cmd,String cmd_params) void COMMAND::check_command(String buffer) { - static bool bfileslist=false; String buffer2; + static bool bfileslist=false; static uint32_t start_list=0; //if SD list is not on going if (!bfileslist) { @@ -210,23 +229,47 @@ void COMMAND::check_command(String buffer) (web_interface->blockserial) = true; return; } +#ifdef TEMP_MONITORING_FEATURE int Tpos = buffer.indexOf("T:"); +#endif +#ifdef POS_MONITORING_FEATURE int Xpos = buffer.indexOf("X:"); int Ypos = buffer.indexOf("Y:"); int Zpos = buffer.indexOf("Z:"); +#endif #if FIRMWARE_TARGET == SMOOTHIEWARE +#ifdef SPEED_MONITORING_FEATURE int Speedpos = buffer.indexOf("Speed factor at "); +#endif +#ifdef FLOW_MONITORING_FEATURE int Flowpos = buffer.indexOf("Flow rate at "); +#endif +#ifdef ERROR_MSG_FEATURE int Errorpos= buffer.indexOf("error:"); +#endif +#ifdef INFO_MSG_FEATURE int Infopos= buffer.indexOf("info:"); +#endif +#ifdef STATUS_MSG_FEATURE int Statuspos= buffer.indexOf("warning:"); +#endif #else +#ifdef SPEED_MONITORING_FEATURE int Speedpos = buffer.indexOf("SpeedMultiply:"); +#endif +#ifdef FLOW_MONITORING_FEATURE int Flowpos = buffer.indexOf("FlowMultiply:"); +#endif +#ifdef ERROR_MSG_FEATURE int Errorpos= buffer.indexOf("Error:"); +#endif +#ifdef INFO_MSG_FEATURE int Infopos= buffer.indexOf("Info:"); +#endif +#ifdef STATUS_MSG_FEATURE int Statuspos= buffer.indexOf("Status:"); #endif +#endif #ifdef SERIAL_COMMAND_FEATURE String ESP_Command; @@ -250,6 +293,7 @@ void COMMAND::check_command(String buffer) } } #endif +#ifdef TEMP_MONITORING_FEATURE //check for temperature if (Tpos>-1) { //look for valid temperature answer @@ -261,14 +305,17 @@ void COMMAND::check_command(String buffer) web_interface->last_temp=millis(); } } +#endif +#ifdef POS_MONITORING_FEATURE //Position of axis if (Xpos>-1 && Ypos>-1 && Zpos>-1) { web_interface->answer4M114=buffer; } +#endif +#ifdef SPEED_MONITORING_FEATURE //Speed if (Speedpos>-1) { //get just the value - #if FIRMWARE_TARGET == SMOOTHIEWARE buffer2 =buffer.substring(Speedpos+16); int p2 = buffer2.indexOf("."); @@ -276,12 +323,12 @@ void COMMAND::check_command(String buffer) #else web_interface->answer4M220=buffer.substring(Speedpos+14); #endif - } +#endif +#ifdef FLOW_MONITORING_FEATURE //Flow if (Flowpos>-1) { //get just the value - #if FIRMWARE_TARGET == SMOOTHIEWARE buffer2 =buffer.substring(Flowpos+13); int p2 = buffer2.indexOf("."); @@ -290,14 +337,20 @@ void COMMAND::check_command(String buffer) web_interface->answer4M221=buffer.substring(Flowpos+13); #endif } +#endif +#ifdef ERROR_MSG_FEATURE //Error if (Errorpos>-1 && !(buffer.indexOf("Format error")!=-1 || buffer.indexOf("wait")==Errorpos+6) ) { (web_interface->error_msg).add(buffer.substring(Errorpos+6).c_str()); } +#endif +#ifdef INFO_MSG_FEATURE //Info if (Infopos>-1) { (web_interface->info_msg).add(buffer.substring(Infopos+5).c_str()); } +#endif +#ifdef STATUS_MSG_FEATURE //Status if (Statuspos>-1) { #if FIRMWARE_TARGET == SMOOTHIEWARE @@ -306,6 +359,7 @@ void COMMAND::check_command(String buffer) (web_interface->status_msg).add(buffer.substring(Statuspos+7).c_str()); #endif } +#endif } else { //listing file is on going //check if we are too long if ((millis()-start_list)>30000) { //timeout in case of problem @@ -328,7 +382,6 @@ void COMMAND::check_command(String buffer) LOG('\n'); } } - } } diff --git a/esp3d/config.cpp b/esp3d/config.cpp index 2ef3c7cb..d1512a2f 100644 --- a/esp3d/config.cpp +++ b/esp3d/config.cpp @@ -25,7 +25,146 @@ extern "C" { } -extern String formatBytes(size_t bytes); + + +bool CONFIG::isHostnameValid(const char * hostname) +{ + //limited size + char c; + if (strlen(hostname)>MAX_HOSTNAME_LENGTH || strlen(hostname) < 1) { + return false; + } + //only letter and digit + for (int i=0; i < strlen(hostname); i++) { + c = hostname[i]; + if (!(isdigit(c) || isalpha(c) || c=='_')) { + return false; + } + if (c==' ') { + return false; + } + } + return true; +} + +bool CONFIG::isSSIDValid(const char * ssid) +{ + //limited size + char c; + if (strlen(ssid)>MAX_SSID_LENGTH || strlen(ssid)MAX_PASSWORD_LENGTH)|| (strlen(password)MAX_LOCAL_PASSWORD_LENGTH)|| (strlen(password)15 || strlen(IP)==0) { + return false; + } + //cannot start with . + if (IP[0]=='.') { + return false; + } + //only letter and digit + for (int i=0; i < strlen(IP); i++) { + c = IP[i]; + if (isdigit(c)) { + //only 3 digit at once + internalcount++; + previouswasdot=false; + if (internalcount>3) { + return false; + } + } else if(c=='.') { + //cannot have 2 dots side by side + if (previouswasdot) { + return false; + } + previouswasdot=true; + internalcount=0; + dotcount++; + }//if not a dot neither a digit it is wrong + else { + return false; + } + } + //if not 3 dots then it is wrong + if (dotcount!=3) { + return false; + } + //cannot have the last dot as last char + if (IP[strlen(IP)-1]=='.') { + return false; + } + return true; +} + +char * CONFIG::intTostr(int value) +{ + static char result [12]; + sprintf(result,"%d",value); + return result; +} + +String CONFIG::formatBytes(size_t bytes) +{ + if (bytes < 1024) { + return String(bytes)+" B"; + } else if(bytes < (1024 * 1024)) { + return String(bytes/1024.0)+" KB"; + } else if(bytes < (1024 * 1024 * 1024)) { + return String(bytes/1024.0/1024.0)+" MB"; + } else { + return String(bytes/1024.0/1024.0/1024.0)+" GB"; + } +} //read a string //a string is multibyte + \0, this is won't work if 1 char is multibyte like chinese char @@ -502,6 +641,7 @@ void CONFIG::print_config() #else Serial.println(F("???")); #endif + Serial.print(F("SD Card support: ")); #ifdef DEBUG_ESP3D Serial.print(F("Debug Enabled :")); #ifdef DEBUG_OUTPUT_SPIFFS @@ -513,6 +653,5 @@ void CONFIG::print_config() #ifdef DEBUG_OUTPUT_SERIAL Serial.println(F("serial")); #endif -#endif - +#endif } diff --git a/esp3d/config.h b/esp3d/config.h index 97d252e4..18ae8470 100644 --- a/esp3d/config.h +++ b/esp3d/config.h @@ -22,7 +22,8 @@ #define REPETIER 0 #define REPETIER4DV 1 #define MARLIN 2 -#define SMOOTHIEWARE 3 +#define MARLINKIMBRA 3 +#define SMOOTHIEWARE 4 //comment to disable //MDNS_FEATURE: this feature allow type the name defined @@ -33,13 +34,13 @@ #define SSDP_FEATURE //NETBIOS_FEATURE: this feature is a discovery protocol, supported on Windows out of the box -#define NETBIOS_FEATURE +//#define NETBIOS_FEATURE //CAPTIVE_PORTAL_FEATURE: In SoftAP redirect all unknow call to main page #define CAPTIVE_PORTAL_FEATURE //AUTHENTICATION_FEATURE: protect pages by login password -#define AUTHENTICATION_FEATURE +//#define AUTHENTICATION_FEATURE //WEB_UPDATE_FEATURE: allow to flash fw using web UI #define WEB_UPDATE_FEATURE @@ -53,31 +54,61 @@ //RECOVERY_FEATURE: allow to use GPIO2 pin as hardware reset for EEPROM, add 8s to boot time to let user to jump GPIO2 to GND #define RECOVERY_FEATURE +#ifdef RECOVERY_FEATURE +//pin used to reset setting +#define RESET_CONFIG_PIN 2 +#endif + +//INFO_MSG_FEATURE: catch the Info msg and filter it to specific table +#define INFO_MSG_FEATURE + +//ERROR_MSG_FEATURE: catch the error msg and filter it to specific table +#define ERROR_MSG_FEATURE + +//STATUS_MSG_FEATURE: catch the status msg and filter it to specific table +#define STATUS_MSG_FEATURE + +//TEMP_MONITORING_FEATURE : catch the specific answer and store it to variable +#define TEMP_MONITORING_FEATURE +//SPEED_MONITORING_FEATURE : catch the specific answer and store it to variable +#define SPEED_MONITORING_FEATURE +//POS_MONITORING_FEATURE : catch the specific answer and store it to variable +#define POS_MONITORING_FEATURE +//FLOW_MONITORING_FEATURE : catch the specific answer and store it to variable +#define FLOW_MONITORING_FEATURE + //FIRMWARE_TARGET: the targeted FW, can be REPETIER (Original Repetier)/ REPETIER4DV (Repetier for Davinci) / MARLIN (Marlin)/ SMOOTHIEWARE (Smoothieware) #define FIRMWARE_TARGET REPETIER4DV //DEBUG Flag //#define DEBUG_ESP3D +//#define DEBUG_OUTPUT_SPIFFS +#define DEBUG_OUTPUT_SERIAL #ifdef DEBUG_ESP3D -#define LOG(string) {File logfile = SPIFFS.open("/log.txt", "a+");logfile.print(string);logfile.close();} +#ifdef DEBUG_OUTPUT_SPIFFS + #define LOG(string) {FSFILE logfile = SPIFFS.open("/log.txt", "a+");logfile.print(string);logfile.close();} +#else + #define LOG(string) {Serial.print(string);} +#endif #else #define LOG(string) {} #endif +#define FSFILE File +#define FSDIR fs::Dir +#define FSINFO FSInfo + #ifndef CONFIG_h #define CONFIG_h #include #include "wifi.h" //version and sources location -#define FW_VERSION "0.7.81" -#define REPOSITORY "https://github.com/luc-github/ESP8266" +#define FW_VERSION "0.8.0" +#define REPOSITORY "https://github.com/luc-github/ESP3D" -//pin used to reset setting -#define RESET_CONFIG_PIN 2 - //flags #define AP_MODE 1 #define CLIENT_MODE 2 @@ -119,7 +150,7 @@ const char DEFAULT_PASSWORD [] PROGMEM = "12345678"; const byte DEFAULT_IP_VALUE[] = {192, 168, 0, 1}; const byte DEFAULT_MASK_VALUE[] = {255, 255, 255, 0}; #define DEFAULT_GATEWAY_VALUE DEFAULT_IP_VALUE -const long DEFAULT_BAUD_RATE = 9600; +const long DEFAULT_BAUD_RATE = 115200; const char M117_[] PROGMEM = "M117 "; #define DEFAULT_PHY_MODE WIFI_PHY_MODE_11G #define DEFAULT_SLEEP_MODE WIFI_MODEM_SLEEP @@ -165,6 +196,13 @@ public: static bool write_byte(int pos, const byte value); static bool reset_config(); static void print_config(); + static bool isHostnameValid(const char * hostname); + static bool isSSIDValid(const char * ssid); + static bool isPasswordValid(const char * password); + static bool isLocalPasswordValid(const char * password); + static bool isIPValid(const char * IP); + static char * intTostr(int value); + static String formatBytes(size_t bytes); }; #endif diff --git a/esp3d/data/css2.inc b/esp3d/data/css2.inc index 5134285f..ae0d19b3 100644 --- a/esp3d/data/css2.inc +++ b/esp3d/data/css2.inc @@ -11,4 +11,17 @@ background-image:none;border:1px solid transparent;white-space:nowrap;padding:6p .filelink {color:#000000;} .filelink:hover, .filelink:focus {color:#0094FF;} .panel-footer{padding:10px 15px;color:#31708f;background-color:#f5f5f5;border-color:#dddddd;border-top:1px solid #dddddd;} +.loader { + border: 4px solid #f3f3f3; /* Light grey */ + border-top: 4px solid #3498db; /* Blue */ + border-radius: 50%; + width: 12px; + height: 12px; + animation: spin 2s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} diff --git a/esp3d/data/printer.tpl b/esp3d/data/printer.tpl index 281c20f5..3507c0fd 100644 --- a/esp3d/data/printer.tpl +++ b/esp3d/data/printer.tpl @@ -1,153 +1,374 @@ $INCLUDE[header.inc]$ $INCLUDE[css2.inc]$ +
+
Control
+
- - - - - - - - - - -
- - - - -
0300% -  Status: -   - - -
- - - -
0300% -      
+ + + + + +
+ +
+ +
+ +
+ + + + + + + + +
0300% +   Status: +    + + +
+
+ + + + + + + + + +
0300% +       
+
+ + + +
+
Command
+
+ -


+
+ + + +
+
Information
+
+
";
-


+
+ + +
+
Error
+
+
";
-


+
+ + +
+
Status
+
+
";
-

- - - - -
- - - -SD  
- -
-
- - - - - - - - - - - - -
- - -X - - -
--10
--1
--0.1
- -Y - -
--10
--1
--0.1
- - -
-10 -1 -0.1
-
--0.1 --1 - --10
Z
- - - -
-0.1
-1
-10
-Z - -
-0.1
-1
-10
+
+
+
+
+
Print
+
+ + + + + + + + +
+ + +   
+
+
+
+
Jog
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + X + + + + + + + + + + +
+ -10
+ -1
+ -0.1
+
+ + Y + + + + + + + + + + + +
+ -10 +
+ -1 +
+ -0.1 +
+
+ + + + + + +
+ 10 + 1 + 0.1 +
+
+ + + + + +
+ -0.1 + -1 + + -10 +
+
Z
+ + + + + + + + + + + +
+ 0.1
+ 1
+ 10
+
+ Z + + + + + + + + + + +
+ 0.1
+ 1
+ 10
+
+
+
+
+
SD Files
+
+ +   +

+
+ +
+ +
 
+
+
TypeNameSize
+
+ +
+
+
$INCLUDE[footer.inc]$ diff --git a/esp3d/data/settings.tpl b/esp3d/data/settings.tpl index 8f7aaeb9..754308af 100644 --- a/esp3d/data/settings.tpl +++ b/esp3d/data/settings.tpl @@ -8,7 +8,7 @@ $INCLUDE[css2.inc]$

-
+


@@ -27,7 +27,7 @@ $SUCCESS_MSG$
-
Filesystem
+
Flash Filesystem
   @@ -37,7 +37,7 @@ $SUCCESS_MSG$
+
-
 
+
 
TypeNameSize
@@ -83,7 +83,13 @@ function select_dir(directoryname){ currentpath+=directoryname + "/"; SendCommand('list','all'); } -function dispatchstatus(jsonresponse) +function compareStrings(a, b) { + // case-insensitive comparison + a = a.toLowerCase(); + b = b.toLowerCase(); + return (a < b) ? -1 : (a > b) ? 1 : 0; +} +function dispatchfilestatus(jsonresponse) { var content =""; content ="  Status: "+jsonresponse.status; @@ -99,6 +105,9 @@ if (currentpath!="/") var previouspath = currentpath.slice(0,pos+1); content +=""+back_icon()+" Up.."; } +jsonresponse.files.sort(function(a, b) { + return compareStrings(a.name, b.name); +}); for (var i=0;i $INCLUDE[footer.inc]$ diff --git a/esp3d/esp3d.ino b/esp3d/esp3d.ino index 3e9d3a48..e4af4546 100644 --- a/esp3d/esp3d.ino +++ b/esp3d/esp3d.ino @@ -18,7 +18,7 @@ https://github.com/esp8266/Arduino from Bootmanager Latest version of the code and documentation can be found here : - https://github.com/luc-github/ESP8266 + https://github.com/luc-github/ESP3D Main author: luc lebosse @@ -49,7 +49,6 @@ DNSServer dnsServer; #ifdef NETBIOS_FEATURE #include #endif -#include #define MAX_SRV_CLIENTS 1 WiFiServer * data_server; WiFiClient serverClients[MAX_SRV_CLIENTS]; @@ -57,11 +56,15 @@ WiFiClient serverClients[MAX_SRV_CLIENTS]; void setup() { // init: +#ifdef DEBUG_ESP3D + Serial.begin(DEFAULT_BAUD_RATE); + delay(2000); + LOG("Debug Serial set\n") +#endif web_interface = NULL; data_server = NULL; WiFi.disconnect(); - WiFi.mode(WIFI_OFF); - bool breset_config=false; + bool breset_config=false; #ifdef RECOVERY_FEATURE delay(8000); //check if reset config is requested @@ -87,11 +90,11 @@ void setup() breset_config=true; //cannot access to config settings=> reset settings } - + SPIFFS.begin(); //reset is requested if(breset_config) { //update EEPROM with default settings - Serial.begin(9600); + Serial.begin(DEFAULT_BAUD_RATE); delay(2000); Serial.println(F("M117 ESP EEPROM reset")); CONFIG::reset_config(); @@ -112,6 +115,7 @@ void setup() //setup serial Serial.begin(baud_rate); delay(1000); + LOG("Serial Set\n"); wifi_config.baud_rate=baud_rate; //setup wifi according settings if (!wifi_config.Setup()) { @@ -137,7 +141,7 @@ void setup() //start TCP/IP interface data_server = new WiFiServer (wifi_config.idata_port); data_server->begin(); - //data_server->setNoDelay(true); + data_server->setNoDelay(true); #endif #ifdef MDNS_FEATURE @@ -166,7 +170,6 @@ String shost; SSDP.setDeviceType("upnp:rootdevice"); SSDP.begin(); #endif - SPIFFS.begin(); #ifdef NETBIOS_FEATURE NBNS.begin(shost.c_str()); #endif diff --git a/esp3d/webinterface.cpp b/esp3d/webinterface.cpp index d6be607b..971844e7 100644 --- a/esp3d/webinterface.cpp +++ b/esp3d/webinterface.cpp @@ -30,7 +30,6 @@ extern "C" { #include "user_interface.h" } -#include #include "LinkedList.h" #include "storestrings.h" #include "command.h" @@ -212,148 +211,21 @@ const char KEY_STA_SIGNAL [] PROGMEM = "$STA_SIGNAL$"; const char KEY_DATA_PORT_VISIBILITY [] PROGMEM = "$DATA_PORT_VISIBILITY$"; const char KEY_LOGIN_ID [] PROGMEM = "$LOGIN_ID$"; -bool WEBINTERFACE_CLASS::isHostnameValid(const char * hostname) -{ - //limited size - char c; - if (strlen(hostname)>MAX_HOSTNAME_LENGTH || strlen(hostname) < 1) { - return false; - } - //only letter and digit - for (int i=0; i < strlen(hostname); i++) { - c = hostname[i]; - if (!(isdigit(c) || isalpha(c) || c=='_')) { - return false; - } - if (c==' ') { - return false; - } - } - return true; -} - -bool WEBINTERFACE_CLASS::isSSIDValid(const char * ssid) -{ - //limited size - char c; - if (strlen(ssid)>MAX_SSID_LENGTH || strlen(ssid)MAX_PASSWORD_LENGTH)|| (strlen(password)MAX_LOCAL_PASSWORD_LENGTH)|| (strlen(password)15 || strlen(IP)==0) { - return false; - } - //cannot start with . - if (IP[0]=='.') { - return false; - } - //only letter and digit - for (int i=0; i < strlen(IP); i++) { - c = IP[i]; - if (isdigit(c)) { - //only 3 digit at once - internalcount++; - previouswasdot=false; - if (internalcount>3) { - return false; - } - } else if(c=='.') { - //cannot have 2 dots side by side - if (previouswasdot) { - return false; - } - previouswasdot=true; - internalcount=0; - dotcount++; - }//if not a dot neither a digit it is wrong - else { - return false; - } - } - //if not 3 dots then it is wrong - if (dotcount!=3) { - return false; - } - //cannot have the last dot as last char - if (IP[strlen(IP)-1]=='.') { - return false; - } - return true; -} - -//TODO should be in some tool class -char * intTostr(int value) -{ - static char result [12]; - sprintf(result,"%d",value); - return result; -} - //TODO: should be in webserver class -bool processTemplate(const char * filename, STORESTRINGS_CLASS & KeysList , STORESTRINGS_CLASS & ValuesList ) +bool WEBINTERFACE_CLASS::processTemplate(const char * filename, STORESTRINGS_CLASS & KeysList , STORESTRINGS_CLASS & ValuesList ) { if(KeysList.size() != ValuesList.size()) { //Sanity check Serial.print("Error"); return false; } - LinkedList myFileList = LinkedList(); + LinkedList myFileList = LinkedList(); String buffer2send; bool header_sent=false; buffer2send=""; //open template file - File currentfile = SPIFFS.open(filename, "r"); + FSFILE currentfile = SPIFFS.open(filename, "r"); //if error display error on web page if (!currentfile) { buffer2send = String(F("Error opening: ")) + filename; @@ -382,7 +254,7 @@ bool processTemplate(const char * filename, STORESTRINGS_CLASS & KeysList , ST int pos_tag_end = sLine.indexOf("]$"); String includefilename = "/"+sLine.substring( pos_tag+strlen("$INCLUDE["),pos_tag_end); //try to open include file - File includefile = SPIFFS.open(includefilename, "r"); + FSFILE includefile = SPIFFS.open(includefilename, "r"); if (!includefile) { //if error display it on web page buffer2send+= String("Error opening: ") + includefilename; } else { //if include is open lets read it, current open file is now include file @@ -521,14 +393,15 @@ bool processTemplate(const char * filename, STORESTRINGS_CLASS & KeysList , ST web_interface->WebServer.sendContent(""); return true; } + // ----------------------------------------------------------------------------- // Helper for FreeMem and Firmware // ----------------------------------------------------------------------------- -void GetFreeMem(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) +void WEBINTERFACE_CLASS::GetFreeMem(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) { //FreeMem KeysList.add(FPSTR(KEY_FREE_MEM)); - ValuesList.add(intTostr(ESP.getFreeHeap())); + ValuesList.add(CONFIG::intTostr(ESP.getFreeHeap())); //FW Version KeysList.add(FPSTR(KEY_FW_VER)); ValuesList.add(FPSTR(VALUE_FW_VERSION)); @@ -537,7 +410,7 @@ void GetFreeMem(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) // ----------------------------------------------------------------------------- // Helper for Login ID // ----------------------------------------------------------------------------- -void GeLogin(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList,level_authenticate_type auth_level) +void WEBINTERFACE_CLASS::GeLogin(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList,level_authenticate_type auth_level) { KeysList.add(FPSTR(KEY_DISCONNECT_VISIBILITY)); #ifdef AUTHENTICATION_FEATURE @@ -559,7 +432,7 @@ void GeLogin(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList,leve // ----------------------------------------------------------------------------- // Helper for IP+Web address // ----------------------------------------------------------------------------- -void GetIpWeb(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) +void WEBINTERFACE_CLASS::GetIpWeb(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) { String stmp; @@ -582,7 +455,7 @@ void GetIpWeb(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) // ----------------------------------------------------------------------------- // Helper for Wifi Mode // ----------------------------------------------------------------------------- -void GetMode(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) +void WEBINTERFACE_CLASS::GetMode(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) { if (WiFi.getMode() == WIFI_STA ) { KeysList.add(FPSTR(KEY_MODE)); @@ -600,16 +473,16 @@ void GetMode(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) // ----------------------------------------------------------------------------- // Helper for Web ports // ----------------------------------------------------------------------------- -void GetPorts(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) +void WEBINTERFACE_CLASS::GetPorts(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) { //Web port KeysList.add(FPSTR(KEY_WEB_PORT)); - ValuesList.add(intTostr(wifi_config.iweb_port)); + ValuesList.add(CONFIG::intTostr(wifi_config.iweb_port)); //Data port KeysList.add(FPSTR(KEY_DATA_PORT)); KeysList.add(FPSTR(KEY_DATA_PORT_VISIBILITY)); #ifdef TCP_IP_DATA_FEATURE - ValuesList.add(intTostr(wifi_config.idata_port)); + ValuesList.add(CONFIG::intTostr(wifi_config.idata_port)); ValuesList.add(FPSTR(VALUE_ITEM_VISIBLE)); #else ValuesList.add(FPSTR(VALUE_NONE)); @@ -619,7 +492,7 @@ void GetPorts(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) // ----------------------------------------------------------------------------- // Helper for Page properties // ----------------------------------------------------------------------------- -void SetPageProp(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList, +void WEBINTERFACE_CLASS::SetPageProp(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList, const __FlashStringHelper *title, const __FlashStringHelper *filename) { String fullFilename(filename); @@ -639,7 +512,7 @@ void SetPageProp(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList, // ----------------------------------------------------------------------------- // Helper for DHCP (APP/STA)tus // ----------------------------------------------------------------------------- -void GetDHCPStatus(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) +void WEBINTERFACE_CLASS::GetDHCPStatus(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) { KeysList.add(FPSTR(KEY_AP_DHCP_STATUS)); if (wifi_softap_dhcps_status() == DHCP_STARTED) { @@ -659,7 +532,7 @@ void GetDHCPStatus(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesLis // ----------------------------------------------------------------------------- // Helper for Error Msg processing // ----------------------------------------------------------------------------- -void ProcessAlertError(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList, String & smsg) +void WEBINTERFACE_CLASS::ProcessAlertError(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList, String & smsg) { KeysList.add(FPSTR(KEY_ERROR_MSG)); ValuesList.add(smsg); @@ -678,7 +551,7 @@ void ProcessAlertError(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & Value // ----------------------------------------------------------------------------- // Helper for Success Msg processing // ----------------------------------------------------------------------------- -void ProcessAlertSuccess(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList, String & smsg) +void WEBINTERFACE_CLASS::ProcessAlertSuccess(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList, String & smsg) { KeysList.add(FPSTR(KEY_ERROR_MSG)); ValuesList.add(""); @@ -695,7 +568,7 @@ void ProcessAlertSuccess(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & Val // ----------------------------------------------------------------------------- // Helper for No Msg processing // ----------------------------------------------------------------------------- -void ProcessNoAlert(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) +void WEBINTERFACE_CLASS::ProcessNoAlert(STORESTRINGS_CLASS & KeysList, STORESTRINGS_CLASS & ValuesList) { KeysList.add(FPSTR(KEY_ERROR_MSG)); ValuesList.add(""); @@ -732,10 +605,10 @@ void handle_web_interface_home() uint8_t mac [WL_MAC_ADDR_LENGTH]; //login - GeLogin(KeysList, ValuesList,web_interface->is_authenticated()); + web_interface->GeLogin(KeysList, ValuesList,web_interface->is_authenticated()); //IP+Web - GetIpWeb(KeysList, ValuesList); + web_interface->GetIpWeb(KeysList, ValuesList); //Hostname if (WiFi.getMode()==WIFI_STA ) { @@ -760,17 +633,17 @@ void handle_web_interface_home() } //page title and filenames - SetPageProp(KeysList,ValuesList,FPSTR(VALUE_HOME),F("home")); + web_interface->SetPageProp(KeysList,ValuesList,FPSTR(VALUE_HOME),F("home")); //menu item KeysList.add(FPSTR(KEY_MENU_HOME)); ValuesList.add(FPSTR(VALUE_ACTIVE)); //Chip ID KeysList.add(FPSTR(KEY_CHIP_ID)); - ValuesList.add(intTostr(system_get_chip_id())); + ValuesList.add(CONFIG::intTostr(system_get_chip_id())); //CPU Freq KeysList.add(FPSTR(KEY_CPU_FREQ)); - ValuesList.add(intTostr(system_get_cpu_freq())); + ValuesList.add(CONFIG::intTostr(system_get_cpu_freq())); //SDK Version KeysList.add(FPSTR(KEY_SDK_VER)); ValuesList.add(system_get_sdk_version()); @@ -844,12 +717,12 @@ void handle_web_interface_home() } //Boot version KeysList.add(FPSTR(KEY_BOOT_VER)); - ValuesList.add(intTostr(system_get_boot_version())); + ValuesList.add(CONFIG::intTostr(system_get_boot_version())); //Baud rate KeysList.add(FPSTR(KEY_BAUD_RATE)); - ValuesList.add(intTostr(wifi_config.baud_rate)); + ValuesList.add(CONFIG::intTostr(wifi_config.baud_rate)); // Web and Data ports - GetPorts(KeysList, ValuesList); + web_interface->GetPorts(KeysList, ValuesList); //AP part if (WiFi.getMode()==WIFI_AP || WiFi.getMode()==WIFI_AP_STA) { @@ -885,7 +758,7 @@ void handle_web_interface_home() wifi_softap_free_station_info(); //Connected clients KeysList.add(FPSTR(KEY_CONNECTED_STATIONS_NB_ITEMS)); - ValuesList.add(intTostr(client_counter)); + ValuesList.add(CONFIG::intTostr(client_counter)); } else { //AP is disabled KeysList.add(FPSTR(KEY_AP_STATUS_ENABLED)); @@ -914,7 +787,7 @@ void handle_web_interface_home() } //Channel KeysList.add(FPSTR(KEY_AP_CHANNEL)); - ValuesList.add(intTostr(apconfig.channel)); + ValuesList.add(CONFIG::intTostr(apconfig.channel)); //Authentification mode KeysList.add(FPSTR(KEY_AP_AUTH)); if (apconfig.authmode==AUTH_OPEN) { @@ -931,7 +804,7 @@ void handle_web_interface_home() //Max connections KeysList.add(FPSTR(KEY_AP_MAX_CON)); - ValuesList.add(intTostr(apconfig.max_connection)); + ValuesList.add(CONFIG::intTostr(apconfig.max_connection)); } else { //SSID KeysList.add(FPSTR(KEY_AP_SSID)); @@ -950,7 +823,7 @@ void handle_web_interface_home() ValuesList.add(FPSTR(VALUE_NOT_AVAILABLE)); } //DHCP Status - GetDHCPStatus(KeysList, ValuesList); + web_interface->GetDHCPStatus(KeysList, ValuesList); //IP/GW/MASK if (wifi_get_ip_info(SOFTAP_IF,&info)) { //IP address @@ -1001,7 +874,7 @@ void handle_web_interface_home() } //Channel KeysList.add(FPSTR(KEY_STA_CHANNEL)); - ValuesList.add(intTostr (wifi_get_channel())); + ValuesList.add(CONFIG::intTostr (wifi_get_channel())); //Connection status istatus = wifi_station_get_connect_status(); KeysList.add(FPSTR(KEY_STA_STATUS)); @@ -1020,9 +893,9 @@ void handle_web_interface_home() } //Signal strength KeysList.add(FPSTR(KEY_STA_SIGNAL)); - ValuesList.add(intTostr(wifi_config.getSignal(WiFi.RSSI()))); + ValuesList.add(CONFIG::intTostr(wifi_config.getSignal(WiFi.RSSI()))); //DHCP Client status - GetDHCPStatus(KeysList, ValuesList); + web_interface->GetDHCPStatus(KeysList, ValuesList); //IP address KeysList.add(FPSTR(KEY_STA_IP)); ValuesList.add(WiFi.localIP().toString().c_str()); @@ -1036,9 +909,9 @@ void handle_web_interface_home() KeysList.add(FPSTR(KEY_SERVICE_PAGE)); ValuesList.add(""); //Firmware & Free Mem, at the end to reflect situation - GetFreeMem(KeysList, ValuesList); + web_interface->GetFreeMem(KeysList, ValuesList); //process the template file and provide list of variables - processTemplate("/home.tpl", KeysList , ValuesList); + web_interface->processTemplate("/home.tpl", KeysList , ValuesList); //need to clean to speed up memory recovery KeysList.clear(); ValuesList.clear(); @@ -1070,13 +943,13 @@ void handle_web_interface_configSys() return; } //login - GeLogin(KeysList, ValuesList,auth_level); + web_interface->GeLogin(KeysList, ValuesList,auth_level); //IP+Web - GetIpWeb(KeysList, ValuesList); + web_interface->GetIpWeb(KeysList, ValuesList); //mode - GetMode(KeysList, ValuesList); + web_interface->GetMode(KeysList, ValuesList); //page title and filenames - SetPageProp(KeysList,ValuesList,FPSTR(VALUE_HOME),F("system")); + web_interface->SetPageProp(KeysList,ValuesList,FPSTR(VALUE_HOME),F("system")); //menu item KeysList.add(FPSTR(KEY_MENU_SYSTEM)); ValuesList.add(FPSTR(VALUE_ACTIVE)); @@ -1176,13 +1049,13 @@ void handle_web_interface_configSys() stmp=""; while (lbaudlist[istatus]>-1) { stmp+="