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(&params, 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);
    }
}