mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
Diff: targets/TARGET_Realtek/TARGET_AMEBA/RTWInterface.cpp
- 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; }