diff --git a/src/AutoConnect.cpp b/src/AutoConnect.cpp index ece2454..8d0b235 100644 --- a/src/AutoConnect.cpp +++ b/src/AutoConnect.cpp @@ -165,7 +165,8 @@ bool AutoConnect::begin(const char* ssid, const char* passphrase, unsigned long // Activate the AP mode with configured softAP and start the access point. WiFi.mode(WIFI_AP_STA); - while (WiFi.getMode() != WIFI_AP_STA) { + + while (WiFi.getMode() != WIFI_AP_STA && !_apConfig.contuineOnDisconnect) { delay(1); yield(); } @@ -177,20 +178,26 @@ bool AutoConnect::begin(const char* ssid, const char* passphrase, unsigned long } #endif WiFi.softAP(_apConfig.apid.c_str(), _apConfig.psk.c_str(), _apConfig.channel, _apConfig.hidden); - do { - delay(100); - yield(); - } while (WiFi.softAPIP() == IPAddress(0, 0, 0, 0)); + if(!_apConfig.contuineOnDisconnect) + { + do { + delay(100); + yield(); + } while (WiFi.softAPIP() == IPAddress(0, 0, 0, 0)); + } #if defined(ARDUINO_ARCH_ESP32) if (!(_apConfig.apip == IPAddress(0, 0, 0, 0) || _apConfig.gateway == IPAddress(0, 0, 0, 0) || _apConfig.netmask == IPAddress(0, 0, 0, 0))) { _config(); } #endif - if (_apConfig.apip != IPAddress(0, 0, 0, 0)) { - do { - delay(100); - yield(); - } while (WiFi.softAPIP() != _apConfig.apip); + if(!_apConfig.contuineOnDisconnect) + { + if (_apConfig.apip != IPAddress(0, 0, 0, 0)) { + do { + delay(100); + yield(); + } while (WiFi.softAPIP() != _apConfig.apip); + } } _currentHostIP = WiFi.softAPIP(); AC_DBG("SoftAP %s/%s Ch(%d) IP:%s %s\n", _apConfig.apid.c_str(), _apConfig.psk.c_str(), _apConfig.channel, _currentHostIP.toString().c_str(), _apConfig.hidden ? "hidden" : ""); @@ -210,15 +217,17 @@ bool AutoConnect::begin(const char* ssid, const char* passphrase, unsigned long // Start the captive portal to make a new connection bool hasTimeout = false; _portalAccessPeriod = millis(); - while (WiFi.status() != WL_CONNECTED && !_rfReset) { - handleClient(); - // Force execution of queued processes. - yield(); - // Check timeout - if ((hasTimeout = _hasTimeout(_apConfig.portalTimeout))) { - AC_DBG("CP timeout exceeded:%ld\n", millis() - _portalAccessPeriod); - break; - } + if(!_apConfig.contuineOnDisconnect) + { + while (WiFi.status() != WL_CONNECTED && !_rfReset) { + handleClient(); + // Force execution of queued processes. + yield(); + // Check timeout + if ((hasTimeout = _hasTimeout(_apConfig.portalTimeout))) { + AC_DBG("CP timeout exceeded:%ld\n", millis() - _portalAccessPeriod); + break; + } } cs = WiFi.status() == WL_CONNECTED; diff --git a/src/AutoConnect.h b/src/AutoConnect.h index 78e94c3..67a15ab 100644 --- a/src/AutoConnect.h +++ b/src/AutoConnect.h @@ -68,6 +68,7 @@ class AutoConnectConfig { autoReconnect(false), immediateStart(false), retainPortal(false), + contuineOnDisconnect(false), portalTimeout(AUTOCONNECT_CAPTIVEPORTAL_TIMEOUT), hostName(String("")), homeUri(AUTOCONNECT_HOMEURI), @@ -97,6 +98,7 @@ class AutoConnectConfig { autoReconnect(false), immediateStart(false), retainPortal(false), + contuineOnDisconnect(false), portalTimeout(portalTimeout), hostName(String("")), homeUri(AUTOCONNECT_HOMEURI), @@ -126,6 +128,7 @@ class AutoConnectConfig { autoReconnect = o.autoReconnect; immediateStart = o.immediateStart; retainPortal = o.retainPortal; + contuineOnDisconnect = o.contuineOnDisconnect; portalTimeout = o.portalTimeout; hostName = o.hostName; homeUri = o.homeUri; @@ -154,6 +157,7 @@ class AutoConnectConfig { bool autoReconnect; /**< Automatic reconnect with past SSID */ bool immediateStart; /**< Skips WiFi.begin(), start portal immediately */ bool retainPortal; /**< Even if the captive portal times out, it maintains the portal state. */ + bool contuineOnDisconnect; /**< Dont stop setup method on when WIFI is Disconnected. */ unsigned long portalTimeout; /**< Timeout value for stay in the captive portal */ String hostName; /**< host name */ String homeUri; /**< A URI of user site */