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