LWIPBP3595Interface library for mbed-os.
Dependents: LWIPBP3595Interface_STA_for_mbed-os
Fork of LWIPBP3595Interface by
LWIPBP3595Interface.cpp@5:d03489ec5033, 2016-11-24 (annotated)
- Committer:
- dkato
- Date:
- Thu Nov 24 09:13:23 2016 +0000
- Revision:
- 5:d03489ec5033
- Parent:
- 4:b49b4b36aaa4
- Child:
- 6:993197aaf5a4
Supports mbed os 5.2.3.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tousaki | 0:a933851e5d22 | 1 | /* LWIP implementation of NetworkInterfaceAPI |
tousaki | 0:a933851e5d22 | 2 | * Copyright (c) 2015 ARM Limited |
tousaki | 0:a933851e5d22 | 3 | * |
tousaki | 0:a933851e5d22 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
tousaki | 0:a933851e5d22 | 5 | * you may not use this file except in compliance with the License. |
tousaki | 0:a933851e5d22 | 6 | * You may obtain a copy of the License at |
tousaki | 0:a933851e5d22 | 7 | * |
tousaki | 0:a933851e5d22 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
tousaki | 0:a933851e5d22 | 9 | * |
tousaki | 0:a933851e5d22 | 10 | * Unless required by applicable law or agreed to in writing, software |
tousaki | 0:a933851e5d22 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
tousaki | 0:a933851e5d22 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
tousaki | 0:a933851e5d22 | 13 | * See the License for the specific language governing permissions and |
tousaki | 0:a933851e5d22 | 14 | * limitations under the License. |
tousaki | 0:a933851e5d22 | 15 | */ |
tousaki | 0:a933851e5d22 | 16 | |
tousaki | 0:a933851e5d22 | 17 | #include "LWIPBP3595Interface.h" |
tousaki | 0:a933851e5d22 | 18 | #include "LWIPBP3595Interface_BssType.h" |
dkato | 2:c7e325599570 | 19 | #include "lwip_wifi_stack.h" |
tousaki | 0:a933851e5d22 | 20 | #include "WlanBP3595.h" |
tousaki | 0:a933851e5d22 | 21 | |
dkato | 4:b49b4b36aaa4 | 22 | static bool _init_end = false; |
dkato | 4:b49b4b36aaa4 | 23 | static grp_wld_site_survey_result_array survey_result; |
dkato | 4:b49b4b36aaa4 | 24 | |
tousaki | 0:a933851e5d22 | 25 | static void _wlan_inf_callback(uint8_t ucType, uint16_t usWid, uint16_t usSize, uint8_t *pucData) { |
tousaki | 0:a933851e5d22 | 26 | if ((ucType == 'I') && (usWid == 0x0005)) { |
tousaki | 0:a933851e5d22 | 27 | if (pucData[0] == 0x01) { // CONNECTED |
dkato | 3:2ff2514e4fca | 28 | /* Notify the LWIPBP3595Interface driver that WLAN was connected */ |
tousaki | 0:a933851e5d22 | 29 | WlanBP3595_Connected(); |
tousaki | 0:a933851e5d22 | 30 | } else { |
dkato | 3:2ff2514e4fca | 31 | /* Notify the LWIPBP3595Interface driver that WLAN was disconnected */ |
tousaki | 0:a933851e5d22 | 32 | WlanBP3595_Disconnected(); |
tousaki | 0:a933851e5d22 | 33 | } |
tousaki | 0:a933851e5d22 | 34 | } |
tousaki | 0:a933851e5d22 | 35 | } |
tousaki | 0:a933851e5d22 | 36 | |
tousaki | 0:a933851e5d22 | 37 | static int _wlan_init() { |
tousaki | 0:a933851e5d22 | 38 | uint32_t status; |
dkato | 4:b49b4b36aaa4 | 39 | grp_u8 ucWidData8; // 8bit wid data |
tousaki | 0:a933851e5d22 | 40 | |
dkato | 4:b49b4b36aaa4 | 41 | if (_init_end == false) { |
dkato | 4:b49b4b36aaa4 | 42 | // Initialize WlanBP3595 |
dkato | 4:b49b4b36aaa4 | 43 | if (WlanBP3595_Init(&_wlan_inf_callback) != 0) { |
dkato | 4:b49b4b36aaa4 | 44 | return -1; |
dkato | 4:b49b4b36aaa4 | 45 | } |
tousaki | 0:a933851e5d22 | 46 | |
dkato | 4:b49b4b36aaa4 | 47 | // Wait until WLAN_BP3595_START timeout 60s |
dkato | 4:b49b4b36aaa4 | 48 | while (1) { |
dkato | 4:b49b4b36aaa4 | 49 | Thread::wait(200); |
dkato | 4:b49b4b36aaa4 | 50 | status = WlanBP3595_GetWlanSts(); |
dkato | 4:b49b4b36aaa4 | 51 | if (status == WLAN_BP3595_START) { |
dkato | 4:b49b4b36aaa4 | 52 | break; |
dkato | 4:b49b4b36aaa4 | 53 | } |
tousaki | 0:a933851e5d22 | 54 | } |
dkato | 4:b49b4b36aaa4 | 55 | |
dkato | 4:b49b4b36aaa4 | 56 | // Set BSS type |
dkato | 4:b49b4b36aaa4 | 57 | ucWidData8 = BSS_TYPE; |
dkato | 4:b49b4b36aaa4 | 58 | if (WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_BSS_TYPE, &ucWidData8) != 0) { |
dkato | 4:b49b4b36aaa4 | 59 | return -1; |
dkato | 4:b49b4b36aaa4 | 60 | } |
dkato | 4:b49b4b36aaa4 | 61 | |
dkato | 4:b49b4b36aaa4 | 62 | ucWidData8 = 0x02; // Diversity |
dkato | 4:b49b4b36aaa4 | 63 | WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_SEL_ANTENNA, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 64 | _init_end = true; |
tousaki | 0:a933851e5d22 | 65 | } |
tousaki | 0:a933851e5d22 | 66 | |
tousaki | 0:a933851e5d22 | 67 | return 0; |
tousaki | 0:a933851e5d22 | 68 | } |
tousaki | 0:a933851e5d22 | 69 | |
tousaki | 0:a933851e5d22 | 70 | static int _wlan_setting(const char *ssid, const char *pass, nsapi_security_t security) |
tousaki | 0:a933851e5d22 | 71 | { |
tousaki | 0:a933851e5d22 | 72 | int ret; |
tousaki | 0:a933851e5d22 | 73 | grp_u8 ucWidData8; // 8bit wid data |
tousaki | 0:a933851e5d22 | 74 | grp_wld_byte_array tBAWidData; // byte array wid data |
tousaki | 0:a933851e5d22 | 75 | |
dkato | 4:b49b4b36aaa4 | 76 | if (_wlan_init() != 0) { |
dkato | 4:b49b4b36aaa4 | 77 | return NSAPI_ERROR_DEVICE_ERROR; |
tousaki | 0:a933851e5d22 | 78 | } |
tousaki | 0:a933851e5d22 | 79 | |
tousaki | 0:a933851e5d22 | 80 | // Set SSID |
tousaki | 0:a933851e5d22 | 81 | tBAWidData.pucData = (grp_u8 *)ssid; |
tousaki | 0:a933851e5d22 | 82 | tBAWidData.ulSize = strlen((char *)tBAWidData.pucData); |
tousaki | 0:a933851e5d22 | 83 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_SSID, &tBAWidData); |
tousaki | 0:a933851e5d22 | 84 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 85 | return NSAPI_ERROR_AUTH_FAILURE; |
tousaki | 0:a933851e5d22 | 86 | } |
tousaki | 0:a933851e5d22 | 87 | |
dkato | 5:d03489ec5033 | 88 | if ((security == NSAPI_SECURITY_WPA) |
dkato | 5:d03489ec5033 | 89 | || (security == NSAPI_SECURITY_WPA2) |
dkato | 5:d03489ec5033 | 90 | || (security == NSAPI_SECURITY_WPA_WPA2)) { |
tousaki | 0:a933851e5d22 | 91 | // Set PSK |
tousaki | 0:a933851e5d22 | 92 | tBAWidData.pucData = (grp_u8 *)pass; |
tousaki | 0:a933851e5d22 | 93 | tBAWidData.ulSize = strlen((char *)tBAWidData.pucData); |
tousaki | 0:a933851e5d22 | 94 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_11I_PSK, &tBAWidData); |
tousaki | 0:a933851e5d22 | 95 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 96 | return NSAPI_ERROR_AUTH_FAILURE; |
tousaki | 0:a933851e5d22 | 97 | } |
tousaki | 0:a933851e5d22 | 98 | } |
tousaki | 0:a933851e5d22 | 99 | |
tousaki | 0:a933851e5d22 | 100 | // Set 11i mode |
tousaki | 0:a933851e5d22 | 101 | switch (security) { |
tousaki | 0:a933851e5d22 | 102 | case NSAPI_SECURITY_WEP: |
tousaki | 0:a933851e5d22 | 103 | ret = strlen(pass); |
tousaki | 0:a933851e5d22 | 104 | if (ret == 5) { |
tousaki | 0:a933851e5d22 | 105 | ucWidData8 = 0x03; // WEP64 |
tousaki | 0:a933851e5d22 | 106 | } else if (ret == 13) { |
tousaki | 0:a933851e5d22 | 107 | ucWidData8 = 0x07; // WEP128 |
tousaki | 0:a933851e5d22 | 108 | } else { |
dkato | 4:b49b4b36aaa4 | 109 | return NSAPI_ERROR_PARAMETER; |
tousaki | 0:a933851e5d22 | 110 | } |
tousaki | 0:a933851e5d22 | 111 | break; |
tousaki | 0:a933851e5d22 | 112 | case NSAPI_SECURITY_WPA: |
dkato | 4:b49b4b36aaa4 | 113 | ucWidData8 = 0x69; // WPA-TKIP/AES(PSK) |
dkato | 4:b49b4b36aaa4 | 114 | break; |
tousaki | 0:a933851e5d22 | 115 | case NSAPI_SECURITY_WPA2: |
dkato | 4:b49b4b36aaa4 | 116 | ucWidData8 = 0x71; // WPA2-TKIP/AES(PSK) |
dkato | 4:b49b4b36aaa4 | 117 | break; |
dkato | 4:b49b4b36aaa4 | 118 | case NSAPI_SECURITY_WPA_WPA2: |
tousaki | 0:a933851e5d22 | 119 | ucWidData8 = 0x79; // WPA/WPA2 Mixed |
tousaki | 0:a933851e5d22 | 120 | break; |
tousaki | 0:a933851e5d22 | 121 | case NSAPI_SECURITY_NONE: |
tousaki | 0:a933851e5d22 | 122 | default: |
tousaki | 0:a933851e5d22 | 123 | ucWidData8 = 0x00; |
tousaki | 0:a933851e5d22 | 124 | break; |
tousaki | 0:a933851e5d22 | 125 | } |
tousaki | 0:a933851e5d22 | 126 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_11I_MODE, &ucWidData8); |
tousaki | 0:a933851e5d22 | 127 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 128 | return NSAPI_ERROR_AUTH_FAILURE; |
tousaki | 0:a933851e5d22 | 129 | } |
tousaki | 0:a933851e5d22 | 130 | |
tousaki | 0:a933851e5d22 | 131 | if (security == NSAPI_SECURITY_WEP) { |
tousaki | 0:a933851e5d22 | 132 | // Set WEP KEY |
tousaki | 0:a933851e5d22 | 133 | tBAWidData.pucData = (grp_u8 *)pass; |
tousaki | 0:a933851e5d22 | 134 | tBAWidData.ulSize = strlen((char *)tBAWidData.pucData); |
tousaki | 0:a933851e5d22 | 135 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_WEP_KEY, &tBAWidData); |
tousaki | 0:a933851e5d22 | 136 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 137 | return NSAPI_ERROR_AUTH_FAILURE; |
tousaki | 0:a933851e5d22 | 138 | } |
tousaki | 0:a933851e5d22 | 139 | } |
tousaki | 0:a933851e5d22 | 140 | |
tousaki | 0:a933851e5d22 | 141 | return 0; |
tousaki | 0:a933851e5d22 | 142 | } |
tousaki | 0:a933851e5d22 | 143 | |
dkato | 2:c7e325599570 | 144 | /* Interface implementation */ |
dkato | 3:2ff2514e4fca | 145 | LWIPBP3595Interface::LWIPBP3595Interface() |
dkato | 4:b49b4b36aaa4 | 146 | : _dhcp(true), _ip_address(), _netmask(), _gateway() |
dkato | 3:2ff2514e4fca | 147 | { |
dkato | 3:2ff2514e4fca | 148 | } |
dkato | 3:2ff2514e4fca | 149 | |
dkato | 5:d03489ec5033 | 150 | nsapi_error_t LWIPBP3595Interface::set_network(const char *ip_address, const char *netmask, const char *gateway) |
dkato | 3:2ff2514e4fca | 151 | { |
dkato | 3:2ff2514e4fca | 152 | _dhcp = false; |
dkato | 3:2ff2514e4fca | 153 | strncpy(_ip_address, ip_address ? ip_address : "", sizeof(_ip_address)); |
dkato | 3:2ff2514e4fca | 154 | strncpy(_netmask, netmask ? netmask : "", sizeof(_netmask)); |
dkato | 3:2ff2514e4fca | 155 | strncpy(_gateway, gateway ? gateway : "", sizeof(_gateway)); |
dkato | 5:d03489ec5033 | 156 | return NSAPI_ERROR_OK; |
dkato | 3:2ff2514e4fca | 157 | } |
dkato | 3:2ff2514e4fca | 158 | |
dkato | 5:d03489ec5033 | 159 | nsapi_error_t LWIPBP3595Interface::set_dhcp(bool dhcp) |
dkato | 3:2ff2514e4fca | 160 | { |
dkato | 3:2ff2514e4fca | 161 | _dhcp = dhcp; |
dkato | 5:d03489ec5033 | 162 | return NSAPI_ERROR_OK; |
dkato | 3:2ff2514e4fca | 163 | } |
dkato | 3:2ff2514e4fca | 164 | |
dkato | 5:d03489ec5033 | 165 | nsapi_error_t LWIPBP3595Interface::set_credentials(const char *ssid, const char *pass, nsapi_security_t security) |
dkato | 3:2ff2514e4fca | 166 | { |
dkato | 4:b49b4b36aaa4 | 167 | memset(_ssid, 0, sizeof(_ssid)); |
dkato | 4:b49b4b36aaa4 | 168 | strncpy(_ssid, ssid, sizeof(_ssid)); |
dkato | 3:2ff2514e4fca | 169 | |
dkato | 4:b49b4b36aaa4 | 170 | memset(_pass, 0, sizeof(_pass)); |
dkato | 4:b49b4b36aaa4 | 171 | strncpy(_pass, pass, sizeof(_pass)); |
dkato | 3:2ff2514e4fca | 172 | |
dkato | 3:2ff2514e4fca | 173 | _security = security; |
dkato | 3:2ff2514e4fca | 174 | |
dkato | 3:2ff2514e4fca | 175 | return 0; |
dkato | 3:2ff2514e4fca | 176 | } |
dkato | 3:2ff2514e4fca | 177 | |
dkato | 5:d03489ec5033 | 178 | nsapi_error_t LWIPBP3595Interface::set_channel(uint8_t channel) |
dkato | 3:2ff2514e4fca | 179 | { |
dkato | 4:b49b4b36aaa4 | 180 | int ret; |
dkato | 4:b49b4b36aaa4 | 181 | grp_u8 ucWidData8; // 8bit wid data |
dkato | 4:b49b4b36aaa4 | 182 | |
dkato | 4:b49b4b36aaa4 | 183 | if (_wlan_init() != 0) { |
dkato | 4:b49b4b36aaa4 | 184 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 185 | } |
dkato | 4:b49b4b36aaa4 | 186 | |
dkato | 4:b49b4b36aaa4 | 187 | if (channel != 0) { |
dkato | 4:b49b4b36aaa4 | 188 | ucWidData8 = channel; |
dkato | 4:b49b4b36aaa4 | 189 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_CHANNEL, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 190 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 191 | return NSAPI_ERROR_PARAMETER; |
dkato | 4:b49b4b36aaa4 | 192 | } |
dkato | 4:b49b4b36aaa4 | 193 | } |
dkato | 4:b49b4b36aaa4 | 194 | |
dkato | 3:2ff2514e4fca | 195 | return 0; |
dkato | 3:2ff2514e4fca | 196 | } |
dkato | 3:2ff2514e4fca | 197 | |
dkato | 3:2ff2514e4fca | 198 | int8_t LWIPBP3595Interface::get_rssi() |
dkato | 3:2ff2514e4fca | 199 | { |
dkato | 4:b49b4b36aaa4 | 200 | int ret; |
dkato | 4:b49b4b36aaa4 | 201 | grp_u8 ucWidData8; // 8bit wid data |
dkato | 4:b49b4b36aaa4 | 202 | |
dkato | 4:b49b4b36aaa4 | 203 | if (_init_end) { |
dkato | 4:b49b4b36aaa4 | 204 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_GET_RSSI, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 205 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 206 | return 0; |
dkato | 4:b49b4b36aaa4 | 207 | } |
dkato | 4:b49b4b36aaa4 | 208 | |
dkato | 4:b49b4b36aaa4 | 209 | return ucWidData8; |
dkato | 4:b49b4b36aaa4 | 210 | } |
dkato | 3:2ff2514e4fca | 211 | return 0; |
dkato | 3:2ff2514e4fca | 212 | } |
dkato | 3:2ff2514e4fca | 213 | |
dkato | 5:d03489ec5033 | 214 | nsapi_error_t LWIPBP3595Interface::connect(const char *ssid, const char *pass, nsapi_security_t security, uint8_t channel) |
dkato | 3:2ff2514e4fca | 215 | { |
dkato | 3:2ff2514e4fca | 216 | set_credentials(ssid, pass, security); |
dkato | 3:2ff2514e4fca | 217 | set_channel(channel); |
dkato | 3:2ff2514e4fca | 218 | return connect(); |
dkato | 3:2ff2514e4fca | 219 | } |
dkato | 3:2ff2514e4fca | 220 | |
dkato | 5:d03489ec5033 | 221 | nsapi_error_t LWIPBP3595Interface::connect() |
tousaki | 0:a933851e5d22 | 222 | { |
dkato | 4:b49b4b36aaa4 | 223 | int ret; |
dkato | 4:b49b4b36aaa4 | 224 | |
dkato | 4:b49b4b36aaa4 | 225 | ret = _wlan_setting(_ssid, _pass, _security); |
dkato | 4:b49b4b36aaa4 | 226 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 227 | return ret; |
tousaki | 0:a933851e5d22 | 228 | } |
tousaki | 0:a933851e5d22 | 229 | |
dkato | 3:2ff2514e4fca | 230 | return mbed_lwip_wifi_bringup(_dhcp, |
dkato | 3:2ff2514e4fca | 231 | _ip_address[0] ? _ip_address : 0, |
dkato | 3:2ff2514e4fca | 232 | _netmask[0] ? _netmask : 0, |
dkato | 3:2ff2514e4fca | 233 | _gateway[0] ? _gateway : 0); |
tousaki | 0:a933851e5d22 | 234 | } |
tousaki | 0:a933851e5d22 | 235 | |
dkato | 5:d03489ec5033 | 236 | nsapi_error_t LWIPBP3595Interface::disconnect() |
tousaki | 0:a933851e5d22 | 237 | { |
dkato | 3:2ff2514e4fca | 238 | return mbed_lwip_wifi_bringdown(); |
dkato | 3:2ff2514e4fca | 239 | } |
dkato | 3:2ff2514e4fca | 240 | |
dkato | 5:d03489ec5033 | 241 | nsapi_size_or_error_t LWIPBP3595Interface::scan(WiFiAccessPoint *res, unsigned count) |
dkato | 3:2ff2514e4fca | 242 | { |
dkato | 4:b49b4b36aaa4 | 243 | int cnt; |
dkato | 4:b49b4b36aaa4 | 244 | int ret; |
dkato | 4:b49b4b36aaa4 | 245 | grp_u8 ucWidData8; // 8bit wid data |
dkato | 4:b49b4b36aaa4 | 246 | nsapi_wifi_ap_t ap; |
dkato | 4:b49b4b36aaa4 | 247 | |
dkato | 4:b49b4b36aaa4 | 248 | if (_wlan_init() != 0) { |
dkato | 4:b49b4b36aaa4 | 249 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 250 | } |
dkato | 4:b49b4b36aaa4 | 251 | |
dkato | 4:b49b4b36aaa4 | 252 | ucWidData8 = 0x01; // All channel |
dkato | 4:b49b4b36aaa4 | 253 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_SITE_SURVEY, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 254 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 255 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 256 | } |
dkato | 4:b49b4b36aaa4 | 257 | |
dkato | 4:b49b4b36aaa4 | 258 | ucWidData8 = 0x01; |
dkato | 4:b49b4b36aaa4 | 259 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_START_SCAN_REQ, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 260 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 261 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 262 | } |
dkato | 4:b49b4b36aaa4 | 263 | |
dkato | 4:b49b4b36aaa4 | 264 | while (1) { |
dkato | 4:b49b4b36aaa4 | 265 | ucWidData8 = 0x00; |
dkato | 4:b49b4b36aaa4 | 266 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_GET_CHECK_SCAN_END, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 267 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 268 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 269 | } |
dkato | 4:b49b4b36aaa4 | 270 | if (ucWidData8 == 0) { |
dkato | 4:b49b4b36aaa4 | 271 | break; |
dkato | 4:b49b4b36aaa4 | 272 | } |
dkato | 4:b49b4b36aaa4 | 273 | Thread::wait(100); |
dkato | 4:b49b4b36aaa4 | 274 | } |
dkato | 4:b49b4b36aaa4 | 275 | |
dkato | 4:b49b4b36aaa4 | 276 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_GET_SITE_SURVEY_RESULT, &survey_result); |
dkato | 4:b49b4b36aaa4 | 277 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 278 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 279 | } |
dkato | 4:b49b4b36aaa4 | 280 | |
dkato | 4:b49b4b36aaa4 | 281 | for (cnt = 0; (cnt < count) && (cnt < survey_result.iCnt); cnt++) { |
dkato | 4:b49b4b36aaa4 | 282 | grp_wld_site_survey_result * wk_result = &survey_result.atResult[cnt]; |
dkato | 4:b49b4b36aaa4 | 283 | |
dkato | 4:b49b4b36aaa4 | 284 | memcpy(ap.ssid, wk_result->aucSsid, 33); |
dkato | 4:b49b4b36aaa4 | 285 | memcpy(ap.bssid, wk_result->aucBssid, 6); |
dkato | 4:b49b4b36aaa4 | 286 | switch (wk_result->ucSecurity) { |
dkato | 4:b49b4b36aaa4 | 287 | case 0x00: |
dkato | 4:b49b4b36aaa4 | 288 | ap.security = NSAPI_SECURITY_NONE; |
dkato | 4:b49b4b36aaa4 | 289 | break; |
dkato | 4:b49b4b36aaa4 | 290 | case 0x01: |
dkato | 4:b49b4b36aaa4 | 291 | ap.security = NSAPI_SECURITY_WEP; |
dkato | 4:b49b4b36aaa4 | 292 | break; |
dkato | 4:b49b4b36aaa4 | 293 | case 0x29: |
dkato | 4:b49b4b36aaa4 | 294 | case 0x49: |
dkato | 4:b49b4b36aaa4 | 295 | case 0x69: |
dkato | 4:b49b4b36aaa4 | 296 | ap.security = NSAPI_SECURITY_WPA; |
dkato | 4:b49b4b36aaa4 | 297 | break; |
dkato | 4:b49b4b36aaa4 | 298 | case 0x31: |
dkato | 4:b49b4b36aaa4 | 299 | case 0x51: |
dkato | 4:b49b4b36aaa4 | 300 | case 0x71: |
dkato | 4:b49b4b36aaa4 | 301 | ap.security = NSAPI_SECURITY_WPA2; |
dkato | 4:b49b4b36aaa4 | 302 | break; |
dkato | 4:b49b4b36aaa4 | 303 | case 0x79: |
dkato | 4:b49b4b36aaa4 | 304 | ap.security = NSAPI_SECURITY_WPA_WPA2; |
dkato | 4:b49b4b36aaa4 | 305 | break; |
dkato | 4:b49b4b36aaa4 | 306 | default: |
dkato | 4:b49b4b36aaa4 | 307 | ap.security = NSAPI_SECURITY_UNKNOWN; |
dkato | 4:b49b4b36aaa4 | 308 | break; |
dkato | 4:b49b4b36aaa4 | 309 | } |
dkato | 4:b49b4b36aaa4 | 310 | ap.rssi = wk_result->ucRxPower; |
dkato | 4:b49b4b36aaa4 | 311 | ap.channel = wk_result->ucChannel; |
dkato | 4:b49b4b36aaa4 | 312 | |
dkato | 4:b49b4b36aaa4 | 313 | res[cnt] = WiFiAccessPoint(ap); |
dkato | 4:b49b4b36aaa4 | 314 | } |
dkato | 4:b49b4b36aaa4 | 315 | |
dkato | 4:b49b4b36aaa4 | 316 | return cnt; |
dkato | 3:2ff2514e4fca | 317 | } |
dkato | 3:2ff2514e4fca | 318 | |
dkato | 3:2ff2514e4fca | 319 | const char *LWIPBP3595Interface::get_mac_address() |
dkato | 3:2ff2514e4fca | 320 | { |
dkato | 3:2ff2514e4fca | 321 | return mbed_lwip_wifi_get_mac_address(); |
tousaki | 0:a933851e5d22 | 322 | } |
tousaki | 0:a933851e5d22 | 323 | |
tousaki | 0:a933851e5d22 | 324 | const char *LWIPBP3595Interface::get_ip_address() |
tousaki | 0:a933851e5d22 | 325 | { |
dkato | 3:2ff2514e4fca | 326 | if (mbed_lwip_wifi_get_ip_address(_ip_address, sizeof _ip_address)) { |
dkato | 3:2ff2514e4fca | 327 | return _ip_address; |
dkato | 3:2ff2514e4fca | 328 | } |
dkato | 3:2ff2514e4fca | 329 | |
dkato | 5:d03489ec5033 | 330 | return NULL; |
tousaki | 0:a933851e5d22 | 331 | } |
tousaki | 0:a933851e5d22 | 332 | |
dkato | 3:2ff2514e4fca | 333 | const char *LWIPBP3595Interface::get_netmask() |
tousaki | 0:a933851e5d22 | 334 | { |
dkato | 3:2ff2514e4fca | 335 | if (mbed_lwip_wifi_get_netmask(_netmask, sizeof _netmask)) { |
dkato | 3:2ff2514e4fca | 336 | return _netmask; |
dkato | 3:2ff2514e4fca | 337 | } |
dkato | 3:2ff2514e4fca | 338 | |
dkato | 5:d03489ec5033 | 339 | return NULL; |
dkato | 3:2ff2514e4fca | 340 | } |
dkato | 3:2ff2514e4fca | 341 | |
dkato | 3:2ff2514e4fca | 342 | const char *LWIPBP3595Interface::get_gateway() |
dkato | 3:2ff2514e4fca | 343 | { |
dkato | 3:2ff2514e4fca | 344 | if (mbed_lwip_wifi_get_gateway(_gateway, sizeof _gateway)) { |
dkato | 3:2ff2514e4fca | 345 | return _gateway; |
dkato | 3:2ff2514e4fca | 346 | } |
dkato | 3:2ff2514e4fca | 347 | |
dkato | 5:d03489ec5033 | 348 | return NULL; |
tousaki | 0:a933851e5d22 | 349 | } |
dkato | 2:c7e325599570 | 350 | |
dkato | 2:c7e325599570 | 351 | NetworkStack *LWIPBP3595Interface::get_stack() |
dkato | 2:c7e325599570 | 352 | { |
dkato | 2:c7e325599570 | 353 | return nsapi_create_stack(&lwip_wifi_stack); |
dkato | 2:c7e325599570 | 354 | } |
dkato | 4:b49b4b36aaa4 | 355 |