Add function to determine if SensorDevice support direct report
Added a function to SensorDevice to indicate if direct report is
supported. This avoided a crash condition in non-HIDL implementation.
Test: test with demo app on a HAL w/ and w/o direct report support
Change-Id: If68497bb8890b9e6003c2afeec38d16daf81f237
diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp
index 41ad918..de0321d 100644
--- a/services/sensorservice/SensorDevice.cpp
+++ b/services/sensorservice/SensorDevice.cpp
@@ -491,6 +491,11 @@
}
int32_t SensorDevice::registerDirectChannel(const sensors_direct_mem_t* memory) {
+
+ if (!isDirectReportSupported()) {
+ return INVALID_OPERATION;
+ }
+
Mutex::Autolock _l(mLock);
int32_t channelHandle = mSensorDevice->register_direct_channel(
@@ -506,6 +511,11 @@
int32_t SensorDevice::configureDirectChannel(int32_t sensorHandle, int32_t channelHandle,
const struct sensors_direct_cfg_t *config) {
+
+ if (!isDirectReportSupported()) {
+ return INVALID_OPERATION;
+ }
+
Mutex::Autolock _l(mLock);
int32_t ret = mSensorDevice->config_direct_report(
@@ -513,6 +523,12 @@
ALOGE_IF(ret < 0, "SensorDevice::configureDirectChannel ret %d", ret);
return ret;
}
+
+bool SensorDevice::isDirectReportSupported() const {
+ bool ret = mSensorDevice->register_direct_channel != nullptr
+ && mSensorDevice->config_direct_report != nullptr;
+ return ret;
+}
// ---------------------------------------------------------------------------
}; // namespace android