diff options
author | Aravind Akella <aakella@google.com> | 2015-04-20 17:39:51 -0700 |
---|---|---|
committer | Aravind Akella <aakella@google.com> | 2015-04-23 17:30:04 -0700 |
commit | 18ebf732b84d0575c871db35b25bf000e0c7c6a6 (patch) | |
tree | 22f148af9086f18b83494f6fc2b7ffd859eb112e /core/jni/android_hardware_SensorManager.cpp | |
parent | fb6f8b4f632a144b08ba798ec47c8e7da67bf781 (diff) | |
download | frameworks_base-18ebf732b84d0575c871db35b25bf000e0c7c6a6.zip frameworks_base-18ebf732b84d0575c871db35b25bf000e0c7c6a6.tar.gz frameworks_base-18ebf732b84d0575c871db35b25bf000e0c7c6a6.tar.bz2 |
Add hidden SensorManager APIs for injecting sensor data.
Change-Id: If49467ced1a719c49bb5ac7ab670e86ff4642eaa
Diffstat (limited to 'core/jni/android_hardware_SensorManager.cpp')
-rw-r--r-- | core/jni/android_hardware_SensorManager.cpp | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp index 16e5b3c..0cf596c 100644 --- a/core/jni/android_hardware_SensorManager.cpp +++ b/core/jni/android_hardware_SensorManager.cpp @@ -174,6 +174,11 @@ nativeGetNextSensor(JNIEnv *env, jclass clazz, jobject sensor, jint next) return size_t(next) < count ? next : 0; } +static int nativeEnableDataInjection(JNIEnv *_env, jclass _this, jboolean enable) { + SensorManager& mgr(SensorManager::getInstance()); + return mgr.enableDataInjection(enable); +} + //---------------------------------------------------------------------------- class Receiver : public LooperCallback { @@ -277,11 +282,11 @@ private: }; static jlong nativeInitSensorEventQueue(JNIEnv *env, jclass clazz, jobject eventQWeak, jobject msgQ, - jfloatArray scratch, jstring packageName) { + jfloatArray scratch, jstring packageName, jint mode) { SensorManager& mgr(SensorManager::getInstance()); ScopedUtfChars packageUtf(env, packageName); String8 clientName(packageUtf.c_str()); - sp<SensorEventQueue> queue(mgr.createEventQueue(clientName)); + sp<SensorEventQueue> queue(mgr.createEventQueue(clientName, mode)); sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, msgQ); if (messageQueue == NULL) { @@ -297,7 +302,6 @@ static jlong nativeInitSensorEventQueue(JNIEnv *env, jclass clazz, jobject event static jint nativeEnableSensor(JNIEnv *env, jclass clazz, jlong eventQ, jint handle, jint rate_us, jint maxBatchReportLatency) { sp<Receiver> receiver(reinterpret_cast<Receiver *>(eventQ)); - return receiver->getSensorEventQueue()->enableSensor(handle, rate_us, maxBatchReportLatency, 0); } @@ -307,7 +311,7 @@ static jint nativeDisableSensor(JNIEnv *env, jclass clazz, jlong eventQ, jint ha return receiver->getSensorEventQueue()->disableSensor(handle); } -static void nativeDestroySensorEventQueue(JNIEnv *env, jclass clazz, jlong eventQ, jint handle) { +static void nativeDestroySensorEventQueue(JNIEnv *env, jclass clazz, jlong eventQ) { sp<Receiver> receiver(reinterpret_cast<Receiver *>(eventQ)); receiver->destroy(); receiver->decStrong((void*)nativeInitSensorEventQueue); @@ -318,6 +322,17 @@ static jint nativeFlushSensor(JNIEnv *env, jclass clazz, jlong eventQ) { return receiver->getSensorEventQueue()->flush(); } +static jint nativeInjectSensorData(JNIEnv *env, jclass clazz, jlong eventQ, jint handle, + jfloatArray values, jint accuracy, jlong timestamp) { + sp<Receiver> receiver(reinterpret_cast<Receiver *>(eventQ)); + // Create a sensor_event from the above data which can be injected into the HAL. + ASensorEvent sensor_event; + memset(&sensor_event, 0, sizeof(sensor_event)); + sensor_event.sensor = handle; + sensor_event.timestamp = timestamp; + env->GetFloatArrayRegion(values, 0, env->GetArrayLength(values), sensor_event.data); + return receiver->getSensorEventQueue()->injectSensorEvent(sensor_event); +} //---------------------------------------------------------------------------- static JNINativeMethod gSystemSensorManagerMethods[] = { @@ -328,11 +343,15 @@ static JNINativeMethod gSystemSensorManagerMethods[] = { {"nativeGetNextSensor", "(Landroid/hardware/Sensor;I)I", (void*)nativeGetNextSensor }, + + {"nativeEnableDataInjection", + "(Z)I", + (void*)nativeEnableDataInjection }, }; static JNINativeMethod gBaseEventQueueMethods[] = { {"nativeInitBaseEventQueue", - "(Ljava/lang/ref/WeakReference;Landroid/os/MessageQueue;[FLjava/lang/String;)J", + "(Ljava/lang/ref/WeakReference;Landroid/os/MessageQueue;[FLjava/lang/String;I)J", (void*)nativeInitSensorEventQueue }, {"nativeEnableSensor", @@ -350,6 +369,10 @@ static JNINativeMethod gBaseEventQueueMethods[] = { {"nativeFlushSensor", "(J)I", (void*)nativeFlushSensor }, + + {"nativeInjectSensorData", + "(JI[FIJ)I", + (void*)nativeInjectSensorData }, }; }; // namespace android |