summaryrefslogtreecommitdiffstats
path: root/service/jni
diff options
context:
space:
mode:
authorxinhe <xinhe@google.com>2015-03-12 18:38:54 -0700
committerxinhe <xinhe@google.com>2015-03-18 15:22:54 -0700
commit12cf388ecf3b2aa5ba66ed680b931fa356ab75b5 (patch)
tree5c73d6549301896db034e82d7a08ec1a90e4dde8 /service/jni
parenta85a0bf4acd319bb37091565c19b33290bf98618 (diff)
downloadandroid_frameworks_opt_net_wifi-12cf388ecf3b2aa5ba66ed680b931fa356ab75b5.tar.gz
android_frameworks_opt_net_wifi-12cf388ecf3b2aa5ba66ed680b931fa356ab75b5.tar.bz2
android_frameworks_opt_net_wifi-12cf388ecf3b2aa5ba66ed680b931fa356ab75b5.zip
Change rtt Framework interface
Bug:19735392 Change-Id: Ie64e4609c9804c904836bb37255d4efe9211f39f
Diffstat (limited to 'service/jni')
-rw-r--r--service/jni/com_android_server_wifi_WifiNative.cpp117
-rw-r--r--service/jni/jni_helper.cpp18
-rw-r--r--service/jni/jni_helper.h1
3 files changed, 120 insertions, 16 deletions
diff --git a/service/jni/com_android_server_wifi_WifiNative.cpp b/service/jni/com_android_server_wifi_WifiNative.cpp
index 7677ec708..32bcd4f9c 100644
--- a/service/jni/com_android_server_wifi_WifiNative.cpp
+++ b/service/jni/com_android_server_wifi_WifiNative.cpp
@@ -29,6 +29,7 @@
#include "wifi.h"
#include "wifi_hal.h"
#include "jni_helper.h"
+#include "rtt.h"
#define REPLY_BUF_SIZE 4096 // wpa_supplicant's maximum size.
#define EVENT_BUF_SIZE 2048
@@ -1058,18 +1059,41 @@ static void onRttResults(wifi_request_id id, unsigned num_results, wifi_rtt_resu
result.addr[2], result.addr[3], result.addr[4], result.addr[5]);
setStringField(env, rttResult, "bssid", bssid);
- setIntField(env, rttResult, "status", result.status);
- setIntField(env, rttResult, "requestType", result.type);
- setLongField(env, rttResult, "ts", result.ts);
- setIntField(env, rttResult, "rssi", result.rssi);
- setIntField(env, rttResult, "rssi_spread", result.rssi_spread);
- setIntField(env, rttResult, "tx_rate", result.tx_rate.bitrate);
- setLongField(env, rttResult, "rtt_ns", result.rtt);
- setLongField(env, rttResult, "rtt_sd_ns", result.rtt_sd);
- setLongField(env, rttResult, "rtt_spread_ns", result.rtt_spread);
- setIntField(env, rttResult, "distance_cm", result.distance);
- setIntField(env, rttResult, "distance_sd_cm", result.distance_sd);
- setIntField(env, rttResult, "distance_spread_cm", result.distance_spread);
+ setIntField(env, rttResult, "burstNumber", result.burst_num);
+ setIntField(env, rttResult, "measurementFrameNumber", result.measurement_number);
+ setIntField(env, rttResult, "successMeasurementFrameNumber", result.success_number);
+ setIntField(env, rttResult, "frameNumberPerBurstPeer", result.number_per_burst_peer);
+ setIntField(env, rttResult, "status", result.status);
+ setIntField(env, rttResult, "measurementType", result.type);
+ setIntField(env, rttResult, "retryAfterDuration", result.retry_after_duration);
+ setLongField(env, rttResult, "ts", result.ts);
+ setIntField(env, rttResult, "rssi", result.rssi);
+ setIntField(env, rttResult, "rssiSpread", result.rssi_spread);
+ setIntField(env, rttResult, "txRate", result.tx_rate.bitrate);
+ setIntField(env, rttResult, "RxRate", result.rx_rate.bitrate);
+ setLongField(env, rttResult, "rtt", result.rtt);
+ setLongField(env, rttResult, "rttStandardDeviation", result.rtt_sd);
+ setLongField(env, rttResult, "rttSpread", result.rtt_spread);
+ setIntField(env, rttResult, "distance", result.distance);
+ setIntField(env, rttResult, "distanceStandardDeviation", result.distance_sd);
+ setIntField(env, rttResult, "distanceSpread", result.distance_spread);
+ setIntField(env, rttResult, "burstDuration", result.burst_duration);
+
+ if (result.LCI.len != 0) {
+ jobject LCI = createObject(env, "android/net/wifi/RttManager$wifiInformationElement");
+ setIntField(env, LCI, "id", (int) result.LCI.id);
+ //setStringField(env, LCI,"data", result.LCI.data);
+ setObjectField(env, rttResult, "LCI",
+ "android/net/wifi/RttManager$WifiInformationElement;", LCI);
+ }
+
+ if (result.LCR.len != 0) {
+ jobject LCR = createObject(env, "android/net/wifi/RttManager$wifiInformationElement");
+ setIntField(env, LCR, "id", result.LCI.id);
+ //setStringField(env, LCR,"data", result.LCI.data);
+ setObjectField(env, rttResult, "LCR",
+ "android/net/wifi/RttManager$WifiInformationElement;", LCR);
+ }
env->SetObjectArrayElement(rttResults, i, rttResult);
}
@@ -1108,9 +1132,33 @@ static jboolean android_net_wifi_requestRange(
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_frames_per_burst = getIntField(env, param, "num_samples");
- config.num_retries_per_measurement_frame = getIntField(env, param, "num_retries");
+ config.channel.width = (wifi_channel_width) getIntField(env, param, "channelWidth");
+ config.channel.center_freq0 = getIntField(env, param, "centerFreq0");
+ config.channel.center_freq1 = getIntField(env, param, "centerFreq1");
+
+ config.num_burst = getIntField(env, param, "numberBurst");
+ config.interval = (unsigned) getIntField(env, param, "interval");
+ config.num_frames_per_burst = (unsigned) getIntField(env, param, "numSamplesPerBurst");
+ config.num_retries_per_measurement_frame = (unsigned) getIntField(env, param,
+ "numRetriesPerMeasurementFrame");
+ config.num_retries_per_ftmr = (unsigned) getIntField(env, param, "numRetriesPerFTMR");
+ config.LCI_request = getBoolField(env, param, "LCIRequest") ? 1 : 0;
+ config.LCR_request = getBoolField(env, param, "LCRRequest") ? 1 : 0;
+ config.burst_timeout = (unsigned) getIntField(env, param, "burstTimeout");
+ config.preamble = getIntField(env, param, "preamble");
+ config.bw = getIntField(env, param, "bandwidth");
+
+ ALOGD("RTT request destination %d: type is %d, peer is %d, bw is %d, center_freq is %d ", i,
+ config.type,config.peer, config.channel.width, config.channel.center_freq0);
+ ALOGD("center_freq0 is %d, center_freq1 is %d, num_burst is %d,interval is %d",
+ config.channel.center_freq0, config.channel.center_freq1, config.num_burst,
+ config.interval);
+ ALOGD("frames_per_burst is %d, retries of measurement frame is %d, retries_per_ftmr is %d",
+ config.num_frames_per_burst, config.num_retries_per_measurement_frame,
+ config.num_retries_per_ftmr);
+ ALOGD("LCI_requestis %d, LCR_request is %d, burst_timeout is %d, preamble is %d, bw is %d",
+ config.LCI_request, config.LCR_request, config.burst_timeout, config.preamble,
+ config.bw);
}
wifi_rtt_event_handler handler;
@@ -1205,6 +1253,41 @@ static jboolean android_net_wifi_setDfsFlag(JNIEnv *env, jclass cls, jint iface,
return result == WIFI_SUCCESS;
}
+static jobject android_net_wifi_get_rtt_capabilities(JNIEnv *env, jclass cls, jint iface) {
+ wifi_rtt_capabilities rtt_capabilities;
+ wifi_interface_handle handle = getIfaceHandle(env, cls, iface);
+ wifi_error ret = wifi_get_rtt_capabilities(handle, &rtt_capabilities);
+
+ if(WIFI_SUCCESS == ret) {
+ jobject capabilities = createObject(env, "android/net/wifi/RttManager$RttCapabilities");
+ setBooleanField(env, capabilities, "oneSidedRttSupported",
+ rtt_capabilities.rtt_one_sided_supported == 1);
+ setBooleanField(env, capabilities, "twoSided11McRttSupported",
+ rtt_capabilities.rtt_ftm_supported == 1);
+ setBooleanField(env, capabilities, "lciSupported",
+ rtt_capabilities.lci_support);
+ setBooleanField(env,capabilities, "lcrSupported",
+ rtt_capabilities.lcr_support);
+ setIntField(env, capabilities, "preambleSupported",
+ rtt_capabilities.preamble_support);
+ setIntField(env, capabilities, "bwSupported",
+ rtt_capabilities.bw_support);
+ ALOGD("One side RTT is: %s", rtt_capabilities.rtt_one_sided_supported ==1 ? "support" :
+ "not support");
+ ALOGD("Two side RTT is: %s", rtt_capabilities.rtt_ftm_supported == 1 ? "support" :
+ "not support");
+ ALOGD("LCR is: %s", rtt_capabilities.lcr_support == 1 ? "support" : "not support");
+
+ ALOGD("LCI is: %s", rtt_capabilities.lci_support == 1 ? "support" : "not support");
+
+ ALOGD("Support Preamble is : %d support BW is %d", rtt_capabilities.preamble_support,
+ rtt_capabilities.bw_support);
+ return capabilities;
+ } else {
+ return NULL;
+ }
+}
+
// ----------------------------------------------------------------------------
/*
@@ -1256,7 +1339,9 @@ static JNINativeMethod gWifiMethods[] = {
{ "setScanningMacOuiNative", "(I[B)Z", (void*) android_net_wifi_setScanningMacOui},
{ "getChannelsForBandNative", "(II)[I", (void*) android_net_wifi_getValidChannels},
{ "setDfsFlagNative", "(IZ)Z", (void*) android_net_wifi_setDfsFlag},
- { "toggleInterfaceNative", "(I)Z", (void*) android_net_wifi_toggle_interface}
+ { "toggleInterfaceNative", "(I)Z", (void*) android_net_wifi_toggle_interface},
+ { "getRttCapabilitiesNative", "(I)Landroid/net/wifi/RttManager$RttCapabilities;",
+ (void*) android_net_wifi_get_rtt_capabilities}
};
int register_android_net_wifi_WifiNative(JNIEnv* env) {
diff --git a/service/jni/jni_helper.cpp b/service/jni/jni_helper.cpp
index b5a1ad177..001d27ec4 100644
--- a/service/jni/jni_helper.cpp
+++ b/service/jni/jni_helper.cpp
@@ -222,6 +222,24 @@ void setIntField(JNIEnv *env, jobject obj, const char *name, jint value)
env->DeleteLocalRef(cls);
}
+void setBooleanField(JNIEnv *env, jobject obj, const char *name, jboolean value)
+{
+ jclass cls = (env)->GetObjectClass(obj);
+ if (cls == NULL) {
+ THROW(env, "Error in accessing class");
+ return;
+ }
+
+ jfieldID field = (env)->GetFieldID(cls, name, "Z");
+ if (field == NULL) {
+ THROW(env, "Error in accessing field");
+ return;
+ }
+
+ (env)->SetBooleanField(obj, field, value);
+ env->DeleteLocalRef(cls);
+}
+
void setLongField(JNIEnv *env, jobject obj, const char *name, jlong value)
{
jclass cls = (env)->GetObjectClass(obj);
diff --git a/service/jni/jni_helper.h b/service/jni/jni_helper.h
index f10e8c75b..e20ec0719 100644
--- a/service/jni/jni_helper.h
+++ b/service/jni/jni_helper.h
@@ -11,6 +11,7 @@ jobject getObjectField(JNIEnv *env, jobject obj, const char *name, const char *t
jlong getLongArrayField(JNIEnv *env, jobject obj, const char *name, int index);
jobject getObjectArrayField(JNIEnv *env, jobject obj, const char *name, const char *type, int index);
void setIntField(JNIEnv *env, jobject obj, const char *name, jint value);
+void setBooleanField(JNIEnv *env, jobject obj, const char *name, jboolean value);
void setLongField(JNIEnv *env, jobject obj, const char *name, jlong value);
void setLongArrayField(JNIEnv *env, jobject obj, const char *name, jlongArray value);
void setLongArrayElement(JNIEnv *env, jobject obj, const char *name, int index, jlong value);