diff options
author | 2023-02-10 10:23:59 +0100 | |
---|---|---|
committer | 2023-02-13 16:44:06 +0100 | |
commit | fafbe05de337cc2330a9e56697e4e2502c494d8c (patch) | |
tree | f1a5ba4911c527c831adcd4e65ecf79f119c3d56 | |
parent | 412fb031e48f18b56461808f335118da854b91e9 (diff) |
Refactor the native RuntimeSensor API.
Return a status from the virtual sensor callback indicating whether
the callback invocation was successful.
Bug: 266042170
Test: atest CtsSensorTestCases
Change-Id: I001019c1915dc33db26e84444314d162a801fb9a
-rw-r--r-- | services/sensorservice/SensorInterface.cpp | 11 | ||||
-rw-r--r-- | services/sensorservice/SensorInterface.h | 10 | ||||
-rw-r--r-- | services/sensorservice/SensorService.cpp | 17 | ||||
-rw-r--r-- | services/sensorservice/SensorService.h | 9 |
4 files changed, 26 insertions, 21 deletions
diff --git a/services/sensorservice/SensorInterface.cpp b/services/sensorservice/SensorInterface.cpp index 398cdf9a0e..e9c8335963 100644 --- a/services/sensorservice/SensorInterface.cpp +++ b/services/sensorservice/SensorInterface.cpp @@ -87,14 +87,15 @@ VirtualSensor::VirtualSensor() : // --------------------------------------------------------------------------- -RuntimeSensor::RuntimeSensor(const sensor_t& sensor, sp<StateChangeCallback> callback) +RuntimeSensor::RuntimeSensor(const sensor_t& sensor, sp<SensorCallback> callback) : BaseSensor(sensor), mCallback(std::move(callback)) { } status_t RuntimeSensor::activate(void*, bool enabled) { if (enabled != mEnabled) { mEnabled = enabled; - mCallback->onStateChanged(mEnabled, mSamplingPeriodNs, mBatchReportLatencyNs); + return mCallback->onConfigurationChanged(mSensor.getHandle(), mEnabled, mSamplingPeriodNs, + mBatchReportLatencyNs); } return OK; } @@ -105,7 +106,8 @@ status_t RuntimeSensor::batch(void*, int, int, int64_t samplingPeriodNs, mSamplingPeriodNs = samplingPeriodNs; mBatchReportLatencyNs = maxBatchReportLatencyNs; if (mEnabled) { - mCallback->onStateChanged(mEnabled, mSamplingPeriodNs, mBatchReportLatencyNs); + return mCallback->onConfigurationChanged(mSensor.getHandle(), mEnabled, + mSamplingPeriodNs, mBatchReportLatencyNs); } } return OK; @@ -115,7 +117,8 @@ status_t RuntimeSensor::setDelay(void*, int, int64_t ns) { if (mSamplingPeriodNs != ns) { mSamplingPeriodNs = ns; if (mEnabled) { - mCallback->onStateChanged(mEnabled, mSamplingPeriodNs, mBatchReportLatencyNs); + return mCallback->onConfigurationChanged(mSensor.getHandle(), mEnabled, + mSamplingPeriodNs, mBatchReportLatencyNs); } } return OK; diff --git a/services/sensorservice/SensorInterface.h b/services/sensorservice/SensorInterface.h index 5ee5e1224a..c446d61f89 100644 --- a/services/sensorservice/SensorInterface.h +++ b/services/sensorservice/SensorInterface.h @@ -108,12 +108,12 @@ class RuntimeSensor : public BaseSensor { public: static constexpr int DEFAULT_DEVICE_ID = 0; - class StateChangeCallback : public virtual RefBase { + class SensorCallback : public virtual RefBase { public: - virtual void onStateChanged(bool enabled, int64_t samplingPeriodNs, - int64_t batchReportLatencyNs) = 0; + virtual status_t onConfigurationChanged(int handle, bool enabled, int64_t samplingPeriodNs, + int64_t batchReportLatencyNs) = 0; }; - RuntimeSensor(const sensor_t& sensor, sp<StateChangeCallback> callback); + RuntimeSensor(const sensor_t& sensor, sp<SensorCallback> callback); virtual status_t activate(void* ident, bool enabled) override; virtual status_t batch(void* ident, int handle, int flags, int64_t samplingPeriodNs, int64_t maxBatchReportLatencyNs) override; @@ -125,7 +125,7 @@ private: bool mEnabled = false; int64_t mSamplingPeriodNs = 0; int64_t mBatchReportLatencyNs = 0; - sp<StateChangeCallback> mCallback; + sp<SensorCallback> mCallback; }; // --------------------------------------------------------------------------- diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 5c98614f1a..3a0329cd09 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -116,16 +116,17 @@ int32_t nextRuntimeSensorHandle() { return nextHandle++; } -class RuntimeSensorCallbackProxy : public RuntimeSensor::StateChangeCallback { +class RuntimeSensorCallbackProxy : public RuntimeSensor::SensorCallback { public: - RuntimeSensorCallbackProxy(sp<SensorService::RuntimeSensorStateChangeCallback> callback) + RuntimeSensorCallbackProxy(sp<SensorService::RuntimeSensorCallback> callback) : mCallback(std::move(callback)) {} - void onStateChanged(bool enabled, int64_t samplingPeriodNs, - int64_t batchReportLatencyNs) override { - mCallback->onStateChanged(enabled, samplingPeriodNs, batchReportLatencyNs); + status_t onConfigurationChanged(int handle, bool enabled, int64_t samplingPeriodNs, + int64_t batchReportLatencyNs) override { + return mCallback->onConfigurationChanged(handle, enabled, samplingPeriodNs, + batchReportLatencyNs); } private: - sp<SensorService::RuntimeSensorStateChangeCallback> mCallback; + sp<SensorService::RuntimeSensorCallback> mCallback; }; } // namespace @@ -166,7 +167,7 @@ SensorService::SensorService() } int SensorService::registerRuntimeSensor( - const sensor_t& sensor, int deviceId, sp<RuntimeSensorStateChangeCallback> callback) { + const sensor_t& sensor, int deviceId, sp<RuntimeSensorCallback> callback) { int handle = 0; while (handle == 0 || !mSensors.isNewHandle(handle)) { handle = nextRuntimeSensorHandle(); @@ -179,7 +180,7 @@ int SensorService::registerRuntimeSensor( ALOGI("Registering runtime sensor handle 0x%x, type %d, name %s", handle, sensor.type, sensor.name); - sp<RuntimeSensor::StateChangeCallback> runtimeSensorCallback( + sp<RuntimeSensor::SensorCallback> runtimeSensorCallback( new RuntimeSensorCallbackProxy(std::move(callback))); sensor_t runtimeSensor = sensor; // force the handle to be consistent diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index 0798279b6b..3f6a895b52 100644 --- a/services/sensorservice/SensorService.h +++ b/services/sensorservice/SensorService.h @@ -147,12 +147,13 @@ public: virtual void onProximityActive(bool isActive) = 0; }; - class RuntimeSensorStateChangeCallback : public virtual RefBase { + class RuntimeSensorCallback : public virtual RefBase { public: // Note that the callback is invoked from an async thread and can interact with the // SensorService directly. - virtual void onStateChanged(bool enabled, int64_t samplingPeriodNanos, - int64_t batchReportLatencyNanos) = 0; + virtual status_t onConfigurationChanged(int handle, bool enabled, + int64_t samplingPeriodNanos, + int64_t batchReportLatencyNanos) = 0; }; static char const* getServiceName() ANDROID_API { return "sensorservice"; } @@ -182,7 +183,7 @@ public: status_t removeProximityActiveListener(const sp<ProximityActiveListener>& callback) ANDROID_API; int registerRuntimeSensor(const sensor_t& sensor, int deviceId, - sp<RuntimeSensorStateChangeCallback> callback) ANDROID_API; + sp<RuntimeSensorCallback> callback) ANDROID_API; status_t unregisterRuntimeSensor(int handle) ANDROID_API; status_t sendRuntimeSensorEvent(const sensors_event_t& event) ANDROID_API; |