From 47d9082e18dc9a9f7670f1970b5a7ba4aec2c8cd Mon Sep 17 00:00:00 2001 From: Shawn A Date: Sun, 27 Aug 2017 00:11:04 -0500 Subject: [PATCH] testing non blocking portal calling process in loop not fast enough results in corrupt webpages, not sure why. --- WiFiManager.cpp | 12 ++++++++++++ WiFiManager.h | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index ef9a5f2..57c4dc5 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -209,6 +209,7 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo _apPassword = apPassword; if(!validApPassword()) return false; + configPortalActive = true; connect = false; // global // init configportal @@ -216,6 +217,8 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo uint8_t state; bool result = false; + if(!_configPortalIsBlocking) return result; + // blocking loop waiting for config while(1){ @@ -237,6 +240,14 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo return result; } +boolean WiFiManager::process(){ + if(configPortalActive){ + uint8_t state = handleConfigPortal(); + return state == WL_CONNECTED; + } + return false; +} + //using esp enums returns for now, should be fine uint8_t WiFiManager::handleConfigPortal(){ //DNS handler @@ -290,6 +301,7 @@ boolean WiFiManager::stopConfigPortal(){ bool ret = WiFi.softAPdisconnect(false); if(!ret)DEBUG_WM(F("disconnect configportal error")); wifimode(WIFI_STA); // set back to sta, @todo use preservation variable + configPortalActive = false; return ret; } diff --git a/WiFiManager.h b/WiFiManager.h index c2bf7da..c466c9c 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -82,6 +82,7 @@ class WiFiManager //if you want to always start the config portal, without trying to connect first boolean startConfigPortal(); boolean startConfigPortal(char const *apName, char const *apPassword = NULL); + boolean process(); // get the AP name of the config portal, so it can be used in the callback String getConfigPortalSSID(); @@ -148,11 +149,13 @@ class WiFiManager IPAddress _sta_static_gw; IPAddress _sta_static_sn; + // option parameters int _paramsCount = 0; int _minimumQuality = -1; boolean _removeDuplicateAPs = true; boolean _shouldBreakAfterConfig = false; boolean _tryWPS = false; + boolean _configPortalIsBlocking = false; const char* _customHeadElement = ""; @@ -188,6 +191,7 @@ class WiFiManager boolean validApPassword(); boolean connect; + boolean configPortalActive = false; boolean _debug = true; void (*_apcallback)(WiFiManager*) = NULL;