mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_Realtek/TARGET_AMEBA/RTWInterface.cpp@186:707f6e361f3e, 2018-06-22 (annotated)
- Committer:
- Anna Bridge
- Date:
- Fri Jun 22 16:45:37 2018 +0100
- Revision:
- 186:707f6e361f3e
- Parent:
- 184:08ed48f1de7f
- Child:
- 188:bcfe06ba3d64
mbed-dev library. Release version 162
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 167:e84263d55307 | 1 | /* Ameba implementation of NetworkInterfaceAPI |
AnnaBridge | 167:e84263d55307 | 2 | * Copyright (c) 2015 ARM Limited |
AnnaBridge | 167:e84263d55307 | 3 | * |
AnnaBridge | 167:e84263d55307 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
AnnaBridge | 167:e84263d55307 | 5 | * you may not use this file except in compliance with the License. |
AnnaBridge | 167:e84263d55307 | 6 | * You may obtain a copy of the License at |
AnnaBridge | 167:e84263d55307 | 7 | * |
AnnaBridge | 167:e84263d55307 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
AnnaBridge | 167:e84263d55307 | 9 | * |
AnnaBridge | 167:e84263d55307 | 10 | * Unless required by applicable law or agreed to in writing, software |
AnnaBridge | 167:e84263d55307 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
AnnaBridge | 167:e84263d55307 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
AnnaBridge | 167:e84263d55307 | 13 | * See the License for the specific language governing permissions and |
AnnaBridge | 167:e84263d55307 | 14 | * limitations under the License. |
AnnaBridge | 167:e84263d55307 | 15 | */ |
AnnaBridge | 167:e84263d55307 | 16 | |
AnnaBridge | 167:e84263d55307 | 17 | #include "mbed.h" |
AnnaBridge | 167:e84263d55307 | 18 | #include "rtos.h" |
AnnaBridge | 167:e84263d55307 | 19 | |
AnnaBridge | 167:e84263d55307 | 20 | #include "RTWInterface.h" |
AnnaBridge | 167:e84263d55307 | 21 | #include "mbed_interface.h" |
Anna Bridge |
186:707f6e361f3e | 22 | |
AnnaBridge | 167:e84263d55307 | 23 | #include "rtw_emac.h" |
Anna Bridge |
186:707f6e361f3e | 24 | #include "EMAC.h" |
AnnaBridge | 167:e84263d55307 | 25 | #include "wifi_constants.h" |
AnnaBridge | 167:e84263d55307 | 26 | #include "wifi_conf.h" |
AnnaBridge | 167:e84263d55307 | 27 | |
Anna Bridge |
186:707f6e361f3e | 28 | #include "OnboardNetworkStack.h" |
Anna Bridge |
186:707f6e361f3e | 29 | #include "EMACMemoryManager.h" |
AnnaBridge | 167:e84263d55307 | 30 | #include "osdep_service.h" |
AnnaBridge | 167:e84263d55307 | 31 | |
AnnaBridge | 167:e84263d55307 | 32 | typedef struct _wifi_scan_hdl { |
AnnaBridge | 174:b96e65c34a4d | 33 | _sema scan_sema; |
AnnaBridge | 167:e84263d55307 | 34 | nsapi_size_t ap_num; |
AnnaBridge | 167:e84263d55307 | 35 | nsapi_size_t scan_num; |
AnnaBridge | 167:e84263d55307 | 36 | WiFiAccessPoint *ap_details; |
AnnaBridge | 167:e84263d55307 | 37 | } wifi_scan_hdl; |
AnnaBridge | 167:e84263d55307 | 38 | |
AnnaBridge | 167:e84263d55307 | 39 | #define MAX_SCAN_TIMEOUT (15000) |
AnnaBridge | 167:e84263d55307 | 40 | |
Anna Bridge |
180:96ed750bd169 | 41 | static bool _inited = false; |
Anna Bridge |
180:96ed750bd169 | 42 | |
AnnaBridge | 167:e84263d55307 | 43 | static rtw_result_t scan_result_handler( rtw_scan_handler_result_t* malloced_scan_result ) |
AnnaBridge | 167:e84263d55307 | 44 | { |
AnnaBridge | 167:e84263d55307 | 45 | wifi_scan_hdl *scan_handler = (wifi_scan_hdl *)malloced_scan_result->user_data; |
AnnaBridge | 167:e84263d55307 | 46 | if (malloced_scan_result->scan_complete != RTW_TRUE) { |
Anna Bridge |
186:707f6e361f3e | 47 | if (scan_handler->ap_details && scan_handler->scan_num > scan_handler->ap_num) { |
Anna Bridge |
180:96ed750bd169 | 48 | nsapi_wifi_ap_t ap; |
AnnaBridge | 167:e84263d55307 | 49 | rtw_scan_result_t* record = &malloced_scan_result->ap_details; |
Anna Bridge |
180:96ed750bd169 | 50 | record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */ |
AnnaBridge | 167:e84263d55307 | 51 | memset((void*)&ap, 0x00, sizeof(nsapi_wifi_ap_t)); |
AnnaBridge | 167:e84263d55307 | 52 | memcpy(ap.ssid, record->SSID.val, record->SSID.len); |
AnnaBridge | 167:e84263d55307 | 53 | memcpy(ap.bssid, record->BSSID.octet, 6); |
Anna Bridge |
186:707f6e361f3e | 54 | switch (record->security) { |
AnnaBridge | 167:e84263d55307 | 55 | case RTW_SECURITY_OPEN: |
AnnaBridge | 167:e84263d55307 | 56 | ap.security = NSAPI_SECURITY_NONE; |
AnnaBridge | 167:e84263d55307 | 57 | break; |
AnnaBridge | 167:e84263d55307 | 58 | case RTW_SECURITY_WEP_PSK: |
AnnaBridge | 167:e84263d55307 | 59 | case RTW_SECURITY_WEP_SHARED: |
AnnaBridge | 167:e84263d55307 | 60 | ap.security = NSAPI_SECURITY_WEP; |
AnnaBridge | 167:e84263d55307 | 61 | break; |
AnnaBridge | 167:e84263d55307 | 62 | case RTW_SECURITY_WPA_TKIP_PSK: |
AnnaBridge | 167:e84263d55307 | 63 | case RTW_SECURITY_WPA_AES_PSK: |
AnnaBridge | 167:e84263d55307 | 64 | ap.security = NSAPI_SECURITY_WPA; |
AnnaBridge | 167:e84263d55307 | 65 | break; |
AnnaBridge | 167:e84263d55307 | 66 | case RTW_SECURITY_WPA2_AES_PSK: |
AnnaBridge | 167:e84263d55307 | 67 | case RTW_SECURITY_WPA2_TKIP_PSK: |
AnnaBridge | 167:e84263d55307 | 68 | case RTW_SECURITY_WPA2_MIXED_PSK: |
AnnaBridge | 167:e84263d55307 | 69 | ap.security = NSAPI_SECURITY_WPA2; |
AnnaBridge | 167:e84263d55307 | 70 | break; |
AnnaBridge | 167:e84263d55307 | 71 | case RTW_SECURITY_WPA_WPA2_MIXED: |
AnnaBridge | 167:e84263d55307 | 72 | ap.security = NSAPI_SECURITY_WPA_WPA2; |
AnnaBridge | 167:e84263d55307 | 73 | break; |
AnnaBridge | 167:e84263d55307 | 74 | default: |
AnnaBridge | 167:e84263d55307 | 75 | ap.security = NSAPI_SECURITY_UNKNOWN; |
AnnaBridge | 167:e84263d55307 | 76 | break; |
AnnaBridge | 167:e84263d55307 | 77 | } |
AnnaBridge | 167:e84263d55307 | 78 | ap.rssi = record->signal_strength; |
AnnaBridge | 167:e84263d55307 | 79 | ap.channel = record->channel; |
AnnaBridge | 172:7d866c31b3c5 | 80 | scan_handler->ap_details[scan_handler->ap_num] = WiFiAccessPoint(ap); |
AnnaBridge | 167:e84263d55307 | 81 | } |
AnnaBridge | 167:e84263d55307 | 82 | scan_handler->ap_num++; |
Anna Bridge |
186:707f6e361f3e | 83 | } else { |
AnnaBridge | 167:e84263d55307 | 84 | // scan done |
AnnaBridge | 167:e84263d55307 | 85 | rtw_up_sema(&scan_handler->scan_sema); |
AnnaBridge | 167:e84263d55307 | 86 | } |
AnnaBridge | 167:e84263d55307 | 87 | return RTW_SUCCESS; |
AnnaBridge | 167:e84263d55307 | 88 | } |
AnnaBridge | 167:e84263d55307 | 89 | |
Anna Bridge |
186:707f6e361f3e | 90 | RTWInterface::RTWInterface(RTW_EMAC &get_rtw_emac, OnboardNetworkStack &get_rtw_obn_stack) : |
Anna Bridge |
186:707f6e361f3e | 91 | rtw_emac(get_rtw_emac), |
Anna Bridge |
186:707f6e361f3e | 92 | rtw_obn_stack(get_rtw_obn_stack), |
Anna Bridge |
186:707f6e361f3e | 93 | rtw_interface(NULL), |
Anna Bridge |
186:707f6e361f3e | 94 | _dhcp(true), |
Anna Bridge |
186:707f6e361f3e | 95 | _ip_address(), |
Anna Bridge |
186:707f6e361f3e | 96 | _netmask(), |
Anna Bridge |
186:707f6e361f3e | 97 | _gateway(), |
Anna Bridge |
186:707f6e361f3e | 98 | _mac_address() |
AnnaBridge | 167:e84263d55307 | 99 | { |
Anna Bridge |
186:707f6e361f3e | 100 | rtw_emac.power_up(); |
AnnaBridge | 167:e84263d55307 | 101 | } |
AnnaBridge | 167:e84263d55307 | 102 | |
AnnaBridge | 167:e84263d55307 | 103 | RTWInterface::~RTWInterface() |
AnnaBridge | 167:e84263d55307 | 104 | { |
Anna Bridge |
186:707f6e361f3e | 105 | rtw_emac.wlan_emac_link_change(false); |
Anna Bridge |
186:707f6e361f3e | 106 | rtw_interface->bringdown(); |
AnnaBridge | 167:e84263d55307 | 107 | } |
AnnaBridge | 167:e84263d55307 | 108 | |
AnnaBridge | 167:e84263d55307 | 109 | nsapi_error_t RTWInterface::set_network(const char *ip_address, const char *netmask, const char *gateway) |
AnnaBridge | 167:e84263d55307 | 110 | { |
AnnaBridge | 167:e84263d55307 | 111 | _dhcp = false; |
AnnaBridge | 167:e84263d55307 | 112 | strncpy(_ip_address, ip_address ? ip_address : "", sizeof(_ip_address)); |
AnnaBridge | 167:e84263d55307 | 113 | strncpy(_netmask, netmask ? netmask : "", sizeof(_netmask)); |
AnnaBridge | 167:e84263d55307 | 114 | strncpy(_gateway, gateway ? gateway : "", sizeof(_gateway)); |
AnnaBridge | 167:e84263d55307 | 115 | return NSAPI_ERROR_OK; |
AnnaBridge | 167:e84263d55307 | 116 | } |
AnnaBridge | 167:e84263d55307 | 117 | |
AnnaBridge | 167:e84263d55307 | 118 | nsapi_error_t RTWInterface::set_dhcp(bool dhcp) |
AnnaBridge | 167:e84263d55307 | 119 | { |
AnnaBridge | 167:e84263d55307 | 120 | _dhcp = dhcp; |
AnnaBridge | 167:e84263d55307 | 121 | return NSAPI_ERROR_OK; |
AnnaBridge | 167:e84263d55307 | 122 | } |
AnnaBridge | 167:e84263d55307 | 123 | |
AnnaBridge | 167:e84263d55307 | 124 | /* |
AnnaBridge | 167:e84263d55307 | 125 | * we may call connect multiple times |
AnnaBridge | 167:e84263d55307 | 126 | */ |
AnnaBridge | 167:e84263d55307 | 127 | nsapi_error_t RTWInterface::set_credentials(const char *ssid, const char *pass, nsapi_security_t security) |
AnnaBridge | 167:e84263d55307 | 128 | { |
Anna Bridge |
186:707f6e361f3e | 129 | if (!ssid) { |
Anna Bridge |
180:96ed750bd169 | 130 | return NSAPI_ERROR_PARAMETER; |
Anna Bridge |
180:96ed750bd169 | 131 | } |
Anna Bridge |
180:96ed750bd169 | 132 | |
Anna Bridge |
180:96ed750bd169 | 133 | switch (security) { |
Anna Bridge |
180:96ed750bd169 | 134 | case NSAPI_SECURITY_WPA: |
Anna Bridge |
180:96ed750bd169 | 135 | case NSAPI_SECURITY_WPA2: |
Anna Bridge |
180:96ed750bd169 | 136 | case NSAPI_SECURITY_WPA_WPA2: |
Anna Bridge |
180:96ed750bd169 | 137 | case NSAPI_SECURITY_WEP: |
Anna Bridge |
186:707f6e361f3e | 138 | if ((strlen(pass) < 8) || (strlen(pass) > 63)) { // 802.11 password 8-63 characters |
Anna Bridge |
180:96ed750bd169 | 139 | return NSAPI_ERROR_PARAMETER; |
Anna Bridge |
180:96ed750bd169 | 140 | } |
Anna Bridge |
180:96ed750bd169 | 141 | break; |
Anna Bridge |
180:96ed750bd169 | 142 | case NSAPI_SECURITY_NONE: |
Anna Bridge |
180:96ed750bd169 | 143 | break; |
Anna Bridge |
180:96ed750bd169 | 144 | default: |
Anna Bridge |
180:96ed750bd169 | 145 | return NSAPI_ERROR_PARAMETER; |
Anna Bridge |
180:96ed750bd169 | 146 | } |
Anna Bridge |
180:96ed750bd169 | 147 | |
AnnaBridge | 167:e84263d55307 | 148 | strncpy(_ssid, ssid, 255); |
AnnaBridge | 167:e84263d55307 | 149 | strncpy(_pass, pass, 255); |
AnnaBridge | 167:e84263d55307 | 150 | _security = security; |
AnnaBridge | 167:e84263d55307 | 151 | |
AnnaBridge | 167:e84263d55307 | 152 | return NSAPI_ERROR_OK; |
AnnaBridge | 167:e84263d55307 | 153 | } |
AnnaBridge | 167:e84263d55307 | 154 | |
AnnaBridge | 167:e84263d55307 | 155 | nsapi_error_t RTWInterface::connect() |
AnnaBridge | 167:e84263d55307 | 156 | { |
AnnaBridge | 167:e84263d55307 | 157 | int ret; |
AnnaBridge | 167:e84263d55307 | 158 | rtw_security_t sec; |
AnnaBridge | 167:e84263d55307 | 159 | |
Anna Bridge |
186:707f6e361f3e | 160 | if (!_ssid || (!_pass && _security != NSAPI_SECURITY_NONE)) { |
AnnaBridge | 167:e84263d55307 | 161 | printf("Invalid credentials\r\n"); |
AnnaBridge | 167:e84263d55307 | 162 | return NSAPI_ERROR_PARAMETER; |
AnnaBridge | 167:e84263d55307 | 163 | } |
AnnaBridge | 167:e84263d55307 | 164 | |
AnnaBridge | 167:e84263d55307 | 165 | switch (_security) { |
AnnaBridge | 167:e84263d55307 | 166 | case NSAPI_SECURITY_WPA: |
AnnaBridge | 167:e84263d55307 | 167 | case NSAPI_SECURITY_WPA2: |
AnnaBridge | 167:e84263d55307 | 168 | case NSAPI_SECURITY_WPA_WPA2: |
AnnaBridge | 167:e84263d55307 | 169 | sec = RTW_SECURITY_WPA_WPA2_MIXED; |
AnnaBridge | 167:e84263d55307 | 170 | break; |
AnnaBridge | 167:e84263d55307 | 171 | case NSAPI_SECURITY_WEP: |
AnnaBridge | 167:e84263d55307 | 172 | sec = RTW_SECURITY_WEP_PSK; |
AnnaBridge | 167:e84263d55307 | 173 | break; |
AnnaBridge | 167:e84263d55307 | 174 | case NSAPI_SECURITY_NONE: |
AnnaBridge | 167:e84263d55307 | 175 | sec = RTW_SECURITY_OPEN; |
Anna Bridge |
180:96ed750bd169 | 176 | break; |
AnnaBridge | 167:e84263d55307 | 177 | default: |
AnnaBridge | 167:e84263d55307 | 178 | return NSAPI_ERROR_PARAMETER; |
AnnaBridge | 167:e84263d55307 | 179 | } |
AnnaBridge | 167:e84263d55307 | 180 | |
Anna Bridge |
186:707f6e361f3e | 181 | if (_channel > 0 && _channel < 14) { |
Anna Bridge |
186:707f6e361f3e | 182 | uint8_t pscan_config = PSCAN_ENABLE; |
Anna Bridge |
186:707f6e361f3e | 183 | wifi_set_pscan_chan(&_channel, &pscan_config, 1); |
Anna Bridge |
186:707f6e361f3e | 184 | } |
Anna Bridge |
186:707f6e361f3e | 185 | |
AnnaBridge | 167:e84263d55307 | 186 | ret = wifi_connect(_ssid, sec, _pass, strlen(_ssid), strlen(_pass), 0, (void *)NULL); |
AnnaBridge | 167:e84263d55307 | 187 | if (ret != RTW_SUCCESS) { |
AnnaBridge | 167:e84263d55307 | 188 | printf("failed: %d\r\n", ret); |
AnnaBridge | 167:e84263d55307 | 189 | return NSAPI_ERROR_NO_CONNECTION; |
AnnaBridge | 167:e84263d55307 | 190 | } |
AnnaBridge | 167:e84263d55307 | 191 | |
Anna Bridge |
186:707f6e361f3e | 192 | rtw_emac.wlan_emac_link_change(true); |
Anna Bridge |
186:707f6e361f3e | 193 | if (!rtw_interface) { |
Anna Bridge |
186:707f6e361f3e | 194 | nsapi_error_t err = rtw_obn_stack.add_ethernet_interface(rtw_emac, true, &rtw_interface); |
Anna Bridge |
186:707f6e361f3e | 195 | if (err != NSAPI_ERROR_OK) { |
Anna Bridge |
186:707f6e361f3e | 196 | rtw_interface = NULL; |
Anna Bridge |
186:707f6e361f3e | 197 | return err; |
Anna Bridge |
186:707f6e361f3e | 198 | } |
Anna Bridge |
186:707f6e361f3e | 199 | } |
Anna Bridge |
186:707f6e361f3e | 200 | |
Anna Bridge |
186:707f6e361f3e | 201 | int rtw_if_bringup = rtw_interface->bringup(_dhcp, |
Anna Bridge |
186:707f6e361f3e | 202 | _ip_address[0] ? _ip_address : 0, |
Anna Bridge |
186:707f6e361f3e | 203 | _netmask[0] ? _netmask : 0, |
Anna Bridge |
186:707f6e361f3e | 204 | _gateway[0] ? _gateway : 0, |
Anna Bridge |
186:707f6e361f3e | 205 | DEFAULT_STACK); |
Anna Bridge |
186:707f6e361f3e | 206 | return rtw_if_bringup; |
AnnaBridge | 167:e84263d55307 | 207 | } |
AnnaBridge | 167:e84263d55307 | 208 | |
AnnaBridge | 167:e84263d55307 | 209 | nsapi_error_t RTWInterface::scan(WiFiAccessPoint *res, unsigned count) |
AnnaBridge | 167:e84263d55307 | 210 | { |
AnnaBridge | 167:e84263d55307 | 211 | static wifi_scan_hdl scan_handler; |
AnnaBridge | 167:e84263d55307 | 212 | scan_handler.ap_num = 0; |
Anna Bridge |
186:707f6e361f3e | 213 | if (!scan_handler.scan_sema) { |
AnnaBridge | 167:e84263d55307 | 214 | rtw_init_sema(&scan_handler.scan_sema, 0); |
Anna Bridge |
186:707f6e361f3e | 215 | } |
AnnaBridge | 167:e84263d55307 | 216 | scan_handler.scan_num = count; |
AnnaBridge | 167:e84263d55307 | 217 | scan_handler.ap_details = res; |
Anna Bridge |
186:707f6e361f3e | 218 | if (wifi_scan_networks(scan_result_handler, (void *)&scan_handler) != RTW_SUCCESS) { |
AnnaBridge | 167:e84263d55307 | 219 | printf("wifi scan failed\n\r"); |
AnnaBridge | 167:e84263d55307 | 220 | return NSAPI_ERROR_DEVICE_ERROR; |
AnnaBridge | 167:e84263d55307 | 221 | } |
Anna Bridge |
186:707f6e361f3e | 222 | if (rtw_down_timeout_sema( &scan_handler.scan_sema, MAX_SCAN_TIMEOUT ) == RTW_FALSE) { |
AnnaBridge | 167:e84263d55307 | 223 | printf("wifi scan timeout\r\n"); |
AnnaBridge | 167:e84263d55307 | 224 | return NSAPI_ERROR_DEVICE_ERROR; |
AnnaBridge | 167:e84263d55307 | 225 | } |
Anna Bridge |
186:707f6e361f3e | 226 | if (count <= 0 || count > scan_handler.ap_num) { |
AnnaBridge | 167:e84263d55307 | 227 | count = scan_handler.ap_num; |
Anna Bridge |
186:707f6e361f3e | 228 | } |
AnnaBridge | 167:e84263d55307 | 229 | return count; |
AnnaBridge | 167:e84263d55307 | 230 | } |
AnnaBridge | 167:e84263d55307 | 231 | |
AnnaBridge | 167:e84263d55307 | 232 | nsapi_error_t RTWInterface::set_channel(uint8_t channel) |
AnnaBridge | 167:e84263d55307 | 233 | { |
Anna Bridge |
186:707f6e361f3e | 234 | _channel = channel; |
AnnaBridge | 167:e84263d55307 | 235 | return NSAPI_ERROR_OK; |
AnnaBridge | 167:e84263d55307 | 236 | } |
AnnaBridge | 167:e84263d55307 | 237 | |
AnnaBridge | 167:e84263d55307 | 238 | int8_t RTWInterface::get_rssi() |
AnnaBridge | 167:e84263d55307 | 239 | { |
AnnaBridge | 167:e84263d55307 | 240 | int rssi = 0; |
Anna Bridge |
186:707f6e361f3e | 241 | if (wifi_get_rssi(&rssi) == 0) { |
AnnaBridge | 167:e84263d55307 | 242 | return (int8_t)rssi; |
Anna Bridge |
186:707f6e361f3e | 243 | } |
AnnaBridge | 167:e84263d55307 | 244 | return NSAPI_ERROR_OK; |
AnnaBridge | 167:e84263d55307 | 245 | } |
AnnaBridge | 167:e84263d55307 | 246 | |
AnnaBridge | 167:e84263d55307 | 247 | nsapi_error_t RTWInterface::connect(const char *ssid, const char *pass, |
Anna Bridge |
180:96ed750bd169 | 248 | nsapi_security_t security, uint8_t channel) |
AnnaBridge | 167:e84263d55307 | 249 | { |
Anna Bridge |
186:707f6e361f3e | 250 | set_credentials(ssid, pass, security); |
Anna Bridge |
186:707f6e361f3e | 251 | set_channel(channel); |
AnnaBridge | 167:e84263d55307 | 252 | return connect(); |
AnnaBridge | 167:e84263d55307 | 253 | } |
AnnaBridge | 167:e84263d55307 | 254 | |
AnnaBridge | 167:e84263d55307 | 255 | nsapi_error_t RTWInterface::disconnect() |
AnnaBridge | 167:e84263d55307 | 256 | { |
AnnaBridge | 167:e84263d55307 | 257 | char essid[33]; |
AnnaBridge | 167:e84263d55307 | 258 | |
Anna Bridge |
186:707f6e361f3e | 259 | rtw_emac.wlan_emac_link_change(false); |
Anna Bridge |
186:707f6e361f3e | 260 | rtw_interface->bringdown(); |
Anna Bridge |
186:707f6e361f3e | 261 | if (wifi_is_connected_to_ap() != RTW_SUCCESS) { |
AnnaBridge | 167:e84263d55307 | 262 | return NSAPI_ERROR_NO_CONNECTION; |
Anna Bridge |
186:707f6e361f3e | 263 | } |
Anna Bridge |
186:707f6e361f3e | 264 | if (wifi_disconnect()<0) { |
AnnaBridge | 167:e84263d55307 | 265 | return NSAPI_ERROR_DEVICE_ERROR; |
AnnaBridge | 167:e84263d55307 | 266 | } |
Anna Bridge |
186:707f6e361f3e | 267 | while(1) { |
Anna Bridge |
186:707f6e361f3e | 268 | if (wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) { |
AnnaBridge | 167:e84263d55307 | 269 | break; |
AnnaBridge | 167:e84263d55307 | 270 | } |
AnnaBridge | 167:e84263d55307 | 271 | } |
AnnaBridge | 167:e84263d55307 | 272 | return NSAPI_ERROR_OK; |
AnnaBridge | 167:e84263d55307 | 273 | } |
AnnaBridge | 167:e84263d55307 | 274 | |
AnnaBridge | 167:e84263d55307 | 275 | int RTWInterface::is_connected() |
AnnaBridge | 167:e84263d55307 | 276 | { |
AnnaBridge | 167:e84263d55307 | 277 | return !wifi_is_connected_to_ap(); |
AnnaBridge | 167:e84263d55307 | 278 | } |
AnnaBridge | 167:e84263d55307 | 279 | |
AnnaBridge | 167:e84263d55307 | 280 | const char *RTWInterface::get_mac_address() |
AnnaBridge | 167:e84263d55307 | 281 | { |
Anna Bridge |
186:707f6e361f3e | 282 | if (rtw_interface->get_mac_address(_mac_address, sizeof _mac_address)) { |
Anna Bridge |
186:707f6e361f3e | 283 | return _mac_address; |
Anna Bridge |
186:707f6e361f3e | 284 | } |
Anna Bridge |
186:707f6e361f3e | 285 | return 0; |
AnnaBridge | 167:e84263d55307 | 286 | } |
AnnaBridge | 167:e84263d55307 | 287 | |
AnnaBridge | 167:e84263d55307 | 288 | const char *RTWInterface::get_ip_address() |
AnnaBridge | 167:e84263d55307 | 289 | { |
Anna Bridge |
186:707f6e361f3e | 290 | if (rtw_interface->get_ip_address(_ip_address, sizeof _ip_address)) { |
AnnaBridge | 167:e84263d55307 | 291 | return _ip_address; |
AnnaBridge | 167:e84263d55307 | 292 | } |
AnnaBridge | 167:e84263d55307 | 293 | return 0; |
AnnaBridge | 167:e84263d55307 | 294 | } |
AnnaBridge | 167:e84263d55307 | 295 | |
AnnaBridge | 167:e84263d55307 | 296 | const char *RTWInterface::get_netmask() |
AnnaBridge | 167:e84263d55307 | 297 | { |
Anna Bridge |
186:707f6e361f3e | 298 | if (rtw_interface->get_netmask(_netmask, sizeof _netmask)) { |
AnnaBridge | 167:e84263d55307 | 299 | return _netmask; |
AnnaBridge | 167:e84263d55307 | 300 | } |
AnnaBridge | 167:e84263d55307 | 301 | return 0; |
AnnaBridge | 167:e84263d55307 | 302 | } |
AnnaBridge | 167:e84263d55307 | 303 | |
AnnaBridge | 167:e84263d55307 | 304 | const char *RTWInterface::get_gateway() |
AnnaBridge | 167:e84263d55307 | 305 | { |
Anna Bridge |
186:707f6e361f3e | 306 | if (rtw_interface->get_gateway(_gateway, sizeof _gateway)) { |
AnnaBridge | 167:e84263d55307 | 307 | return _gateway; |
AnnaBridge | 167:e84263d55307 | 308 | } |
AnnaBridge | 167:e84263d55307 | 309 | return 0; |
AnnaBridge | 167:e84263d55307 | 310 | } |
AnnaBridge | 167:e84263d55307 | 311 | |
AnnaBridge | 167:e84263d55307 | 312 | NetworkStack *RTWInterface::get_stack() |
AnnaBridge | 167:e84263d55307 | 313 | { |
Anna Bridge |
186:707f6e361f3e | 314 | return &rtw_obn_stack; |
Anna Bridge |
180:96ed750bd169 | 315 | } |