mbed library sources. Supersedes mbed-src.

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

Revision:
186:707f6e361f3e
Parent:
184:08ed48f1de7f
Child:
188:bcfe06ba3d64
--- a/targets/TARGET_Realtek/TARGET_AMEBA/RTWInterface.cpp	Thu Apr 19 17:12:19 2018 +0100
+++ b/targets/TARGET_Realtek/TARGET_AMEBA/RTWInterface.cpp	Fri Jun 22 16:45:37 2018 +0100
@@ -19,12 +19,14 @@
 
 #include "RTWInterface.h"
 #include "mbed_interface.h"
+
 #include "rtw_emac.h"
-
+#include "EMAC.h"
 #include "wifi_constants.h"
 #include "wifi_conf.h"
-#include "lwip_stack.h"
 
+#include "OnboardNetworkStack.h"
+#include "EMACMemoryManager.h"
 #include "osdep_service.h"
 
 typedef struct _wifi_scan_hdl {
@@ -42,14 +44,14 @@
 {
     wifi_scan_hdl *scan_handler = (wifi_scan_hdl *)malloced_scan_result->user_data;
     if (malloced_scan_result->scan_complete != RTW_TRUE) {
-        if(scan_handler->ap_details && scan_handler->scan_num > scan_handler->ap_num){
+        if (scan_handler->ap_details && scan_handler->scan_num > scan_handler->ap_num) {
             nsapi_wifi_ap_t ap;
             rtw_scan_result_t* record = &malloced_scan_result->ap_details;
             record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */
             memset((void*)&ap, 0x00, sizeof(nsapi_wifi_ap_t));
             memcpy(ap.ssid, record->SSID.val, record->SSID.len);
             memcpy(ap.bssid, record->BSSID.octet, 6);
-            switch (record->security){
+            switch (record->security) {
                 case RTW_SECURITY_OPEN:
                     ap.security = NSAPI_SECURITY_NONE;
                     break;
@@ -78,41 +80,30 @@
             scan_handler->ap_details[scan_handler->ap_num] = WiFiAccessPoint(ap);
         }
         scan_handler->ap_num++;
-    } else{
+    } else {
         // scan done
         rtw_up_sema(&scan_handler->scan_sema);
     }
     return RTW_SUCCESS;
 }
 
-RTWInterface::RTWInterface(bool debug)
-    : _dhcp(true), _ssid(), _pass(), _ip_address(), _netmask(), _gateway()
+RTWInterface::RTWInterface(RTW_EMAC &get_rtw_emac, OnboardNetworkStack &get_rtw_obn_stack) :
+        rtw_emac(get_rtw_emac),
+        rtw_obn_stack(get_rtw_obn_stack),
+        rtw_interface(NULL),
+        _dhcp(true), 
+        _ip_address(), 
+        _netmask(), 
+        _gateway(),
+        _mac_address()
 {
-    emac_interface_t *emac;
-    int ret;
-    extern u32 GlobalDebugEnable;
-
-    GlobalDebugEnable = debug?1:0;
-    emac = wlan_emac_init_interface();
-    if (!emac) {
-        printf("Error init RTWInterface!\r\n");
-        return;
-    }
-    emac->ops.power_up(emac);
-    if (_inited == false) {
-        ret = mbed_lwip_init(emac);
-        if (ret != 0) {
-            printf("Error init RTWInterface!(%d)\r\n", ret);
-            return;
-        }
-        _inited = true;
-    }
+    rtw_emac.power_up();
 }
 
 RTWInterface::~RTWInterface()
 {
-    wlan_emac_link_change(false);
-    mbed_lwip_bringdown();
+    rtw_emac.wlan_emac_link_change(false);
+    rtw_interface->bringdown();
 }
 
 nsapi_error_t RTWInterface::set_network(const char *ip_address, const char *netmask, const char *gateway)
@@ -135,7 +126,7 @@
  */
 nsapi_error_t RTWInterface::set_credentials(const char *ssid, const char *pass, nsapi_security_t security)
 {
-    if(!ssid || (strlen(ssid) == 0)) {
+    if (!ssid) {
         return NSAPI_ERROR_PARAMETER;
     }
 
@@ -144,14 +135,11 @@
         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
+            if ((strlen(pass) < 8) || (strlen(pass) > 63)) { // 802.11 password 8-63 characters
                 return NSAPI_ERROR_PARAMETER;
             }
             break;
         case NSAPI_SECURITY_NONE:
-            if(pass && strlen(pass) > 0) {
-                return NSAPI_ERROR_PARAMETER;
-            }
             break;
         default:
             return NSAPI_ERROR_PARAMETER;
@@ -169,8 +157,7 @@
     int ret;
     rtw_security_t sec;
 
-    if (!_ssid || (strlen(_ssid) == 0) ||
-       (!_pass && _security != NSAPI_SECURITY_NONE)) {
+    if (!_ssid || (!_pass && _security != NSAPI_SECURITY_NONE)) {
         printf("Invalid credentials\r\n");
         return NSAPI_ERROR_PARAMETER;
     }
@@ -191,69 +178,77 @@
             return NSAPI_ERROR_PARAMETER;
     }
 
+    if (_channel > 0 && _channel < 14) {
+        uint8_t pscan_config = PSCAN_ENABLE;
+        wifi_set_pscan_chan(&_channel, &pscan_config, 1);
+    }
+
     ret = wifi_connect(_ssid, sec, _pass, strlen(_ssid), strlen(_pass), 0, (void *)NULL);
     if (ret != RTW_SUCCESS) {
         printf("failed: %d\r\n", ret);
         return NSAPI_ERROR_NO_CONNECTION;
     }
 
-    wlan_emac_link_change(true);
-    return mbed_lwip_bringup(_dhcp,
-                             _ip_address[0] ? _ip_address : 0,
-                             _netmask[0] ? _netmask : 0,
-                             _gateway[0] ? _gateway : 0);
+    rtw_emac.wlan_emac_link_change(true);
+    if (!rtw_interface) {
+        nsapi_error_t err = rtw_obn_stack.add_ethernet_interface(rtw_emac, true, &rtw_interface);
+        if (err != NSAPI_ERROR_OK) {
+            rtw_interface = NULL;
+            return err;
+        }
+    }
+
+    int rtw_if_bringup = rtw_interface->bringup(_dhcp,
+                           _ip_address[0] ? _ip_address : 0,
+                           _netmask[0] ? _netmask : 0,
+                           _gateway[0] ? _gateway : 0,
+                           DEFAULT_STACK);
+    return rtw_if_bringup;
 }
 
 nsapi_error_t RTWInterface::scan(WiFiAccessPoint *res, unsigned count)
 {
     static wifi_scan_hdl scan_handler;
     scan_handler.ap_num = 0;
-    if(!scan_handler.scan_sema)
+    if (!scan_handler.scan_sema) {
         rtw_init_sema(&scan_handler.scan_sema, 0);
+    }
     scan_handler.scan_num = count;
     scan_handler.ap_details = res;
-    if(wifi_scan_networks(scan_result_handler, (void *)&scan_handler) != RTW_SUCCESS){
+    if (wifi_scan_networks(scan_result_handler, (void *)&scan_handler) != RTW_SUCCESS) {
         printf("wifi scan failed\n\r");
         return NSAPI_ERROR_DEVICE_ERROR;
     }
-    if(rtw_down_timeout_sema( &scan_handler.scan_sema, MAX_SCAN_TIMEOUT ) == RTW_FALSE) {
+    if (rtw_down_timeout_sema( &scan_handler.scan_sema, MAX_SCAN_TIMEOUT ) == RTW_FALSE) {
         printf("wifi scan timeout\r\n");
         return NSAPI_ERROR_DEVICE_ERROR;
     }
-    if(count <= 0 || count > scan_handler.ap_num)
+    if (count <= 0 || count > scan_handler.ap_num) {
         count = scan_handler.ap_num;
-
+    }
     return count;
 }
 
 nsapi_error_t RTWInterface::set_channel(uint8_t channel)
 {
-    // Not supported for STA mode wifi driver
-    if (channel != 0)
-        return NSAPI_ERROR_UNSUPPORTED;
-
+    _channel = channel;
     return NSAPI_ERROR_OK;
 }
 
 int8_t RTWInterface::get_rssi()
 {
     int rssi = 0;
-    if(wifi_get_rssi(&rssi) == 0)
+    if (wifi_get_rssi(&rssi) == 0) {
         return (int8_t)rssi;
+    }  
     return NSAPI_ERROR_OK;
 }
 
 nsapi_error_t RTWInterface::connect(const char *ssid, const char *pass,
                             nsapi_security_t security, uint8_t channel)
 {
-    nsapi_error_t ret;
-
-    ret = set_credentials(ssid, pass, security);
-    if(ret != NSAPI_ERROR_OK) return ret;
-
-    ret = set_channel(channel);
-    if(ret != NSAPI_ERROR_OK) return ret;
-
+    set_credentials(ssid, pass, security);
+    set_channel(channel);
     return connect();
 }
 
@@ -261,15 +256,16 @@
 {
     char essid[33];
 
-    wlan_emac_link_change(false);
-    mbed_lwip_bringdown();
-    if(wifi_is_connected_to_ap() != RTW_SUCCESS)
+    rtw_emac.wlan_emac_link_change(false);
+    rtw_interface->bringdown();
+    if (wifi_is_connected_to_ap() != RTW_SUCCESS) {
         return NSAPI_ERROR_NO_CONNECTION;
-    if(wifi_disconnect()<0){
+    }
+    if (wifi_disconnect()<0) {
         return NSAPI_ERROR_DEVICE_ERROR;
     }
-    while(1){
-        if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) {
+    while(1) {
+        if (wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) {
             break;
         }
     }
@@ -278,18 +274,20 @@
 
 int RTWInterface::is_connected()
 {
-    // wifi_is_connected_to_ap return 0 on connected
     return !wifi_is_connected_to_ap();
 }
 
 const char *RTWInterface::get_mac_address()
 {
-    return mbed_lwip_get_mac_address();
+    if (rtw_interface->get_mac_address(_mac_address, sizeof _mac_address)) {
+        return _mac_address;
+    }
+    return 0;
 }
 
 const char *RTWInterface::get_ip_address()
 {
-    if (mbed_lwip_get_ip_address(_ip_address, sizeof _ip_address)) {
+    if (rtw_interface->get_ip_address(_ip_address, sizeof _ip_address)) {
         return _ip_address;
     }
     return 0;
@@ -297,7 +295,7 @@
 
 const char *RTWInterface::get_netmask()
 {
-    if (mbed_lwip_get_netmask(_netmask, sizeof _netmask)) {
+    if (rtw_interface->get_netmask(_netmask, sizeof _netmask)) {
         return _netmask;
     }
     return 0;
@@ -305,7 +303,7 @@
 
 const char *RTWInterface::get_gateway()
 {
-    if (mbed_lwip_get_gateway(_gateway, sizeof _gateway)) {
+    if (rtw_interface->get_gateway(_gateway, sizeof _gateway)) {
         return _gateway;
     }
     return 0;
@@ -313,5 +311,5 @@
 
 NetworkStack *RTWInterface::get_stack()
 {
-    return nsapi_create_stack(&lwip_stack);
+    return &rtw_obn_stack;
 }