added a new version of wait for connect result

added setConnectTimeout
renamed setTimeout to setConfigPortalTimeout
This commit is contained in:
Alex Tudorache
2016-02-16 11:17:34 +02:00
parent 3f617c7455
commit 9cde9a8170
2 changed files with 48 additions and 13 deletions
+36 -6
View File
@@ -53,7 +53,7 @@ void WiFiManager::setupConfigPortal() {
server.reset(new ESP8266WebServer(80));
DEBUG_WM(F(""));
start = millis();
_configPortalStart = millis();
DEBUG_WM(F("Configuring access point... "));
DEBUG_WM(_apName);
@@ -143,7 +143,7 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo
connect = false;
setupConfigPortal();
while (timeout == 0 || millis() < start + timeout) {
while (_configPortalTimeout == 0 || millis() < _configPortalStart + _configPortalTimeout) {
//DNS
dnsServer->processNextRequest();
//HTTP
@@ -207,18 +207,41 @@ int WiFiManager::connectWifi(String ssid, String pass) {
WiFi.begin();
}
int connRes = WiFi.waitForConnectResult();
int connRes = waitForConnectResult();
DEBUG_WM ("Connection result: ");
DEBUG_WM ( connRes );
//not connected, WPS enabled, no pass - first attempt
if (_tryWPS && connRes != WL_CONNECTED && pass == "") {
startWPS();
//should be connected at the end of WPS
connRes = WiFi.waitForConnectResult();
connRes = waitForConnectResult();
}
return connRes;
}
uint8_t WiFiManager::waitForConnectResult() {
if (_connectTimeout == 0) {
return WiFi.waitForConnectResult();
} else {
DEBUG_WM (F("Waiting for connection result with timed out"));
unsigned long start = millis();
boolean keepConnecting = true;
uint8_t status;
while (keepConnecting) {
status = WiFi.status();
if (millis() > start + _connectTimeout) {
keepConnecting = false;
DEBUG_WM (F("Connection timed out"));
}
if (status == WL_CONNECTED || status == WL_CONNECT_FAILED) {
keepConnecting = false;
}
delay(100);
}
return status;
}
}
void WiFiManager::startWPS() {
DEBUG_WM("START WPS");
WiFi.beginWPSConfig();
@@ -255,9 +278,16 @@ void WiFiManager::resetSettings() {
WiFi.disconnect(true);
//delay(200);
}
void WiFiManager::setTimeout(unsigned long seconds) {
timeout = seconds * 1000;
setConfigPortalTimeout(seconds);
}
void WiFiManager::setConfigPortalTimeout(unsigned long seconds) {
_configPortalTimeout = seconds * 1000;
}
void WiFiManager::setConnectTimeout(unsigned long seconds) {
_connectTimeout = seconds * 1000;
}
void WiFiManager::setDebugOutput(boolean debug) {
+12 -7
View File
@@ -66,9 +66,6 @@ class WiFiManager
//if you want to always start the config portal, without trying to connect first
boolean startConfigPortal(char const *apName, char const *apPassword = NULL);
//String getSSID();
//String getPassword();
// get the AP name of the config portal, so it can be used in the callback
String getConfigPortalSSID();
@@ -76,8 +73,14 @@ class WiFiManager
//sets timeout before webserver loop ends and exits even if there has been no setup.
//usefully for devices that failed to connect at some point and got stuck in a webserver loop
//in seconds
//in seconds setConfigPortalTimeout is a new name for setTimeout
void setConfigPortalTimeout(unsigned long seconds);
void setTimeout(unsigned long seconds);
//sets timeout for which to attempt connecting, usefull if you get a lot of failed connects
void setConnectTimeout(unsigned long seconds);
void setDebugOutput(boolean debug);
//defaults to not showing anything under 8% signal quality if called
void setMinimumSignalQuality(int quality = 8);
@@ -111,8 +114,9 @@ class WiFiManager
const char* _apPassword = NULL;
String _ssid = "";
String _pass = "";
unsigned long timeout = 0;
unsigned long start = 0;
unsigned long _configPortalTimeout = 0;
unsigned long _connectTimeout = 0;
unsigned long _configPortalStart = 0;
IPAddress _ap_static_ip;
IPAddress _ap_static_gw;
@@ -131,6 +135,7 @@ class WiFiManager
int status = WL_IDLE_STATUS;
int connectWifi(String ssid, String pass);
uint8_t waitForConnectResult();
void handleRoot();
void handleWifi(boolean scan);
@@ -140,7 +145,7 @@ class WiFiManager
void handleNotFound();
void handle204();
boolean captivePortal();
// DNS server
const byte DNS_PORT = 53;