static jboolean android_net_wifi_cancelRange( JNIEnv *env, jclass cls, jint iface, jint id, jobject params) { wifi_interface_handle handle = getIfaceHandle(env, cls, iface); ALOGD("cancelling rtt request [%d] = %p", id, handle); mac_addr addrs[MaxRttConfigs]; memset(&addrs, 0, sizeof(addrs)); int len = env->GetArrayLength((jobjectArray)params); if (len > MaxRttConfigs) { return false; } for (int i = 0; i < len; i++) { jobject param = env->GetObjectArrayElement((jobjectArray)params, i); if (param == NULL) { ALOGD("could not get element %d", i); continue; } parseMacAddress(env, param, addrs[i]); } return wifi_rtt_range_cancel(id, handle, len, addrs) == WIFI_SUCCESS; }
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; }
static bool parseMacAddress(JNIEnv *env, jobject obj, mac_addr addr) { jstring macAddrString = (jstring) getObjectField( env, obj, "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(), addr); return true; }
static jboolean android_net_wifi_requestRange( JNIEnv *env, jclass cls, jint iface, jint id, jobject params) { wifi_interface_handle handle = getIfaceHandle(env, cls, iface); ALOGD("sending rtt request [%d] = %p", id, handle); wifi_rtt_config configs[MaxRttConfigs]; memset(&configs, 0, sizeof(configs)); int len = env->GetArrayLength((jobjectArray)params); if (len > MaxRttConfigs) { return false; } for (int i = 0; i < len; i++) { jobject param = env->GetObjectArrayElement((jobjectArray)params, i); if (param == NULL) { ALOGD("could not get element %d", i); continue; } wifi_rtt_config &config = configs[i]; parseMacAddress(env, param, config.addr); config.type = (wifi_rtt_type)getIntField(env, param, "requestType"); config.peer = (wifi_peer_type)getIntField(env, param, "deviceType"); config.channel.center_freq = getIntField(env, param, "frequency"); config.channel.width = (wifi_channel_width)getIntField(env, param, "channelWidth"); config.num_samples_per_measurement = getIntField(env, param, "num_samples"); config.num_retries_per_measurement = getIntField(env, param, "num_retries"); } wifi_rtt_event_handler handler; handler.on_rtt_results = &onRttResults; return wifi_rtt_range_request(id, handle, len, configs, handler) == WIFI_SUCCESS; }
int WolClient::wake(const char* mac) { uint8_t contents[MAGIC_HEADER_LENGTH + REPEAT_MAC * MAC_BYTES]; uint8_t rawMac[MAC_BYTES]; parseMacAddress(mac, rawMac); UDP udp; udp.begin(port); udp.beginPacket(broadcastIP, port); for (int i = 0; i < MAGIC_HEADER_LENGTH; i++) { contents[i] = 0xFF; } for (uint8_t i = MAGIC_HEADER_LENGTH; i < sizeof contents; i++) { contents[i] = rawMac[(i - MAGIC_HEADER_LENGTH) % MAC_BYTES]; } udp.write(contents, sizeof contents); udp.endPacket(); udp.stop(); return TRUE; }
void readTestOptions(int argc, char *argv[]){ printf("Total number of argc #%d\n", argc); for (int j = 1; j < argc-1; j++) { if (strcmp(argv[j], "-max_ap") == 0 && isdigit(argv[j+1][0])) { stest_max_ap = atoi(argv[++j]); printf(" max_ap #%d\n", stest_max_ap); } else if (strcmp(argv[j], "-base_period") == 0 && isdigit(argv[j+1][0])) { stest_base_period = atoi(argv[++j]); printf(" base_period #%d\n", stest_base_period); } else if (strcmp(argv[j], "-threshold") == 0 && isdigit(argv[j+1][0])) { stest_threshold = atoi(argv[++j]); printf(" threshold #%d\n", stest_threshold); } else if (strcmp(argv[j], "-avg_RSSI") == 0 && isdigit(argv[j+1][0])) { swctest_rssi_sample_size = atoi(argv[++j]); printf(" avg_RSSI #%d\n", swctest_rssi_sample_size); } else if (strcmp(argv[j], "-ap_loss") == 0 && isdigit(argv[j+1][0])) { swctest_rssi_lost_ap = atoi(argv[++j]); printf(" ap_loss #%d\n", swctest_rssi_lost_ap); } else if (strcmp(argv[j], "-ap_breach") == 0 && isdigit(argv[j+1][0])) { swctest_rssi_min_breaching = atoi(argv[++j]); printf(" ap_breach #%d\n", swctest_rssi_min_breaching); } else if (strcmp(argv[j], "-ch_threshold") == 0 && isdigit(argv[j+1][0])) { swctest_rssi_ch_threshold = atoi(argv[++j]); printf(" ch_threshold #%d\n", swctest_rssi_ch_threshold); } else if (strcmp(argv[j], "-wt_event") == 0 && isdigit(argv[j+1][0])) { max_event_wait = atoi(argv[++j]); printf(" wt_event #%d\n", max_event_wait); } else if (strcmp(argv[j], "-low_th") == 0 && isdigit(argv[j+1][0])) { htest_low_threshold = atoi(argv[++j]); printf(" low_threshold #-%d\n", htest_low_threshold); } else if (strcmp(argv[j], "-high_th") == 0 && isdigit(argv[j+1][0])) { htest_high_threshold = atoi(argv[++j]); printf(" high_threshold #-%d\n", htest_high_threshold); } else if (strcmp(argv[j], "-hotlist_bssids") == 0 && isxdigit(argv[j+1][0])) { j++; for (num_hotlist_bssids = 0; j < argc && isxdigit(argv[j][0]); j++, num_hotlist_bssids++) { parseMacAddress(argv[j], hotlist_bssids[num_hotlist_bssids]); } j -= 1; } else if (strcmp(argv[j], "-channel_list") == 0 && isxdigit(argv[j+1][0])) { j++; for (num_channels = 0; j < argc && isxdigit(argv[j][0]); j++, num_channels++) { channel_list[num_channels] = atoi(argv[j]); } j -= 1; } else if ((strcmp(argv[j], "-get_ch_list") == 0)) { if(strcmp(argv[j + 1], "a") == 0) { band = WIFI_BAND_A_WITH_DFS; } else if(strcmp(argv[j + 1], "bg") == 0) { band = WIFI_BAND_BG; } else if(strcmp(argv[j + 1], "abg") == 0) { band = WIFI_BAND_ABG_WITH_DFS; } else if(strcmp(argv[j + 1], "a_nodfs") == 0) { band = WIFI_BAND_A; } else if(strcmp(argv[j + 1], "dfs") == 0) { band = WIFI_BAND_A_DFS; } else if(strcmp(argv[j + 1], "abg_nodfs") == 0) { band = WIFI_BAND_ABG; } j++; } else if ((strcmp(argv[j], "-rtt_samples") == 0)) { rtt_samples = atoi(argv[++j]); printf(" rtt_retries #-%d\n", rtt_samples); } else if (strcmp(argv[j], "-scan_mac_oui") == 0 && isxdigit(argv[j+1][0])) { parseMacOUI(argv[++j], mac_oui); } } }
static jboolean android_net_wifi_trackSignificantWifiChange( JNIEnv *env, jclass cls, jint iface, jint id, jobject settings) { wifi_interface_handle handle = getIfaceHandle(env, cls, iface); ALOGD("tracking significant wifi change on interface[%d] = %p", iface, handle); wifi_significant_change_params params; memset(¶ms, 0, sizeof(params)); params.rssi_sample_size = getIntField(env, settings, "rssiSampleSize"); params.lost_ap_sample_size = getIntField(env, settings, "lostApSampleSize"); params.min_breaching = getIntField(env, settings, "minApsBreachingThreshold"); const char *bssid_info_array_type = "[Landroid/net/wifi/WifiScanner$BssidInfo;"; jobjectArray bssids = (jobjectArray)getObjectField( env, settings, "bssidInfos", bssid_info_array_type); params.num_ap = env->GetArrayLength(bssids); if (params.num_ap == 0) { ALOGE("Error in accessing array"); return false; } ALOGD("Initialized common fields %d, %d, %d, %d", params.rssi_sample_size, params.lost_ap_sample_size, params.min_breaching, params.num_ap); for (int i = 0; i < params.num_ap; i++) { jobject objAp = env->GetObjectArrayElement(bssids, 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; } mac_addr addr; parseMacAddress(bssid.c_str(), addr); memcpy(params.ap[i].bssid, addr, sizeof(mac_addr)); char bssidOut[32]; sprintf(bssidOut, "%02x:%02x:%02x:%02x:%02x:%02x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); params.ap[i].low = getIntField(env, objAp, "low"); params.ap[i].high = getIntField(env, objAp, "high"); ALOGD("Added bssid %s, [%04d, %04d]", bssidOut, params.ap[i].low, params.ap[i].high); } ALOGD("Added %d bssids", params.num_ap); wifi_significant_change_handler handler; memset(&handler, 0, sizeof(handler)); handler.on_significant_change = &onSignificantWifiChange; return wifi_set_significant_change_handler(id, handle, params, handler) == WIFI_SUCCESS; }