static wifi_error setHotlistAPs() { wifi_bssid_hotlist_params params; memset(¶ms, 0, sizeof(params)); params.lost_ap_sample_size = HOTLIST_LOST_WINDOW; if (num_hotlist_bssids > 0) { for (int i = 0; i < num_hotlist_bssids; i++) { memcpy(params.ap[i].bssid, hotlist_bssids[i], sizeof(mac_addr)); params.ap[i].low = -htest_low_threshold; params.ap[i].high = -htest_high_threshold; } params.num_ap = num_hotlist_bssids; } else { setHotlistAPsUsingScanResult(¶ms); } 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_hotlist_ap_found_handler handler; handler.on_hotlist_ap_found = &onHotlistAPFound; handler.on_hotlist_ap_lost = &onHotlistAPLost; hotlistCmdId = getNewCmdId(); printMsg("Setting hotlist APs threshold\n"); return wifi_set_bssid_hotlist(hotlistCmdId, wlan0Handle, params, handler); }
static jboolean android_net_wifi_setHotlist( JNIEnv *env, jclass cls, jint iface, jint id, jobject ap) { wifi_interface_handle handle = getIfaceHandle(env, cls, iface); ALOGD("setting hotlist on interface[%d] = %p", iface, handle); wifi_bssid_hotlist_params params; memset(¶ms, 0, sizeof(params)); jobjectArray array = (jobjectArray) getObjectField(env, ap, "bssidInfos", "[Landroid/net/wifi/WifiScanner$BssidInfo;"); params.num_ap = env->GetArrayLength(array); if (params.num_ap == 0) { ALOGE("Error in accesing array"); return false; } for (int i = 0; i < params.num_ap; i++) { jobject objAp = env->GetObjectArrayElement(array, i); jstring macAddrString = (jstring) getObjectField( env, objAp, "bssid", "Ljava/lang/String;"); if (macAddrString == NULL) { ALOGE("Error getting bssid field"); return false; } ScopedUtfChars bssid(env, macAddrString); if (bssid.c_str() == NULL) { ALOGE("Error getting bssid"); return false; } parseMacAddress(bssid.c_str(), params.ap[i].bssid); mac_addr addr; memcpy(addr, params.ap[i].bssid, sizeof(mac_addr)); char bssidOut[32]; sprintf(bssidOut, "%0x:%0x:%0x:%0x:%0x:%0x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); ALOGD("Added bssid %s", bssidOut); params.ap[i].low = getIntField(env, objAp, "low"); params.ap[i].high = getIntField(env, objAp, "high"); } wifi_hotlist_ap_found_handler handler; memset(&handler, 0, sizeof(handler)); handler.on_hotlist_ap_found = &onHotlistApFound; return wifi_set_bssid_hotlist(id, handle, params, handler) == WIFI_SUCCESS; }