@@ -104,29 +104,38 @@ RTWInterface::~RTWInterface()
104
104
*/
105
105
nsapi_error_t RTWInterface::set_credentials (const char *ssid, const char *pass, nsapi_security_t security)
106
106
{
107
- if (!ssid) {
107
+ _security = security;
108
+ // Check if ssid is empty
109
+ if (!ssid) {
108
110
return NSAPI_ERROR_PARAMETER;
109
111
}
110
112
111
- switch (security) {
112
- case NSAPI_SECURITY_WPA:
113
- case NSAPI_SECURITY_WPA2:
114
- case NSAPI_SECURITY_WPA_WPA2:
115
- case NSAPI_SECURITY_WEP:
116
- if ((strlen (pass) < 8 ) || (strlen (pass) > 63 )) { // 802.11 password 8-63 characters
117
- return NSAPI_ERROR_PARAMETER;
118
- }
119
- break ;
120
- case NSAPI_SECURITY_NONE:
121
- break ;
122
- default :
123
- return NSAPI_ERROR_PARAMETER;
124
- }
113
+ // Check if ssid is too long
114
+ int ssid_length = strlen (ssid);
125
115
126
- strncpy (_ssid, ssid, 255 );
127
- strncpy (_pass, pass, 255 );
128
- _security = security;
116
+ if (ssid_length > 0 && ssid_length <= SSID_MAX_LENGTH) {
117
+ memset (_ssid, 0 , sizeof (_ssid));
118
+ strncpy (_ssid, ssid, sizeof (_ssid));
119
+ } else {
120
+ return NSAPI_ERROR_PARAMETER;
121
+ }
129
122
123
+ // Check if it is an open access point
124
+ if (_security != NSAPI_SECURITY_NONE) {
125
+ // Check if passphase is empty
126
+ if (!pass) {
127
+ return NSAPI_ERROR_PARAMETER;
128
+ }
129
+ // Check if passphase too long
130
+ if (strlen (pass) >= PASSPHRASE_MIN_LENGTH && strlen (pass) <= PASSPHRASE_MAX_LENGTH ) {
131
+ memset (_pass, 0 , sizeof (_pass));
132
+ strncpy (_pass, pass, sizeof (_pass));
133
+ } else {
134
+ return NSAPI_ERROR_PARAMETER;
135
+ }
136
+ } else { // It is an open access point
137
+ memset (_pass, 0 , sizeof (_pass));
138
+ }
130
139
return NSAPI_ERROR_OK;
131
140
}
132
141
@@ -135,11 +144,15 @@ nsapi_error_t RTWInterface::connect()
135
144
int ret;
136
145
rtw_security_t sec;
137
146
138
- if (!_ssid || (!_pass && _security != NSAPI_SECURITY_NONE)) {
139
- printf ( " Invalid credentials \r\n " );
140
- return NSAPI_ERROR_PARAMETER ;
147
+ // Check if the ssid is empty
148
+ if ( strlen (_ssid) == 0 ) {
149
+ return NSAPI_ERROR_NO_SSID ;
141
150
}
142
-
151
+ // Check the security is empty and the passphase is valid
152
+ if ((_security != NSAPI_SECURITY_NONE) && (strlen (_pass) < PASSPHRASE_MIN_LENGTH)) {
153
+ return NSAPI_ERROR_PARAMETER;
154
+ }
155
+ // Based on security type set, adapt to Ameba SDK format
143
156
switch (_security) {
144
157
case NSAPI_SECURITY_WPA:
145
158
case NSAPI_SECURITY_WPA2:
@@ -155,22 +168,24 @@ nsapi_error_t RTWInterface::connect()
155
168
default :
156
169
return NSAPI_ERROR_PARAMETER;
157
170
}
158
-
171
+ // Check if channel number is valid
159
172
if (_channel > 0 && _channel < 14 ) {
160
173
uint8_t pscan_config = PSCAN_ENABLE;
161
- wifi_set_pscan_chan (&_channel, &pscan_config, 1 );
174
+ wifi_set_pscan_chan (&_channel, &pscan_config, 1 ); // Indicate which channel will be scanned
162
175
}
163
-
164
- ret = wifi_connect (_ssid, sec, _pass, strlen (_ssid), strlen (_pass), 0 , ( void *) NULL );
176
+ ret = wifi_connect (_ssid, sec, _pass, strlen (_ssid), strlen (_pass), 0 , ( void *) NULL ); // Join a WiFi network
177
+ // Check if the WiFi is connected. Return RTW_SUCCESS for succeful; Return RTW_ERROR for error
165
178
if (ret != RTW_SUCCESS) {
166
- printf (" failed: %d\r\n " , ret);
167
- return NSAPI_ERROR_NO_CONNECTION;
179
+ if (_ssid == " NULL" ){
180
+ return NSAPI_ERROR_PARAMETER;
181
+ }
182
+ else {
183
+ printf (" failed: %d\r\n " , ret);
184
+ return NSAPI_ERROR_NO_CONNECTION;
185
+ }
168
186
}
169
-
170
187
rtw_emac.wlan_emac_link_change (true );
171
-
172
188
ret = EMACInterface::connect ();
173
-
174
189
return ret;
175
190
}
176
191
@@ -200,7 +215,7 @@ nsapi_error_t RTWInterface::scan(WiFiAccessPoint *res, unsigned count)
200
215
nsapi_error_t RTWInterface::set_channel (uint8_t channel)
201
216
{
202
217
_channel = channel;
203
- return NSAPI_ERROR_OK ;
218
+ return NSAPI_ERROR_UNSUPPORTED ;
204
219
}
205
220
206
221
int8_t RTWInterface::get_rssi ()
@@ -215,8 +230,11 @@ int8_t RTWInterface::get_rssi()
215
230
nsapi_error_t RTWInterface::connect (const char *ssid, const char *pass,
216
231
nsapi_security_t security, uint8_t channel)
217
232
{
218
- set_credentials (ssid, pass, security);
219
233
set_channel (channel);
234
+ int err = set_credentials (ssid, pass, security);
235
+ if (err) {
236
+ return err;
237
+ }
220
238
return connect ();
221
239
}
222
240
0 commit comments