Merge pull request #9084 from AdamZhang0124/realtek-rtl8195am-Network_Socket_Update

Realtek-rtl8195am-Network_Socket_Updates
pull/9155/head
Cruz Monrreal 2018-12-18 10:31:25 -06:00 committed by GitHub
commit d969d46bbf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 56 additions and 34 deletions

View File

@ -115,7 +115,8 @@
}, },
"target_overrides": { "target_overrides": {
"REALTEK_RTL8195AM": { "REALTEK_RTL8195AM": {
"tcpip-thread-stacksize": 1600 "tcpip-thread-stacksize": 1600,
"mem-size": 12800
}, },
"UBLOX_EVK_ODIN_W2": { "UBLOX_EVK_ODIN_W2": {
"pbuf-pool-size" : 10 "pbuf-pool-size" : 10

View File

@ -104,29 +104,38 @@ RTWInterface::~RTWInterface()
*/ */
nsapi_error_t RTWInterface::set_credentials(const char *ssid, const char *pass, nsapi_security_t security) nsapi_error_t RTWInterface::set_credentials(const char *ssid, const char *pass, nsapi_security_t security)
{ {
_security = security;
// Check if ssid is empty
if (!ssid) { if (!ssid) {
return NSAPI_ERROR_PARAMETER; return NSAPI_ERROR_PARAMETER;
} }
switch (security) { // Check if ssid is too long
case NSAPI_SECURITY_WPA: int ssid_length = strlen(ssid);
case NSAPI_SECURITY_WPA2:
case NSAPI_SECURITY_WPA_WPA2: if (ssid_length > 0 && ssid_length <= SSID_MAX_LENGTH) {
case NSAPI_SECURITY_WEP: memset(_ssid, 0, sizeof(_ssid));
if ((strlen(pass) < 8) || (strlen(pass) > 63)) { // 802.11 password 8-63 characters strncpy(_ssid, ssid, sizeof(_ssid));
return NSAPI_ERROR_PARAMETER; } else {
}
break;
case NSAPI_SECURITY_NONE:
break;
default:
return NSAPI_ERROR_PARAMETER; return NSAPI_ERROR_PARAMETER;
} }
strncpy(_ssid, ssid, 255); // Check if it is an open access point
strncpy(_pass, pass, 255); if (_security != NSAPI_SECURITY_NONE) {
_security = security; // Check if passphase is empty
if (!pass) {
return NSAPI_ERROR_PARAMETER;
}
// Check if passphase too long
if (strlen(pass) >= PASSPHRASE_MIN_LENGTH && strlen(pass) <= PASSPHRASE_MAX_LENGTH ) {
memset(_pass, 0, sizeof(_pass));
strncpy(_pass, pass, sizeof(_pass));
} else {
return NSAPI_ERROR_PARAMETER;
}
} else { // It is an open access point
memset(_pass, 0, sizeof(_pass));
}
return NSAPI_ERROR_OK; return NSAPI_ERROR_OK;
} }
@ -135,11 +144,15 @@ nsapi_error_t RTWInterface::connect()
int ret; int ret;
rtw_security_t sec; rtw_security_t sec;
if (!_ssid || (!_pass && _security != NSAPI_SECURITY_NONE)) { // Check if the ssid is empty
printf("Invalid credentials\r\n"); if (strlen(_ssid) == 0) {
return NSAPI_ERROR_NO_SSID;
}
// Check the security is empty and the passphase is valid
if ((_security != NSAPI_SECURITY_NONE) && (strlen(_pass) < PASSPHRASE_MIN_LENGTH)) {
return NSAPI_ERROR_PARAMETER; return NSAPI_ERROR_PARAMETER;
} }
// Based on security type set, adapt to Ameba SDK format
switch (_security) { switch (_security) {
case NSAPI_SECURITY_WPA: case NSAPI_SECURITY_WPA:
case NSAPI_SECURITY_WPA2: case NSAPI_SECURITY_WPA2:
@ -155,22 +168,24 @@ nsapi_error_t RTWInterface::connect()
default: default:
return NSAPI_ERROR_PARAMETER; return NSAPI_ERROR_PARAMETER;
} }
// Check if channel number is valid
if (_channel > 0 && _channel < 14) { if (_channel > 0 && _channel < 14) {
uint8_t pscan_config = PSCAN_ENABLE; uint8_t pscan_config = PSCAN_ENABLE;
wifi_set_pscan_chan(&_channel, &pscan_config, 1); wifi_set_pscan_chan(&_channel, &pscan_config, 1); // Indicate which channel will be scanned
} }
ret = wifi_connect(_ssid, sec, _pass, strlen(_ssid), strlen(_pass), 0, (void *)NULL); // Join a WiFi network
ret = wifi_connect(_ssid, sec, _pass, strlen(_ssid), strlen(_pass), 0, (void *)NULL); // Check if the WiFi is connected. Return RTW_SUCCESS for succeful; Return RTW_ERROR for error
if (ret != RTW_SUCCESS) { if (ret != RTW_SUCCESS) {
if(_ssid == "NULL"){
return NSAPI_ERROR_PARAMETER;
}
else{
printf("failed: %d\r\n", ret); printf("failed: %d\r\n", ret);
return NSAPI_ERROR_NO_CONNECTION; return NSAPI_ERROR_NO_CONNECTION;
} }
}
rtw_emac.wlan_emac_link_change(true); rtw_emac.wlan_emac_link_change(true);
ret = EMACInterface::connect(); ret = EMACInterface::connect();
return ret; return ret;
} }
@ -200,7 +215,7 @@ nsapi_error_t RTWInterface::scan(WiFiAccessPoint *res, unsigned count)
nsapi_error_t RTWInterface::set_channel(uint8_t channel) nsapi_error_t RTWInterface::set_channel(uint8_t channel)
{ {
_channel = channel; _channel = channel;
return NSAPI_ERROR_OK; return NSAPI_ERROR_UNSUPPORTED;
} }
int8_t RTWInterface::get_rssi() int8_t RTWInterface::get_rssi()
@ -215,8 +230,11 @@ int8_t RTWInterface::get_rssi()
nsapi_error_t RTWInterface::connect(const char *ssid, const char *pass, nsapi_error_t RTWInterface::connect(const char *ssid, const char *pass,
nsapi_security_t security, uint8_t channel) nsapi_security_t security, uint8_t channel)
{ {
set_credentials(ssid, pass, security);
set_channel(channel); set_channel(channel);
int err = set_credentials(ssid, pass, security);
if(err) {
return err;
}
return connect(); return connect();
} }

View File

@ -112,5 +112,8 @@ protected:
char _pass[256]; char _pass[256];
nsapi_security_t _security; nsapi_security_t _security;
uint8_t _channel; uint8_t _channel;
static const int SSID_MAX_LENGTH = 32; //The longest ssid
static const int PASSPHRASE_MAX_LENGTH = 63; //The longest passphrase
static const int PASSPHRASE_MIN_LENGTH = 8; // The shortest passphrase
}; };
#endif #endif