diff options
Diffstat (limited to 'service/jni/com_android_server_wifi_WifiNative.cpp')
-rw-r--r-- | service/jni/com_android_server_wifi_WifiNative.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/service/jni/com_android_server_wifi_WifiNative.cpp b/service/jni/com_android_server_wifi_WifiNative.cpp index 7556b1e67..92bd3cd77 100644 --- a/service/jni/com_android_server_wifi_WifiNative.cpp +++ b/service/jni/com_android_server_wifi_WifiNative.cpp @@ -2114,6 +2114,82 @@ static jboolean android_net_wifi_setSsidWhitelist( return hal_fn.wifi_set_ssid_white_list(id, handle, num_ssids, ssids) == WIFI_SUCCESS; } +static jint android_net_wifi_start_sending_offloaded_packet(JNIEnv *env, jclass cls, jint iface, + jint idx, jbyteArray srcMac, jbyteArray dstMac, jbyteArray pkt, jint period) { + wifi_interface_handle handle = getIfaceHandle(env, cls, iface); + ALOGD("Start packet offload [%d] = %p", idx, handle); + wifi_error ret; + wifi_request_id id = idx; + byte * pkt_data = (byte *)env->GetByteArrayElements(pkt, NULL); + unsigned short pkt_len = env->GetArrayLength(pkt); + byte* src_mac_addr = (byte *)env->GetByteArrayElements(srcMac, NULL); + byte* dst_mac_addr = (byte *)env->GetByteArrayElements(dstMac, NULL); + int i; + char macAddr[32]; + sprintf(macAddr, "%0x:%0x:%0x:%0x:%0x:%0x", src_mac_addr[0], src_mac_addr[1], + src_mac_addr[2], src_mac_addr[3], src_mac_addr[4], src_mac_addr[5]); + ALOGD("src_mac_addr %s", macAddr); + sprintf(macAddr, "%0x:%0x:%0x:%0x:%0x:%0x", dst_mac_addr[0], dst_mac_addr[1], + dst_mac_addr[2], dst_mac_addr[3], dst_mac_addr[4], dst_mac_addr[5]); + ALOGD("dst_mac_addr %s", macAddr); + ALOGD("pkt_len %d\n", pkt_len); + ALOGD("Pkt data : "); + for(i = 0; i < pkt_len; i++) { + ALOGD(" %x ", pkt_data[i]); + } + ALOGD("\n"); + ret = hal_fn.wifi_start_sending_offloaded_packet(id, handle, pkt_data, pkt_len, + src_mac_addr, dst_mac_addr, period); + ALOGD("ret= %d\n", ret); + return ret; +} + +static jint android_net_wifi_stop_sending_offloaded_packet(JNIEnv *env, jclass cls, + jint iface, jint idx) { + int ret; + wifi_interface_handle handle = getIfaceHandle(env, cls, iface); + ALOGD("Stop packet offload [%d] = %p", idx, handle); + ret = hal_fn.wifi_stop_sending_offloaded_packet(idx, handle); + ALOGD("ret= %d\n", ret); + return ret; +} + +static void onRssiThresholdbreached(wifi_request_id id, u8 *cur_bssid, s8 cur_rssi) { + + ALOGD("RSSI threshold breached, cur RSSI - %d!!\n", cur_rssi); + ALOGD("BSSID %02x:%02x:%02x:%02x:%02x:%02x\n", + cur_bssid[0], cur_bssid[1], cur_bssid[2], + cur_bssid[3], cur_bssid[4], cur_bssid[5]); + JNIEnv *env = NULL; + mVM->AttachCurrentThread(&env, NULL); + //ALOGD("onRssiThresholdbreached called, vm = %p, obj = %p, env = %p", mVM, mCls, env); + reportEvent(env, mCls, "onRssiThresholdBreached", "(IB)V", id, cur_rssi); +} + +static jint android_net_wifi_start_rssi_monitoring_native(JNIEnv *env, jclass cls, jint iface, + jint idx, jbyte maxRssi, jbyte minRssi) { + + wifi_interface_handle handle = getIfaceHandle(env, cls, iface); + ALOGD("Start Rssi monitoring = %p", handle); + ALOGD("MinRssi %d MaxRssi %d", minRssi, maxRssi); + wifi_error ret; + wifi_request_id id = idx; + wifi_rssi_event_handler eh; + eh.on_rssi_threshold_breached = onRssiThresholdbreached; + ret = hal_fn.wifi_start_rssi_monitoring(id, handle, maxRssi, minRssi, eh); + return ret; +} + +static jint android_net_wifi_stop_rssi_monitoring_native(JNIEnv *env, jclass cls, + jint iface, jint idx) { + wifi_interface_handle handle = getIfaceHandle(env, cls, iface); + ALOGD("Stop Rssi monitoring = %p", handle); + wifi_error ret; + wifi_request_id id = idx; + ret = hal_fn.wifi_stop_rssi_monitoring(id, handle); + return ret; +} + // ---------------------------------------------------------------------------- /* @@ -2201,6 +2277,14 @@ static JNINativeMethod gWifiMethods[] = { (void*)android_net_wifi_setSsidWhitelist}, {"setLoggingEventHandlerNative", "(II)Z", (void *) android_net_wifi_set_log_handler}, {"resetLogHandlerNative", "(II)Z", (void *) android_net_wifi_reset_log_handler}, + { "startSendingOffloadedPacketNative", "(II[B[B[BI)I", + (void*)android_net_wifi_start_sending_offloaded_packet}, + { "stopSendingOffloadedPacketNative", "(II)I", + (void*)android_net_wifi_stop_sending_offloaded_packet}, + {"startRssiMonitoringNative", "(IIBB)I", + (void*)android_net_wifi_start_rssi_monitoring_native}, + {"stopRssiMonitoringNative", "(II)I", + (void*)android_net_wifi_stop_rssi_monitoring_native}, {"isGetChannelsForBandSupportedNative", "()Z", (void*)android_net_wifi_is_get_channels_for_band_supported} }; |