From b676daf37ca337d19ab8c0e7936141bc7e0ec052 Mon Sep 17 00:00:00 2001 From: tablatronix <807787+tablatronix@users.noreply.github.com> Date: Mon, 12 Sep 2022 11:23:04 -0500 Subject: [PATCH 1/5] oops #1403 --- WiFiManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 6a6f86d..0d2f4a1 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -282,7 +282,7 @@ boolean WiFiManager::autoConnect(char const *apName, char const *apPassword) { #ifdef ESP32 setupHostname(true); - if(_hostname){ + if(_hostname != ""){ // disable wifi if already on if(WiFi.getMode() & WIFI_STA){ WiFi.mode(WIFI_OFF); From 2b24b91f8884079612b31bef45c6da3a3b8ae6bf Mon Sep 17 00:00:00 2001 From: tablatronix <807787+tablatronix@users.noreply.github.com> Date: Mon, 12 Sep 2022 12:06:40 -0500 Subject: [PATCH 2/5] fixes #1490 Does not fix wifi not init yet thanks @erriez --- WiFiManager.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 0d2f4a1..dbbc3d4 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -279,6 +279,8 @@ boolean WiFiManager::autoConnect(char const *apName, char const *apPassword) { DEBUG_WM(F("AutoConnect")); #endif + bool wifiIsSaved = getWiFiIsSaved(); + #ifdef ESP32 setupHostname(true); @@ -295,7 +297,7 @@ boolean WiFiManager::autoConnect(char const *apName, char const *apPassword) { } #endif - if(getWiFiIsSaved()){ + if(wifiIsSaved){ _startconn = millis(); _begin(); From 6fb63f834ac9094cb7279207cf364c5931e52204 Mon Sep 17 00:00:00 2001 From: tablatronix <807787+tablatronix@users.noreply.github.com> Date: Mon, 12 Sep 2022 16:05:16 -0500 Subject: [PATCH 3/5] remove wifiissaved check --- WiFiManager.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index dbbc3d4..0853000 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -297,7 +297,9 @@ boolean WiFiManager::autoConnect(char const *apName, char const *apPassword) { } #endif - if(wifiIsSaved){ + // check if wifi is saved, (has autoconnect) to speed up cp start + // NOT wifi init safe + // if(wifiIsSaved){ _startconn = millis(); _begin(); @@ -364,12 +366,12 @@ boolean WiFiManager::autoConnect(char const *apName, char const *apPassword) { #ifdef WM_DEBUG_LEVEL DEBUG_WM(F("AutoConnect: FAILED")); #endif - } - else { - #ifdef WM_DEBUG_LEVEL - DEBUG_WM(F("No Credentials are Saved, skipping connect")); - #endif - } + // } + // else { + // #ifdef WM_DEBUG_LEVEL + // DEBUG_WM(F("No Credentials are Saved, skipping connect")); + // #endif + // } // possibly skip the config portal if (!_enableConfigPortal) { From 1b5d71bac79482fb72be832b8e2df0448e6d14d6 Mon Sep 17 00:00:00 2001 From: tablatronix <807787+tablatronix@users.noreply.github.com> Date: Mon, 12 Sep 2022 16:06:23 -0500 Subject: [PATCH 4/5] workaround for #1482 --- WiFiManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 0853000..2a71921 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -717,6 +717,7 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo // HANDLE issues with STA connections, shutdown sta if not connected, or else this will hang channel scanning and softap will not respond if(_disableSTA || (!WiFi.isConnected() && _disableSTAConn)){ // this fixes most ap problems, however, simply doing mode(WIFI_AP) does not work if sta connection is hanging, must `wifi_station_disconnect` + WiFi.mode(WIFI_AP_STA); WiFi_Disconnect(); WiFi_enableSTA(false); #ifdef WM_DEBUG_LEVEL @@ -724,7 +725,7 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo #endif } else { - WiFi_enableSTA(true); + // WiFi_enableSTA(true); } // init configportal globals to known states From c34770ec32e823e58fe66404e48add7cf9a66a43 Mon Sep 17 00:00:00 2001 From: Thiti Yamsung Date: Thu, 15 Sep 2022 19:07:55 +0700 Subject: [PATCH 5/5] feat(callback): add config portal timeout callback for handle config portal timeout (#1497) --- WiFiManager.cpp | 21 +++++++++++++++++++++ WiFiManager.h | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 2a71921..271c599 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -786,6 +786,12 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo #endif shutdownConfigPortal(); result = abort ? portalAbortResult : portalTimeoutResult; // false, false + if (_configportaltimeoutcallback != NULL) { + #ifdef WM_DEBUG_LEVEL + DEBUG_WM(DEBUG_VERBOSE,F("[CB] config portal timeout callback")); + #endif + _configportaltimeoutcallback(); // @CALLBACK + } break; } @@ -830,6 +836,12 @@ boolean WiFiManager::process(){ #endif webPortalActive = false; shutdownConfigPortal(); + if (_configportaltimeoutcallback != NULL) { + #ifdef WM_DEBUG_LEVEL + DEBUG_WM(DEBUG_VERBOSE,F("[CB] config portal timeout callback")); + #endif + _configportaltimeoutcallback(); // @CALLBACK + } return false; } @@ -2788,6 +2800,15 @@ void WiFiManager::setPreOtaUpdateCallback( std::function func ) { _preotaupdatecallback = func; } +/** + * setConfigPortalTimeoutCallback, set a callback to config portal is timeout + * @access public + * @param {[type]} void (*func)(void) + */ +void WiFiManager::setConfigPortalTimeoutCallback( std::function func ) { + _configportaltimeoutcallback = func; +} + /** * set custom head html * custom element will be added to head, eg. new meta,style,script tag etc. diff --git a/WiFiManager.h b/WiFiManager.h index c1887f7..1911516 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -276,6 +276,9 @@ class WiFiManager //called just before doing OTA update void setPreOtaUpdateCallback( std::function func ); + //called when config portal is timeout + void setConfigPortalTimeoutCallback( std::function func ); + //sets timeout before AP,webserver loop ends and exits even if there has been no setup. //useful for devices that failed to connect at some point and got stuck in a webserver loop //in seconds setConfigPortalTimeout is a new name for setTimeout, ! not used if setConfigPortalBlocking @@ -771,6 +774,7 @@ class WiFiManager std::function _saveparamscallback; std::function _resetcallback; std::function _preotaupdatecallback; + std::function _configportaltimeoutcallback; template auto optionalIPFromString(T *obj, const char *s) -> decltype( obj->fromString(s) ) {