@@ -47,108 +47,110 @@ uint8_t WiFiMulti::run(uint32_t connectTimeout)
47
47
48
48
int8_t scanResult;
49
49
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));
92
93
}
93
- break ;
94
94
}
95
+ break ;
95
96
}
97
+ }
96
98
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) ? ' ' : ' *' );
102
103
}
103
104
}
105
+ }
104
106
105
- // clean up ram
106
- WiFi.scanDelete ();
107
+ // clean up ram
108
+ WiFi.scanDelete ();
107
109
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);
110
112
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 );
112
120
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
+ }
120
122
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 ;
141
140
}
142
141
} 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!" );
150
143
}
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 );
151
152
}
153
+
152
154
return status;
153
155
}
154
156
0 commit comments