mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Revision:
189:f392fc9709a3
Parent:
188:bcfe06ba3d64
--- a/targets/TARGET_Realtek/TARGET_AMEBA/RTWInterface.cpp	Thu Nov 08 11:46:34 2018 +0000
+++ b/targets/TARGET_Realtek/TARGET_AMEBA/RTWInterface.cpp	Wed Feb 20 22:31:08 2019 +0000
@@ -85,11 +85,13 @@
     return RTW_SUCCESS;
 }
 
-RTWInterface::RTWInterface(RTW_EMAC &get_rtw_emac, OnboardNetworkStack &get_rtw_obn_stack) :
+RTWInterface::RTWInterface(RTW_EMAC &get_rtw_emac, OnboardNetworkStack &get_rtw_obn_stack, bool debug) :
         EMACInterface(get_rtw_emac, get_rtw_obn_stack),
         rtw_emac(get_rtw_emac),
         rtw_obn_stack(get_rtw_obn_stack)
 {
+    extern __u32 GlobalDebugEnable;
+    GlobalDebugEnable = debug?1:0; //Conditional statement: display debugging message
     rtw_emac.power_up();
 }
 
@@ -104,29 +106,38 @@
  */
 nsapi_error_t RTWInterface::set_credentials(const char *ssid, const char *pass, nsapi_security_t security)
 {
-    if (!ssid) {
+    _security = security;
+    // Check if ssid is empty
+    if (!ssid) { 
+        return NSAPI_ERROR_PARAMETER;
+    }
+
+    // Check if ssid is too long
+    int ssid_length = strlen(ssid);
+
+    if (ssid_length > 0 && ssid_length <= SSID_MAX_LENGTH) {
+        memset(_ssid, 0, sizeof(_ssid));
+        strncpy(_ssid, ssid, sizeof(_ssid));
+    } else {
         return NSAPI_ERROR_PARAMETER;
     }
 
-    switch (security) {
-        case NSAPI_SECURITY_WPA:
-        case NSAPI_SECURITY_WPA2:
-        case NSAPI_SECURITY_WPA_WPA2:
-        case NSAPI_SECURITY_WEP:
-            if ((strlen(pass) < 8) || (strlen(pass) > 63)) { // 802.11 password 8-63 characters
-                return NSAPI_ERROR_PARAMETER;
-            }
-            break;
-        case NSAPI_SECURITY_NONE:
-            break;
-        default:
+    // Check if it is an open access point 
+    if (_security != NSAPI_SECURITY_NONE) {
+    // 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));
     }
-
-    strncpy(_ssid, ssid, 255);
-    strncpy(_pass, pass, 255);
-    _security = security;
-
     return NSAPI_ERROR_OK;
 }
 
@@ -135,11 +146,15 @@
     int ret;
     rtw_security_t sec;
 
-    if (!_ssid || (!_pass && _security != NSAPI_SECURITY_NONE)) {
-        printf("Invalid credentials\r\n");
-        return NSAPI_ERROR_PARAMETER;
+    // Check if the ssid is empty 
+    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;
+    }
+    // Based on security type set, adapt to Ameba SDK format
     switch (_security) {
         case NSAPI_SECURITY_WPA:
         case NSAPI_SECURITY_WPA2:
@@ -155,22 +170,24 @@
         default:
             return NSAPI_ERROR_PARAMETER;
     }
-
+    // Check if channel number is valid
     if (_channel > 0 && _channel < 14) {
         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);
+    ret = wifi_connect(_ssid, sec, _pass, strlen(_ssid), strlen(_pass), 0, (void *)NULL); // Join a WiFi network
+    // Check if the WiFi is connected. Return RTW_SUCCESS for succeful; Return RTW_ERROR for error
     if (ret != RTW_SUCCESS) {
-        printf("failed: %d\r\n", ret);
-        return NSAPI_ERROR_NO_CONNECTION;
+        if(_ssid == "NULL"){
+            return NSAPI_ERROR_PARAMETER;
+        }
+        else{
+            printf("failed: %d\r\n", ret);
+            return NSAPI_ERROR_NO_CONNECTION;
+        }
     }
-
     rtw_emac.wlan_emac_link_change(true);
-
     ret = EMACInterface::connect();
-
     return ret;
 }
 
@@ -200,7 +217,7 @@
 nsapi_error_t RTWInterface::set_channel(uint8_t channel)
 {
     _channel = channel;
-    return NSAPI_ERROR_OK;
+    return NSAPI_ERROR_UNSUPPORTED;
 }
 
 int8_t RTWInterface::get_rssi()
@@ -215,8 +232,11 @@
 nsapi_error_t RTWInterface::connect(const char *ssid, const char *pass,
                             nsapi_security_t security, uint8_t channel)
 {
-    set_credentials(ssid, pass, security);
     set_channel(channel);
+    int err = set_credentials(ssid, pass, security);
+    if(err) {
+        return err;
+    }
     return connect();
 }