added option to continue setup procedure even if Wifi is Disconnect.

pull/91/head
Scott Hanson 6 years ago
parent 68d854a5d7
commit f27dface8c
No known key found for this signature in database
GPG Key ID: F1722997E3709AB0
  1. 47
      src/AutoConnect.cpp
  2. 4
      src/AutoConnect.h

@ -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;

@ -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 */

Loading…
Cancel
Save