|  | @ -25,8 +25,6 @@ void ahoywifi::setup(settings_t *config, uint32_t *utcTimestamp, appWifiCb cb) { | 
			
		
	
		
		
			
				
					|  |  |     mStaConn    = DISCONNECTED; |  |  |     mStaConn    = DISCONNECTED; | 
			
		
	
		
		
			
				
					|  |  |     mCnt        = 0; |  |  |     mCnt        = 0; | 
			
		
	
		
		
			
				
					|  |  |     mScanActive = false; |  |  |     mScanActive = false; | 
			
		
	
		
		
			
				
					|  |  |     mLastApClients = 0; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     mScanCnt = 0; |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     #if defined(ESP8266) |  |  |     #if defined(ESP8266) | 
			
		
	
		
		
			
				
					|  |  |     wifiConnectHandler = WiFi.onStationModeConnected(std::bind(&ahoywifi::onConnect, this, std::placeholders::_1)); |  |  |     wifiConnectHandler = WiFi.onStationModeConnected(std::bind(&ahoywifi::onConnect, this, std::placeholders::_1)); | 
			
		
	
	
		
		
			
				
					|  | @ -66,44 +64,31 @@ void ahoywifi::tickWifiLoop() { | 
			
		
	
		
		
			
				
					|  |  |     #if !defined(AP_ONLY) |  |  |     #if !defined(AP_ONLY) | 
			
		
	
		
		
			
				
					|  |  |     if(mStaConn != GOT_IP) { |  |  |     if(mStaConn != GOT_IP) { | 
			
		
	
		
		
			
				
					|  |  |         if (WiFi.softAPgetStationNum() > 0) { // do not reconnect if any AP connection exists
 |  |  |         if (WiFi.softAPgetStationNum() > 0) { // do not reconnect if any AP connection exists
 | 
			
		
	
		
		
			
				
					
					|  |  |             if(WIFI_AP_STA == WiFi.getMode()) { |  |  |             if(mStaConn != IN_AP_MODE) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                  // first time switch to AP Mode
 |  |  |                 mStaConn = IN_AP_MODE; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 if(mScanActive && (mLastApClients != WiFi.softAPgetStationNum())) |  |  |                 // first time switch to AP Mode
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                     mScanActive = false; |  |  |                 if (mScanActive) { | 
			
				
				
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 // scan is finished
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 if(!mScanActive) { |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                     WiFi.mode(WIFI_AP); |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                     mDns.start(53, "*", mApIp); |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 } |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 // only once a client connects to AP
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 if(mLastApClients != WiFi.softAPgetStationNum()) { |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                     mLastApClients = WiFi.softAPgetStationNum(); |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |                     WiFi.scanDelete(); |  |  |                     WiFi.scanDelete(); | 
			
		
	
		
		
			
				
					
					|  |  |                     mAppWifiCb(false); |  |  |                     mScanActive = false; | 
			
				
				
			
		
	
		
		
			
				
					|  |  |                     DBGPRINTLN(F("AP client connected")); |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                     welcome(mApIp.toString()); |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					|  |  |                 } |  |  |                 } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 DBGPRINTLN(F("AP client connected")); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 welcome(mApIp.toString()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 WiFi.mode(WIFI_AP); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 mDns.start(53, "*", mApIp); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 mAppWifiCb(true); | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |             mDns.processNextRequest(); |  |  |             mDns.processNextRequest(); | 
			
		
	
		
		
			
				
					|  |  |             return; |  |  |             return; | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |         else if(WIFI_AP == WiFi.getMode()) { |  |  |         else if(mStaConn == IN_AP_MODE) { | 
			
				
				
			
		
	
		
		
			
				
					|  |  |             mLastApClients = 0; |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					|  |  |             mCnt = 0; |  |  |             mCnt = 0; | 
			
		
	
		
		
			
				
					|  |  |             DPRINTLN(DBG_INFO, "DNS stop"); |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             mDns.stop(); |  |  |             mDns.stop(); | 
			
		
	
		
		
			
				
					|  |  |             WiFi.mode(WIFI_AP_STA); |  |  |             WiFi.mode(WIFI_AP_STA); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             mStaConn = DISCONNECTED; | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					|  |  |         mCnt++; |  |  |         mCnt++; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |         uint8_t timeout = 10; // seconds
 |  |  |         if(!mScanActive && mBSSIDList.empty()) { // start scanning APs with the given SSID
 | 
			
				
				
			
		
	
		
		
			
				
					|  |  |         if (mStaConn == CONNECTED) // connected but no ip
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             timeout = 20; |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |         if(!mScanActive && mBSSIDList.empty() && ((mCnt % timeout) == 0)) { // start scanning APs with the given SSID
 |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					|  |  |             DBGPRINT(F("scanning APs with SSID ")); |  |  |             DBGPRINT(F("scanning APs with SSID ")); | 
			
		
	
		
		
			
				
					|  |  |             DBGPRINTLN(String(mConfig->sys.stationSsid)); |  |  |             DBGPRINTLN(String(mConfig->sys.stationSsid)); | 
			
		
	
		
		
			
				
					|  |  |             mScanCnt = 0; |  |  |             mScanCnt = 0; | 
			
		
	
	
		
		
			
				
					|  | @ -115,14 +100,20 @@ void ahoywifi::tickWifiLoop() { | 
			
		
	
		
		
			
				
					|  |  |             #endif |  |  |             #endif | 
			
		
	
		
		
			
				
					|  |  |             return; |  |  |             return; | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         uint8_t timeout = 10; // seconds
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         if (mStaConn == CONNECTED) // connected but no ip
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             timeout = 20; | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         DBGPRINT(F("reconnect in ")); |  |  |         DBGPRINT(F("reconnect in ")); | 
			
		
	
		
		
			
				
					|  |  |         DBGPRINT(String(timeout-mCnt)); |  |  |         DBGPRINT(String(timeout-mCnt)); | 
			
		
	
		
		
			
				
					|  |  |         DBGPRINTLN(F(" seconds")); |  |  |         DBGPRINTLN(F(" seconds")); | 
			
		
	
		
		
			
				
					|  |  |         if(mScanActive) { |  |  |         if(mScanActive) { | 
			
		
	
		
		
			
				
					|  |  |             getBSSIDs(); |  |  |             getBSSIDs(); | 
			
		
	
		
		
			
				
					
					|  |  |             //if(!mScanActive)        // scan completed
 |  |  |             if(!mScanActive)        // scan completed
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             //    if ((mCnt % timeout) < 8)
 |  |  |                 if ((mCnt % timeout) < timeout - 2) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             //        mCnt = timeout - 2;
 |  |  |                     mCnt = timeout - 2; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					|  |  |         if((mCnt % timeout) == 0) { // try to reconnect after x sec without connection
 |  |  |         if((mCnt % timeout) == 0) { // try to reconnect after x sec without connection
 | 
			
		
	
		
		
			
				
					|  |  |             if(mStaConn != CONNECTED) |  |  |             if(mStaConn != CONNECTED) | 
			
		
	
	
		
		
			
				
					|  | @ -166,8 +157,6 @@ void ahoywifi::setupAp(void) { | 
			
		
	
		
		
			
				
					|  |  |     WiFi.mode(WIFI_AP_STA); |  |  |     WiFi.mode(WIFI_AP_STA); | 
			
		
	
		
		
			
				
					|  |  |     WiFi.softAPConfig(mApIp, mApIp, IPAddress(255, 255, 255, 0)); |  |  |     WiFi.softAPConfig(mApIp, mApIp, IPAddress(255, 255, 255, 0)); | 
			
		
	
		
		
			
				
					|  |  |     WiFi.softAP(WIFI_AP_SSID, WIFI_AP_PWD); |  |  |     WiFi.softAP(WIFI_AP_SSID, WIFI_AP_PWD); | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     mDns.start(53, "*", mApIp); |  |  |  | 
			
		
	
		
		
			
				
					|  |  | } |  |  | } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  | @ -266,10 +255,10 @@ void ahoywifi::sortRSSI(int *sort, int n) { | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | //-----------------------------------------------------------------------------
 |  |  | //-----------------------------------------------------------------------------
 | 
			
		
	
		
		
			
				
					|  |  | void ahoywifi::scanAvailNetworks(void) { |  |  | void ahoywifi::scanAvailNetworks(void) { | 
			
		
	
		
		
			
				
					
					|  |  |     if(-2 == WiFi.scanComplete()) { |  |  |     if(!mScanActive) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |         mScanActive = true; |  |  |         mScanActive = true; | 
			
		
	
		
		
			
				
					|  |  |         if(WIFI_AP == WiFi.getMode()) |  |  |         if(WIFI_AP == WiFi.getMode()) | 
			
		
	
		
		
			
				
					
					|  |  |             WiFi.mode(WIFI_AP_STA); |  |  |           WiFi.mode(WIFI_AP_STA); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |         WiFi.scanNetworks(true); |  |  |         WiFi.scanNetworks(true); | 
			
		
	
		
		
			
				
					|  |  |     } |  |  |     } | 
			
		
	
		
		
			
				
					|  |  | } |  |  | } | 
			
		
	
	
		
		
			
				
					|  | @ -291,12 +280,14 @@ void ahoywifi::getAvailNetworks(JsonObject obj) { | 
			
		
	
		
		
			
				
					|  |  |     } |  |  |     } | 
			
		
	
		
		
			
				
					|  |  |     mScanActive = false; |  |  |     mScanActive = false; | 
			
		
	
		
		
			
				
					|  |  |     WiFi.scanDelete(); |  |  |     WiFi.scanDelete(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     if(mStaConn == IN_AP_MODE) | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         WiFi.mode(WIFI_AP); | 
			
		
	
		
		
			
				
					|  |  | } |  |  | } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | //-----------------------------------------------------------------------------
 |  |  | //-----------------------------------------------------------------------------
 | 
			
		
	
		
		
			
				
					|  |  | void ahoywifi::getBSSIDs() { |  |  | void ahoywifi::getBSSIDs() { | 
			
		
	
		
		
			
				
					|  |  |     int n = WiFi.scanComplete(); |  |  |     int n = WiFi.scanComplete(); | 
			
		
	
		
		
			
				
					
					|  |  |     if (n < 0){ |  |  |     if (n < 0) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |         mScanCnt++; |  |  |         mScanCnt++; | 
			
		
	
		
		
			
				
					|  |  |         if (mScanCnt < 20) |  |  |         if (mScanCnt < 20) | 
			
		
	
		
		
			
				
					|  |  |             return; |  |  |             return; | 
			
		
	
	
		
		
			
				
					|  | @ -336,7 +327,6 @@ void ahoywifi::connectionEvent(WiFiStatus_t status) { | 
			
		
	
		
		
			
				
					|  |  |                  mScanActive = false; |  |  |                  mScanActive = false; | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |             welcome(WiFi.localIP().toString() + F(" (Station)")); |  |  |             welcome(WiFi.localIP().toString() + F(" (Station)")); | 
			
		
	
		
		
			
				
					|  |  |             mDns.stop(); |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             WiFi.mode(WIFI_STA); |  |  |             WiFi.mode(WIFI_STA); | 
			
		
	
		
		
			
				
					|  |  |             DBGPRINTLN(F("[WiFi] AP disabled")); |  |  |             DBGPRINTLN(F("[WiFi] AP disabled")); | 
			
		
	
		
		
			
				
					|  |  |             mAppWifiCb(true); |  |  |             mAppWifiCb(true); | 
			
		
	
	
		
		
			
				
					|  | 
 |