compat: Add libsensor -> libsensorndkbridge wrapper
Change-Id: I62c27463af385dc791dde64731a39e9ebadfd587
This commit is contained in:
parent
ac25b3eb52
commit
aea5a5fba5
7 changed files with 375 additions and 0 deletions
14
Android.bp
14
Android.bp
|
@ -368,6 +368,20 @@ cc_library {
|
||||||
vendor_available: true,
|
vendor_available: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cc_library_shared {
|
||||||
|
name: "libsensor_vendor",
|
||||||
|
srcs: [
|
||||||
|
"libsensor/Sensor.cpp",
|
||||||
|
"libsensor/SensorEventQueue.cpp",
|
||||||
|
"libsensor/SensorManager.cpp",
|
||||||
|
],
|
||||||
|
shared_libs: [
|
||||||
|
"libsensorndkbridge",
|
||||||
|
"libutils",
|
||||||
|
],
|
||||||
|
vendor: true,
|
||||||
|
}
|
||||||
|
|
||||||
cc_library_shared {
|
cc_library_shared {
|
||||||
name: "libtinyxml2_shim",
|
name: "libtinyxml2_shim",
|
||||||
srcs: ["libtinyxml2/XMLDocument.cpp"],
|
srcs: ["libtinyxml2/XMLDocument.cpp"],
|
||||||
|
|
63
libsensor/Sensor.cpp
Normal file
63
libsensor/Sensor.cpp
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The LineageOS Project
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Sensor.h"
|
||||||
|
|
||||||
|
namespace android {
|
||||||
|
|
||||||
|
Sensor::Sensor(ASensorRef sensorRef) : mASensorRef(sensorRef) {
|
||||||
|
mName = ASensor_getName(mASensorRef);
|
||||||
|
mVendor = ASensor_getVendor(mASensorRef);
|
||||||
|
mHandle = ASensor_getHandle(mASensorRef);
|
||||||
|
mType = ASensor_getType(mASensorRef);
|
||||||
|
mResolution = ASensor_getResolution(mASensorRef);
|
||||||
|
mMinDelay = ASensor_getMinDelay(mASensorRef);
|
||||||
|
mFifoReservedEventCount = ASensor_getFifoReservedEventCount(mASensorRef);
|
||||||
|
mFifoMaxEventCount = ASensor_getFifoMaxEventCount(mASensorRef);
|
||||||
|
mStringType = ASensor_getStringType(mASensorRef);
|
||||||
|
}
|
||||||
|
|
||||||
|
const String8& Sensor::getName() const {
|
||||||
|
return mName;
|
||||||
|
}
|
||||||
|
|
||||||
|
const String8& Sensor::getVendor() const {
|
||||||
|
return mVendor;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t Sensor::getHandle() const {
|
||||||
|
return mHandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t Sensor::getType() const {
|
||||||
|
return mType;
|
||||||
|
}
|
||||||
|
|
||||||
|
float Sensor::getResolution() const {
|
||||||
|
return mResolution;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t Sensor::getMinDelay() const {
|
||||||
|
return mMinDelay;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t Sensor::getFifoReservedEventCount() const {
|
||||||
|
return mFifoReservedEventCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t Sensor::getFifoMaxEventCount() const {
|
||||||
|
return mFifoMaxEventCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
const String8& Sensor::getStringType() const {
|
||||||
|
return mStringType;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASensorRef Sensor::getASensorRef() const {
|
||||||
|
return mASensorRef;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace android
|
73
libsensor/Sensor.h
Normal file
73
libsensor/Sensor.h
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The LineageOS Project
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <android/sensor.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <utils/Errors.h>
|
||||||
|
#include <utils/String8.h>
|
||||||
|
|
||||||
|
namespace android {
|
||||||
|
|
||||||
|
class Sensor {
|
||||||
|
public:
|
||||||
|
Sensor(ASensorRef sensorRef);
|
||||||
|
~Sensor() = default;
|
||||||
|
|
||||||
|
const String8& getName() const;
|
||||||
|
const String8& getVendor() const;
|
||||||
|
int32_t getHandle() const;
|
||||||
|
int32_t getType() const;
|
||||||
|
/*
|
||||||
|
float getMinValue() const;
|
||||||
|
float getMaxValue() const;
|
||||||
|
*/
|
||||||
|
float getResolution() const;
|
||||||
|
/*
|
||||||
|
float getPowerUsage() const;
|
||||||
|
*/
|
||||||
|
int32_t getMinDelay() const;
|
||||||
|
/*
|
||||||
|
nsecs_t getMinDelayNs() const;
|
||||||
|
int32_t getVersion() const;
|
||||||
|
*/
|
||||||
|
uint32_t getFifoReservedEventCount() const;
|
||||||
|
uint32_t getFifoMaxEventCount() const;
|
||||||
|
const String8& getStringType() const;
|
||||||
|
/*
|
||||||
|
const String8& getRequiredPermission() const;
|
||||||
|
bool isRequiredPermissionRuntime() const;
|
||||||
|
int32_t getRequiredAppOp() const;
|
||||||
|
int32_t getMaxDelay() const;
|
||||||
|
uint32_t getFlags() const;
|
||||||
|
bool isWakeUpSensor() const;
|
||||||
|
bool isDynamicSensor() const;
|
||||||
|
bool isDataInjectionSupported() const;
|
||||||
|
bool hasAdditionalInfo() const;
|
||||||
|
int32_t getHighestDirectReportRateLevel() const;
|
||||||
|
bool isDirectChannelTypeSupported(int32_t sharedMemType) const;
|
||||||
|
int32_t getReportingMode() const;
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Custom methods
|
||||||
|
ASensorRef getASensorRef() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
ASensorRef mASensorRef;
|
||||||
|
|
||||||
|
String8 mName;
|
||||||
|
String8 mVendor;
|
||||||
|
int32_t mHandle;
|
||||||
|
int32_t mType;
|
||||||
|
float mResolution;
|
||||||
|
int32_t mMinDelay;
|
||||||
|
uint32_t mFifoReservedEventCount;
|
||||||
|
uint32_t mFifoMaxEventCount;
|
||||||
|
String8 mStringType;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace android
|
34
libsensor/SensorEventQueue.cpp
Normal file
34
libsensor/SensorEventQueue.cpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The LineageOS Project
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "SensorEventQueue.h"
|
||||||
|
|
||||||
|
namespace android {
|
||||||
|
|
||||||
|
SensorEventQueue::SensorEventQueue(ASensorEventQueue* aSensorEventQueue)
|
||||||
|
: mASensorEventQueue(aSensorEventQueue) {}
|
||||||
|
|
||||||
|
ssize_t SensorEventQueue::read(ASensorEvent* events, size_t numEvents) {
|
||||||
|
return ASensorEventQueue_getEvents(mASensorEventQueue, events, numEvents);
|
||||||
|
}
|
||||||
|
|
||||||
|
status_t SensorEventQueue::waitForEvent() const {
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
status_t SensorEventQueue::enableSensor(Sensor const* sensor) const {
|
||||||
|
return ASensorEventQueue_enableSensor(mASensorEventQueue, sensor->getASensorRef());
|
||||||
|
}
|
||||||
|
|
||||||
|
status_t SensorEventQueue::disableSensor(Sensor const* sensor) const {
|
||||||
|
return ASensorEventQueue_disableSensor(mASensorEventQueue, sensor->getASensorRef());
|
||||||
|
}
|
||||||
|
|
||||||
|
status_t SensorEventQueue::setEventRate(Sensor const* sensor, nsecs_t ns) const {
|
||||||
|
return ASensorEventQueue_setEventRate(mASensorEventQueue, sensor->getASensorRef(), ns);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace android
|
37
libsensor/SensorEventQueue.h
Normal file
37
libsensor/SensorEventQueue.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The LineageOS Project
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <android/sensor.h>
|
||||||
|
#include <utils/Errors.h>
|
||||||
|
#include <utils/RefBase.h>
|
||||||
|
#include <utils/Timers.h>
|
||||||
|
#include "Sensor.h"
|
||||||
|
|
||||||
|
namespace android {
|
||||||
|
|
||||||
|
class SensorEventQueue : public RefBase {
|
||||||
|
public:
|
||||||
|
SensorEventQueue(ASensorEventQueue* aSensorEventQueue);
|
||||||
|
~SensorEventQueue() = default;
|
||||||
|
|
||||||
|
ssize_t read(ASensorEvent* events, size_t numEvents);
|
||||||
|
|
||||||
|
status_t waitForEvent() const;
|
||||||
|
|
||||||
|
status_t enableSensor(Sensor const* sensor) const;
|
||||||
|
/*
|
||||||
|
status_t enableSensor(Sensor const* sensor, int32_t samplingPeriodUs) const;
|
||||||
|
*/
|
||||||
|
status_t disableSensor(Sensor const* sensor) const;
|
||||||
|
status_t setEventRate(Sensor const* sensor, nsecs_t ns) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
ASensorEventQueue* mASensorEventQueue;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace android
|
89
libsensor/SensorManager.cpp
Normal file
89
libsensor/SensorManager.cpp
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The LineageOS Project
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "SensorManager.h"
|
||||||
|
|
||||||
|
namespace android {
|
||||||
|
|
||||||
|
SensorManager* SensorManager::sInstance = nullptr;
|
||||||
|
|
||||||
|
Mutex SensorManager::sInstanceLock;
|
||||||
|
|
||||||
|
SensorManager* SensorManager::getInstance() {
|
||||||
|
Mutex::Autolock autoLock(sInstanceLock);
|
||||||
|
if (sInstance == nullptr) {
|
||||||
|
sInstance = new SensorManager;
|
||||||
|
if (sInstance->initCheck() != OK) {
|
||||||
|
delete sInstance;
|
||||||
|
sInstance = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
SensorManager& SensorManager::getInstanceForPackage(const String16& /*packageName*/) {
|
||||||
|
return *getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SensorManager::removeInstanceForPackage(const String16& /*packageName*/) {
|
||||||
|
// no-op
|
||||||
|
}
|
||||||
|
|
||||||
|
SensorManager::SensorManager() : mInitCheck(NO_INIT) {
|
||||||
|
mASensorManager = ASensorManager_getInstanceForPackage("");
|
||||||
|
if (mASensorManager != NULL) {
|
||||||
|
mInitCheck = OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ssize_t SensorManager::getSensorList(Sensor const* const** list) {
|
||||||
|
Mutex::Autolock autoLock(mLock);
|
||||||
|
|
||||||
|
ASensorList* aSensorList = nullptr;
|
||||||
|
int count;
|
||||||
|
ASensorRef aSensor;
|
||||||
|
|
||||||
|
count = ASensorManager_getSensorList(mASensorManager, aSensorList);
|
||||||
|
|
||||||
|
mSensors = static_cast<Sensor const**>(malloc(count * sizeof(Sensor*)));
|
||||||
|
assert(mSensors != nullptr);
|
||||||
|
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
aSensor = *aSensorList[i];
|
||||||
|
mSensors[i] = new Sensor(aSensor);
|
||||||
|
}
|
||||||
|
|
||||||
|
*list = mSensors;
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
Sensor const* SensorManager::getDefaultSensor(int type) {
|
||||||
|
const ASensor* sensor = ASensorManager_getDefaultSensor(mASensorManager, type);
|
||||||
|
|
||||||
|
return sensor != nullptr ? new Sensor(ASensorManager_getDefaultSensor(mASensorManager, type))
|
||||||
|
: nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
sp<SensorEventQueue> SensorManager::createEventQueue(String8 /*packageName*/, int /*mode*/,
|
||||||
|
String16 /*attributionTag*/) {
|
||||||
|
return sp(new SensorEventQueue(ASensorManager_createEventQueue(
|
||||||
|
mASensorManager, ALooper_forThread(), 0, nullptr, nullptr)));
|
||||||
|
}
|
||||||
|
|
||||||
|
status_t SensorManager::initCheck() const {
|
||||||
|
return mInitCheck;
|
||||||
|
}
|
||||||
|
|
||||||
|
sp<SensorEventQueue> SensorManager::createEventQueue(String8 packageName) {
|
||||||
|
return createEventQueue(packageName, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sp<SensorEventQueue> SensorManager::createEventQueue(String8 packageName, int mode) {
|
||||||
|
return createEventQueue(packageName, mode, String16(""));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace android
|
65
libsensor/SensorManager.h
Normal file
65
libsensor/SensorManager.h
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The LineageOS Project
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <android/sensor.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <utils/Errors.h>
|
||||||
|
#include <utils/Mutex.h>
|
||||||
|
#include <utils/String16.h>
|
||||||
|
#include <utils/StrongPointer.h>
|
||||||
|
#include <utils/Vector.h>
|
||||||
|
#include "Sensor.h"
|
||||||
|
#include "SensorEventQueue.h"
|
||||||
|
|
||||||
|
namespace android {
|
||||||
|
|
||||||
|
class SensorManager {
|
||||||
|
public:
|
||||||
|
static SensorManager& getInstanceForPackage(const String16& packageName);
|
||||||
|
static void removeInstanceForPackage(const String16& packageName);
|
||||||
|
~SensorManager() = default;
|
||||||
|
|
||||||
|
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("")*/);
|
||||||
|
/*
|
||||||
|
bool isDataInjectionEnabled();
|
||||||
|
int createDirectChannel(size_t size, int channelType, const native_handle_t* channelData);
|
||||||
|
void destroyDirectChannel(int channelNativeHandle);
|
||||||
|
int configureDirectChannel(int channelNativeHandle, int sensorHandle, int rateLevel);
|
||||||
|
int setOperationParameter(int handle, int type, const Vector<float>& floats,
|
||||||
|
const Vector<int32_t>& ints);
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Shims
|
||||||
|
sp<SensorEventQueue> createEventQueue(String8 packageName);
|
||||||
|
sp<SensorEventQueue> createEventQueue(String8 packageName, int mode);
|
||||||
|
|
||||||
|
// Custom methods
|
||||||
|
status_t initCheck() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static SensorManager* sInstance;
|
||||||
|
static Mutex sInstanceLock;
|
||||||
|
static SensorManager* getInstance();
|
||||||
|
|
||||||
|
SensorManager();
|
||||||
|
|
||||||
|
status_t mInitCheck;
|
||||||
|
ASensorManager* mASensorManager;
|
||||||
|
|
||||||
|
Mutex mLock;
|
||||||
|
Sensor const** mSensors;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace android
|
Loading…
Reference in a new issue