diff --git a/esp8266/webinterface.cpp b/esp8266/webinterface.cpp index 5f317405..78364ba0 100644 --- a/esp8266/webinterface.cpp +++ b/esp8266/webinterface.cpp @@ -31,9 +31,6 @@ extern "C" { } - -#define LIMIT_BUFFER 5000 - const char PAGE_HEAD_1[] PROGMEM = "\n\n\n\n" \ "\n"; const char PAGE_HEAD_2[] PROGMEM = "Wifi Configuration" \ @@ -221,24 +218,24 @@ const char AVAILABLE_APS[] PROGMEM = " available AP"; const char RSSI_NAME[] PROGMEM = "RSSI"; const char PROTECTED_NAME[] PROGMEM = "Protected"; -#define MSG_SUCCESS(msg) web_interface.add4send(PROGMEM2CHAR(ALERT_SUCCESS));web_interface.add4send(msg);web_interface.add4send(PROGMEM2CHAR(DIV_E)); -#define MSG_ERROR(msg) web_interface.add4send(PROGMEM2CHAR(ALERT_ERROR));web_interface.add4send(msg);web_interface.add4send(PROGMEM2CHAR(DIV_E)); -#define OPTION(value, selected,content) web_interface.add4send(PROGMEM2CHAR(FORM_OPTION_1));web_interface.add4send(value);web_interface.add4send(PROGMEM2CHAR(FORM_OPTION_2));web_interface.add4send(selected);web_interface.add4send(PROGMEM2CHAR(FORM_OPTION_3));web_interface.add4send(content);web_interface.add4send(PROGMEM2CHAR(FORM_OPTION_4)); -#define SELECT_START(id,label,name) web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_1));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_2));web_interface.add4send(label);web_interface.add4send(PROGMEM2CHAR(FORM_SELECT_1));web_interface.add4send(name);web_interface.add4send(PROGMEM2CHAR(FORM_SELECT_2));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_SELECT_3)); -#define SELECT_START_ERROR(id,label,name) web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_1_ERROR));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_2));web_interface.add4send(label);web_interface.add4send(PROGMEM2CHAR(FORM_SELECT_1));web_interface.add4send(name);web_interface.add4send(PROGMEM2CHAR(FORM_SELECT_2));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_SELECT_3)); -#define SELECT_END web_interface.add4send(PROGMEM2CHAR(FORM_SELECT_END)); -#define INPUT_TEXT( id,label, name,placeholder,value) web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_1));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_2));web_interface.add4send(label);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_3));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_4));web_interface.add4send(name);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_5));web_interface.add4send(placeholder);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_6));web_interface.add4send(value);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_7)); -#define INPUT_TEXT_ERROR( id,label, name,placeholder,value) web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_1_ERROR));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_2));web_interface.add4send(label);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_3));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_4));web_interface.add4send(name);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_5));web_interface.add4send(placeholder);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_6));web_interface.add4send(value);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_7)); -#define INPUT_PASSWORD( id,label, name,placeholder,value) web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_1));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_2));web_interface.add4send(label);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_3P));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_4));web_interface.add4send(name);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_5));web_interface.add4send(placeholder);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_6));web_interface.add4send(value);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_7)); -#define INPUT_PASSWORD_ERROR( id,label, name,placeholder,value) web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_1_ERROR));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_2));web_interface.add4send(label);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_3P));web_interface.add4send(id);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_4));web_interface.add4send(name);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_5));web_interface.add4send(placeholder);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_6));web_interface.add4send(value);web_interface.add4send(PROGMEM2CHAR(FORM_INPUT_7)); -#define INPUT_CHECKBOX(name,label,status) web_interface.add4send(PROGMEM2CHAR(FORM_CHECKBOX_1));web_interface.add4send(name);web_interface.add4send(PROGMEM2CHAR(FORM_CHECKBOX_2));web_interface.add4send(status);web_interface.add4send(PROGMEM2CHAR(FORM_CHECKBOX_3));web_interface.add4send(label);web_interface.add4send(PROGMEM2CHAR(FORM_CHECKBOX_4)); -#define LABEL( title, value) web_interface.add4send(PROGMEM2CHAR(LABEL_START)); web_interface.add4send(title);web_interface.add4send(PROGMEM2CHAR(LABEL_COLOR));web_interface.add4send(value);web_interface.add4send(PROGMEM2CHAR(LABEL_END));web_interface.add4send(PROGMEM2CHAR(BR)); -#define LABEL_UNITS(title, value,units) web_interface.add4send(PROGMEM2CHAR(LABEL_START)); web_interface.add4send(title);web_interface.add4send(PROGMEM2CHAR(LABEL_COLOR));web_interface.add4send(value);web_interface.add4send(units);web_interface.add4send(PROGMEM2CHAR(LABEL_END));web_interface.add4send(PROGMEM2CHAR(BR)); -#define TH_ENTRY(entry) web_interface.add4send(PROGMEM2CHAR(TH_S));web_interface.add4send(entry);web_interface.add4send(PROGMEM2CHAR(TH_E)); -#define THR_ENTRY(entry) web_interface.add4send(PROGMEM2CHAR(TH_R));web_interface.add4send(entry);web_interface.add4send(PROGMEM2CHAR(TH_E)); -#define TD_ENTRY(entry) web_interface.add4send(PROGMEM2CHAR(TD_S));web_interface.add4send(entry);web_interface.add4send(PROGMEM2CHAR(TD_E)); -#define TOPBAR(IP) web_interface.add4send(PROGMEM2CHAR(NAV_START)); web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART1)) ; web_interface.add4send(PROGMEM2CHAR(NAV_ELEMENT_ACTIVE)) ; web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART2a) ); web_interface.add4send(IP); web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART2b)); web_interface.add4send(IP); web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART3b)); web_interface.add4send(IP); web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART4b)); web_interface.add4send(IP); web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART5b));web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PARTEND)); web_interface.add4send(PROGMEM2CHAR(NAV_RIGHT_PART)) ; web_interface.add4send(PROGMEM2CHAR(NAV_END)); -//#define TOPBAR(IP) web_interface.add4send(PROGMEM2CHAR(NAV_START)); web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART1)) ; web_interface.add4send(PROGMEM2CHAR(NAV_ELEMENT_ACTIVE)) ; web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART2a) ); web_interface.add4send(IP); web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART2b)); web_interface.add4send(IP); web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART3b)); web_interface.add4send(IP); web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PART4b)); web_interface.add4send(PROGMEM2CHAR(NAV_LEFT_PARTEND)); web_interface.add4send(PROGMEM2CHAR(NAV_RIGHT_PART)) ; web_interface.add4send(PROGMEM2CHAR(NAV_END)); +#define MSG_SUCCESS(msg) buffer2send+=(PROGMEM2CHAR(ALERT_SUCCESS));buffer2send+=(msg);buffer2send+=(PROGMEM2CHAR(DIV_E)); +#define MSG_ERROR(msg) buffer2send+=(PROGMEM2CHAR(ALERT_ERROR));buffer2send+=(msg);buffer2send+=(PROGMEM2CHAR(DIV_E)); +#define OPTION(value, selected,content) buffer2send+=(PROGMEM2CHAR(FORM_OPTION_1));buffer2send+=(value);buffer2send+=(PROGMEM2CHAR(FORM_OPTION_2));buffer2send+=(selected);buffer2send+=(PROGMEM2CHAR(FORM_OPTION_3));buffer2send+=(content);buffer2send+=(PROGMEM2CHAR(FORM_OPTION_4)); +#define SELECT_START(id,label,name) buffer2send+=(PROGMEM2CHAR(FORM_INPUT_1));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_2));buffer2send+=(label);buffer2send+=(PROGMEM2CHAR(FORM_SELECT_1));buffer2send+=(name);buffer2send+=(PROGMEM2CHAR(FORM_SELECT_2));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_SELECT_3)); +#define SELECT_START_ERROR(id,label,name) buffer2send+=(PROGMEM2CHAR(FORM_INPUT_1_ERROR));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_2));buffer2send+=(label);buffer2send+=(PROGMEM2CHAR(FORM_SELECT_1));buffer2send+=(name);buffer2send+=(PROGMEM2CHAR(FORM_SELECT_2));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_SELECT_3)); +#define SELECT_END buffer2send+=(PROGMEM2CHAR(FORM_SELECT_END)); +#define INPUT_TEXT( id,label, name,placeholder,value) buffer2send+=(PROGMEM2CHAR(FORM_INPUT_1));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_2));buffer2send+=(label);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_3));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_4));buffer2send+=(name);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_5));buffer2send+=(placeholder);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_6));buffer2send+=(value);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_7)); +#define INPUT_TEXT_ERROR( id,label, name,placeholder,value) buffer2send+=(PROGMEM2CHAR(FORM_INPUT_1_ERROR));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_2));buffer2send+=(label);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_3));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_4));buffer2send+=(name);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_5));buffer2send+=(placeholder);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_6));buffer2send+=(value);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_7)); +#define INPUT_PASSWORD( id,label, name,placeholder,value) buffer2send+=(PROGMEM2CHAR(FORM_INPUT_1));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_2));buffer2send+=(label);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_3P));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_4));buffer2send+=(name);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_5));buffer2send+=(placeholder);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_6));buffer2send+=(value);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_7)); +#define INPUT_PASSWORD_ERROR( id,label, name,placeholder,value) buffer2send+=(PROGMEM2CHAR(FORM_INPUT_1_ERROR));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_2));buffer2send+=(label);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_3P));buffer2send+=(id);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_4));buffer2send+=(name);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_5));buffer2send+=(placeholder);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_6));buffer2send+=(value);buffer2send+=(PROGMEM2CHAR(FORM_INPUT_7)); +#define INPUT_CHECKBOX(name,label,status) buffer2send+=(PROGMEM2CHAR(FORM_CHECKBOX_1));buffer2send+=(name);buffer2send+=(PROGMEM2CHAR(FORM_CHECKBOX_2));buffer2send+=(status);buffer2send+=(PROGMEM2CHAR(FORM_CHECKBOX_3));buffer2send+=(label);buffer2send+=(PROGMEM2CHAR(FORM_CHECKBOX_4)); +#define LABEL( title, value) buffer2send+=(PROGMEM2CHAR(LABEL_START)); buffer2send+=(title);buffer2send+=(PROGMEM2CHAR(LABEL_COLOR));buffer2send+=(value);buffer2send+=(PROGMEM2CHAR(LABEL_END));buffer2send+=(PROGMEM2CHAR(BR)); +#define LABEL_UNITS(title, value,units) buffer2send+=(PROGMEM2CHAR(LABEL_START)); buffer2send+=(title);buffer2send+=(PROGMEM2CHAR(LABEL_COLOR));buffer2send+=(value);buffer2send+=(units);buffer2send+=(PROGMEM2CHAR(LABEL_END));buffer2send+=(PROGMEM2CHAR(BR)); +#define TH_ENTRY(entry) buffer2send+=(PROGMEM2CHAR(TH_S));buffer2send+=(entry);buffer2send+=(PROGMEM2CHAR(TH_E)); +#define THR_ENTRY(entry) buffer2send+=(PROGMEM2CHAR(TH_R));buffer2send+=(entry);buffer2send+=(PROGMEM2CHAR(TH_E)); +#define TD_ENTRY(entry) buffer2send+=(PROGMEM2CHAR(TD_S));buffer2send+=(entry);buffer2send+=(PROGMEM2CHAR(TD_E)); +#define TOPBAR(IP) buffer2send+=(PROGMEM2CHAR(NAV_START)); buffer2send+=(PROGMEM2CHAR(NAV_LEFT_PART1)) ; buffer2send+=(PROGMEM2CHAR(NAV_ELEMENT_ACTIVE)) ; buffer2send+=(PROGMEM2CHAR(NAV_LEFT_PART2a) ); buffer2send+=(IP); buffer2send+=(PROGMEM2CHAR(NAV_LEFT_PART2b)); buffer2send+=(IP); buffer2send+=(PROGMEM2CHAR(NAV_LEFT_PART3b)); buffer2send+=(IP); buffer2send+=(PROGMEM2CHAR(NAV_LEFT_PART4b)); buffer2send+=(IP); buffer2send+=(PROGMEM2CHAR(NAV_LEFT_PART5b));buffer2send+=(PROGMEM2CHAR(NAV_LEFT_PARTEND)); buffer2send+=(PROGMEM2CHAR(NAV_RIGHT_PART)) ; buffer2send+=(PROGMEM2CHAR(NAV_END)); + char * progmem2char(const char* src) @@ -314,6 +311,7 @@ bool WEBINTERFACE_CLASS::isIPValid(const char * IP) void handle_web_interface_root() { String IP; + String buffer2send=""; String sstatus; struct softap_config apconfig; struct ip_info info; @@ -321,14 +319,14 @@ void handle_web_interface_root() uint8_t mac [WL_MAC_ADDR_LENGTH]; if (wifi_get_opmode()==WIFI_STA ) IP=wifi_config.ip2str(WiFi.localIP()); else IP=wifi_config.ip2str(WiFi.softAPIP()); - web_interface.add4send(PROGMEM2CHAR(PAGE_HEAD_1)); - web_interface.add4send(PROGMEM2CHAR(PAGE_HEAD_2)); + buffer2send+=(PROGMEM2CHAR(PAGE_HEAD_1)); + buffer2send+=(PROGMEM2CHAR(PAGE_HEAD_2)); //top bar TOPBAR(IP.c_str()) //system part - web_interface.add4send(PROGMEM2CHAR(PANEL_TOP)); - web_interface.add4send(PROGMEM2CHAR(TITLE_SYSTEM)); - web_interface.add4send(PROGMEM2CHAR(PANEL_START)); + buffer2send+=(PROGMEM2CHAR(PANEL_TOP)); + buffer2send+=(PROGMEM2CHAR(TITLE_SYSTEM)); + buffer2send+=(PROGMEM2CHAR(PANEL_START)); LABEL(PROGMEM2CHAR(CHIP_ID_TITLE),String(system_get_chip_id()).c_str()) LABEL_UNITS(PROGMEM2CHAR(CPU_FREQ_TITLE),String(system_get_cpu_freq()).c_str(),PROGMEM2CHAR(UNIT_HZ)) LABEL_UNITS(PROGMEM2CHAR(FREE_MEM_TITLE),String(system_get_free_heap_size()).c_str(),PROGMEM2CHAR(UNIT_OCTET)) @@ -353,13 +351,13 @@ void handle_web_interface_root() istatus=0; if (!CONFIG::read_buffer(EP_BAUD_RATE, (byte *)&istatus , BAUD_LENGH))istatus=0; LABEL(PROGMEM2CHAR(BAUD_RATE_TITLE),String(istatus).c_str()) - web_interface.add4send(PROGMEM2CHAR(PANEL_END)); + buffer2send+=(PROGMEM2CHAR(PANEL_END)); //access point - web_interface.add4send(PROGMEM2CHAR(PANEL_TOP)); - web_interface.add4send(PROGMEM2CHAR(ACCESS_POINT_TITLE)); - if(wifi_get_opmode()==WIFI_AP || wifi_get_opmode()==WIFI_AP_STA) web_interface.add4send(PROGMEM2CHAR(VALUE_ENABLED)); - else web_interface.add4send(PROGMEM2CHAR(VALUE_DISABLED)); - web_interface.add4send(PROGMEM2CHAR(PANEL_START)); + buffer2send+=(PROGMEM2CHAR(PANEL_TOP)); + buffer2send+=(PROGMEM2CHAR(ACCESS_POINT_TITLE)); + if(wifi_get_opmode()==WIFI_AP || wifi_get_opmode()==WIFI_AP_STA) buffer2send+=(PROGMEM2CHAR(VALUE_ENABLED)); + else buffer2send+=(PROGMEM2CHAR(VALUE_DISABLED)); + buffer2send+=(PROGMEM2CHAR(PANEL_START)); LABEL(PROGMEM2CHAR(MAC_ADDRESS_TITLE),wifi_config.mac2str(WiFi.softAPmacAddress(mac))) if (wifi_get_opmode()==WIFI_AP || wifi_get_opmode()==WIFI_AP_STA) { @@ -400,42 +398,42 @@ void handle_web_interface_root() stationtmp = STAILQ_NEXT(stationtmp, next); } //start table as at least one connected - web_interface.add4send(PROGMEM2CHAR(TABLE_START)); - web_interface.add4send(PROGMEM2CHAR(CAPTION_S)); - web_interface.add4send(String(istatus).c_str()); - web_interface.add4send(PROGMEM2CHAR(CONNECTED_STATIONS)); - web_interface.add4send(PROGMEM2CHAR(CAPTION_E)); - web_interface.add4send(PROGMEM2CHAR(THEAD_S)); - web_interface.add4send(PROGMEM2CHAR(TR_S)); + buffer2send+=(PROGMEM2CHAR(TABLE_START)); + buffer2send+=(PROGMEM2CHAR(CAPTION_S)); + buffer2send+=(String(istatus).c_str()); + buffer2send+=(PROGMEM2CHAR(CONNECTED_STATIONS)); + buffer2send+=(PROGMEM2CHAR(CAPTION_E)); + buffer2send+=(PROGMEM2CHAR(THEAD_S)); + buffer2send+=(PROGMEM2CHAR(TR_S)); TH_ENTRY(PROGMEM2CHAR(NUMBER_LABEL)) TH_ENTRY(PROGMEM2CHAR(MAC_LABEL)) TH_ENTRY(PROGMEM2CHAR(IP_LABEL)) - web_interface.add4send(PROGMEM2CHAR(TR_E)); - web_interface.add4send(PROGMEM2CHAR(THEAD_E)); - web_interface.add4send(PROGMEM2CHAR(TBODY_S)); + buffer2send+=(PROGMEM2CHAR(TR_E)); + buffer2send+=(PROGMEM2CHAR(THEAD_E)); + buffer2send+=(PROGMEM2CHAR(TBODY_S)); istatus=0; while(station) { istatus++; //display each client - web_interface.add4send(PROGMEM2CHAR(TR_S)); + buffer2send+=(PROGMEM2CHAR(TR_S)); THR_ENTRY(String(istatus).c_str()) TD_ENTRY(wifi_config.mac2str(station->bssid)) TD_ENTRY(wifi_config.ip2str((byte *)&station->ip)) - web_interface.add4send(PROGMEM2CHAR(TR_E)); + buffer2send+=(PROGMEM2CHAR(TR_E)); station = STAILQ_NEXT(station, next); } - web_interface.add4send(PROGMEM2CHAR(TBODY_E)); + buffer2send+=(PROGMEM2CHAR(TBODY_E)); //close table - web_interface.add4send(PROGMEM2CHAR(TABLE_END)); + buffer2send+=(PROGMEM2CHAR(TABLE_END)); wifi_softap_free_station_info(); } - web_interface.add4send(PROGMEM2CHAR(PANEL_END)); - web_interface.add4send(PROGMEM2CHAR(PANEL_TOP)); - web_interface.add4send(PROGMEM2CHAR(STATION_TITLE)); - if(wifi_get_opmode()==WIFI_STA || wifi_get_opmode()==WIFI_AP_STA) web_interface.add4send(PROGMEM2CHAR(VALUE_ENABLED)); - else web_interface.add4send(PROGMEM2CHAR(VALUE_DISABLED)); - web_interface.add4send(PROGMEM2CHAR(PANEL_START)); + buffer2send+=(PROGMEM2CHAR(PANEL_END)); + buffer2send+=(PROGMEM2CHAR(PANEL_TOP)); + buffer2send+=(PROGMEM2CHAR(STATION_TITLE)); + if(wifi_get_opmode()==WIFI_STA || wifi_get_opmode()==WIFI_AP_STA) buffer2send+=(PROGMEM2CHAR(VALUE_ENABLED)); + else buffer2send+=(PROGMEM2CHAR(VALUE_DISABLED)); + buffer2send+=(PROGMEM2CHAR(PANEL_START)); LABEL(PROGMEM2CHAR(MAC_ADDRESS_TITLE),wifi_config.mac2str(WiFi.macAddress(mac))) if(wifi_get_opmode()==WIFI_STA || wifi_get_opmode()==WIFI_AP_STA) { @@ -456,14 +454,15 @@ void handle_web_interface_root() LABEL(PROGMEM2CHAR(GATEWAY_TITLE),wifi_config.ip2str(WiFi.gatewayIP())) LABEL(PROGMEM2CHAR(SUBNET_TITLE),wifi_config.ip2str(WiFi.subnetMask())) } - web_interface.add4send(PROGMEM2CHAR(PANEL_END)); - web_interface.add4send(PROGMEM2CHAR(PAGE_BOTTOM)); - web_interface.flushbuffer(); + buffer2send+=(PROGMEM2CHAR(PANEL_END)); + buffer2send+=(PROGMEM2CHAR(PAGE_BOTTOM)); + web_interface.WebServer.send(200, "text/html", buffer2send); } void handle_web_interface_configSys() { String stmp,smsg; + String buffer2send =""; int istatus=0; byte bflag=0; bool msg_alert_error=false; @@ -474,14 +473,12 @@ void handle_web_interface_configSys() //check is it is a submission or a display if (web_interface.WebServer.hasArg(PROGMEM2CHAR(SUBMIT_ID))) { //is there a correct list of values? - if (web_interface.WebServer.hasArg(PROGMEM2CHAR(BAUD_RATE_ID)) && web_interface.WebServer.hasArg(PROGMEM2CHAR(SLEEP_MODE_ID))&& web_interface.WebServer.hasArg(PROGMEM2CHAR(NETWORK_ID))) + if (web_interface.WebServer.hasArg(PROGMEM2CHAR(BAUD_RATE_ID)) && web_interface.WebServer.hasArg(PROGMEM2CHAR(SLEEP_MODE_ID))) { //is each value correct ? ibaud = atoi(web_interface.WebServer.arg(PROGMEM2CHAR(BAUD_RATE_ID)).c_str()); - bnetwork = atoi(web_interface.WebServer.arg(PROGMEM2CHAR(NETWORK_ID)).c_str()); bsleepmode = atoi(web_interface.WebServer.arg(PROGMEM2CHAR(SLEEP_MODE_ID)).c_str()); if (!(ibaud==9600 || ibaud==19200|| ibaud==38400|| ibaud==57600|| ibaud==115200|| ibaud==230400) || - !(bnetwork==PHY_MODE_11B||bnetwork==PHY_MODE_11G||bnetwork==PHY_MODE_11N) || - !(bsleepmode==NONE_SLEEP_T ||bsleepmode==LIGHT_SLEEP_T ||bsleepmode==MODEM_SLEEP_T )) + !(bsleepmode==NONE_SLEEP_T ||bsleepmode==LIGHT_SLEEP_T ||bsleepmode==MODEM_SLEEP_T )) { msg_alert_error=true; smsg=PROGMEM2CHAR(ERROR_QUERY); @@ -495,7 +492,7 @@ void handle_web_interface_configSys() //if no error apply the changes if (msg_alert_error!=true) { - if(!CONFIG::write_buffer(EP_BAUD_RATE,(const byte *)&ibaud,BAUD_LENGH) ||!CONFIG::write_byte(EP_PHY_MODE,bnetwork) ||!CONFIG::write_byte(EP_SLEEP_MODE,bsleepmode)) + if(!CONFIG::write_buffer(EP_BAUD_RATE,(const byte *)&ibaud,BAUD_LENGH)||!CONFIG::write_byte(EP_SLEEP_MODE,bsleepmode)) { msg_alert_error=true; smsg=PROGMEM2CHAR(ERROR_WRITING_CHANGES); @@ -512,13 +509,13 @@ void handle_web_interface_configSys() if (!CONFIG::read_buffer(EP_BAUD_RATE, (byte *)&istatus , BAUD_LENGH))istatus=0; if (wifi_get_opmode()==WIFI_STA ) stmp=wifi_config.ip2str(WiFi.localIP()); else stmp=wifi_config.ip2str(WiFi.softAPIP()); - web_interface.add4send(PROGMEM2CHAR(PAGE_HEAD_1)); - web_interface.add4send(PROGMEM2CHAR(PAGE_HEAD_2)); + buffer2send+=(PROGMEM2CHAR(PAGE_HEAD_1)); + buffer2send+=(PROGMEM2CHAR(PAGE_HEAD_2)); TOPBAR(stmp.c_str()) - web_interface.add4send(PROGMEM2CHAR(PANEL_TOP)); - web_interface.add4send(PROGMEM2CHAR(TITLE_SYSTEM)); - web_interface.add4send(PROGMEM2CHAR(PANEL_START)); - web_interface.add4send(PROGMEM2CHAR(FORM_START)); + buffer2send+=(PROGMEM2CHAR(PANEL_TOP)); + buffer2send+=(PROGMEM2CHAR(TITLE_SYSTEM)); + buffer2send+=(PROGMEM2CHAR(PANEL_START)); + buffer2send+=(PROGMEM2CHAR(FORM_START)); SELECT_START(PROGMEM2CHAR(SYS_1_ID),PROGMEM2CHAR(BAUD_RATE_NAME),PROGMEM2CHAR(BAUD_RATE_ID)) if (istatus==9600)stmp = PROGMEM2CHAR(VALUE_SELECTED); @@ -540,26 +537,8 @@ void handle_web_interface_configSys() else stmp=""; OPTION(PROGMEM2CHAR(VALUE_230400), stmp.c_str(),PROGMEM2CHAR(VALUE_230400)) SELECT_END - - //web_interface.add4send(PROGMEM2CHAR(BR)); - - if (!CONFIG::read_byte(EP_PHY_MODE, &bflag ))bflag=0; - SELECT_START(PROGMEM2CHAR(SYS_2_ID),PROGMEM2CHAR(NETWORK_NAME),PROGMEM2CHAR(NETWORK_ID)) - if (bflag==PHY_MODE_11B)stmp = PROGMEM2CHAR(VALUE_SELECTED); - else stmp=""; - OPTION(String(PHY_MODE_11B).c_str(), stmp.c_str(),PROGMEM2CHAR(VALUE_11B)) - if (bflag==PHY_MODE_11G)stmp = PROGMEM2CHAR(VALUE_SELECTED); - else stmp=""; - OPTION(String(PHY_MODE_11G).c_str(), stmp.c_str(),PROGMEM2CHAR(VALUE_11G)) - if (bflag==PHY_MODE_11N)stmp = PROGMEM2CHAR(VALUE_SELECTED); - else stmp=""; - if (wifi_get_opmode()==WIFI_STA ) - { - OPTION(String(PHY_MODE_11N).c_str(), stmp.c_str(),PROGMEM2CHAR(VALUE_11N)) - } - SELECT_END - - // web_interface.add4send(PROGMEM2CHAR(BR)); + + // buffer2send+=(PROGMEM2CHAR(BR)); if (!CONFIG::read_byte(EP_SLEEP_MODE, &bflag ))bflag=0; SELECT_START(PROGMEM2CHAR(SYS_3_ID),PROGMEM2CHAR(SLEEP_MODE_NAME),PROGMEM2CHAR(SLEEP_MODE_ID)) @@ -577,18 +556,18 @@ void handle_web_interface_configSys() if(msg_alert_error) { MSG_ERROR(smsg.c_str()) - web_interface.add4send(PROGMEM2CHAR(FORM_SUBMIT)); + buffer2send+=(PROGMEM2CHAR(FORM_SUBMIT)); } else if(msg_alert_success) { MSG_SUCCESS(smsg.c_str()) } - else web_interface.add4send(PROGMEM2CHAR(FORM_SUBMIT)); + else buffer2send+=(PROGMEM2CHAR(FORM_SUBMIT)); - web_interface.add4send(PROGMEM2CHAR(FORM_END)); - web_interface.add4send(PROGMEM2CHAR(PANEL_END)); - web_interface.add4send(PROGMEM2CHAR(PAGE_BOTTOM)); - web_interface.flushbuffer(); + buffer2send+=(PROGMEM2CHAR(FORM_END)); + buffer2send+=(PROGMEM2CHAR(PANEL_END)); + buffer2send+=(PROGMEM2CHAR(PAGE_BOTTOM)); + web_interface.WebServer.send(200, "text/html", buffer2send); if (msg_alert_success && !msg_alert_error) { system_restart(); @@ -598,6 +577,7 @@ void handle_web_interface_configSys() void handle_web_interface_configAP() { String stmp,smsg; + String buffer2send =""; char sbuf[MAX_PASSWORD_LENGH+1]; char error_display[9]={0,0,0,0,0,0,0,0,0}; char password_buf[MAX_PASSWORD_LENGH+1]; @@ -823,13 +803,13 @@ void handle_web_interface_configAP() //display page if (wifi_get_opmode()==WIFI_STA ) stmp=wifi_config.ip2str(WiFi.localIP()); else stmp=wifi_config.ip2str(WiFi.softAPIP()); - web_interface.add4send(PROGMEM2CHAR(PAGE_HEAD_1)); - web_interface.add4send(PROGMEM2CHAR(PAGE_HEAD_2)); + buffer2send+=(PROGMEM2CHAR(PAGE_HEAD_1)); + buffer2send+=(PROGMEM2CHAR(PAGE_HEAD_2)); TOPBAR(stmp.c_str()) - web_interface.add4send(PROGMEM2CHAR(PANEL_TOP)); - web_interface.add4send(PROGMEM2CHAR(ACCESS_POINT_TITLE)); - web_interface.add4send(PROGMEM2CHAR(PANEL_START)); - web_interface.add4send(PROGMEM2CHAR(FORM_START)); + buffer2send+=(PROGMEM2CHAR(PANEL_TOP)); + buffer2send+=(PROGMEM2CHAR(ACCESS_POINT_TITLE)); + buffer2send+=(PROGMEM2CHAR(PANEL_START)); + buffer2send+=(PROGMEM2CHAR(FORM_START)); //ssid if(error_display[0]==0) { @@ -897,8 +877,8 @@ void handle_web_interface_configAP() if (static_ip_buf==STATIC_IP_MODE)stmp=PROGMEM2CHAR(CHECKED_VALUE); else stmp=""; INPUT_CHECKBOX(PROGMEM2CHAR(STATIC_IP_NAME), PROGMEM2CHAR(STATIC_IP_LABEL),stmp.c_str()) - // if (static_ip_buf==STATIC_IP_MODE)web_interface.add4send(PROGMEM2CHAR(SHOW_IP_BLOCK)); - //else web_interface.add4send(PROGMEM2CHAR(HIDE_IP_BLOCK)); + // if (static_ip_buf==STATIC_IP_MODE)buffer2send+=(PROGMEM2CHAR(SHOW_IP_BLOCK)); + //else buffer2send+=(PROGMEM2CHAR(HIDE_IP_BLOCK)); //IP for static IP if(error_display[6]==0) { @@ -926,25 +906,25 @@ void handle_web_interface_configAP() { INPUT_TEXT_ERROR( PROGMEM2CHAR(AP_9_ID),PROGMEM2CHAR(SUBNET_TITLE), PROGMEM2CHAR(SUBNET_ID),PROGMEM2CHAR(SUBNET_NAME),msk_buf) } - //web_interface.add4send(PROGMEM2CHAR(DIV_E)); + //buffer2send+=(PROGMEM2CHAR(DIV_E)); if(msg_alert_error) { MSG_ERROR(smsg.c_str()) - web_interface.add4send(PROGMEM2CHAR(FORM_SUBMIT)); + buffer2send+=(PROGMEM2CHAR(FORM_SUBMIT)); } else if(msg_alert_success) { MSG_SUCCESS(smsg.c_str()) } - else web_interface.add4send(PROGMEM2CHAR(FORM_SUBMIT)); + else buffer2send+=(PROGMEM2CHAR(FORM_SUBMIT)); - web_interface.add4send(PROGMEM2CHAR(FORM_END)); - web_interface.add4send(PROGMEM2CHAR(PANEL_END)); - web_interface.add4send(PROGMEM2CHAR(PAGE_BOTTOM)); - web_interface.flushbuffer(); + buffer2send+=(PROGMEM2CHAR(FORM_END)); + buffer2send+=(PROGMEM2CHAR(PANEL_END)); + buffer2send+=(PROGMEM2CHAR(PAGE_BOTTOM)); + web_interface.WebServer.send(200, "text/html", buffer2send); if (msg_alert_success && !msg_alert_error) { system_restart(); @@ -955,6 +935,7 @@ void handle_web_interface_configAP() void handle_web_interface_configSTA() { String stmp,smsg; + String buffer2send =""; char sbuf[MAX_PASSWORD_LENGH+1]; char error_display[9]={0,0,0,0,0,0,0,0,0}; char password_buf[MAX_PASSWORD_LENGH+1]; @@ -1017,7 +998,7 @@ void handle_web_interface_configSTA() } //phy mode phy_mode_buf = atoi(web_interface.WebServer.arg(PROGMEM2CHAR(NETWORK_ID)).c_str()); - if (!(phy_mode_buf==PHY_MODE_11B||phy_mode_buf==PHY_MODE_11G) ) + if (!(phy_mode_buf==PHY_MODE_11B||phy_mode_buf==PHY_MODE_11G ||phy_mode_buf==PHY_MODE_11N)) { msg_alert_error=true; smsg+=PROGMEM2CHAR(ERROR_QUERY); @@ -1150,13 +1131,13 @@ void handle_web_interface_configSTA() //display page if (wifi_get_opmode()==WIFI_STA ) stmp=wifi_config.ip2str(WiFi.localIP()); else stmp=wifi_config.ip2str(WiFi.softAPIP()); - web_interface.add4send(PROGMEM2CHAR(PAGE_HEAD_1)); - web_interface.add4send(PROGMEM2CHAR(PAGE_HEAD_2)); + buffer2send+=(PROGMEM2CHAR(PAGE_HEAD_1)); + buffer2send+=(PROGMEM2CHAR(PAGE_HEAD_2)); TOPBAR(stmp.c_str()) - web_interface.add4send(PROGMEM2CHAR(PANEL_TOP)); - web_interface.add4send(PROGMEM2CHAR(STATION_TITLE)); - web_interface.add4send(PROGMEM2CHAR(PANEL_START)); - web_interface.add4send(PROGMEM2CHAR(FORM_START)); + buffer2send+=(PROGMEM2CHAR(PANEL_TOP)); + buffer2send+=(PROGMEM2CHAR(STATION_TITLE)); + buffer2send+=(PROGMEM2CHAR(PANEL_START)); + buffer2send+=(PROGMEM2CHAR(FORM_START)); //if in AP mode switch to mixed mode to be able to scan if (wifi_get_opmode()!=WIFI_STA ) @@ -1166,31 +1147,31 @@ void handle_web_interface_configSTA() } int n = WiFi.scanNetworks(); - web_interface.add4send(PROGMEM2CHAR(TABLE_START)); - web_interface.add4send(PROGMEM2CHAR(CAPTION_S)); - web_interface.add4send(String(n).c_str()); - web_interface.add4send(PROGMEM2CHAR(AVAILABLE_APS)); - web_interface.add4send(PROGMEM2CHAR(CAPTION_E)); - web_interface.add4send(PROGMEM2CHAR(THEAD_S)); - web_interface.add4send(PROGMEM2CHAR(TR_S)); + buffer2send+=(PROGMEM2CHAR(TABLE_START)); + buffer2send+=(PROGMEM2CHAR(CAPTION_S)); + buffer2send+=(String(n).c_str()); + buffer2send+=(PROGMEM2CHAR(AVAILABLE_APS)); + buffer2send+=(PROGMEM2CHAR(CAPTION_E)); + buffer2send+=(PROGMEM2CHAR(THEAD_S)); + buffer2send+=(PROGMEM2CHAR(TR_S)); TH_ENTRY(PROGMEM2CHAR(NUMBER_LABEL)) TH_ENTRY(PROGMEM2CHAR(SSID_ID)) TH_ENTRY(PROGMEM2CHAR(RSSI_NAME)) TH_ENTRY(PROGMEM2CHAR(PROTECTED_NAME)) - web_interface.add4send(PROGMEM2CHAR(TR_E)); - web_interface.add4send(PROGMEM2CHAR(THEAD_E)); - web_interface.add4send(PROGMEM2CHAR(TBODY_S)); + buffer2send+=(PROGMEM2CHAR(TR_E)); + buffer2send+=(PROGMEM2CHAR(THEAD_E)); + buffer2send+=(PROGMEM2CHAR(TBODY_S)); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found - web_interface.add4send(PROGMEM2CHAR(TR_S)); + buffer2send+=(PROGMEM2CHAR(TR_S)); THR_ENTRY(String(i+1).c_str()) TD_ENTRY(WiFi.SSID(i)) TD_ENTRY(String(WiFi.RSSI(i)).c_str()) TD_ENTRY((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*") } //close table - web_interface.add4send(PROGMEM2CHAR(TABLE_END)); + buffer2send+=(PROGMEM2CHAR(TABLE_END)); //revert to pure softAP @@ -1221,13 +1202,16 @@ void handle_web_interface_configSTA() if (phy_mode_buf==PHY_MODE_11G)stmp = PROGMEM2CHAR(VALUE_SELECTED); else stmp=""; OPTION(String(PHY_MODE_11G).c_str(), stmp.c_str(),PROGMEM2CHAR(VALUE_11G)) + if (phy_mode_buf==PHY_MODE_11N)stmp = PROGMEM2CHAR(VALUE_SELECTED); + else stmp=""; + OPTION(String(PHY_MODE_11N).c_str(), stmp.c_str(),PROGMEM2CHAR(VALUE_11N)) SELECT_END //static IP ? if (static_ip_buf==STATIC_IP_MODE)stmp=PROGMEM2CHAR(CHECKED_VALUE); else stmp=""; INPUT_CHECKBOX(PROGMEM2CHAR(STATIC_IP_NAME), PROGMEM2CHAR(STATIC_IP_LABEL),stmp.c_str()) - // if (static_ip_buf==STATIC_IP_MODE)web_interface.add4send(PROGMEM2CHAR(SHOW_IP_BLOCK)); - //else web_interface.add4send(PROGMEM2CHAR(HIDE_IP_BLOCK)); + // if (static_ip_buf==STATIC_IP_MODE)buffer2send+=(PROGMEM2CHAR(SHOW_IP_BLOCK)); + //else buffer2send+=(PROGMEM2CHAR(HIDE_IP_BLOCK)); //IP for static IP if(error_display[6]==0) { @@ -1255,25 +1239,25 @@ void handle_web_interface_configSTA() { INPUT_TEXT_ERROR( PROGMEM2CHAR(AP_9_ID),PROGMEM2CHAR(SUBNET_TITLE), PROGMEM2CHAR(SUBNET_ID),PROGMEM2CHAR(SUBNET_NAME),msk_buf) } - //web_interface.add4send(PROGMEM2CHAR(DIV_E)); + //buffer2send+=(PROGMEM2CHAR(DIV_E)); if(msg_alert_error) { MSG_ERROR(smsg.c_str()) - web_interface.add4send(PROGMEM2CHAR(FORM_SUBMIT)); + buffer2send+=(PROGMEM2CHAR(FORM_SUBMIT)); } else if(msg_alert_success) { MSG_SUCCESS(smsg.c_str()) } - else web_interface.add4send(PROGMEM2CHAR(FORM_SUBMIT)); + else buffer2send+=(PROGMEM2CHAR(FORM_SUBMIT)); - web_interface.add4send(PROGMEM2CHAR(FORM_END)); - web_interface.add4send(PROGMEM2CHAR(PANEL_END)); - web_interface.add4send(PROGMEM2CHAR(PAGE_BOTTOM)); - web_interface.flushbuffer(); + buffer2send+=(PROGMEM2CHAR(FORM_END)); + buffer2send+=(PROGMEM2CHAR(PANEL_END)); + buffer2send+=(PROGMEM2CHAR(PAGE_BOTTOM)); + web_interface.WebServer.send(200, "text/html", buffer2send); if (msg_alert_success && !msg_alert_error) { system_restart(); @@ -1284,12 +1268,13 @@ void handle_web_interface_configSTA() void handle_not_found() { String IP; + String buffer2send =""; if (wifi_get_opmode()==WIFI_STA ) IP=wifi_config.ip2str(WiFi.localIP()); else IP=wifi_config.ip2str(WiFi.softAPIP()); - web_interface.add4send(PROGMEM2CHAR(T404_PAGE)); - web_interface.add4send(IP.c_str()); - web_interface.add4send(PROGMEM2CHAR(T404_PAGE_2)); - web_interface.flushbuffer(); + buffer2send+=(PROGMEM2CHAR(T404_PAGE)); + buffer2send+=(IP.c_str()); + buffer2send+=(PROGMEM2CHAR(T404_PAGE_2)); + web_interface.WebServer.send(200, "text/html", buffer2send); } //URI Decoding function @@ -1327,50 +1312,6 @@ void WEBINTERFACE_CLASS::urldecode(char *dst, const char *src) *dst++ = '\0'; } -//send immediatly the current data -void WEBINTERFACE_CLASS::flushbuffer() -{ //empty buffer - web_interface.add4send("", true); - //reset header part - bsendingstarted=false; -} - -//check size of buffer -//add to buffer if under buffer limit -//send if buffer limit is reached or will be reached -void WEBINTERFACE_CLASS::add4send(const char * data2send, bool bimmediatsend) -{ - //we store as no need to send right now - if (((buffer2send.length() + strlen(data2send)) < LIMIT_BUFFER) && !bimmediatsend) - { - buffer2send = buffer2send + data2send; - } - else //or buffer is over or need immediate - {//send current buffer first - if(!bsendingstarted) - { //no header send so first send using header 2500 limit allow to add extra without calculation - web_interface.WebServer.send(200, "text/html", buffer2send); - bsendingstarted=true; - } - else - { //direct data send - web_interface.WebServer.sendContent(buffer2send); - } - buffer2send=data2send; - //do we need to purge or to store ? - if (bimmediatsend) - {//if some data flush - if (buffer2send.length()>0) - { - web_interface.WebServer.sendContent(buffer2send); - //reset buffer - buffer2send=""; - } - //reset header - bsendingstarted=false; - } - } -} //constructor WEBINTERFACE_CLASS::WEBINTERFACE_CLASS (int port):WebServer(port) @@ -1381,7 +1322,6 @@ WEBINTERFACE_CLASS::WEBINTERFACE_CLASS (int port):WebServer(port) WebServer.on("/CONFIGAP",HTTP_ANY, handle_web_interface_configAP); WebServer.on("/CONFIGSTA",HTTP_ANY, handle_web_interface_configSTA); WebServer.onNotFound( handle_not_found); - buffer2send=""; } WEBINTERFACE_CLASS web_interface(80); diff --git a/esp8266/webinterface.h b/esp8266/webinterface.h index b5c39832..80f10c0b 100644 --- a/esp8266/webinterface.h +++ b/esp8266/webinterface.h @@ -30,15 +30,12 @@ class WEBINTERFACE_CLASS public: WEBINTERFACE_CLASS (int port = 82); ESP8266WebServer WebServer; - void flushbuffer(); - void add4send(const char * data2send, bool bimmediatsend = false); void urldecode(char *dst, const char *src); bool isSSIDValid(const char * ssid); bool isPasswordValid(const char * password); bool isIPValid(const char * IP); private: - String buffer2send; - bool bsendingstarted; + }; extern WEBINTERFACE_CLASS web_interface;