8000 Wifi Improvements by sebromero · Pull Request #44 · arduino/ArduinoCore-mbed · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 28 additions & 22 deletions libraries/WiFi/src/WiFi.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#include "WiFi.h"

#define SSID_MAX_LENGTH 32

bool arduino::WiFiClass::isVisible(const char* ssid) {
for (int i=0; i<10; i++) {
if (strncmp(ap_list[i].get_ssid(), ssid, 32) == 0) {
if (strncmp(ap_list[i].get_ssid(), ssid, SSID_MAX_LENGTH) == 0) {
connected_ap = i;
return true;
}
Expand All @@ -21,34 +23,22 @@ SocketAddress arduino::WiFiClass::socketAddressFromIpAddress(arduino::IPAddress
}

int arduino::WiFiClass::begin(const char* ssid, const char *passphrase) {
if (_ssid) free(_ssid);

_ssid = (char*)malloc(33);
if (!_ssid) {
//tr_error("Could not allocate ssid buffer");
return WL_CONNECT_FAILED;
}

if (wifi_if == nullptr) {
//Q: What is the callback for?
_initializerCallback();
if(wifi_if == nullptr) return WL_CONNECT_FAILED;
}

memcpy(_ssid, ssid, 33);
// too long? break it off
if (strlen(ssid) > 32) _ssid[32] = 0;
}

scanNetworks();
// use scan result to populate security field
if (!isVisible(_ssid)) {
if (!isVisible(ssid)) {
_currentNetworkStatus = WL_CONNECT_FAILED;
return _currentNetworkStatus;
}

nsapi_error_t ret = wifi_if->connect(_ssid, passphrase, ap_list[connected_ap].get_security());

_currentNetworkStatus = ret == NSAPI_ERROR_OK ? WL_CONNECTED : WL_CONNECT_FAILED;
nsapi_error_t result = wifi_if->connect(ssid, passphrase, ap_list[connected_ap].get_security());
_currentNetworkStatus = (result == NSAPI_ERROR_OK && setSSID(ssid)) ? WL_CONNECTED : WL_CONNECT_FAILED;
return _currentNetworkStatus;
}

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

if (_softAP == NULL) {
return WL_CONNECT_FAILED;
return WL_AP_FAILED;
}

ensureDefaultAPNetworkConfiguration();

//Set ap ssid, password and channel
static_cast<WhdSoftAPInterface*>(_softAP)->set_network(_ip, _netmask, _gateway);
nsapi_error_t ret = static_cast<WhdSoftAPInterface*>(_softAP)->start(ssid, passphrase, NSAPI_SECURITY_WPA2, channel, true /* dhcp server */, NULL, true /* cohexistance */);

return ret == NSAPI_ERROR_OK ? WL_AP_LISTENING : WL_CONNECT_FAILED;
nsapi_error_t result = static_cast<WhdSoftAPInterface*>(_softAP)->start(ssid, passphrase, NSAPI_SECURITY_WPA2, channel, true /* dhcp server */, NULL, true /* cohexistance */);

_currentNetworkStatus = (result == NSAPI_ERROR_OK && setSSID(ssid)) ? WL_AP_LISTENING : WL_AP_FAILED;
return _currentNetworkStatus;
}

void arduino::WiFiClass::ensureDefaultAPNetworkConfiguration() {
Expand Down Expand Up @@ -136,6 +127,21 @@ char* arduino::WiFiClass::SSID() {
return _ssid;
}

int arduino::WiFiClass::setSSID(const char* ssid){
if (_ssid) free(_ssid);

_ssid = (char*)malloc(SSID_MAX_LENGTH + 1);
if (!_ssid) {
//tr_error("Could not allocate ssid buffer");
return 0;
}

memcpy(_ssid, ssid, SSID_MAX_LENGTH + 1);
// too long? break it off
if (strlen(ssid) > SSID_MAX_LENGTH) _ssid[SSID_MAX_LENGTH] = 0;
return 1;
}

static const char *sec2str(nsapi_security_t sec)
{
switch (sec) {
Expand Down
2 changes: 1 addition & 1 deletion libraries/WiFi/src/WiFi.h