@@ -326,12 +326,18 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
326
326
}
327
327
DEBUG_WIFI_MULTI (" \n " );
328
328
329
+ // Create indices for AP connection failures
330
+ uint8_t connectSkipIndex[_APlist.size ()];
331
+ memset (connectSkipIndex, 0 , sizeof (connectSkipIndex));
332
+
329
333
// Connect to known WiFi AP's sorted by RSSI
330
334
for (int8_t i = 0 ; i < numNetworks; i++) {
331
335
// Get network information
332
336
WiFi.getNetworkInfo (known[i], ssid, encType, rssi, bssid, channel, hidden);
333
337
334
- for (auto entry : _APlist) {
338
+ for (uint8_t j = 0 ; j < _APlist.size (); j++) {
339
+ auto &entry = _APlist[j];
340
+
335
341
// Check SSID
336
342
if (ssid == entry.ssid ) {
337
343
DEBUG_WIFI_MULTI (" [WIFIM] Connecting %s\n " , ssid);
@@ -343,13 +349,33 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
343
349
if (waitWiFiConnect (connectTimeoutMs) == WL_CONNECTED) {
344
350
return WL_CONNECTED;
345
351
}
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;
346
372
}
347
373
}
348
374
}
349
375
350
376
DEBUG_WIFI_MULTI (" [WIFIM] Could not connect\n " , ssid);
351
377
352
- // Coult not connect to any WiFi network
378
+ // Could not connect to any WiFi network
353
379
return WL_CONNECT_FAILED;
354
380
}
355
381
0 commit comments