@@ -17,6 +17,8 @@ int arduino::WiFiClass::begin(const char* ssid, const char* passphrase) {
17
17
return 0 ;
18
18
}
19
19
20
+ wifi_if->attach (&arduino::WiFiClass::statusCallback);
21
+
20
22
scanNetworks ();
21
23
// use scan result to populate security field
22
24
if (!isVisible (ssid)) {
@@ -26,7 +28,11 @@ int arduino::WiFiClass::begin(const char* ssid, const char* passphrase) {
26
28
27
29
nsapi_error_t result = wifi_if->connect (ssid, passphrase, ap_list[connected_ap].get_security ());
28
30
31
+ if (result == NSAPI_ERROR_IS_CONNECTED) {
32
+ wifi_if->disconnect ();
33
+ }
29
34
_currentNetworkStatus = (result == NSAPI_ERROR_OK && setSSID (ssid)) ? WL_CONNECTED : WL_CONNECT_FAILED;
35
+
30
36
return _currentNetworkStatus;
31
37
}
32
38
@@ -160,9 +166,10 @@ static uint8_t sec2enum(nsapi_security_t sec) {
160
166
161
167
int8_t arduino::WiFiClass::scanNetworks () {
162
168
uint8_t count = 10 ;
163
- if (ap_list = = nullptr ) {
164
- ap_list = new WiFiAccessPoint[count] ;
169
+ if (ap_list ! = nullptr ) {
170
+ free ( ap_list) ;
165
171
}
172
+ ap_list = new WiFiAccessPoint[count];
166
173
return wifi_if->scan (ap_list, count);
167
174
}
168
175
@@ -210,6 +217,15 @@ unsigned long arduino::WiFiClass::getTime() {
210
217
return 0 ;
211
218
}
212
219
220
+ void arduino::WiFiClass::statusCallback (nsapi_event_t status, intptr_t param)
221
+ {
222
+ if (((param == NSAPI_STATUS_DISCONNECTED) ||
223
+ (param == NSAPI_STATUS_CONNECTING)) &&
224
+ (WiFi.status () == WL_CONNECTED)) {
225
+ WiFi._currentNetworkStatus = WL_CONNECTION_LOST;
226
+ }
227
+ }
228
+
213
229
#if defined(COMPONENT_4343W_FS)
214
230
215
231
#define WIFI_FIRMWARE_PATH " /wlan/4343WA1.BIN"
0 commit comments