diff options
author | Erik Staats <estaats@google.com> | 2022-02-04 06:37:58 -0800 |
---|---|---|
committer | Erik Staats <estaats@google.com> | 2022-02-08 14:13:08 -0800 |
commit | d35a5741259e3b5fa6e8f196a1cd8230c7c9abbd (patch) | |
tree | 6c13f61c5d6a46b3f8d0df8fd2d944a949913c71 /libs/sensor/SensorManager.cpp | |
parent | 7ae2eac6b2b091afd7830bb9265d66a9c9e866bf (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.cpp | 33 |
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); |