From c810633ee30014f702c994b8fa60947222827d9a Mon Sep 17 00:00:00 2001 From: Shawn A Date: Wed, 8 Feb 2017 10:34:41 -0600 Subject: [PATCH] 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;