| 191 | } |
| 192 | |
| 193 | static rt_err_t wifi_scan_result_cache(struct rt_wlan_info *info) |
| 194 | { |
| 195 | struct rt_wlan_info *ptable; |
| 196 | rt_err_t err = RT_EOK; |
| 197 | int i, insert = -1; |
| 198 | rt_base_t level; |
| 199 | |
| 200 | if ((info == RT_NULL) || (info->ssid.len == 0)) return -RT_EINVAL; |
| 201 | |
| 202 | LOG_D("ssid:%s len:%d mac:%02x:%02x:%02x:%02x:%02x:%02x", info->ssid.val, info->ssid.len, |
| 203 | info->bssid[0], info->bssid[1], info->bssid[2], info->bssid[3], info->bssid[4], info->bssid[5]); |
| 204 | |
| 205 | /* scanning result filtering */ |
| 206 | level = rt_hw_interrupt_disable(); |
| 207 | if (scan_filter) |
| 208 | { |
| 209 | struct rt_wlan_info _tmp_info = *scan_filter; |
| 210 | rt_hw_interrupt_enable(level); |
| 211 | if (wifi_info_isequ(&_tmp_info, info) != RT_TRUE) |
| 212 | { |
| 213 | return RT_EOK; |
| 214 | } |
| 215 | } |
| 216 | else |
| 217 | { |
| 218 | rt_hw_interrupt_enable(level); |
| 219 | } |
| 220 | |
| 221 | /* de-duplicatio */ |
| 222 | for (i = 0; i < scan_result.num; i++) |
| 223 | { |
| 224 | if ((info->ssid.len == scan_result.info[i].ssid.len) && |
| 225 | (rt_memcmp(&info->bssid[0], &scan_result.info[i].bssid[0], RT_WLAN_BSSID_MAX_LENGTH) == 0)) |
| 226 | { |
| 227 | return RT_EOK; |
| 228 | } |
| 229 | #ifdef RT_WLAN_SCAN_SORT |
| 230 | if (insert >= 0) |
| 231 | { |
| 232 | continue; |
| 233 | } |
| 234 | /* Signal intensity comparison */ |
| 235 | if ((info->rssi < 0) && (scan_result.info[i].rssi < 0)) |
| 236 | { |
| 237 | if (info->rssi > scan_result.info[i].rssi) |
| 238 | { |
| 239 | insert = i; |
| 240 | continue; |
| 241 | } |
| 242 | else if (info->rssi < scan_result.info[i].rssi) |
| 243 | { |
| 244 | continue; |
| 245 | } |
| 246 | } |
| 247 | |
| 248 | /* Channel comparison */ |
| 249 | if (info->channel < scan_result.info[i].channel) |
| 250 | { |
no test coverage detected