Merge pull request #5649 from Archcady/realtek-PR-master

Fix greentea test mbed-os-tests-netsocket-connectivity
pull/5723/head
Martin Kojtal 2017-12-20 14:43:37 +00:00 committed by GitHub
commit 13dbb67891
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 17 additions and 11 deletions

View File

@ -36,14 +36,16 @@ typedef struct _wifi_scan_hdl {
#define MAX_SCAN_TIMEOUT (15000) #define MAX_SCAN_TIMEOUT (15000)
static bool _inited = false;
static rtw_result_t scan_result_handler( rtw_scan_handler_result_t* malloced_scan_result ) static rtw_result_t scan_result_handler( rtw_scan_handler_result_t* malloced_scan_result )
{ {
wifi_scan_hdl *scan_handler = (wifi_scan_hdl *)malloced_scan_result->user_data; wifi_scan_hdl *scan_handler = (wifi_scan_hdl *)malloced_scan_result->user_data;
if (malloced_scan_result->scan_complete != RTW_TRUE) { 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; nsapi_wifi_ap_t ap;
rtw_scan_result_t* record = &malloced_scan_result->ap_details; rtw_scan_result_t* record = &malloced_scan_result->ap_details;
record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */ record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */
memset((void*)&ap, 0x00, sizeof(nsapi_wifi_ap_t)); memset((void*)&ap, 0x00, sizeof(nsapi_wifi_ap_t));
memcpy(ap.ssid, record->SSID.val, record->SSID.len); memcpy(ap.ssid, record->SSID.val, record->SSID.len);
memcpy(ap.bssid, record->BSSID.octet, 6); memcpy(ap.bssid, record->BSSID.octet, 6);
@ -88,7 +90,7 @@ RTWInterface::RTWInterface(bool debug)
{ {
emac_interface_t *emac; emac_interface_t *emac;
int ret; int ret;
extern u32 GlobalDebugEnable; extern u32 GlobalDebugEnable;
GlobalDebugEnable = debug?1:0; GlobalDebugEnable = debug?1:0;
emac = wlan_emac_init_interface(); emac = wlan_emac_init_interface();
@ -97,10 +99,13 @@ RTWInterface::RTWInterface(bool debug)
return; return;
} }
emac->ops.power_up(emac); emac->ops.power_up(emac);
ret = mbed_lwip_init(emac); if (_inited == false) {
if (ret != 0) { ret = mbed_lwip_init(emac);
printf("Error init RTWInterface!(%d)\r\n", ret); if (ret != 0) {
return; printf("Error init RTWInterface!(%d)\r\n", ret);
return;
}
_inited = true;
} }
} }
@ -177,7 +182,7 @@ nsapi_error_t RTWInterface::connect()
break; break;
case NSAPI_SECURITY_NONE: case NSAPI_SECURITY_NONE:
sec = RTW_SECURITY_OPEN; sec = RTW_SECURITY_OPEN;
break; break;
default: default:
return NSAPI_ERROR_PARAMETER; return NSAPI_ERROR_PARAMETER;
} }
@ -186,7 +191,7 @@ nsapi_error_t RTWInterface::connect()
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);
} }
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);
if (ret != RTW_SUCCESS) { if (ret != RTW_SUCCESS) {
printf("failed: %d\r\n", ret); printf("failed: %d\r\n", ret);
@ -237,7 +242,7 @@ 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_credentials(ssid, pass, security);
set_channel(channel); set_channel(channel);
@ -249,9 +254,10 @@ nsapi_error_t RTWInterface::disconnect()
char essid[33]; char essid[33];
wlan_emac_link_change(false); wlan_emac_link_change(false);
mbed_lwip_bringdown();
if(wifi_is_connected_to_ap() != RTW_SUCCESS) if(wifi_is_connected_to_ap() != RTW_SUCCESS)
return NSAPI_ERROR_NO_CONNECTION; return NSAPI_ERROR_NO_CONNECTION;
if(wifi_disconnect()<0){ if(wifi_disconnect()<0){
return NSAPI_ERROR_DEVICE_ERROR; return NSAPI_ERROR_DEVICE_ERROR;
} }
while(1){ while(1){