From 0ddb83507256d4fd923db422f32820baa5979eec Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 8 Feb 2017 08:18:59 -0600 Subject: [PATCH 1/2] feature #308 only timeout when ap has no client, do not timeout configportal when user is connected. --- WiFiManager.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 06e7481..8f82f93 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -178,7 +178,14 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo connect = false; setupConfigPortal(); - while (_configPortalTimeout == 0 || millis() < _configPortalStart + _configPortalTimeout) { + while(1){ + + // do timeout if configPortalTimeout set and ap does not have client + if(_configPortalTimeout!= 0 + && millis() > _configPortalStart + _configPortalTimeout + && wifi_softap_get_station_num() == 0 + ) break; + //DNS dnsServer->processNextRequest(); //HTTP From c810633ee30014f702c994b8fa60947222827d9a Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 8 Feb 2017 10:34:41 -0600 Subject: [PATCH 2/2] reset configportal timeouts after ap disconnect configportaltimeout now starts at configportalstart if no sta clients, or after last client disconnects. Will never timeout if ap has sta client! handle edge case in user code. --- WiFiManager.cpp | 15 ++++++++++----- WiFiManager.h | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 8f82f93..4fba355 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -157,6 +157,14 @@ boolean WiFiManager::autoConnect(char const *apName, char const *apPassword) { return startConfigPortal(apName, apPassword); } +boolean WiFiManager::configPortalHasTimeout(){ + if(_configPortalTimeout == 0 || wifi_softap_get_station_num() > 0){ + _configPortalStart = millis(); // kludge, bump configportal start time to skew timeouts + return false; + } + return (millis() > _configPortalStart + _configPortalTimeout); +} + boolean WiFiManager::startConfigPortal() { String ssid = "ESP" + String(ESP.getChipId()); return startConfigPortal(ssid.c_str(), NULL); @@ -180,11 +188,8 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo while(1){ - // do timeout if configPortalTimeout set and ap does not have client - if(_configPortalTimeout!= 0 - && millis() > _configPortalStart + _configPortalTimeout - && wifi_softap_get_station_num() == 0 - ) break; + // check if timeout + if(configPortalHasTimeout()) break; //DNS dnsServer->processNextRequest(); diff --git a/WiFiManager.h b/WiFiManager.h index bd67c05..d86b904 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -160,6 +160,7 @@ class WiFiManager void handleNotFound(); void handle204(); boolean captivePortal(); + boolean configPortalHasTimeout(); // DNS server const byte DNS_PORT = 53;