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+="