inline void printScanResult(std::ostream& stream,const ScanResult& scan_ret) { stream<<"Scan Result "<<std::endl; stream<<"Position info: "<<std::endl; printScanResult(stream,scan_ret.scan_saver); stream<<"Search Counter: "<<std::endl; printScanResult(stream,scan_ret.scan_counter); }
static wifi_error setHotlistAPsUsingScanResult(wifi_bssid_hotlist_params *params){ printMsg("testHotlistAPs Scan started, waiting for event ...\n"); EventInfo info; memset(&info, 0, sizeof(info)); getEventFromCache(info); wifi_scan_result results[256]; memset(results, 0, sizeof(wifi_scan_result) * 256); printMsg("Retrieving scan results for Hotlist AP setting\n"); int num_results = 256; int result = wifi_get_cached_gscan_results(wlan0Handle, 1, num_results, results, &num_results); if (result < 0) { printMsg("failed to fetch scan results : %d\n", result); return WIFI_ERROR_UNKNOWN; } else { printMsg("fetched %d scan results\n", num_results); } for (int i = 0; i < num_results; i++) { printScanResult(results[i]); } for (int i = 0; i < stest_max_ap; i++) { memcpy(params->ap[i].bssid, results[i].bssid, sizeof(mac_addr)); params->ap[i].low = -htest_low_threshold; params->ap[i].high = -htest_high_threshold; } params->num_ap = stest_max_ap; return WIFI_SUCCESS; }
static void onHotlistAPLost(wifi_request_id id, unsigned num_results, wifi_scan_result *results) { printMsg("Lost hotlist APs\n"); for (unsigned i = 0; i < num_results; i++) { printScanResult(results[i]); } putEventInCache(EVENT_TYPE_HOTLIST_AP_LOST, "Lost event Hotlist APs"); }
static void onHotlistAPFound(wifi_request_id id, unsigned num_results, wifi_scan_result *results) { printMsg("Found hotlist APs\n"); for (unsigned i = 0; i < num_results; i++) { printScanResult(results[i]); } putEventInCache(EVENT_TYPE_HOTLIST_AP_FOUND, "Found a hotlist AP"); }
static int SelectSignificantAPsFromScanResults() { wifi_scan_result results[256]; memset(results, 0, sizeof(wifi_scan_result) * 256); printMsg("Retrieving scan results for significant wifi change setting\n"); int num_results = 256; int result = wifi_get_cached_gscan_results(wlan0Handle, 1, num_results, results, &num_results); if (result < 0) { printMsg("failed to fetch scan results : %d\n", result); return WIFI_ERROR_UNKNOWN; } else { printMsg("fetched %d scan results\n", num_results); } for (int i = 0; i < num_results; i++) { printScanResult(results[i]); } wifi_significant_change_params params; memset(¶ms, 0, sizeof(params)); params.rssi_sample_size = swctest_rssi_sample_size; params.lost_ap_sample_size = swctest_rssi_lost_ap; params.min_breaching = swctest_rssi_min_breaching; for (int i = 0; i < stest_max_ap; i++) { memcpy(params.ap[i].bssid, results[i].bssid, sizeof(mac_addr)); params.ap[i].low = results[i].rssi - swctest_rssi_ch_threshold; params.ap[i].high = results[i].rssi + swctest_rssi_ch_threshold; } params.num_ap = stest_max_ap; printMsg("Settting Significant change params rssi_sample_size#%d lost_ap_sample_size#%d" " and min_breaching#%d\n", params.rssi_sample_size, params.lost_ap_sample_size , params.min_breaching); printMsg("BSSID\t\t\tHIGH\tLOW\n"); for (int i = 0; i < params.num_ap; i++) { mac_addr &addr = params.ap[i].bssid; printMsg("%02x:%02x:%02x:%02x:%02x:%02x\t%d\t%d\n", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5], params.ap[i].high, params.ap[i].low); } wifi_significant_change_handler handler; memset(&handler, 0, sizeof(handler)); handler.on_significant_change = &onSignificantWifiChange; int id = getNewCmdId(); return wifi_set_significant_change_handler(id, wlan0Handle, params, handler); }
static void retrieveScanResults() { wifi_scan_result results[256]; memset(results, 0, sizeof(wifi_scan_result) * 256); printMsg("Retrieve Scan results available -->\n"); int num_results = 256; int result = wifi_get_cached_gscan_results(wlan0Handle, 1, num_results, results, &num_results); if (result < 0) { printMsg("failed to fetch scan results : %d\n", result); return; } else { printMsg("fetched %d scan results\n", num_results); } printScanHeader(); for (int i = 0; i < num_results; i++) { printScanResult(results[i]); } }
static void testRTT() { wifi_scan_result results[256]; int num_results = scanOnce(WIFI_BAND_ABG, results, countof(results)); if (num_results == 0) { printMsg("RTT aborted because of no scan results\n"); return; } else { printMsg("Retrieved %d scan results\n", num_results); } num_results = removeDuplicateScanResults(results, num_results); /* printMsg("Deduped scan results - %d\n", num_results); for (int i = 0; i < num_results; i++) { printScanResult(results[i]); } */ sortScanResultsByRssi(results, num_results); printMsg("Sorted scan results -\n"); for (int i = 0; i < num_results; i++) { printScanResult(results[i]); } static const int max_ap = 5; wifi_rtt_config params[max_ap]; memset(params, 0, sizeof(params)); printMsg("Configuring RTT for %d APs, num_samples = %d\n", min(num_results, max_ap), rtt_samples); unsigned num_ap = 0; for (int i = 0; i < min(num_results, max_ap); i++, num_ap++) { memcpy(params[i].addr, results[i].bssid, sizeof(mac_addr)); mac_addr &addr = params[i].addr; printMsg("Adding %02x:%02x:%02x:%02x:%02x:%02x (%d) for RTT\n", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5], results[i].channel); params[i].type = RTT_TYPE_1_SIDED; params[i].channel.center_freq = results[i].channel; params[i].channel.width = WIFI_CHAN_WIDTH_20; params[i].peer = WIFI_PEER_INVALID; params[i].continuous = 1; params[i].interval = 1000; params[i].num_samples_per_measurement = rtt_samples; params[i].num_retries_per_measurement = 10; } wifi_rtt_event_handler handler; handler.on_rtt_results = &onRTTResults; int result = wifi_rtt_range_request(rttCmdId, wlan0Handle, num_ap, params, handler); if (result == WIFI_SUCCESS) { printMsg("Waiting for RTT results\n"); while (true) { EventInfo info; memset(&info, 0, sizeof(info)); getEventFromCache(info); if (info.type == EVENT_TYPE_SCAN_RESULTS_AVAILABLE) { retrieveScanResults(); } else if (info.type == EVENT_TYPE_RTT_RESULTS) { break; } } } else { printMsg("Could not set setRTTAPs : %d\n", result); } }