summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEspen Fjellvær Olsen <espen@mrfjo.org>2012-04-19 10:05:35 +0200
committerEspen Fjellvær Olsen <espen@mrfjo.org>2012-04-19 10:05:35 +0200
commit8537e27d601a73708e26b912d8cd3190af28aae6 (patch)
tree5d33193432aec85ee7e22a4265a1ec9d134db328
parentec03b1b0c86814ce62e57f5afd97201a119951e9 (diff)
downloadandroid_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.cpp23
-rw-r--r--exynos4/hal/libsensors/AkmSensor.h2
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];
};
/*****************************************************************************/