diff options
author | Espen Fjellvær Olsen <espen@mrfjo.org> | 2012-04-19 10:05:35 +0200 |
---|---|---|
committer | Espen Fjellvær Olsen <espen@mrfjo.org> | 2012-04-19 10:05:35 +0200 |
commit | 8537e27d601a73708e26b912d8cd3190af28aae6 (patch) | |
tree | 5d33193432aec85ee7e22a4265a1ec9d134db328 | |
parent | ec03b1b0c86814ce62e57f5afd97201a119951e9 (diff) | |
download | android_hardware_samsung-8537e27d601a73708e26b912d8cd3190af28aae6.tar.gz android_hardware_samsung-8537e27d601a73708e26b912d8cd3190af28aae6.tar.bz2 android_hardware_samsung-8537e27d601a73708e26b912d8cd3190af28aae6.zip |
Update AkmSensor to manually set poll interval
Change-Id: I84fc5c3fc1cb552874129512ea6dfc19b1f9a60a
-rw-r--r-- | exynos4/hal/libsensors/AkmSensor.cpp | 23 | ||||
-rw-r--r-- | exynos4/hal/libsensors/AkmSensor.h | 2 |
2 files changed, 24 insertions, 1 deletions
diff --git a/exynos4/hal/libsensors/AkmSensor.cpp b/exynos4/hal/libsensors/AkmSensor.cpp index c147bd6..98a17cb 100644 --- a/exynos4/hal/libsensors/AkmSensor.cpp +++ b/exynos4/hal/libsensors/AkmSensor.cpp @@ -175,6 +175,7 @@ int AkmSensor::enable(int32_t handle, int en) int AkmSensor::setDelay(int32_t handle, int64_t ns) { + int what = -1; uint32_t sensor_type = 0; if (ns < 0) @@ -189,9 +190,29 @@ int AkmSensor::setDelay(int32_t handle, int64_t ns) if (sensor_type == 0) return -EINVAL; - return akm_set_delay(sensor_type, ns); + mDelays[what] = ns; + return update_delay(); +} + +int AkmSensor::update_delay() +{ + if (mEnabled) { + uint64_t wanted = -1LLU; + for (int i=0 ; i<numSensors ; i++) { + if (mEnabled & (1<<i)) { + uint64_t ns = mDelays[i]; + wanted = wanted < ns ? wanted : ns; + } + } + short delay = int64_t(wanted) / 1000000; + if (ioctl(dev_fd, ECS_IOCTL_APP_SET_DELAY, &delay)) { + return -errno; + } + } + return 0; } + int AkmSensor::loadAKMLibrary() { mLibAKM = dlopen("libakm.so", RTLD_NOW); diff --git a/exynos4/hal/libsensors/AkmSensor.h b/exynos4/hal/libsensors/AkmSensor.h index 44214e0..c155ec2 100644 --- a/exynos4/hal/libsensors/AkmSensor.h +++ b/exynos4/hal/libsensors/AkmSensor.h @@ -50,11 +50,13 @@ public: private: int loadAKMLibrary(); + int update_delay(); void *mLibAKM; uint32_t mEnabled; uint32_t mPendingMask; InputEventCircularReader mInputReader; sensors_event_t mPendingEvents[numSensors]; + uint64_t mDelays[numSensors]; }; /*****************************************************************************/ |