diff --git a/src/AutoConnect.cpp b/src/AutoConnect.cpp index 7bebde1..bf0b6d5 100644 --- a/src/AutoConnect.cpp +++ b/src/AutoConnect.cpp @@ -184,7 +184,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(); } @@ -196,20 +197,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" : ""); @@ -233,15 +240,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 415d569..60b8c6c 100644 --- a/src/AutoConnect.h +++ b/src/AutoConnect.h @@ -74,6 +74,7 @@ class AutoConnectConfig { autoReconnect(false), immediateStart(false), retainPortal(false), + contuineOnDisconnect(false), portalTimeout(AUTOCONNECT_CAPTIVEPORTAL_TIMEOUT), ticker(false), tickerPort(AUTOCONNECT_TICKER_PORT), @@ -106,6 +107,7 @@ class AutoConnectConfig { autoReconnect(false), immediateStart(false), retainPortal(false), + contuineOnDisconnect(false), portalTimeout(portalTimeout), ticker(false), tickerPort(AUTOCONNECT_TICKER_PORT), @@ -138,6 +140,7 @@ class AutoConnectConfig { autoReconnect = o.autoReconnect; immediateStart = o.immediateStart; retainPortal = o.retainPortal; + contuineOnDisconnect = o.contuineOnDisconnect; portalTimeout = o.portalTimeout; ticker = o.ticker; tickerPort = o.tickerPort; @@ -169,6 +172,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 */ bool ticker; /**< Drives LED flicker according to WiFi connection status. */ uint8_t tickerPort; /**< GPIO for flicker */