diff options
author | Aravind Akella <aakella@google.com> | 2014-02-11 18:44:42 -0800 |
---|---|---|
committer | Aravind Akella <aakella@google.com> | 2014-04-23 17:05:41 -0700 |
commit | 35187bd5c1e40ea52a672c525411d05cbcdd6482 (patch) | |
tree | 0eaae3cec2a38f4123c836e5170c93b2afb05bff | |
parent | 3a025393b50658b988411fbbb7435f8f87a4e16e (diff) | |
download | frameworks_base-35187bd5c1e40ea52a672c525411d05cbcdd6482.zip frameworks_base-35187bd5c1e40ea52a672c525411d05cbcdd6482.tar.gz frameworks_base-35187bd5c1e40ea52a672c525411d05cbcdd6482.tar.bz2 |
Bug fix for wakeup sensors.
SensorService should hold a wakelock till the app reads events from a wakeup sensor. Currently drivers hold a wakelock with a
timeout while delivering events from a wake up sensor like Significant Motion. This hack can be removed now.
Bug: 9774884
Change-Id: I6cab0147c63f57a494a61f4dfe2a64a27dfe1b4e
-rw-r--r-- | core/jni/android_hardware_SensorManager.cpp | 5 | ||||
-rw-r--r-- | native/android/sensor.cpp | 7 |
2 files changed, 7 insertions, 5 deletions
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp index 7a4728d..fcf8f83 100644 --- a/core/jni/android_hardware_SensorManager.cpp +++ b/core/jni/android_hardware_SensorManager.cpp @@ -160,7 +160,6 @@ private: ASensorEvent buffer[16]; while ((n = q->read(buffer, 16)) > 0) { for (int i=0 ; i<n ; i++) { - if (buffer[i].type == SENSOR_TYPE_STEP_COUNTER) { // step-counter returns a uint64, but the java API only deals with floats float value = float(buffer[i].u64.step_counter); @@ -183,17 +182,17 @@ private: buffer[i].vector.status, buffer[i].timestamp); } - if (env->ExceptionCheck()) { + mSensorQueue->sendAck(buffer, n); ALOGE("Exception dispatching input event."); return 1; } } + mSensorQueue->sendAck(buffer, n); } if (n<0 && n != -EAGAIN) { // FIXME: error receiving events, what to do in this case? } - return 1; } }; diff --git a/native/android/sensor.cpp b/native/android/sensor.cpp index fb4de9e..acfcd83 100644 --- a/native/android/sensor.cpp +++ b/native/android/sensor.cpp @@ -123,10 +123,13 @@ int ASensorEventQueue_hasEvents(ASensorEventQueue* queue) ssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue, ASensorEvent* events, size_t count) { - return static_cast<SensorEventQueue*>(queue)->read(events, count); + ssize_t actual = static_cast<SensorEventQueue*>(queue)->read(events, count); + if (actual > 0) { + static_cast<SensorEventQueue*>(queue)->sendAck(events, actual); + } + return actual; } - /*****************************************************************************/ const char* ASensor_getName(ASensor const* sensor) |