Surface maxDelay and isWakeUpSensor flag in Sensor.java.
Change-Id: Idd1e9045190beeca87b086b272e8cbf0bed05bae
diff --git a/libs/gui/Sensor.cpp b/libs/gui/Sensor.cpp
index 6d12225..70180f8 100644
--- a/libs/gui/Sensor.cpp
+++ b/libs/gui/Sensor.cpp
@@ -16,6 +16,7 @@
#include <stdint.h>
#include <sys/types.h>
+#include <sys/limits.h>
#include <utils/Errors.h>
#include <utils/String8.h>
@@ -24,6 +25,7 @@
#include <hardware/sensors.h>
#include <gui/Sensor.h>
+#include <log/log.h>
// ----------------------------------------------------------------------------
namespace android {
@@ -33,7 +35,7 @@
: mHandle(0), mType(0),
mMinValue(0), mMaxValue(0), mResolution(0),
mPower(0), mMinDelay(0), mFifoReservedEventCount(0), mFifoMaxEventCount(0),
- mWakeUpSensor(false)
+ mMaxDelay(0), mWakeUpSensor(false)
{
}
@@ -61,6 +63,20 @@
mFifoMaxEventCount = 0;
}
+ if (halVersion >= SENSORS_DEVICE_API_VERSION_1_3) {
+ if (hwSensor->maxDelay > INT_MAX) {
+ // Max delay is declared as a 64 bit integer for 64 bit architectures. But it should
+ // always fit in a 32 bit integer, log error and cap it to INT_MAX.
+ ALOGE("Sensor maxDelay overflow error %s %lld", mName.string(), hwSensor->maxDelay);
+ mMaxDelay = INT_MAX;
+ } else {
+ mMaxDelay = (int32_t) hwSensor->maxDelay;
+ }
+ } else {
+ // For older hals set maxDelay to 0.
+ mMaxDelay = 0;
+ }
+
// Ensure existing sensors have correct string type and required
// permissions.
switch (mType) {
@@ -289,6 +305,10 @@
return mRequiredPermission;
}
+int32_t Sensor::getMaxDelay() const {
+ return mMaxDelay;
+}
+
bool Sensor::isWakeUpSensor() const {
return mWakeUpSensor;
}
@@ -298,7 +318,8 @@
size_t fixedSize =
sizeof(int32_t) * 3 +
sizeof(float) * 4 +
- sizeof(int32_t) * 3;
+ sizeof(int32_t) * 4 +
+ sizeof(bool) * 1;
size_t variableSize =
sizeof(uint32_t) + FlattenableUtils::align<4>(mName.length()) +
@@ -328,6 +349,8 @@
FlattenableUtils::write(buffer, size, mFifoMaxEventCount);
flattenString8(buffer, size, mStringType);
flattenString8(buffer, size, mRequiredPermission);
+ FlattenableUtils::write(buffer, size, mMaxDelay);
+ FlattenableUtils::write(buffer, size, mWakeUpSensor);
return NO_ERROR;
}
@@ -342,7 +365,8 @@
size_t fixedSize =
sizeof(int32_t) * 3 +
sizeof(float) * 4 +
- sizeof(int32_t) * 3;
+ sizeof(int32_t) * 4 +
+ sizeof(bool) * 1;
if (size < fixedSize) {
return NO_MEMORY;
}
@@ -364,6 +388,8 @@
if (!unflattenString8(buffer, size, mRequiredPermission)) {
return NO_MEMORY;
}
+ FlattenableUtils::read(buffer, size, mMaxDelay);
+ FlattenableUtils::read(buffer, size, mWakeUpSensor);
return NO_ERROR;
}