1
1
#include " WiFi.h"
2
2
3
+ #define SSID_MAX_LENGTH 32
4
+
3
5
bool arduino::WiFiClass::isVisible (const char * ssid) {
4
6
for (int i=0 ; i<10 ; i++) {
5
- if (strncmp (ap_list[i].get_ssid (), ssid, 32 ) == 0 ) {
7
+ if (strncmp (ap_list[i].get_ssid (), ssid, SSID_MAX_LENGTH ) == 0 ) {
6
8
connected_ap = i;
7
9
return true ;
8
10
}
@@ -21,34 +23,22 @@ SocketAddress arduino::WiFiClass::socketAddressFromIpAddress(arduino::IPAddress
21
23
}
22
24
23
25
int arduino::WiFiClass::begin (const char * ssid, const char *passphrase) {
24
- if (_ssid) free (_ssid);
25
-
26
- _ssid = (char *)malloc (33 );
27
- if (!_ssid) {
28
- // tr_error("Could not allocate ssid buffer");
29
- return WL_CONNECT_FAILED;
30
- }
31
-
32
26
if (wifi_if == nullptr ) {
33
27
// Q: What is the callback for?
34
28
_initializerCallback ();
35
29
if (wifi_if == nullptr ) return WL_CONNECT_FAILED;
36
- }
37
-
38
- memcpy (_ssid, ssid, 33 );
39
- // too long? break it off
40
- if (strlen (ssid) > 32 ) _ssid[32 ] = 0 ;
30
+ }
41
31
42
32
scanNetworks ();
43
33
// use scan result to populate security field
44
- if (!isVisible (_ssid )) {
34
+ if (!isVisible (ssid )) {
45
35
_currentNetworkStatus = WL_CONNECT_FAILED;
46
36
return _currentNetworkStatus;
47
37
}
48
38
49
- nsapi_error_t ret = wifi_if->connect (_ssid , passphrase, ap_list[connected_ap].get_security ());
50
-
51
- _currentNetworkStatus = ret == NSAPI_ERROR_OK ? WL_CONNECTED : WL_CONNECT_FAILED;
39
+ nsapi_error_t result = wifi_if->connect (ssid , passphrase, ap_list[connected_ap].get_security ());
40
+
41
+ _currentNetworkStatus = (result == NSAPI_ERROR_OK && setSSID (ssid)) ? WL_CONNECTED : WL_CONNECT_FAILED;
52
42
return _currentNetworkStatus;
53
43
}
54
44
@@ -59,16 +49,17 @@ int arduino::WiFiClass::beginAP(const char* ssid, const char *passphrase, uint8_
59
49
#endif
60
50
61
51
if (_softAP == NULL ) {
62
- return WL_CONNECT_FAILED ;
52
+ return WL_AP_FAILED ;
63
53
}
64
54
65
55
ensureDefaultAPNetworkConfiguration ();
66
56
67
57
// Set ap ssid, password and channel
68
58
static_cast <WhdSoftAPInterface*>(_softAP)->set_network (_ip, _netmask, _gateway);
69
- nsapi_error_t ret = static_cast <WhdSoftAPInterface*>(_softAP)->start (ssid, passphrase, NSAPI_SECURITY_WPA2, channel, true /* dhcp server */ , NULL , true /* cohexistance */ );
70
-
71
- return ret == NSAPI_ERROR_OK ? WL_AP_LISTENING : WL_CONNECT_FAILED;
59
+ nsapi_error_t result = static_cast <WhdSoftAPInterface*>(_softAP)->start (ssid, passphrase, NSAPI_SECURITY_WPA2, channel, true /* dhcp server */ , NULL , true /* cohexistance */ );
60
+
61
+ _currentNetworkStatus = (result == NSAPI_ERROR_OK && setSSID (ssid)) ? WL_AP_LISTENING : WL_AP_FAILED;
62
+ return _currentNetworkStatus;
72
63
}
73
64
74
65
void arduino::WiFiClass::ensureDefaultAPNetworkConfiguration () {
@@ -136,6 +127,21 @@ char* arduino::WiFiClass::SSID() {
136
127
return _ssid;
137
128
}
138
129
130
+ int arduino::WiFiClass::setSSID (const char * ssid){
131
+ if (_ssid) free (_ssid);
132
+
133
+ _ssid = (char *)malloc (SSID_MAX_LENGTH + 1 );
134
+ if (!_ssid) {
135
+ // tr_error("Could not allocate ssid buffer");
136
+ return 0 ;
137
+ }
138
+
139
+ memcpy (_ssid, ssid, SSID_MAX_LENGTH + 1 );
140
+ // too long? break it off
141
+ if (strlen (ssid) > SSID_MAX_LENGTH) _ssid[SSID_MAX_LENGTH] = 0 ;
142
+ return 1 ;
143
+ }
144
+
139
145
static const char *sec2str (nsapi_security_t sec)
140
146
{
141
147
switch (sec) {
0 commit comments