diff --git a/include/gui/Sensor.h b/include/gui/Sensor.h index 41a6cc6cc..c1c98b9e9 100644 --- a/include/gui/Sensor.h +++ b/include/gui/Sensor.h @@ -71,6 +71,7 @@ public: int32_t getFifoMaxEventCount() const; const String8& getStringType() const; const String8& getRequiredPermission() const; + int32_t getMaxDelay() const; bool isWakeUpSensor() const; // LightFlattenable protocol @@ -94,7 +95,7 @@ private: 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); diff --git a/libs/gui/Sensor.cpp b/libs/gui/Sensor.cpp index 6d12225fc..70180f8a7 100644 --- a/libs/gui/Sensor.cpp +++ b/libs/gui/Sensor.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -24,6 +25,7 @@ #include #include +#include // ---------------------------------------------------------------------------- namespace android { @@ -33,7 +35,7 @@ Sensor::Sensor() : 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 @@ Sensor::Sensor(struct sensor_t const* hwSensor, int halVersion) 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 @@ const String8& Sensor::getRequiredPermission() const { return mRequiredPermission; } +int32_t Sensor::getMaxDelay() const { + return mMaxDelay; +} + bool Sensor::isWakeUpSensor() const { return mWakeUpSensor; } @@ -298,7 +318,8 @@ size_t Sensor::getFlattenedSize() const 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 @@ status_t Sensor::flatten(void* buffer, size_t size) const { 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 @@ status_t Sensor::unflatten(void const* buffer, size_t size) { 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 @@ status_t Sensor::unflatten(void const* buffer, size_t size) { if (!unflattenString8(buffer, size, mRequiredPermission)) { return NO_MEMORY; } + FlattenableUtils::read(buffer, size, mMaxDelay); + FlattenableUtils::read(buffer, size, mWakeUpSensor); return NO_ERROR; } diff --git a/services/sensorservice/SensorInterface.cpp b/services/sensorservice/SensorInterface.cpp index 2bf5e7284..970220b29 100644 --- a/services/sensorservice/SensorInterface.cpp +++ b/services/sensorservice/SensorInterface.cpp @@ -17,8 +17,6 @@ #include #include -#include - #include "SensorInterface.h" namespace android { @@ -34,7 +32,6 @@ HardwareSensor::HardwareSensor(const sensor_t& sensor) : mSensorDevice(SensorDevice::getInstance()), mSensor(&sensor, mSensorDevice.getHalDeviceVersion()) { - ALOGI("%s", sensor.name); } HardwareSensor::~HardwareSensor() { diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index aff4e9a50..1bee04f52 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -159,7 +159,6 @@ void SensorService::onFirstRef() mSocketBufferSize = MAX_SOCKET_BUFFER_SIZE_BATCHED; } } - ALOGD("Max socket buffer size %u", mSocketBufferSize); if (fp) { fclose(fp); }