summaryrefslogtreecommitdiff
path: root/libs/sensor/SensorManager.cpp
diff options
context:
space:
mode:
authorErik Staats <estaats@google.com>2022-02-04 06:37:58 -0800
committerErik Staats <estaats@google.com>2022-02-08 14:13:08 -0800
commitd35a5741259e3b5fa6e8f196a1cd8230c7c9abbd (patch)
tree6c13f61c5d6a46b3f8d0df8fd2d944a949913c71 /libs/sensor/SensorManager.cpp
parent7ae2eac6b2b091afd7830bb9265d66a9c9e866bf (diff)
Add ASensorManager_getDynamicSensorList.
Bug: 217890463 Test: Used uhid-sample to add a dynamic sensor and verified it can be used with sensor_test. Change-Id: Ida2ce53c3d94ed530ba4981d299fa4855c35e337
Diffstat (limited to 'libs/sensor/SensorManager.cpp')
-rw-r--r--libs/sensor/SensorManager.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/libs/sensor/SensorManager.cpp b/libs/sensor/SensorManager.cpp
index 62f4b4e3e2..0ba9704263 100644
--- a/libs/sensor/SensorManager.cpp
+++ b/libs/sensor/SensorManager.cpp
@@ -100,6 +100,7 @@ SensorManager::SensorManager(const String16& opPackageName)
SensorManager::~SensorManager() {
free(mSensorList);
+ free(mDynamicSensorList);
}
status_t SensorManager::waitForSensorService(sp<ISensorServer> *server) {
@@ -130,6 +131,9 @@ void SensorManager::sensorManagerDied() {
free(mSensorList);
mSensorList = nullptr;
mSensors.clear();
+ free(mDynamicSensorList);
+ mDynamicSensorList = nullptr;
+ mDynamicSensors.clear();
}
status_t SensorManager::assertStateLocked() {
@@ -197,6 +201,35 @@ ssize_t SensorManager::getDynamicSensorList(Vector<Sensor> & dynamicSensors) {
return static_cast<ssize_t>(count);
}
+ssize_t SensorManager::getDynamicSensorList(Sensor const* const** list) {
+ Mutex::Autolock _l(mLock);
+ status_t err = assertStateLocked();
+ if (err < 0) {
+ return static_cast<ssize_t>(err);
+ }
+
+ free(mDynamicSensorList);
+ mDynamicSensorList = nullptr;
+ mDynamicSensors = mSensorServer->getDynamicSensorList(mOpPackageName);
+ size_t dynamicCount = mDynamicSensors.size();
+ if (dynamicCount > 0) {
+ mDynamicSensorList = static_cast<Sensor const**>(
+ malloc(dynamicCount * sizeof(Sensor*)));
+ if (mDynamicSensorList == nullptr) {
+ ALOGE("Failed to allocate dynamic sensor list for %zu sensors.",
+ dynamicCount);
+ return static_cast<ssize_t>(NO_MEMORY);
+ }
+
+ for (size_t i = 0; i < dynamicCount; i++) {
+ mDynamicSensorList[i] = mDynamicSensors.array() + i;
+ }
+ }
+
+ *list = mDynamicSensorList;
+ return static_cast<ssize_t>(mDynamicSensors.size());
+}
+
Sensor const* SensorManager::getDefaultSensor(int type)
{
Mutex::Autolock _l(mLock);