@@ -323,12 +323,18 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
323323 }
324324 DEBUG_WIFI_MULTI (" \n " );
325325
326+ // Create indices for AP connection failures
327+ uint8_t connectSkipIndex[_APlist.size ()];
328+ memset (connectSkipIndex, 0 , sizeof (connectSkipIndex));
329+
326330 // Connect to known WiFi AP's sorted by RSSI
327331 for (int8_t i = 0 ; i < numNetworks; i++) {
328332 // Get network information
329333 WiFi.getNetworkInfo (known[i], ssid, encType, rssi, bssid, channel, hidden);
330334
331- for (auto entry : _APlist) {
335+ for (uint8_t j = 0 ; j < _APlist.size (); j++) {
336+ auto &entry = _APlist[j];
337+
332338 // Check SSID
333339 if (ssid == entry.ssid ) {
334340 DEBUG_WIFI_MULTI (" [WIFIM] Connecting %s\n " , ssid);
@@ -340,13 +346,33 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
340346 if (waitWiFiConnect (connectTimeoutMs) == WL_CONNECTED) {
341347 return WL_CONNECTED;
342348 }
349+
350+ // Failed to connect, skip for hidden SSID connects
351+ connectSkipIndex[j] = true ;
352+ }
353+ }
354+ }
355+
356+ // Try to connect to hidden AP's which are not reported by WiFi scan
357+ for (uint8_t i = 0 ; i < _APlist.size (); i++) {
358+ auto &entry = _APlist[i];
359+
360+ if (!connectSkipIndex[i]) {
361+ DEBUG_WIFI_MULTI (" [WIFIM] Try hidden connect %s\n " , entry.ssid );
362+
363+ // Connect to WiFi
364+ WiFi.begin (entry.ssid , entry.passphrase );
365+
366+ // Wait for status change
367+ if (waitWiFiConnect (connectTimeoutMs) == WL_CONNECTED) {
368+ return WL_CONNECTED;
343369 }
344370 }
345371 }
346372
347373 DEBUG_WIFI_MULTI (" [WIFIM] Could not connect\n " , ssid);
348374
349- // Coult not connect to any WiFi network
375+ // Could not connect to any WiFi network
350376 return WL_CONNECT_FAILED;
351377}
352378
0 commit comments