LWIPBP3595Interface library for mbed-os.
Dependents: LWIPBP3595Interface_STA_for_mbed-os
Fork of LWIPBP3595Interface by
LWIPBP3595Interface.cpp@6:993197aaf5a4, 2017-03-28 (annotated)
- Committer:
- dkato
- Date:
- Tue Mar 28 09:50:17 2017 +0000
- Revision:
- 6:993197aaf5a4
- Parent:
- 5:d03489ec5033
Fixed static IP address setting.
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 | |
tousaki | 0:a933851e5d22 | 76 | // Set SSID |
tousaki | 0:a933851e5d22 | 77 | tBAWidData.pucData = (grp_u8 *)ssid; |
tousaki | 0:a933851e5d22 | 78 | tBAWidData.ulSize = strlen((char *)tBAWidData.pucData); |
tousaki | 0:a933851e5d22 | 79 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_SSID, &tBAWidData); |
tousaki | 0:a933851e5d22 | 80 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 81 | return NSAPI_ERROR_AUTH_FAILURE; |
tousaki | 0:a933851e5d22 | 82 | } |
tousaki | 0:a933851e5d22 | 83 | |
dkato | 5:d03489ec5033 | 84 | if ((security == NSAPI_SECURITY_WPA) |
dkato | 5:d03489ec5033 | 85 | || (security == NSAPI_SECURITY_WPA2) |
dkato | 5:d03489ec5033 | 86 | || (security == NSAPI_SECURITY_WPA_WPA2)) { |
tousaki | 0:a933851e5d22 | 87 | // Set PSK |
tousaki | 0:a933851e5d22 | 88 | tBAWidData.pucData = (grp_u8 *)pass; |
tousaki | 0:a933851e5d22 | 89 | tBAWidData.ulSize = strlen((char *)tBAWidData.pucData); |
tousaki | 0:a933851e5d22 | 90 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_11I_PSK, &tBAWidData); |
tousaki | 0:a933851e5d22 | 91 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 92 | return NSAPI_ERROR_AUTH_FAILURE; |
tousaki | 0:a933851e5d22 | 93 | } |
tousaki | 0:a933851e5d22 | 94 | } |
tousaki | 0:a933851e5d22 | 95 | |
tousaki | 0:a933851e5d22 | 96 | // Set 11i mode |
tousaki | 0:a933851e5d22 | 97 | switch (security) { |
tousaki | 0:a933851e5d22 | 98 | case NSAPI_SECURITY_WEP: |
tousaki | 0:a933851e5d22 | 99 | ret = strlen(pass); |
tousaki | 0:a933851e5d22 | 100 | if (ret == 5) { |
tousaki | 0:a933851e5d22 | 101 | ucWidData8 = 0x03; // WEP64 |
tousaki | 0:a933851e5d22 | 102 | } else if (ret == 13) { |
tousaki | 0:a933851e5d22 | 103 | ucWidData8 = 0x07; // WEP128 |
tousaki | 0:a933851e5d22 | 104 | } else { |
dkato | 4:b49b4b36aaa4 | 105 | return NSAPI_ERROR_PARAMETER; |
tousaki | 0:a933851e5d22 | 106 | } |
tousaki | 0:a933851e5d22 | 107 | break; |
tousaki | 0:a933851e5d22 | 108 | case NSAPI_SECURITY_WPA: |
dkato | 4:b49b4b36aaa4 | 109 | ucWidData8 = 0x69; // WPA-TKIP/AES(PSK) |
dkato | 4:b49b4b36aaa4 | 110 | break; |
tousaki | 0:a933851e5d22 | 111 | case NSAPI_SECURITY_WPA2: |
dkato | 4:b49b4b36aaa4 | 112 | ucWidData8 = 0x71; // WPA2-TKIP/AES(PSK) |
dkato | 4:b49b4b36aaa4 | 113 | break; |
dkato | 4:b49b4b36aaa4 | 114 | case NSAPI_SECURITY_WPA_WPA2: |
tousaki | 0:a933851e5d22 | 115 | ucWidData8 = 0x79; // WPA/WPA2 Mixed |
tousaki | 0:a933851e5d22 | 116 | break; |
tousaki | 0:a933851e5d22 | 117 | case NSAPI_SECURITY_NONE: |
tousaki | 0:a933851e5d22 | 118 | default: |
tousaki | 0:a933851e5d22 | 119 | ucWidData8 = 0x00; |
tousaki | 0:a933851e5d22 | 120 | break; |
tousaki | 0:a933851e5d22 | 121 | } |
tousaki | 0:a933851e5d22 | 122 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_11I_MODE, &ucWidData8); |
tousaki | 0:a933851e5d22 | 123 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 124 | return NSAPI_ERROR_AUTH_FAILURE; |
tousaki | 0:a933851e5d22 | 125 | } |
tousaki | 0:a933851e5d22 | 126 | |
tousaki | 0:a933851e5d22 | 127 | if (security == NSAPI_SECURITY_WEP) { |
tousaki | 0:a933851e5d22 | 128 | // Set WEP KEY |
tousaki | 0:a933851e5d22 | 129 | tBAWidData.pucData = (grp_u8 *)pass; |
tousaki | 0:a933851e5d22 | 130 | tBAWidData.ulSize = strlen((char *)tBAWidData.pucData); |
tousaki | 0:a933851e5d22 | 131 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_WEP_KEY, &tBAWidData); |
tousaki | 0:a933851e5d22 | 132 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 133 | return NSAPI_ERROR_AUTH_FAILURE; |
tousaki | 0:a933851e5d22 | 134 | } |
tousaki | 0:a933851e5d22 | 135 | } |
tousaki | 0:a933851e5d22 | 136 | |
tousaki | 0:a933851e5d22 | 137 | return 0; |
tousaki | 0:a933851e5d22 | 138 | } |
tousaki | 0:a933851e5d22 | 139 | |
dkato | 2:c7e325599570 | 140 | /* Interface implementation */ |
dkato | 3:2ff2514e4fca | 141 | LWIPBP3595Interface::LWIPBP3595Interface() |
dkato | 4:b49b4b36aaa4 | 142 | : _dhcp(true), _ip_address(), _netmask(), _gateway() |
dkato | 3:2ff2514e4fca | 143 | { |
dkato | 3:2ff2514e4fca | 144 | } |
dkato | 3:2ff2514e4fca | 145 | |
dkato | 5:d03489ec5033 | 146 | nsapi_error_t LWIPBP3595Interface::set_network(const char *ip_address, const char *netmask, const char *gateway) |
dkato | 3:2ff2514e4fca | 147 | { |
dkato | 3:2ff2514e4fca | 148 | _dhcp = false; |
dkato | 3:2ff2514e4fca | 149 | strncpy(_ip_address, ip_address ? ip_address : "", sizeof(_ip_address)); |
dkato | 3:2ff2514e4fca | 150 | strncpy(_netmask, netmask ? netmask : "", sizeof(_netmask)); |
dkato | 3:2ff2514e4fca | 151 | strncpy(_gateway, gateway ? gateway : "", sizeof(_gateway)); |
dkato | 5:d03489ec5033 | 152 | return NSAPI_ERROR_OK; |
dkato | 3:2ff2514e4fca | 153 | } |
dkato | 3:2ff2514e4fca | 154 | |
dkato | 5:d03489ec5033 | 155 | nsapi_error_t LWIPBP3595Interface::set_dhcp(bool dhcp) |
dkato | 3:2ff2514e4fca | 156 | { |
dkato | 3:2ff2514e4fca | 157 | _dhcp = dhcp; |
dkato | 5:d03489ec5033 | 158 | return NSAPI_ERROR_OK; |
dkato | 3:2ff2514e4fca | 159 | } |
dkato | 3:2ff2514e4fca | 160 | |
dkato | 5:d03489ec5033 | 161 | nsapi_error_t LWIPBP3595Interface::set_credentials(const char *ssid, const char *pass, nsapi_security_t security) |
dkato | 3:2ff2514e4fca | 162 | { |
dkato | 4:b49b4b36aaa4 | 163 | memset(_ssid, 0, sizeof(_ssid)); |
dkato | 4:b49b4b36aaa4 | 164 | strncpy(_ssid, ssid, sizeof(_ssid)); |
dkato | 3:2ff2514e4fca | 165 | |
dkato | 4:b49b4b36aaa4 | 166 | memset(_pass, 0, sizeof(_pass)); |
dkato | 4:b49b4b36aaa4 | 167 | strncpy(_pass, pass, sizeof(_pass)); |
dkato | 3:2ff2514e4fca | 168 | |
dkato | 3:2ff2514e4fca | 169 | _security = security; |
dkato | 3:2ff2514e4fca | 170 | |
dkato | 3:2ff2514e4fca | 171 | return 0; |
dkato | 3:2ff2514e4fca | 172 | } |
dkato | 3:2ff2514e4fca | 173 | |
dkato | 5:d03489ec5033 | 174 | nsapi_error_t LWIPBP3595Interface::set_channel(uint8_t channel) |
dkato | 3:2ff2514e4fca | 175 | { |
dkato | 4:b49b4b36aaa4 | 176 | int ret; |
dkato | 4:b49b4b36aaa4 | 177 | grp_u8 ucWidData8; // 8bit wid data |
dkato | 4:b49b4b36aaa4 | 178 | |
dkato | 4:b49b4b36aaa4 | 179 | if (_wlan_init() != 0) { |
dkato | 4:b49b4b36aaa4 | 180 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 181 | } |
dkato | 4:b49b4b36aaa4 | 182 | |
dkato | 4:b49b4b36aaa4 | 183 | if (channel != 0) { |
dkato | 4:b49b4b36aaa4 | 184 | ucWidData8 = channel; |
dkato | 4:b49b4b36aaa4 | 185 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_CHANNEL, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 186 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 187 | return NSAPI_ERROR_PARAMETER; |
dkato | 4:b49b4b36aaa4 | 188 | } |
dkato | 4:b49b4b36aaa4 | 189 | } |
dkato | 4:b49b4b36aaa4 | 190 | |
dkato | 3:2ff2514e4fca | 191 | return 0; |
dkato | 3:2ff2514e4fca | 192 | } |
dkato | 3:2ff2514e4fca | 193 | |
dkato | 3:2ff2514e4fca | 194 | int8_t LWIPBP3595Interface::get_rssi() |
dkato | 3:2ff2514e4fca | 195 | { |
dkato | 4:b49b4b36aaa4 | 196 | int ret; |
dkato | 4:b49b4b36aaa4 | 197 | grp_u8 ucWidData8; // 8bit wid data |
dkato | 4:b49b4b36aaa4 | 198 | |
dkato | 4:b49b4b36aaa4 | 199 | if (_init_end) { |
dkato | 4:b49b4b36aaa4 | 200 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_GET_RSSI, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 201 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 202 | return 0; |
dkato | 4:b49b4b36aaa4 | 203 | } |
dkato | 4:b49b4b36aaa4 | 204 | |
dkato | 4:b49b4b36aaa4 | 205 | return ucWidData8; |
dkato | 4:b49b4b36aaa4 | 206 | } |
dkato | 3:2ff2514e4fca | 207 | return 0; |
dkato | 3:2ff2514e4fca | 208 | } |
dkato | 3:2ff2514e4fca | 209 | |
dkato | 5:d03489ec5033 | 210 | nsapi_error_t LWIPBP3595Interface::connect(const char *ssid, const char *pass, nsapi_security_t security, uint8_t channel) |
dkato | 3:2ff2514e4fca | 211 | { |
dkato | 3:2ff2514e4fca | 212 | set_credentials(ssid, pass, security); |
dkato | 3:2ff2514e4fca | 213 | set_channel(channel); |
dkato | 3:2ff2514e4fca | 214 | return connect(); |
dkato | 3:2ff2514e4fca | 215 | } |
dkato | 3:2ff2514e4fca | 216 | |
dkato | 5:d03489ec5033 | 217 | nsapi_error_t LWIPBP3595Interface::connect() |
tousaki | 0:a933851e5d22 | 218 | { |
dkato | 4:b49b4b36aaa4 | 219 | int ret; |
dkato | 4:b49b4b36aaa4 | 220 | |
dkato | 6:993197aaf5a4 | 221 | if (_wlan_init() != 0) { |
dkato | 6:993197aaf5a4 | 222 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 6:993197aaf5a4 | 223 | } |
dkato | 6:993197aaf5a4 | 224 | |
dkato | 6:993197aaf5a4 | 225 | if (mbed_lwip_wifi_init(NULL) != NSAPI_ERROR_OK) { |
dkato | 6:993197aaf5a4 | 226 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 6:993197aaf5a4 | 227 | } |
dkato | 6:993197aaf5a4 | 228 | |
dkato | 4:b49b4b36aaa4 | 229 | ret = _wlan_setting(_ssid, _pass, _security); |
dkato | 4:b49b4b36aaa4 | 230 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 231 | return ret; |
tousaki | 0:a933851e5d22 | 232 | } |
tousaki | 0:a933851e5d22 | 233 | |
dkato | 3:2ff2514e4fca | 234 | return mbed_lwip_wifi_bringup(_dhcp, |
dkato | 3:2ff2514e4fca | 235 | _ip_address[0] ? _ip_address : 0, |
dkato | 3:2ff2514e4fca | 236 | _netmask[0] ? _netmask : 0, |
dkato | 3:2ff2514e4fca | 237 | _gateway[0] ? _gateway : 0); |
tousaki | 0:a933851e5d22 | 238 | } |
tousaki | 0:a933851e5d22 | 239 | |
dkato | 5:d03489ec5033 | 240 | nsapi_error_t LWIPBP3595Interface::disconnect() |
tousaki | 0:a933851e5d22 | 241 | { |
dkato | 3:2ff2514e4fca | 242 | return mbed_lwip_wifi_bringdown(); |
dkato | 3:2ff2514e4fca | 243 | } |
dkato | 3:2ff2514e4fca | 244 | |
dkato | 5:d03489ec5033 | 245 | nsapi_size_or_error_t LWIPBP3595Interface::scan(WiFiAccessPoint *res, unsigned count) |
dkato | 3:2ff2514e4fca | 246 | { |
dkato | 4:b49b4b36aaa4 | 247 | int cnt; |
dkato | 4:b49b4b36aaa4 | 248 | int ret; |
dkato | 4:b49b4b36aaa4 | 249 | grp_u8 ucWidData8; // 8bit wid data |
dkato | 4:b49b4b36aaa4 | 250 | nsapi_wifi_ap_t ap; |
dkato | 4:b49b4b36aaa4 | 251 | |
dkato | 4:b49b4b36aaa4 | 252 | if (_wlan_init() != 0) { |
dkato | 4:b49b4b36aaa4 | 253 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 254 | } |
dkato | 4:b49b4b36aaa4 | 255 | |
dkato | 4:b49b4b36aaa4 | 256 | ucWidData8 = 0x01; // All channel |
dkato | 4:b49b4b36aaa4 | 257 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_SITE_SURVEY, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 258 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 259 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 260 | } |
dkato | 4:b49b4b36aaa4 | 261 | |
dkato | 4:b49b4b36aaa4 | 262 | ucWidData8 = 0x01; |
dkato | 4:b49b4b36aaa4 | 263 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_SET_START_SCAN_REQ, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 264 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 265 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 266 | } |
dkato | 4:b49b4b36aaa4 | 267 | |
dkato | 4:b49b4b36aaa4 | 268 | while (1) { |
dkato | 4:b49b4b36aaa4 | 269 | ucWidData8 = 0x00; |
dkato | 4:b49b4b36aaa4 | 270 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_GET_CHECK_SCAN_END, &ucWidData8); |
dkato | 4:b49b4b36aaa4 | 271 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 272 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 273 | } |
dkato | 4:b49b4b36aaa4 | 274 | if (ucWidData8 == 0) { |
dkato | 4:b49b4b36aaa4 | 275 | break; |
dkato | 4:b49b4b36aaa4 | 276 | } |
dkato | 4:b49b4b36aaa4 | 277 | Thread::wait(100); |
dkato | 4:b49b4b36aaa4 | 278 | } |
dkato | 4:b49b4b36aaa4 | 279 | |
dkato | 4:b49b4b36aaa4 | 280 | ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_GET_SITE_SURVEY_RESULT, &survey_result); |
dkato | 4:b49b4b36aaa4 | 281 | if (ret != 0) { |
dkato | 4:b49b4b36aaa4 | 282 | return NSAPI_ERROR_DEVICE_ERROR; |
dkato | 4:b49b4b36aaa4 | 283 | } |
dkato | 4:b49b4b36aaa4 | 284 | |
dkato | 4:b49b4b36aaa4 | 285 | for (cnt = 0; (cnt < count) && (cnt < survey_result.iCnt); cnt++) { |
dkato | 4:b49b4b36aaa4 | 286 | grp_wld_site_survey_result * wk_result = &survey_result.atResult[cnt]; |
dkato | 4:b49b4b36aaa4 | 287 | |
dkato | 4:b49b4b36aaa4 | 288 | memcpy(ap.ssid, wk_result->aucSsid, 33); |
dkato | 4:b49b4b36aaa4 | 289 | memcpy(ap.bssid, wk_result->aucBssid, 6); |
dkato | 4:b49b4b36aaa4 | 290 | switch (wk_result->ucSecurity) { |
dkato | 4:b49b4b36aaa4 | 291 | case 0x00: |
dkato | 4:b49b4b36aaa4 | 292 | ap.security = NSAPI_SECURITY_NONE; |
dkato | 4:b49b4b36aaa4 | 293 | break; |
dkato | 4:b49b4b36aaa4 | 294 | case 0x01: |
dkato | 4:b49b4b36aaa4 | 295 | ap.security = NSAPI_SECURITY_WEP; |
dkato | 4:b49b4b36aaa4 | 296 | break; |
dkato | 4:b49b4b36aaa4 | 297 | case 0x29: |
dkato | 4:b49b4b36aaa4 | 298 | case 0x49: |
dkato | 4:b49b4b36aaa4 | 299 | case 0x69: |
dkato | 4:b49b4b36aaa4 | 300 | ap.security = NSAPI_SECURITY_WPA; |
dkato | 4:b49b4b36aaa4 | 301 | break; |
dkato | 4:b49b4b36aaa4 | 302 | case 0x31: |
dkato | 4:b49b4b36aaa4 | 303 | case 0x51: |
dkato | 4:b49b4b36aaa4 | 304 | case 0x71: |
dkato | 4:b49b4b36aaa4 | 305 | ap.security = NSAPI_SECURITY_WPA2; |
dkato | 4:b49b4b36aaa4 | 306 | break; |
dkato | 4:b49b4b36aaa4 | 307 | case 0x79: |
dkato | 4:b49b4b36aaa4 | 308 | ap.security = NSAPI_SECURITY_WPA_WPA2; |
dkato | 4:b49b4b36aaa4 | 309 | break; |
dkato | 4:b49b4b36aaa4 | 310 | default: |
dkato | 4:b49b4b36aaa4 | 311 | ap.security = NSAPI_SECURITY_UNKNOWN; |
dkato | 4:b49b4b36aaa4 | 312 | break; |
dkato | 4:b49b4b36aaa4 | 313 | } |
dkato | 4:b49b4b36aaa4 | 314 | ap.rssi = wk_result->ucRxPower; |
dkato | 4:b49b4b36aaa4 | 315 | ap.channel = wk_result->ucChannel; |
dkato | 4:b49b4b36aaa4 | 316 | |
dkato | 4:b49b4b36aaa4 | 317 | res[cnt] = WiFiAccessPoint(ap); |
dkato | 4:b49b4b36aaa4 | 318 | } |
dkato | 4:b49b4b36aaa4 | 319 | |
dkato | 4:b49b4b36aaa4 | 320 | return cnt; |
dkato | 3:2ff2514e4fca | 321 | } |
dkato | 3:2ff2514e4fca | 322 | |
dkato | 3:2ff2514e4fca | 323 | const char *LWIPBP3595Interface::get_mac_address() |
dkato | 3:2ff2514e4fca | 324 | { |
dkato | 3:2ff2514e4fca | 325 | return mbed_lwip_wifi_get_mac_address(); |
tousaki | 0:a933851e5d22 | 326 | } |
tousaki | 0:a933851e5d22 | 327 | |
tousaki | 0:a933851e5d22 | 328 | const char *LWIPBP3595Interface::get_ip_address() |
tousaki | 0:a933851e5d22 | 329 | { |
dkato | 3:2ff2514e4fca | 330 | if (mbed_lwip_wifi_get_ip_address(_ip_address, sizeof _ip_address)) { |
dkato | 3:2ff2514e4fca | 331 | return _ip_address; |
dkato | 3:2ff2514e4fca | 332 | } |
dkato | 3:2ff2514e4fca | 333 | |
dkato | 5:d03489ec5033 | 334 | return NULL; |
tousaki | 0:a933851e5d22 | 335 | } |
tousaki | 0:a933851e5d22 | 336 | |
dkato | 3:2ff2514e4fca | 337 | const char *LWIPBP3595Interface::get_netmask() |
tousaki | 0:a933851e5d22 | 338 | { |
dkato | 3:2ff2514e4fca | 339 | if (mbed_lwip_wifi_get_netmask(_netmask, sizeof _netmask)) { |
dkato | 3:2ff2514e4fca | 340 | return _netmask; |
dkato | 3:2ff2514e4fca | 341 | } |
dkato | 3:2ff2514e4fca | 342 | |
dkato | 5:d03489ec5033 | 343 | return NULL; |
dkato | 3:2ff2514e4fca | 344 | } |
dkato | 3:2ff2514e4fca | 345 | |
dkato | 3:2ff2514e4fca | 346 | const char *LWIPBP3595Interface::get_gateway() |
dkato | 3:2ff2514e4fca | 347 | { |
dkato | 3:2ff2514e4fca | 348 | if (mbed_lwip_wifi_get_gateway(_gateway, sizeof _gateway)) { |
dkato | 3:2ff2514e4fca | 349 | return _gateway; |
dkato | 3:2ff2514e4fca | 350 | } |
dkato | 3:2ff2514e4fca | 351 | |
dkato | 5:d03489ec5033 | 352 | return NULL; |
tousaki | 0:a933851e5d22 | 353 | } |
dkato | 2:c7e325599570 | 354 | |
dkato | 2:c7e325599570 | 355 | NetworkStack *LWIPBP3595Interface::get_stack() |
dkato | 2:c7e325599570 | 356 | { |
dkato | 2:c7e325599570 | 357 | return nsapi_create_stack(&lwip_wifi_stack); |
dkato | 2:c7e325599570 | 358 | } |
dkato | 4:b49b4b36aaa4 | 359 |