Skip to content

Wifi Improvements #44

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 21, 2020
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
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ class WiFiClass
voidPrtFuncPtr _initializerCallback;
WiFiAccessPoint* ap_list = nullptr;
uint8_t connected_ap;

int setSSID(const char* ssid);
void ensureDefaultAPNetworkConfiguration();
bool isVisible(const char* ssid);
arduino::IPAddress ipAddressFromSocketAddress(SocketAddress socketAddress);
Expand Down
8 changes: 6 additions & 2 deletions libraries/WiFi/src/WiFiClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ void arduino::WiFiClient::getStatus() {
int arduino::WiFiClient::connect(SocketAddress socketAddress) {
if (sock == NULL) {
sock = new TCPSocket();
static_cast<TCPSocket*>(sock)->open(WiFi.getNetwork());
if(static_cast<TCPSocket*>(sock)->open(WiFi.getNetwork()) != NSAPI_ERROR_OK){
return 0;
}
}
//sock->sigio(mbed::callback(this, &WiFiClient::getStatus));
//sock->set_blocking(false);
Expand All @@ -54,7 +56,9 @@ int arduino::WiFiClient::connect(const char *host, uint16_t port) {
int arduino::WiFiClient::connectSSL(SocketAddress socketAddress){
if (sock == NULL) {
sock = new TLSSocket();
static_cast<TLSSocket*>(sock)->open(WiFi.getNetwork());
if(static_cast<TLSSocket*>(sock)->open(WiFi.getNetwork()) != NSAPI_ERROR_OK){
return 0;
}
}
if (beforeConnect) {
beforeConnect();
Expand Down