int32_t getFifoMaxEventCount() const;
const String8& getStringType() const;
const String8& getRequiredPermission() const;
+ int32_t getMaxDelay() const;
bool isWakeUpSensor() const;
// LightFlattenable protocol
int32_t mFifoMaxEventCount;
String8 mStringType;
String8 mRequiredPermission;
- // Todo: Surface this in java SDK.
+ int32_t mMaxDelay;
bool mWakeUpSensor;
static void flattenString8(void*& buffer, size_t& size, const String8& string8);
static bool unflattenString8(void const*& buffer, size_t& size, String8& outputString8);
#include <stdint.h>
#include <sys/types.h>
+#include <sys/limits.h>
#include <utils/Errors.h>
#include <utils/String8.h>
#include <hardware/sensors.h>
#include <gui/Sensor.h>
+#include <log/log.h>
// ----------------------------------------------------------------------------
namespace android {
: mHandle(0), mType(0),
mMinValue(0), mMaxValue(0), mResolution(0),
mPower(0), mMinDelay(0), mFifoReservedEventCount(0), mFifoMaxEventCount(0),
- mWakeUpSensor(false)
+ mMaxDelay(0), mWakeUpSensor(false)
{
}
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) {
return mRequiredPermission;
}
+int32_t Sensor::getMaxDelay() const {
+ return mMaxDelay;
+}
+
bool Sensor::isWakeUpSensor() const {
return mWakeUpSensor;
}
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()) +
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;
}
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;
}
if (!unflattenString8(buffer, size, mRequiredPermission)) {
return NO_MEMORY;
}
+ FlattenableUtils::read(buffer, size, mMaxDelay);
+ FlattenableUtils::read(buffer, size, mWakeUpSensor);
return NO_ERROR;
}