@@ -326,12 +326,18 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
326326 }
327327 DEBUG_WIFI_MULTI (" \n " );
328328
329+ // Create indices for AP connection failures
330+ uint8_t connectSkipIndex[_APlist.size ()];
331+ memset (connectSkipIndex, 0 , sizeof (connectSkipIndex));
332+
329333 // Connect to known WiFi AP's sorted by RSSI
330334 for (int8_t i = 0 ; i < numNetworks; i++) {
331335 // Get network information
332336 WiFi.getNetworkInfo (known[i], ssid, encType, rssi, bssid, channel, hidden);
333337
334- for (auto entry : _APlist) {
338+ for (uint8_t j = 0 ; j < _APlist.size (); j++) {
339+ auto &entry = _APlist[j];
340+
335341 // Check SSID
336342 if (ssid == entry.ssid ) {
337343 DEBUG_WIFI_MULTI (" [WIFIM] Connecting %s\n " , ssid);
@@ -343,13 +349,33 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
343349 if (waitWiFiConnect (connectTimeoutMs) == WL_CONNECTED) {
344350 return WL_CONNECTED;
345351 }
352+
353+ // Failed to connect, skip for hidden SSID connects
354+ connectSkipIndex[j] = true ;
355+ }
356+ }
357+ }
358+
359+ // Try to connect to hidden AP's which are not reported by WiFi scan
360+ for (uint8_t i = 0 ; i < _APlist.size (); i++) {
361+ auto &entry = _APlist[i];
362+
363+ if (!connectSkipIndex[i]) {
364+ DEBUG_WIFI_MULTI (" [WIFIM] Try hidden connect %s\n " , entry.ssid );
365+
366+ // Connect to WiFi
367+ WiFi.begin (entry.ssid , entry.passphrase );
368+
369+ // Wait for status change
370+ if (waitWiFiConnect (connectTimeoutMs) == WL_CONNECTED) {
371+ return WL_CONNECTED;
346372 }
347373 }
348374 }
349375
350376 DEBUG_WIFI_MULTI (" [WIFIM] Could not connect\n " , ssid);
351377
352- // Coult not connect to any WiFi network
378+ // Could not connect to any WiFi network
353379 return WL_CONNECT_FAILED;
354380}
355381
0 commit comments