From ad75169628589a275fb869a813ea697336e0c0aa Mon Sep 17 00:00:00 2001 From: Jani Suonpera Date: Fri, 9 Oct 2015 11:59:19 +0300 Subject: [PATCH] DO NOT MERGE ANYWHERE Add new interface for sensor physical data This is special solution only for emerald branch. Changes including new const char* value/interface for sensor physical data. Sensor service and manager does not take care of content, structure or other details of string. Sensor HAL is taking care of parsing data from string and setting values to Sensor HW. Change-Id: Id19226d7d3ac0628488a0f005f2b1c44bafcf9b6 Signed-off-by: Ben Fennema --- core/java/android/hardware/SensorManager.java | 23 +++++++++++++++++++ .../android/hardware/SystemSensorManager.java | 8 +++++++ core/jni/android_hardware_SensorManager.cpp | 15 ++++++++++++ 3 files changed, 46 insertions(+) diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java index 5d405f92e380b..506d710658e4c 100644 --- a/core/java/android/hardware/SensorManager.java +++ b/core/java/android/hardware/SensorManager.java @@ -1684,4 +1684,27 @@ public abstract class SensorManager { } return delay; } + + /** + * Send configuration string to Sensor HAL. + * + * @param data String which includes sensor physical data. + * Sensor HAL is taking care of parsing data from string and + * setting values to Sensor HW. + * + * @return true if successfully send to HAL. + */ + /** + * @hide + */ + public boolean SetPhysicalData(String data) + { + //Log.d(TAG, "SensorManager.SetPhysicalData(" + data + ")"); + return SetPhysicalDataImpl(data); + } + + /** + * @hide + */ + protected abstract boolean SetPhysicalDataImpl(String data); } diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java index 2fe8fb6f71ced..bf9722e401348 100644 --- a/core/java/android/hardware/SystemSensorManager.java +++ b/core/java/android/hardware/SystemSensorManager.java @@ -45,6 +45,7 @@ public class SystemSensorManager extends SensorManager { private static native boolean nativeGetSensorAtIndex(long nativeInstance, Sensor sensor, int index); private static native boolean nativeIsDataInjectionEnabled(long nativeInstance); + private static native boolean nativeSetPhysicalData(long nativeInstance, String data); private static boolean sSensorModuleInitialized = false; private static InjectEventQueue mInjectEventQueue = null; @@ -274,6 +275,13 @@ public class SystemSensorManager extends SensorManager { } } + @Override + protected boolean SetPhysicalDataImpl(String data) + { + //Log.d(TAG, "SystemSensorManager.SetPhysicalDataImpl(" + data + ")"); + return nativeSetPhysicalData(mNativeInstance,data); + } + /* * BaseEventQueue is the communication channel with the sensor service, * SensorEventQueue, TriggerEventQueue are subclases and there is one-to-one mapping between diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp index 7d0afdcdd1099..b8c28a05b4c19 100644 --- a/core/jni/android_hardware_SensorManager.cpp +++ b/core/jni/android_hardware_SensorManager.cpp @@ -185,6 +185,18 @@ static jboolean nativeIsDataInjectionEnabled(JNIEnv *_env, jclass _this, jlong s return mgr->isDataInjectionEnabled(); } +static jboolean nativeSetPhysicalData(JNIEnv *env, jclass clazz,jlong sensorManager, jstring javaString) +{ + SensorManager* mgr = reinterpret_cast(sensorManager); + const char *nativeString = env->GetStringUTFChars(javaString, JNI_FALSE); + bool return_value; + + //ALOGD("android_hardware_SensorManager, call JNI function nativeSetPhysicalData(%s)",nativeString); + return_value = mgr->SetPhysicalData(nativeString); + + env->ReleaseStringUTFChars(javaString, nativeString); + return return_value; +} //---------------------------------------------------------------------------- class Receiver : public LooperCallback { @@ -358,6 +370,9 @@ static JNINativeMethod gSystemSensorManagerMethods[] = { {"nativeIsDataInjectionEnabled", "(J)Z", (void*)nativeIsDataInjectionEnabled}, + {"nativeSetPhysicalData", + "(JLjava/lang/String;)Z", + (void*)nativeSetPhysicalData }, }; static JNINativeMethod gBaseEventQueueMethods[] = {