Skip to content

Commit 1c02465

Browse files
authored
Merge pull request #44 from sbhklr/wifi-fixes
Wifi Improvements
2 parents 3d15743 + 361aee7 commit 1c02465

File tree

3 files changed

+35
-25
lines changed

3 files changed

+35
-25
lines changed

libraries/WiFi/src/WiFi.cpp

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
#include "WiFi.h"
22

3+
#define SSID_MAX_LENGTH 32
4+
35
bool arduino::WiFiClass::isVisible(const char* ssid) {
46
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) {
68
connected_ap = i;
79
return true;
810
}
@@ -21,34 +23,22 @@ SocketAddress arduino::WiFiClass::socketAddressFromIpAddress(arduino::IPAddress
2123
}
2224

2325
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-
3226
if (wifi_if == nullptr) {
3327
//Q: What is the callback for?
3428
_initializerCallback();
3529
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+
}
4131

4232
scanNetworks();
4333
// use scan result to populate security field
44-
if (!isVisible(_ssid)) {
34+
if (!isVisible(ssid)) {
4535
_currentNetworkStatus = WL_CONNECT_FAILED;
4636
return _currentNetworkStatus;
4737
}
4838

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;
5242
return _currentNetworkStatus;
5343
}
5444

@@ -59,16 +49,17 @@ int arduino::WiFiClass::beginAP(const char* ssid, const char *passphrase, uint8_
5949
#endif
6050

6151
if (_softAP == NULL) {
62-
return WL_CONNECT_FAILED;
52+
return WL_AP_FAILED;
6353
}
6454

6555
ensureDefaultAPNetworkConfiguration();
6656

6757
//Set ap ssid, password and channel
6858
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;
7263
}
7364

7465
void arduino::WiFiClass::ensureDefaultAPNetworkConfiguration() {
@@ -136,6 +127,21 @@ char* arduino::WiFiClass::SSID() {
136127
return _ssid;
137128
}
138129

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+
139145
static const char *sec2str(nsapi_security_t sec)
140146
{
141147
switch (sec) {

libraries/WiFi/src/WiFi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ class WiFiClass
308308
voidPrtFuncPtr _initializerCallback;
309309
WiFiAccessPoint* ap_list = nullptr;
310310
uint8_t connected_ap;
311-
311+
int setSSID(const char* ssid);
312312
void ensureDefaultAPNetworkConfiguration();
313313
bool isVisible(const char* ssid);
314314
arduino::IPAddress ipAddressFromSocketAddress(SocketAddress socketAddress);

libraries/WiFi/src/WiFiClient.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ void arduino::WiFiClient::getStatus() {
3131
int arduino::WiFiClient::connect(SocketAddress socketAddress) {
3232
if (sock == NULL) {
3333
sock = new TCPSocket();
34-
static_cast<TCPSocket*>(sock)->open(WiFi.getNetwork());
34+
if(static_cast<TCPSocket*>(sock)->open(WiFi.getNetwork()) != NSAPI_ERROR_OK){
35+
return 0;
36+
}
3537
}
3638
//sock->sigio(mbed::callback(this, &WiFiClient::getStatus));
3739
//sock->set_blocking(false);
@@ -54,7 +56,9 @@ int arduino::WiFiClient::connect(const char *host, uint16_t port) {
5456
int arduino::WiFiClient::connectSSL(SocketAddress socketAddress){
5557
if (sock == NULL) {
5658
sock = new TLSSocket();
57-
static_cast<TLSSocket*>(sock)->open(WiFi.getNetwork());
59+
if(static_cast<TLSSocket*>(sock)->open(WiFi.getNetwork()) != NSAPI_ERROR_OK){
60+
return 0;
61+
}
5862
}
5963
if (beforeConnect) {
6064
beforeConnect();

0 commit comments

Comments
 (0)