From 63a931258e7e8f5bd64539ec1224420e8b8f3978 Mon Sep 17 00:00:00 2001 From: "tim.sk.lee" Date: Fri, 11 Mar 2011 11:43:56 +0900 Subject: SENSOR: Ignore the first 350ms gyroscope sensor events Fixes: Gyro data is wrong for the first 300ms Bug: 4027031i Change-Id: I7f29ffbae7fe665184b018f17efd562069ca60a3 Signed-off-by: tim.sk.lee --- libsensors/GyroSensor.cpp | 12 ++++++++---- libsensors/GyroSensor.h | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) (limited to 'libsensors') diff --git a/libsensors/GyroSensor.cpp b/libsensors/GyroSensor.cpp index 7f6b864..ecebb61 100644 --- a/libsensors/GyroSensor.cpp +++ b/libsensors/GyroSensor.cpp @@ -26,14 +26,15 @@ #include "GyroSensor.h" #define FETCH_FULL_EVENT_BEFORE_RETURN 1 - +#define IGNORE_EVENT_TIME 350000000 /*****************************************************************************/ GyroSensor::GyroSensor() : SensorBase(NULL, "gyro"), mEnabled(0), mInputReader(4), - mHasPendingEvent(false) + mHasPendingEvent(false), + mEnabledTime(0) { mPendingEvent.version = sizeof(sensors_event_t); mPendingEvent.sensor = ID_GY; @@ -86,6 +87,7 @@ int GyroSensor::enable(int32_t, int en) { buf[1] = 0; if (flags) { buf[0] = '1'; + mEnabledTime = getTimestamp() + IGNORE_EVENT_TIME; } else { buf[0] = '0'; } @@ -155,9 +157,11 @@ again: } else if (type == EV_SYN) { mPendingEvent.timestamp = timevalToNano(event->time); if (mEnabled) { - *data++ = mPendingEvent; + if (mPendingEvent.timestamp >= mEnabledTime) { + *data++ = mPendingEvent; + numEventReceived++; + } count--; - numEventReceived++; } } else { LOGE("GyroSensor: unknown event (type=%d, code=%d)", diff --git a/libsensors/GyroSensor.h b/libsensors/GyroSensor.h index e5a9241..e8997de 100644 --- a/libsensors/GyroSensor.h +++ b/libsensors/GyroSensor.h @@ -37,6 +37,7 @@ class GyroSensor : public SensorBase { bool mHasPendingEvent; char input_sysfs_path[PATH_MAX]; int input_sysfs_path_len; + int64_t mEnabledTime; int setInitialState(); -- cgit v1.2.3