@@ -47,108 +47,110 @@ uint8_t WiFiMulti::run(uint32_t connectTimeout)
4747
4848 int8_t scanResult;
4949 uint8_t status = WiFi.status ();
50- if (status != WL_CONNECTED || status == WL_NO_SSID_AVAIL || status == WL_IDLE_STATUS || status == WL_CONNECT_FAILED) {
51-
52- scanResult = WiFi.scanNetworks ();
53- if (scanResult == WIFI_SCAN_RUNNING) {
54- // scan is running
55- return WL_NO_SSID_AVAIL;
56- } else if (scanResult > 0 ) {
57- // scan done analyze
58- WifiAPlist_t bestNetwork { NULL , NULL };
59- int bestNetworkDb = INT_MIN;
60- uint8_t bestBSSID[6 ];
61- int32_t bestChannel = 0 ;
62-
63- log_i (" [WIFI] scan done" );
64-
65- if (scanResult <= 0 ) {
66- log_e (" [WIFI] no networks found" );
67- } else {
68- log_i (" [WIFI] %d networks found" , scanResult);
69- for (int8_t i = 0 ; i < scanResult; ++i) {
70-
71- String ssid_scan;
72- int32_t rssi_scan;
73- uint8_t sec_scan;
74- uint8_t * BSSID_scan;
75- int32_t chan_scan;
76-
77- WiFi.getNetworkInfo (i, ssid_scan, sec_scan, rssi_scan, BSSID_scan, chan_scan);
78-
79- bool known = false ;
80- for (uint32_t x = 0 ; x < APlist.size (); x++) {
81- WifiAPlist_t entry = APlist[x];
82-
83- if (ssid_scan == entry.ssid ) { // SSID match
84- known = true ;
85- if (rssi_scan > bestNetworkDb) { // best network
86- if (sec_scan == WIFI_AUTH_OPEN || entry.passphrase ) { // check for passphrase if not open wlan
87- bestNetworkDb = rssi_scan;
88- bestChannel = chan_scan;
89- memcpy ((void *) &bestNetwork, (void *) &entry, sizeof (bestNetwork));
90- memcpy ((void *) &bestBSSID, (void *) BSSID_scan, sizeof (bestBSSID));
91- }
50+ if (status == WL_CONNECTED) {
51+ return status;
52+ }
53+
54+ scanResult = WiFi.scanNetworks ();
55+ if (scanResult == WIFI_SCAN_RUNNING) {
56+ // scan is running
57+ return WL_NO_SSID_AVAIL;
58+ } else if (scanResult > 0 ) {
59+ // scan done analyze
60+ WifiAPlist_t bestNetwork { NULL , NULL };
61+ int bestNetworkDb = INT_MIN;
62+ uint8_t bestBSSID[6 ];
63+ int32_t bestChannel = 0 ;
64+
65+ log_i (" [WIFI] scan done" );
66+
67+ if (scanResult <= 0 ) {
68+ log_e (" [WIFI] no networks found" );
69+ } else {
70+ log_i (" [WIFI] %d networks found" , scanResult);
71+ for (int8_t i = 0 ; i < scanResult; ++i) {
72+
73+ String ssid_scan;
74+ int32_t rssi_scan;
75+ uint8_t sec_scan;
76+ uint8_t * BSSID_scan;
77+ int32_t chan_scan;
78+
79+ WiFi.getNetworkInfo (i, ssid_scan, sec_scan, rssi_scan, BSSID_scan, chan_scan);
80+
81+ bool known = false ;
82+ for (uint32_t x = 0 ; x < APlist.size (); x++) {
83+ WifiAPlist_t entry = APlist[x];
84+
85+ if (ssid_scan == entry.ssid ) { // SSID match
86+ known = true ;
87+ if (rssi_scan > bestNetworkDb) { // best network
88+ if (sec_scan == WIFI_AUTH_OPEN || entry.passphrase ) { // check for passphrase if not open wlan
89+ bestNetworkDb = rssi_scan;
90+ bestChannel = chan_scan;
91+ memcpy ((void *) &bestNetwork, (void *) &entry, sizeof (bestNetwork));
92+ memcpy ((void *) &bestBSSID, (void *) BSSID_scan, sizeof (bestBSSID));
9293 }
93- break ;
9494 }
95+ break ;
9596 }
97+ }
9698
97- if (known) {
98- log_d (" ---> %d: [%d][%02X:%02X:%02X:%02X:%02X:%02X] %s (%d) %c" , 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 == WIFI_AUTH_OPEN) ? ' ' : ' *' );
99- } else {
100- log_d (" %d: [%d][%02X:%02X:%02X:%02X:%02X:%02X] %s (%d) %c" , 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 == WIFI_AUTH_OPEN) ? ' ' : ' *' );
101- }
99+ if (known) {
100+ log_d (" ---> %d: [%d][%02X:%02X:%02X:%02X:%02X:%02X] %s (%d) %c" , 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 == WIFI_AUTH_OPEN) ? ' ' : ' *' );
101+ } else {
102+ log_d (" %d: [%d][%02X:%02X:%02X:%02X:%02X:%02X] %s (%d) %c" , 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 == WIFI_AUTH_OPEN) ? ' ' : ' *' );
102103 }
103104 }
105+ }
104106
105- // clean up ram
106- WiFi.scanDelete ();
107+ // clean up ram
108+ WiFi.scanDelete ();
107109
108- if (bestNetwork.ssid ) {
109- log_i (" [WIFI] Connecting BSSID: %02X:%02X:%02X:%02X:%02X:%02X SSID: %s Channal: %d (%d)" , bestBSSID[0 ], bestBSSID[1 ], bestBSSID[2 ], bestBSSID[3 ], bestBSSID[4 ], bestBSSID[5 ], bestNetwork.ssid , bestChannel, bestNetworkDb);
110+ if (bestNetwork.ssid ) {
111+ log_i (" [WIFI] Connecting BSSID: %02X:%02X:%02X:%02X:%02X:%02X SSID: %s Channal: %d (%d)" , bestBSSID[0 ], bestBSSID[1 ], bestBSSID[2 ], bestBSSID[3 ], bestBSSID[4 ], bestBSSID[5 ], bestNetwork.ssid , bestChannel, bestNetworkDb);
110112
111- WiFi.begin (bestNetwork.ssid , bestNetwork.passphrase , bestChannel, bestBSSID);
113+ WiFi.begin (bestNetwork.ssid , bestNetwork.passphrase , bestChannel, bestBSSID);
114+ status = WiFi.status ();
115+
116+ auto startTime = millis ();
117+ // wait for connection, fail, or timeout
118+ while (status != WL_CONNECTED && status != WL_NO_SSID_AVAIL && status != WL_CONNECT_FAILED && (millis () - startTime) <= connectTimeout) {
119+ delay (10 );
112120 status = WiFi.status ();
113-
114- auto startTime = millis ();
115- // wait for connection, fail, or timeout
116- while (status != WL_CONNECTED && status != WL_NO_SSID_AVAIL && status != WL_CONNECT_FAILED && (millis () - startTime) <= connectTimeout) {
117- delay (10 );
118- status = WiFi.status ();
119- }
121+ }
120122
121- switch (status) {
122- case 3 :
123- log_i (" [WIFI] Connecting done." );
124- log_d (" [WIFI] SSID: %s" , WiFi.SSID ().c_str ());
125- log_d (" [WIFI] IP: %s" , WiFi.localIP ().toString ().c_str ());
126- log_d (" [WIFI] MAC: %s" , WiFi.BSSIDstr ().c_str ());
127- log_d (" [WIFI] Channel: %d" , WiFi.channel ());
128- break ;
129- case 1 :
130- log_e (" [WIFI] Connecting Failed AP not found." );
131- break ;
132- case 4 :
133- log_e (" [WIFI] Connecting Failed." );
134- break ;
135- default :
136- log_e (" [WIFI] Connecting Failed (%d)." , status);
137- break ;
138- }
139- } else {
140- log_e (" [WIFI] no matching wifi found!" );
123+ switch (status) {
124+ case 3 :
125+ log_i (" [WIFI] Connecting done." );
126+ log_d (" [WIFI] SSID: %s" , WiFi.SSID ().c_str ());
127+ log_d (" [WIFI] IP: %s" , WiFi.localIP ().toString ().c_str ());
128+ log_d (" [WIFI] MAC: %s" , WiFi.BSSIDstr ().c_str ());
129+ log_d (" [WIFI] Channel: %d" , WiFi.channel ());
130+ break ;
131+ case 1 :
132+ log_e (" [WIFI] Connecting Failed AP not found." );
133+ break ;
134+ case 4 :
135+ log_e (" [WIFI] Connecting Failed." );
136+ break ;
137+ default :
138+ log_e (" [WIFI] Connecting Failed (%d)." , status);
139+ break ;
141140 }
142141 } else {
143- // start scan
144- log_d (" [WIFI] delete old wifi config..." );
145- WiFi.disconnect ();
146-
147- log_d (" [WIFI] start scan" );
148- // scan wifi async mode
149- WiFi.scanNetworks (true );
142+ log_e (" [WIFI] no matching wifi found!" );
150143 }
144+ } else {
145+ // start scan
146+ log_d (" [WIFI] delete old wifi config..." );
147+ WiFi.disconnect ();
148+
149+ log_d (" [WIFI] start scan" );
150+ // scan wifi async mode
151+ WiFi.scanNetworks (true );
151152 }
153+
152154 return status;
153155}
154156
0 commit comments