From 7820fb72e75a7cf550408191a1ac11c3bc905f4e Mon Sep 17 00:00:00 2001 From: tablatronix Date: Thu, 22 Apr 2021 11:06:12 -0500 Subject: [PATCH] #1243 setSaveConnect() can disable connect when save, does not alter return codes! --- WiFiManager.cpp | 21 ++++++++++++++----- WiFiManager.h | 9 +++++--- .../OnDemandConfigPortal.ino | 3 +++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 89e0651..09055c9 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -782,7 +782,7 @@ uint8_t WiFiManager::processConfigPortal(){ } else{ // attempt sta connection to submitted _ssid, _pass - if (connectWifi(_ssid, _pass) == WL_CONNECTED) { + if (connectWifi(_ssid, _pass, _connectonsave) == WL_CONNECTED) { #ifdef WM_DEBUG_LEVEL DEBUG_WM(F("Connect to new AP [SUCCESS]")); @@ -894,7 +894,7 @@ bool WiFiManager::shutdownConfigPortal(){ // @todo refactor this up into seperate functions // one for connecting to flash , one for new client // clean up, flow is convoluted, and causes bugs -uint8_t WiFiManager::connectWifi(String ssid, String pass) { +uint8_t WiFiManager::connectWifi(String ssid, String pass, bool connect) { #ifdef WM_DEBUG_LEVEL DEBUG_WM(DEBUG_VERBOSE,F("Connecting as wifi client...")); #endif @@ -917,7 +917,7 @@ uint8_t WiFiManager::connectWifi(String ssid, String pass) { } // if ssid argument provided connect to that if (ssid != "") { - wifiConnectNew(ssid,pass); + wifiConnectNew(ssid,pass,connect); if(_saveTimeout > 0){ connRes = waitForConnectResult(_saveTimeout); // use default save timeout for saves to prevent bugs in esp->waitforconnectresult loop } @@ -968,8 +968,9 @@ uint8_t WiFiManager::connectWifi(String ssid, String pass) { * @param String ssid * @param String pass * @return bool success + * @return connect only save if false */ -bool WiFiManager::wifiConnectNew(String ssid, String pass){ +bool WiFiManager::wifiConnectNew(String ssid, String pass,bool connect){ bool ret = false; #ifdef WM_DEBUG_LEVEL DEBUG_WM(F("CONNECTED:"),WiFi.status() == WL_CONNECTED); @@ -978,7 +979,7 @@ bool WiFiManager::wifiConnectNew(String ssid, String pass){ #endif WiFi_enableSTA(true,storeSTAmode); // storeSTAmode will also toggle STA on in default opmode (persistent) if true (default) WiFi.persistent(true); - ret = WiFi.begin(ssid.c_str(), pass.c_str()); + ret = WiFi.begin(ssid.c_str(), pass.c_str(), 0, NULL, connect); WiFi.persistent(false); #ifdef WM_DEBUG_LEVEL if(!ret) DEBUG_WM(DEBUG_ERROR,F("[ERROR] wifi begin failed")); @@ -2477,6 +2478,16 @@ void WiFiManager::setSaveConnectTimeout(unsigned long seconds) { _saveTimeout = seconds * 1000; } +/** + * Set save portal connect on save option, + * if false, will only save credentials not connect + * @access public + * @param {[type]} bool connect [description] + */ +void WiFiManager::setSaveConnect(bool connect) { + _connectonsave = connect; +} + /** * [setDebugOutput description] * @access public diff --git a/WiFiManager.h b/WiFiManager.h index 9b91065..606b8d7 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -236,6 +236,9 @@ class WiFiManager //sets timeout for which to attempt connecting on saves, useful if there are bugs in esp waitforconnectloop void setSaveConnectTimeout(unsigned long seconds); + //sets timeout for which to attempt connecting on saves, useful if there are bugs in esp waitforconnectloop + void setSaveConnect(bool connect = true); + // toggle debug output void setDebugOutput(boolean debug); void setDebugOutput(boolean debug, String prefix); // log line prefix, default "*wm:" @@ -429,7 +432,7 @@ class WiFiManager unsigned long _startscan = 0; // ms for timing wifi scans int _cpclosedelay = 2000; // delay before wifisave, prevents captive portal from closing to fast. bool _cleanConnect = false; // disconnect before connect in connectwifi, increases stability on connects - + bool _connectonsave = true; // connect to wifi when saving creds bool _disableSTA = false; // disable sta when starting ap, always bool _disableSTAConn = true; // disable sta when starting ap, if sta is not connected ( stability ) bool _channelSync = false; // use same wifi sta channel when starting ap @@ -510,10 +513,10 @@ class WiFiManager bool startAP(); void setupDNSD(); - uint8_t connectWifi(String ssid, String pass); + uint8_t connectWifi(String ssid, String pass, bool connect = true); bool setSTAConfig(); bool wifiConnectDefault(); - bool wifiConnectNew(String ssid, String pass); + bool wifiConnectNew(String ssid, String pass,bool connect = true); uint8_t waitForConnectResult(); uint8_t waitForConnectResult(uint32_t timeout); diff --git a/examples/DEV/OnDemandConfigPortal/OnDemandConfigPortal.ino b/examples/DEV/OnDemandConfigPortal/OnDemandConfigPortal.ino index fcbbec8..f0a6f0c 100644 --- a/examples/DEV/OnDemandConfigPortal/OnDemandConfigPortal.ino +++ b/examples/DEV/OnDemandConfigPortal/OnDemandConfigPortal.ino @@ -171,6 +171,9 @@ void setup() { // set wifi connect retries // wm.setConnectRetries(2); + // connect after portal save toggle + // setSaveConnect(false); // do not connect, only save + // show static ip fields // wm.setShowStaticFields(true);