mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-16 11:21:18 +03:00
refactor of WiFiMulti::run to reduce complexity and remove dead code (#3847)
This commit is contained in:
@ -40,16 +40,33 @@ bool ESP8266WiFiMulti::addAP(const char* ssid, const char *passphrase) {
|
|||||||
|
|
||||||
wl_status_t ESP8266WiFiMulti::run(void) {
|
wl_status_t ESP8266WiFiMulti::run(void) {
|
||||||
|
|
||||||
int8_t scanResult;
|
|
||||||
wl_status_t status = WiFi.status();
|
wl_status_t status = WiFi.status();
|
||||||
if(status == WL_DISCONNECTED || status == WL_NO_SSID_AVAIL || status == WL_IDLE_STATUS || status == WL_CONNECT_FAILED) {
|
if(status == WL_DISCONNECTED || status == WL_NO_SSID_AVAIL || status == WL_IDLE_STATUS || status == WL_CONNECT_FAILED) {
|
||||||
|
|
||||||
scanResult = WiFi.scanComplete();
|
int8_t scanResult = WiFi.scanComplete();
|
||||||
|
|
||||||
if(scanResult == WIFI_SCAN_RUNNING) {
|
if(scanResult == WIFI_SCAN_RUNNING) {
|
||||||
// scan is running
|
// scan is running, do nothing yet
|
||||||
return WL_NO_SSID_AVAIL;
|
status = WL_NO_SSID_AVAIL;
|
||||||
} else if(scanResult > 0) {
|
return status;
|
||||||
// scan done analyze
|
}
|
||||||
|
|
||||||
|
if(scanResult == 0) {
|
||||||
|
// scan done, no ssids found. Start another scan.
|
||||||
|
DEBUG_WIFI_MULTI("[WIFI] scan done\n");
|
||||||
|
DEBUG_WIFI_MULTI("[WIFI] no networks found\n");
|
||||||
|
WiFi.scanDelete();
|
||||||
|
DEBUG_WIFI_MULTI("\n\n");
|
||||||
|
delay(0);
|
||||||
|
WiFi.disconnect();
|
||||||
|
DEBUG_WIFI_MULTI("[WIFI] start scan\n");
|
||||||
|
// scan wifi async mode
|
||||||
|
WiFi.scanNetworks(true);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(scanResult > 0) {
|
||||||
|
// scan done, analyze
|
||||||
WifiAPlist_t bestNetwork { NULL, NULL };
|
WifiAPlist_t bestNetwork { NULL, NULL };
|
||||||
int bestNetworkDb = INT_MIN;
|
int bestNetworkDb = INT_MIN;
|
||||||
uint8 bestBSSID[6];
|
uint8 bestBSSID[6];
|
||||||
@ -58,48 +75,44 @@ wl_status_t ESP8266WiFiMulti::run(void) {
|
|||||||
DEBUG_WIFI_MULTI("[WIFI] scan done\n");
|
DEBUG_WIFI_MULTI("[WIFI] scan done\n");
|
||||||
delay(0);
|
delay(0);
|
||||||
|
|
||||||
if(scanResult <= 0) {
|
DEBUG_WIFI_MULTI("[WIFI] %d networks found\n", scanResult);
|
||||||
DEBUG_WIFI_MULTI("[WIFI] no networks found\n");
|
for(int8_t i = 0; i < scanResult; ++i) {
|
||||||
} else {
|
|
||||||
DEBUG_WIFI_MULTI("[WIFI] %d networks found\n", scanResult);
|
|
||||||
for(int8_t i = 0; i < scanResult; ++i) {
|
|
||||||
|
|
||||||
String ssid_scan;
|
String ssid_scan;
|
||||||
int32_t rssi_scan;
|
int32_t rssi_scan;
|
||||||
uint8_t sec_scan;
|
uint8_t sec_scan;
|
||||||
uint8_t* BSSID_scan;
|
uint8_t* BSSID_scan;
|
||||||
int32_t chan_scan;
|
int32_t chan_scan;
|
||||||
bool hidden_scan;
|
bool hidden_scan;
|
||||||
|
|
||||||
WiFi.getNetworkInfo(i, ssid_scan, sec_scan, rssi_scan, BSSID_scan, chan_scan, hidden_scan);
|
WiFi.getNetworkInfo(i, ssid_scan, sec_scan, rssi_scan, BSSID_scan, chan_scan, hidden_scan);
|
||||||
|
|
||||||
bool known = false;
|
bool known = false;
|
||||||
for(uint32_t x = 0; x < APlist.size(); x++) {
|
for(uint32_t x = 0; x < APlist.size(); x++) {
|
||||||
WifiAPlist_t entry = APlist[x];
|
WifiAPlist_t entry = APlist[x];
|
||||||
|
|
||||||
if(ssid_scan == entry.ssid) { // SSID match
|
if(ssid_scan == entry.ssid) { // SSID match
|
||||||
known = true;
|
known = true;
|
||||||
if(rssi_scan > bestNetworkDb) { // best network
|
if(rssi_scan > bestNetworkDb) { // best network
|
||||||
if(sec_scan == ENC_TYPE_NONE || entry.passphrase) { // check for passphrase if not open wlan
|
if(sec_scan == ENC_TYPE_NONE || entry.passphrase) { // check for passphrase if not open wlan
|
||||||
bestNetworkDb = rssi_scan;
|
bestNetworkDb = rssi_scan;
|
||||||
bestChannel = chan_scan;
|
bestChannel = chan_scan;
|
||||||
memcpy((void*) &bestNetwork, (void*) &entry, sizeof(bestNetwork));
|
memcpy((void*) &bestNetwork, (void*) &entry, sizeof(bestNetwork));
|
||||||
memcpy((void*) &bestBSSID, (void*) BSSID_scan, sizeof(bestBSSID));
|
memcpy((void*) &bestBSSID, (void*) BSSID_scan, sizeof(bestBSSID));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(known) {
|
|
||||||
DEBUG_WIFI_MULTI(" ---> ");
|
|
||||||
} else {
|
|
||||||
DEBUG_WIFI_MULTI(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
DEBUG_WIFI_MULTI(" %d: [%d][%02X:%02X:%02X:%02X:%02X:%02X] %s (%d) %c\n", i, chan_scan, BSSID_scan[0], BSSID_scan[1], BSSID_scan[2], BSSID_scan[3], BSSID_scan[4], BSSID_scan[5], ssid_scan.c_str(), rssi_scan, (sec_scan == ENC_TYPE_NONE) ? ' ' : '*');
|
|
||||||
delay(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(known) {
|
||||||
|
DEBUG_WIFI_MULTI(" ---> ");
|
||||||
|
} else {
|
||||||
|
DEBUG_WIFI_MULTI(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
DEBUG_WIFI_MULTI(" %d: [%d][%02X:%02X:%02X:%02X:%02X:%02X] %s (%d) %c\n", i, chan_scan, BSSID_scan[0], BSSID_scan[1], BSSID_scan[2], BSSID_scan[3], BSSID_scan[4], BSSID_scan[5], ssid_scan.c_str(), rssi_scan, (sec_scan == ENC_TYPE_NONE) ? ' ' : '*');
|
||||||
|
delay(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// clean up ram
|
// clean up ram
|
||||||
@ -146,15 +159,18 @@ wl_status_t ESP8266WiFiMulti::run(void) {
|
|||||||
} else {
|
} else {
|
||||||
DEBUG_WIFI_MULTI("[WIFI] no matching wifi found!\n");
|
DEBUG_WIFI_MULTI("[WIFI] no matching wifi found!\n");
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// start scan
|
|
||||||
DEBUG_WIFI_MULTI("[WIFI] delete old wifi config...\n");
|
|
||||||
WiFi.disconnect();
|
|
||||||
|
|
||||||
DEBUG_WIFI_MULTI("[WIFI] start scan\n");
|
return status;
|
||||||
// scan wifi async mode
|
|
||||||
WiFi.scanNetworks(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// scan failed, or some other condition not handled above. Start another scan.
|
||||||
|
DEBUG_WIFI_MULTI("[WIFI] delete old wifi config...\n");
|
||||||
|
WiFi.disconnect();
|
||||||
|
|
||||||
|
DEBUG_WIFI_MULTI("[WIFI] start scan\n");
|
||||||
|
// scan wifi async mode
|
||||||
|
WiFi.scanNetworks(true);
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user