1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-21 10:26:06 +03:00

Add support for hidden AP's

This commit is contained in:
Erriez 2020-10-03 15:46:59 +02:00
parent 85ba53a249
commit 0d94b5f560
2 changed files with 29 additions and 2 deletions

View File

@ -7,6 +7,7 @@
- Registering multiple networks (at least 1)
- Connect to WiFi with strongest signal (RSSI)
- Fall back to connect to next WiFi when a connection failed or lost
- Fall back to connect to hidden SSID's which are not reported by WiFi scan
To enable debugging output, select in the Arduino iDE:
- Tools | Debug Port: Serial

View File

@ -323,12 +323,18 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
}
DEBUG_WIFI_MULTI("\n");
// Create indices for AP connection failures
uint8_t connectSkipIndex[_APlist.size()];
memset(connectSkipIndex, 0, sizeof(connectSkipIndex));
// Connect to known WiFi AP's sorted by RSSI
for (int8_t i = 0; i < numNetworks; i++) {
// Get network information
WiFi.getNetworkInfo(known[i], ssid, encType, rssi, bssid, channel, hidden);
for (auto entry : _APlist) {
for (uint8_t j = 0; j < _APlist.size(); j++) {
auto &entry = _APlist[j];
// Check SSID
if (ssid == entry.ssid) {
DEBUG_WIFI_MULTI("[WIFIM] Connecting %s\n", ssid);
@ -340,13 +346,33 @@ wl_status_t ESP8266WiFiMulti::connectWiFiMulti(uint32_t connectTimeoutMs)
if (waitWiFiConnect(connectTimeoutMs) == WL_CONNECTED) {
return WL_CONNECTED;
}
// Failed to connect, skip for hidden SSID connects
connectSkipIndex[j] = true;
}
}
}
// Try to connect to hidden AP's which are not reported by WiFi scan
for (uint8_t i = 0; i < _APlist.size(); i++) {
auto &entry = _APlist[i];
if (!connectSkipIndex[i]) {
DEBUG_WIFI_MULTI("[WIFIM] Try hidden connect %s\n", entry.ssid);
// Connect to WiFi
WiFi.begin(entry.ssid, entry.passphrase);
// Wait for status change
if (waitWiFiConnect(connectTimeoutMs) == WL_CONNECTED) {
return WL_CONNECTED;
}
}
}
DEBUG_WIFI_MULTI("[WIFIM] Could not connect\n", ssid);
// Coult not connect to any WiFi network
// Could not connect to any WiFi network
return WL_CONNECT_FAILED;
}