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