From b61bc261bf96df08bc8d7eb515f93b7f9b3c0d18 Mon Sep 17 00:00:00 2001 From: tablatronix Date: Tue, 18 Feb 2020 16:14:45 -0600 Subject: [PATCH] disable clean connect, OPTIONAL setter setCleanConnect(bool enable); // default false This was originally intended to improve connection stability, but it is now causing problems , this is now disabled and can be reenabled optionally. Possible race condition diconnecting while auto connecting or async setmode delays --- WiFiManager.cpp | 12 ++++++++++-- WiFiManager.h | 6 ++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index f8f0e6a..9012356 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -725,6 +725,7 @@ uint8_t WiFiManager::connectWifi(String ssid, String pass) { //@todo catch failures in set_config // make sure sta is on before `begin` so it does not call enablesta->mode while persistent is ON ( which would save WM AP state to eeprom !) + if(_cleanConnect) WiFi_Disconnect(); // disconnect before begin, in case anything is hung, this causes a 2 seconds delay for connect // @todo find out what status is when this is needed, can we detect it and handle it, say in between states or idle_status @@ -812,7 +813,7 @@ bool WiFiManager::wifiConnectDefault(){ * @return bool success */ bool WiFiManager::setSTAConfig(){ - DEBUG_WM(F("STA static IP:"),_sta_static_ip); + DEBUG_WM(DEBUG_DEV,F("STA static IP:"),_sta_static_ip); bool ret = true; if (_sta_static_ip) { DEBUG_WM(DEBUG_VERBOSE,F("Custom static IP/GW/Subnet/DNS")); @@ -828,7 +829,7 @@ bool WiFiManager::setSTAConfig(){ if(!ret) DEBUG_WM(DEBUG_ERROR,"[ERROR] wifi config failed"); else DEBUG_WM(F("STA IP set:"),WiFi.localIP()); } else { - DEBUG_WM(DEBUG_VERBOSE,F("setSTAConfig static ip not set")); + DEBUG_WM(DEBUG_VERBOSE,F("setSTAConfig static ip not set, skipping")); } return ret; } @@ -2009,6 +2010,13 @@ void WiFiManager::setConfigPortalTimeout(unsigned long seconds) { void WiFiManager::setConnectTimeout(unsigned long seconds) { _connectTimeout = seconds * 1000; } +/** + * toggle _cleanconnect, always disconnect before connecting + * @param {[type]} bool enable [description] + */ +void WiFiManager::setCleanConnect(bool enable){ + _cleanConnect = enable; +} /** * [setConnectTimeout description diff --git a/WiFiManager.h b/WiFiManager.h index 97f6784..0a73eda 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -261,8 +261,10 @@ class WiFiManager void setWiFiAPChannel(int32_t channel); // set ap hidden void setWiFiAPHidden(bool hidden); // default false - // set custom menu + // clean connect, always disconnect before connecting + void setCleanConnect(bool enable); // default false + // set custom menu // set custom menu items and order void setMenu(std::vector& menu); void setMenu(const char* menu[], uint8_t size); @@ -340,7 +342,7 @@ class WiFiManager unsigned long _lastscan = 0; // ms for timing wifi scans unsigned long _startscan = 0; // ms for timing wifi scans int _cpclosedelay = 2000; // delay before wifisave, prevents captive portal from closing to fast. - bool _cleanConnect = true; // disconnect before connect in connectwifi, increases stability on connects + bool _cleanConnect = false; // disconnect before connect in connectwifi, increases stability on connects bool _disableSTA = false; // disable sta when starting ap, always bool _disableSTAConn = true; // disable sta when starting ap, if sta is not connected ( stability )