From c2bdbfafb9cf908042bdc184d4f66ec4f26057c3 Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 21 Feb 2018 17:11:57 -0600 Subject: [PATCH] adding menu control, in progress --- WiFiManager.cpp | 56 +++++++++++++++++++++++++++++++++++++++++-------- WiFiManager.h | 27 ++++++++++++++++++++---- strings_en.h | 23 +++++++++++++++----- 3 files changed, 88 insertions(+), 18 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 59ce192..256eb9e 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -145,7 +145,7 @@ WiFiManager::WiFiManager():_debugPort(Serial) { //parameters // @todo belongs to wifimanagerparameter _max_params = WIFI_MANAGER_MAX_PARAMS; - _params = (WiFiManagerParameter**)malloc(_max_params * sizeof(WiFiManagerParameter*)); + _params = (WiFiManagerParameter**)malloc(_max_params * sizeof(WiFiManagerParameter*)); } // destructor @@ -180,6 +180,8 @@ boolean WiFiManager::autoConnect() { boolean WiFiManager::autoConnect(char const *apName, char const *apPassword) { DEBUG_WM(F("AutoConnect")); + Serial.println(getMenuOut()); + // attempt to connect using saved settings, on fail fallback to AP config portal WiFi.enableSTA(true); _usermode = WIFI_STA; @@ -343,10 +345,11 @@ void WiFiManager::setupConfigPortal() { server->on((String)F("/wifi"), std::bind(&WiFiManager::handleWifi, this, true)); server->on((String)F("/0wifi"), std::bind(&WiFiManager::handleWifi, this, false)); server->on((String)F("/wifisave"), std::bind(&WiFiManager::handleWifiSave, this)); - server->on((String)F("/i"), std::bind(&WiFiManager::handleInfo, this)); - server->on((String)F("/r"), std::bind(&WiFiManager::handleReset, this)); + server->on((String)F("/info"), std::bind(&WiFiManager::handleInfo, this)); + server->on((String)F("/param"), std::bind(&WiFiManager::handleParam, this)); + server->on((String)F("/restart"), std::bind(&WiFiManager::handleReset, this)); server->on((String)F("/exit"), std::bind(&WiFiManager::handleExit, this)); - // server->on((String)F("/exit"), std::bind(&WiFiManager::stopCaptivePortal, this)); + server->on((String)F("/close"), std::bind(&WiFiManager::stopCaptivePortal, this)); server->on((String)F("/erase"), std::bind(&WiFiManager::handleErase, this)); server->on((String)F("/status"), std::bind(&WiFiManager::handleWiFiStatus, this)); //server->on("/fwlink", std::bind(&WiFiManager::handleRoot, this)); //Microsoft captive portal. Maybe not needed. Might be handled by notFound handler. @@ -423,7 +426,7 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo break; } - state = handleConfigPortal(); + state = processConfigPortal(); // status change, break if(state != WL_IDLE_STATUS){ @@ -445,14 +448,14 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo */ boolean WiFiManager::process(){ if(webPortalActive || (configPortalActive && !_configPortalIsBlocking)){ - uint8_t state = handleConfigPortal(); + uint8_t state = processConfigPortal(); return state == WL_CONNECTED; } return false; } //using esp enums returns for now, should be fine -uint8_t WiFiManager::handleConfigPortal(){ +uint8_t WiFiManager::processConfigPortal(){ //DNS handler dnsServer->processNextRequest(); //HTTP handler @@ -672,6 +675,7 @@ void WiFiManager::handleRoot() { str.replace(FPSTR(T_v),configPortalActive ? _apName : WiFi.localIP().toString()); // use ip if ap is not active for heading page += str; page += FPSTR(HTTP_PORTAL_OPTIONS); + page += getMenuOut(); reportStatus(page); page += FPSTR(HTTP_END); @@ -695,8 +699,7 @@ void WiFiManager::handleWifi(boolean scan) { page += pitem; page += getStaticOut(); - page += getParamOut(); - + if(_paramsInWifi) page += getParamOut(); page += FPSTR(HTTP_FORM_END); page += FPSTR(HTTP_SCAN_LINK); reportStatus(page); @@ -711,6 +714,38 @@ void WiFiManager::handleWifi(boolean scan) { DEBUG_WM(F("Sent config page")); } +/** + * HTTPD CALLBACK Wifi param page handler + */ +void WiFiManager::handleParam(){ + DEBUG_WM(F("<- HTTP Param")); + handleRequest(); + String page = getHTTPHead(FPSTR(S_titleparam)); // @token titlewifi + + page += getParamOut(); + page += FPSTR(HTTP_FORM_END); + reportStatus(page); + page += FPSTR(HTTP_END); + + server->sendHeader(FPSTR(HTTP_HEAD_CL), String(page.length())); + server->send(200, FPSTR(HTTP_HEAD_CT), page); + + DEBUG_WM(F("Sent param page")); +} + + +String WiFiManager::getMenuOut(){ + String page; + int i; + for(i=0;i server; + // std:vector _menuids; + uint8_t _menuIds[7] = {MENU_WIFI,MENU_INFO,MENU_PARAM,MENU_SEP,MENU_CLOSE,MENU_ERASE,MENU_EXIT}; + // ip configs IPAddress _ap_static_ip; IPAddress _ap_static_gw; @@ -217,14 +234,14 @@ class WiFiManager unsigned long _webPortalAccessed = 0; // ms last web access time WiFiMode_t _usermode = WIFI_OFF; String _wifissidprefix = FPSTR(S_ssidpre); // auto apname prefix prefix+chipid - uint8_t _lastconxresult = WL_IDLE_STATUS; + uint8_t _lastconxresult = WL_IDLE_STATUS; #ifdef ESP32 static uint8_t _lastconxresulttmp; // tmp var for esp32 callback #endif #ifndef WL_STATION_WRONG_PASSWORD - uint8_t WL_STATION_WRONG_PASSWORD = 7; + uint8_t WL_STATION_WRONG_PASSWORD = 7; // @kludge define a WL status for wrong password #endif // option parameters @@ -240,6 +257,7 @@ class WiFiManager boolean _cpClientCheck = false; // keep cp alive if cp have station boolean _webClientCheck = true; // keep cp alive if web have client boolean _scanDispOptions = false; // show percentage in scans not icons + boolean _paramsInWifi = true; // show custom parameters on wifi page const char * _hostname = ""; const char* _customHeadElement = ""; // store custom head element html from user @@ -261,13 +279,14 @@ class WiFiManager void handleNotFound(); void handleExit(); void handleErase(); + void handleParam(); void handleWiFiStatus(); void handleRequest(); boolean captivePortal(); boolean configPortalHasTimeout(); boolean stopConfigPortal(); - uint8_t handleConfigPortal(); + uint8_t processConfigPortal(); void stopCaptivePortal(); // wifi platform abstractions @@ -291,7 +310,7 @@ class WiFiManager String getScanItemOut(); String getStaticOut(); String getHTTPHead(String title); - + String getMenuOut(); //helpers int getRSSIasQuality(int RSSI); boolean isIp(String str); diff --git a/strings_en.h b/strings_en.h index 2d3ea9d..6e7c11b 100644 --- a/strings_en.h +++ b/strings_en.h @@ -22,8 +22,20 @@ const char HTTP_SCRIPT[] PROGMEM = "