diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-09-25 01:06:47 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-09-25 01:06:47 +0000 |
commit | 828fce086a353b937b84e7eea513534e474da09f (patch) | |
tree | e71c14d8d618bc471344ff3430d42e281b769a16 | |
parent | 266fc6d7cde2dea01d51c5dc56baa48749f193d6 (diff) | |
parent | 3c7a12d8f1764df734f74b486e57acf1f629dd5e (diff) | |
download | libhardware-828fce086a353b937b84e7eea513534e474da09f.tar.gz |
Snap for 7766737 from 3c7a12d8f1764df734f74b486e57acf1f629dd5e to sc-d2-release
Change-Id: If70bfb02c3ba475701ece43d920150dd9d2b1f4d
6 files changed, 66 insertions, 7 deletions
diff --git a/modules/sensors/dynamic_sensor/ConnectionDetector.cpp b/modules/sensors/dynamic_sensor/ConnectionDetector.cpp index c51e9125..c009a707 100644 --- a/modules/sensors/dynamic_sensor/ConnectionDetector.cpp +++ b/modules/sensors/dynamic_sensor/ConnectionDetector.cpp @@ -57,8 +57,6 @@ SocketConnectionDetector::SocketConnectionDetector(BaseDynamicSensorDaemon *d, i std::ostringstream s; s << "socket:" << port; mDevice = s.str(); - - run("ddad_socket"); } SocketConnectionDetector::~SocketConnectionDetector() { @@ -67,6 +65,12 @@ SocketConnectionDetector::~SocketConnectionDetector() { } } +void SocketConnectionDetector::Init() { + // run adds a strong reference to this object, so it can't be invoked from + // the constructor. + run("ddad_socket"); +} + int SocketConnectionDetector::waitForConnection() { return ::accept(mListenFd, nullptr, nullptr); } @@ -124,9 +128,6 @@ FileConnectionDetector::FileConnectionDetector ( ALOGE("Cannot setup watch on dir %s", path.c_str()); return; } - - // mLooper != null && mInotifyFd added to looper - run("ddad_file"); } FileConnectionDetector::~FileConnectionDetector() { @@ -138,6 +139,13 @@ FileConnectionDetector::~FileConnectionDetector() { } } +void FileConnectionDetector::Init() { + // mLooper != null && mInotifyFd added to looper + // run adds a strong reference to this object, so it can't be invoked from + // the constructor. + run("ddad_file"); +} + bool FileConnectionDetector::matches(const std::string &name) const { return std::regex_match(name, mRegex); } diff --git a/modules/sensors/dynamic_sensor/ConnectionDetector.h b/modules/sensors/dynamic_sensor/ConnectionDetector.h index 0ee1df29..75fbb0bc 100644 --- a/modules/sensors/dynamic_sensor/ConnectionDetector.h +++ b/modules/sensors/dynamic_sensor/ConnectionDetector.h @@ -34,6 +34,7 @@ class ConnectionDetector : virtual public RefBase { public: ConnectionDetector(BaseDynamicSensorDaemon *d) : mDaemon(d) { } virtual ~ConnectionDetector() = default; + virtual void Init() {} protected: BaseDynamicSensorDaemon* mDaemon; }; @@ -45,6 +46,7 @@ class SocketConnectionDetector : public ConnectionDetector, public Thread { public: SocketConnectionDetector(BaseDynamicSensorDaemon *d, int port); virtual ~SocketConnectionDetector(); + void Init() override; private: // implement virtual of Thread virtual bool threadLoop(); @@ -62,6 +64,7 @@ public: FileConnectionDetector( BaseDynamicSensorDaemon *d, const std::string &path, const std::string ®ex); virtual ~FileConnectionDetector(); + void Init() override; private: static constexpr int POLL_IDENT = 1; // implement virtual of Thread diff --git a/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp b/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp index a1a47e81..10771e32 100644 --- a/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp +++ b/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp @@ -28,7 +28,7 @@ #include <netinet/in.h> #include <algorithm> //std::max -#define SYSPROP_PREFIX "dynamic_sensor.dummy" +#define SYSPROP_PREFIX "vendor.dynamic_sensor.mock" #define FILE_NAME_BASE "dummy_accel_file" #define FILE_NAME_REGEX ("^" FILE_NAME_BASE "[0-9]$") @@ -43,11 +43,13 @@ DummyDynamicAccelDaemon::DummyDynamicAccelDaemon(DynamicSensorManager& manager) if (strcmp(property, "") != 0) { mFileDetector = new FileConnectionDetector( this, std::string(property), std::string(FILE_NAME_REGEX)); + mFileDetector->Init(); } property_get(SYSPROP_PREFIX ".socket", property, ""); if (strcmp(property, "") != 0) { mSocketDetector = new SocketConnectionDetector(this, atoi(property)); + mSocketDetector->Init(); } } diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp index df636a3b..9f9a9fef 100644 --- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp @@ -20,12 +20,22 @@ #include <log/log.h> using ::android::hardware::sensors::V1_0::Result; +using ::android::hardware::sensors::V2_1::SensorInfo; +using ::android::hardware::sensors::V2_1::SensorType; template<class T> using Return = ::android::hardware::Return<T>; using ::android::hardware::Void; namespace android { namespace SensorHalExt { +DynamicSensorsSubHal::DynamicSensorsSubHal() { + // initialize dynamic sensor manager + mDynamicSensorManager.reset( + DynamicSensorManager::createInstance(kDynamicHandleBase, + kMaxDynamicHandleCount, + nullptr /* callback */)); +} + // ISensors. Return<Result> DynamicSensorsSubHal::setOperationMode(OperationMode mode) { return (mode == static_cast<OperationMode>(SENSOR_HAL_NORMAL_MODE) ? @@ -77,9 +87,32 @@ Return<void> DynamicSensorsSubHal::configDirectReport( } Return<void> DynamicSensorsSubHal::getSensorsList_2_1( - getSensorsList_2_1_cb callback __unused) { + getSensorsList_2_1_cb callback) { + const sensor_t& sensor_info = mDynamicSensorManager->getDynamicMetaSensor(); + std::vector<SensorInfo> sensors; + ALOGD("DynamicSensorsSubHal::getSensorsList_2_1 invoked."); + // get the dynamic sensor info + sensors.resize(1); + sensors[0].sensorHandle = sensor_info.handle; + sensors[0].name = sensor_info.name; + sensors[0].vendor = sensor_info.vendor; + sensors[0].version = 1; + sensors[0].type = static_cast<SensorType>(sensor_info.type); + sensors[0].typeAsString = sensor_info.stringType; + sensors[0].maxRange = sensor_info.maxRange; + sensors[0].resolution = sensor_info.resolution; + sensors[0].power = sensor_info.power; + sensors[0].minDelay = sensor_info.minDelay; + sensors[0].fifoReservedEventCount = sensor_info.fifoReservedEventCount; + sensors[0].fifoMaxEventCount = sensor_info.fifoMaxEventCount; + sensors[0].requiredPermission = sensor_info.requiredPermission; + sensors[0].maxDelay = sensor_info.maxDelay; + sensors[0].flags = sensor_info.flags; + + callback(sensors); + return Void(); } diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.h b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.h index 36ed9f5a..ab5d2999 100644 --- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.h +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.h @@ -17,6 +17,8 @@ #ifndef ANDROID_SENSORHAL_EXT_DYNAMIC_SENSORS_SUB_HAL_H #define ANDROID_SENSORHAL_EXT_DYNAMIC_SENSORS_SUB_HAL_H +#include "DynamicSensorManager.h" + #include <V2_1/SubHal.h> namespace android { @@ -37,6 +39,8 @@ class DynamicSensorsSubHal : using SharedMemInfo = ::android::hardware::sensors::V1_0::SharedMemInfo; public: + DynamicSensorsSubHal(); + // ISensors. Return<Result> setOperationMode(OperationMode mode) override; Return<Result> activate(int32_t sensor_handle, bool enabled) override; @@ -60,6 +64,14 @@ public: const std::string getName() override { return "Dynamic-SubHAL"; } Return<Result> initialize( const sp<IHalProxyCallback>& hal_proxy_callback) override; + +private: + static constexpr int32_t kDynamicHandleBase = 0; + static constexpr int32_t kDynamicHandleEnd = 0x1000000; + static constexpr int32_t kMaxDynamicHandleCount = kDynamicHandleEnd - + kDynamicHandleBase; + + std::unique_ptr<DynamicSensorManager> mDynamicSensorManager; }; } // namespace SensorHalExt diff --git a/modules/sensors/dynamic_sensor/HidRawSensorDaemon.cpp b/modules/sensors/dynamic_sensor/HidRawSensorDaemon.cpp index 6bf34bc8..4b447ac1 100644 --- a/modules/sensors/dynamic_sensor/HidRawSensorDaemon.cpp +++ b/modules/sensors/dynamic_sensor/HidRawSensorDaemon.cpp @@ -39,6 +39,7 @@ HidRawSensorDaemon::HidRawSensorDaemon(DynamicSensorManager& manager) : BaseDynamicSensorDaemon(manager) { mDetector = new FileConnectionDetector( this, std::string(DEV_PATH), std::string(DEV_NAME_REGEX)); + mDetector->Init(); } BaseSensorVector HidRawSensorDaemon::createSensor(const std::string &deviceKey) { |