Loading include/android/sensor.h +26 −1 Original line number Diff line number Diff line Loading @@ -743,10 +743,35 @@ ASensorManager* ASensorManager_getInstance() __DEPRECATED_IN(26); ASensorManager* ASensorManager_getInstanceForPackage(const char* packageName) __INTRODUCED_IN(26); /** * Returns the list of available sensors. * Returns the list of available sensors. The returned list is owned by the * sensor manager and will not change between calls to this function. * * \param manager the {@link ASensorManager} instance obtained from * {@link ASensorManager_getInstanceForPackage}. * \param list the returned list of sensors. * \return positive number of returned sensors or negative error code. * BAD_VALUE: manager is NULL. */ int ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list); /** * Returns the list of available dynamic sensors. If there are no dynamic * sensors available, returns nullptr in list. * * Each time this is called, the previously returned list is deallocated and * must no longer be used. * * Available since API level 33. * * \param manager the {@link ASensorManager} instance obtained from * {@link ASensorManager_getInstanceForPackage}. * \param list the returned list of dynamic sensors. * \return positive number of returned sensors or negative error code. * BAD_VALUE: manager is NULL. */ ssize_t ASensorManager_getDynamicSensorList( ASensorManager* manager, ASensorList* list) __INTRODUCED_IN(33); /** * Returns the default sensor for the given type, or NULL if no sensor * of that type exists. Loading libs/sensor/SensorManager.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ SensorManager::SensorManager(const String16& opPackageName) SensorManager::~SensorManager() { free(mSensorList); free(mDynamicSensorList); } status_t SensorManager::waitForSensorService(sp<ISensorServer> *server) { Loading Loading @@ -130,6 +131,9 @@ void SensorManager::sensorManagerDied() { free(mSensorList); mSensorList = nullptr; mSensors.clear(); free(mDynamicSensorList); mDynamicSensorList = nullptr; mDynamicSensors.clear(); } status_t SensorManager::assertStateLocked() { Loading Loading @@ -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); Loading libs/sensor/include/sensor/SensorManager.h +3 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ public: ssize_t getSensorList(Sensor const* const** list); ssize_t getDynamicSensorList(Vector<Sensor>& list); ssize_t getDynamicSensorList(Sensor const* const** list); Sensor const* getDefaultSensor(int type); sp<SensorEventQueue> createEventQueue( String8 packageName = String8(""), int mode = 0, String16 attributionTag = String16("")); Loading @@ -83,6 +84,8 @@ private: sp<ISensorServer> mSensorServer; Sensor const** mSensorList; Vector<Sensor> mSensors; Sensor const** mDynamicSensorList = nullptr; Vector<Sensor> mDynamicSensors; sp<IBinder::DeathRecipient> mDeathObserver; const String16 mOpPackageName; std::unordered_map<int, sp<ISensorEventConnection>> mDirectConnection; Loading Loading
include/android/sensor.h +26 −1 Original line number Diff line number Diff line Loading @@ -743,10 +743,35 @@ ASensorManager* ASensorManager_getInstance() __DEPRECATED_IN(26); ASensorManager* ASensorManager_getInstanceForPackage(const char* packageName) __INTRODUCED_IN(26); /** * Returns the list of available sensors. * Returns the list of available sensors. The returned list is owned by the * sensor manager and will not change between calls to this function. * * \param manager the {@link ASensorManager} instance obtained from * {@link ASensorManager_getInstanceForPackage}. * \param list the returned list of sensors. * \return positive number of returned sensors or negative error code. * BAD_VALUE: manager is NULL. */ int ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list); /** * Returns the list of available dynamic sensors. If there are no dynamic * sensors available, returns nullptr in list. * * Each time this is called, the previously returned list is deallocated and * must no longer be used. * * Available since API level 33. * * \param manager the {@link ASensorManager} instance obtained from * {@link ASensorManager_getInstanceForPackage}. * \param list the returned list of dynamic sensors. * \return positive number of returned sensors or negative error code. * BAD_VALUE: manager is NULL. */ ssize_t ASensorManager_getDynamicSensorList( ASensorManager* manager, ASensorList* list) __INTRODUCED_IN(33); /** * Returns the default sensor for the given type, or NULL if no sensor * of that type exists. Loading
libs/sensor/SensorManager.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ SensorManager::SensorManager(const String16& opPackageName) SensorManager::~SensorManager() { free(mSensorList); free(mDynamicSensorList); } status_t SensorManager::waitForSensorService(sp<ISensorServer> *server) { Loading Loading @@ -130,6 +131,9 @@ void SensorManager::sensorManagerDied() { free(mSensorList); mSensorList = nullptr; mSensors.clear(); free(mDynamicSensorList); mDynamicSensorList = nullptr; mDynamicSensors.clear(); } status_t SensorManager::assertStateLocked() { Loading Loading @@ -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); Loading
libs/sensor/include/sensor/SensorManager.h +3 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ public: ssize_t getSensorList(Sensor const* const** list); ssize_t getDynamicSensorList(Vector<Sensor>& list); ssize_t getDynamicSensorList(Sensor const* const** list); Sensor const* getDefaultSensor(int type); sp<SensorEventQueue> createEventQueue( String8 packageName = String8(""), int mode = 0, String16 attributionTag = String16("")); Loading @@ -83,6 +84,8 @@ private: sp<ISensorServer> mSensorServer; Sensor const** mSensorList; Vector<Sensor> mSensors; Sensor const** mDynamicSensorList = nullptr; Vector<Sensor> mDynamicSensors; sp<IBinder::DeathRecipient> mDeathObserver; const String16 mOpPackageName; std::unordered_map<int, sp<ISensorEventConnection>> mDirectConnection; Loading