diff options
Diffstat (limited to 'services/sensorservice/SensorDevice.cpp')
-rw-r--r-- | services/sensorservice/SensorDevice.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp index a9e3ef4..a12529e 100644 --- a/services/sensorservice/SensorDevice.cpp +++ b/services/sensorservice/SensorDevice.cpp @@ -111,6 +111,12 @@ ssize_t SensorDevice::poll(sensors_event_t* buffer, size_t count) { return c; } +void SensorDevice::autoDisable(void *ident, int handle) { + Info& info( mActivationCount.editValueFor(handle) ); + Mutex::Autolock _l(mLock); + info.rates.removeItem(ident); +} + status_t SensorDevice::activate(void* ident, int handle, int enabled) { if (!mSensorDevice) return NO_INIT; @@ -159,6 +165,15 @@ status_t SensorDevice::activate(void* ident, int handle, int enabled) ALOGE_IF(err, "Error %s sensor %d (%s)", enabled ? "activating" : "disabling", handle, strerror(-err)); + + if (err != NO_ERROR) { + // clean-up on failure + if (enabled) { + // failure when enabling the sensor + Mutex::Autolock _l(mLock); + info.rates.removeItem(ident); + } + } } { // scope for the lock @@ -181,6 +196,12 @@ status_t SensorDevice::setDelay(void* ident, int handle, int64_t ns) return mSensorDevice->setDelay(mSensorDevice, handle, ns); } +int SensorDevice::getHalDeviceVersion() const { + if (!mSensorDevice) return -1; + + return mSensorDevice->common.version; +} + // --------------------------------------------------------------------------- status_t SensorDevice::Info::setDelayForIdent(void* ident, int64_t ns) |