From 101c55d0b91557fa7a46b611b06fb343b5321936 Mon Sep 17 00:00:00 2001 From: Ricardo Cerqueira Date: Thu, 4 Sep 2014 17:54:36 +0100 Subject: sensors: Force a minimum interval between gyro state changes The gyroscope will mess up the entire sensor pile if it gets deactivated less than around 150 msec after it's enabled, which does happen with some overly aggressive apps. Prevent this simply by delaying all gyro disablements by 200 msec. Change-Id: I8212a8aa4beb22a241ed63cc8d1471b4fea3d0b6 --- libsensors/sensors.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libsensors/sensors.cpp b/libsensors/sensors.cpp index d57f65a..e393cd5 100644 --- a/libsensors/sensors.cpp +++ b/libsensors/sensors.cpp @@ -210,6 +210,9 @@ sensors_poll_context_t::~sensors_poll_context_t() { int sensors_poll_context_t::activate(int handle, int enabled) { int index = handleToDriver(handle); if (index < 0) return index; + if (index == gyro && enabled == 0) { + usleep(200*1000); + } int err = mSensors[index]->enable(handle, enabled); if (enabled && !err) { const char wakeMessage(WAKE_MESSAGE); @@ -311,7 +314,7 @@ static int open_sensors(const struct hw_module_t* module, const char* id, memset(&dev->device, 0, sizeof(sensors_poll_device_t)); dev->device.common.tag = HARDWARE_DEVICE_TAG; - dev->device.common.version = 0; + dev->device.common.version = SENSORS_DEVICE_API_VERSION_0_1; dev->device.common.module = const_cast(module); dev->device.common.close = poll__close; dev->device.activate = poll__activate; -- cgit v1.1