Skip to content

Commit 2f09ea7

Browse files
authored
refactor of WiFiMulti::run to reduce complexity and remove dead code (#3847)
1 parent cb0a30c commit 2f09ea7

File tree

1 file changed

+66
-50
lines changed

1 file changed

+66
-50
lines changed

libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp

+66-50
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,33 @@ bool ESP8266WiFiMulti::addAP(const char* ssid, const char *passphrase) {
4040

4141
wl_status_t ESP8266WiFiMulti::run(void) {
4242

43-
int8_t scanResult;
4443
wl_status_t status = WiFi.status();
4544
if(status == WL_DISCONNECTED || status == WL_NO_SSID_AVAIL || status == WL_IDLE_STATUS || status == WL_CONNECT_FAILED) {
4645

47-
scanResult = WiFi.scanComplete();
46+
int8_t scanResult = WiFi.scanComplete();
47+
4848
if(scanResult == WIFI_SCAN_RUNNING) {
49-
// scan is running
50-
return WL_NO_SSID_AVAIL;
51-
} else if(scanResult > 0) {
52-
// scan done analyze
49+
// scan is running, do nothing yet
50+
status = WL_NO_SSID_AVAIL;
51+
return status;
52+
}
53+
54+
if(scanResult == 0) {
55+
// scan done, no ssids found. Start another scan.
56+
DEBUG_WIFI_MULTI("[WIFI] scan done\n");
57+
DEBUG_WIFI_MULTI("[WIFI] no networks found\n");
58+
WiFi.scanDelete();
59+
DEBUG_WIFI_MULTI("\n\n");
60+
delay(0);
61+
WiFi.disconnect();
62+
DEBUG_WIFI_MULTI("[WIFI] start scan\n");
63+
// scan wifi async mode
64+
WiFi.scanNetworks(true);
65+
return status;
66+
}
67+
68+
if(scanResult > 0) {
69+
// scan done, analyze
5370
WifiAPlist_t bestNetwork { NULL, NULL };
5471
int bestNetworkDb = INT_MIN;
5572
uint8 bestBSSID[6];
@@ -58,48 +75,44 @@ wl_status_t ESP8266WiFiMulti::run(void) {
5875
DEBUG_WIFI_MULTI("[WIFI] scan done\n");
5976
delay(0);
6077

61-
if(scanResult <= 0) {
62-
DEBUG_WIFI_MULTI("[WIFI] no networks found\n");
63-
} else {
64-
DEBUG_WIFI_MULTI("[WIFI] %d networks found\n", scanResult);
65-
for(int8_t i = 0; i < scanResult; ++i) {
66-
67-
String ssid_scan;
68-
int32_t rssi_scan;
69-
uint8_t sec_scan;
70-
uint8_t* BSSID_scan;
71-
int32_t chan_scan;
72-
bool hidden_scan;
73-
74-
WiFi.getNetworkInfo(i, ssid_scan, sec_scan, rssi_scan, BSSID_scan, chan_scan, hidden_scan);
75-
76-
bool known = false;
77-
for(uint32_t x = 0; x < APlist.size(); x++) {
78-
WifiAPlist_t entry = APlist[x];
79-
80-
if(ssid_scan == entry.ssid) { // SSID match
81-
known = true;
82-
if(rssi_scan > bestNetworkDb) { // best network
83-
if(sec_scan == ENC_TYPE_NONE || entry.passphrase) { // check for passphrase if not open wlan
84-
bestNetworkDb = rssi_scan;
85-
bestChannel = chan_scan;
86-
memcpy((void*) &bestNetwork, (void*) &entry, sizeof(bestNetwork));
87-
memcpy((void*) &bestBSSID, (void*) BSSID_scan, sizeof(bestBSSID));
88-
}
78+
DEBUG_WIFI_MULTI("[WIFI] %d networks found\n", scanResult);
79+
for(int8_t i = 0; i < scanResult; ++i) {
80+
81+
String ssid_scan;
82+
int32_t rssi_scan;
83+
uint8_t sec_scan;
84+
uint8_t* BSSID_scan;
85+
int32_t chan_scan;
86+
bool hidden_scan;
87+
88+
WiFi.getNetworkInfo(i, ssid_scan, sec_scan, rssi_scan, BSSID_scan, chan_scan, hidden_scan);
89+
90+
bool known = false;
91+
for(uint32_t x = 0; x < APlist.size(); x++) {
92+
WifiAPlist_t entry = APlist[x];
93+
94+
if(ssid_scan == entry.ssid) { // SSID match
95+
known = true;
96+
if(rssi_scan > bestNetworkDb) { // best network
97+
if(sec_scan == ENC_TYPE_NONE || entry.passphrase) { // check for passphrase if not open wlan
98+
bestNetworkDb = rssi_scan;
99+
bestChannel = chan_scan;
100+
memcpy((void*) &bestNetwork, (void*) &entry, sizeof(bestNetwork));
101+
memcpy((void*) &bestBSSID, (void*) BSSID_scan, sizeof(bestBSSID));
89102
}
90-
break;
91103
}
104+
break;
92105
}
106+
}
93107

94-
if(known) {
95-
DEBUG_WIFI_MULTI(" ---> ");
96-
} else {
97-
DEBUG_WIFI_MULTI(" ");
98-
}
99-
100-
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) ? ' ' : '*');
101-
delay(0);
108+
if(known) {
109+
DEBUG_WIFI_MULTI(" ---> ");
110+
} else {
111+
DEBUG_WIFI_MULTI(" ");
102112
}
113+
114+
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) ? ' ' : '*');
115+
delay(0);
103116
}
104117

105118
// clean up ram
@@ -146,15 +159,18 @@ wl_status_t ESP8266WiFiMulti::run(void) {
146159
} else {
147160
DEBUG_WIFI_MULTI("[WIFI] no matching wifi found!\n");
148161
}
149-
} else {
150-
// start scan
151-
DEBUG_WIFI_MULTI("[WIFI] delete old wifi config...\n");
152-
WiFi.disconnect();
153162

154-
DEBUG_WIFI_MULTI("[WIFI] start scan\n");
155-
// scan wifi async mode
156-
WiFi.scanNetworks(true);
163+
return status;
157164
}
165+
166+
167+
// scan failed, or some other condition not handled above. Start another scan.
168+
DEBUG_WIFI_MULTI("[WIFI] delete old wifi config...\n");
169+
WiFi.disconnect();
170+
171+
DEBUG_WIFI_MULTI("[WIFI] start scan\n");
172+
// scan wifi async mode
173+
WiFi.scanNetworks(true);
158174
}
159175
return status;
160176
}

0 commit comments

Comments
 (0)