summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Staats <estaats@google.com>2021-09-24 05:48:24 -0700
committerErik Staats <estaats@google.com>2021-09-24 06:16:51 -0700
commit3c7a12d8f1764df734f74b486e57acf1f629dd5e (patch)
treee71c14d8d618bc471344ff3430d42e281b769a16
parent1d509cf815c5e3319ce4303eabe863b6b8dcf3a1 (diff)
downloadlibhardware-3c7a12d8f1764df734f74b486e57acf1f629dd5e.tar.gz
dynamic_sensor: Add sensor manager init to sub-HAL 2.1.
Bug: 195964858 Test: Verified dynamic sensor manager is present in sensor list and that no SELinux violations occur on sc-v2-dev and master. $ make -j28 && \ vendor/google/tools/flashall -w -s 14281FDEE000A5 --disable_verity && \ sleep 90 && adb root . . . $ adb shell sensor_test list | grep "sensor_test\|Type\|Dynamic" sensor_test version 74 Type Subtype Name 32 0 Dynamic Sensor Manager $ adb logcat -d | grep avc | grep sensor $ Change-Id: Ib3da287e4f4118ad6b19498248e263f8c1662b3a
-rw-r--r--modules/sensors/dynamic_sensor/ConnectionDetector.cpp18
-rw-r--r--modules/sensors/dynamic_sensor/ConnectionDetector.h3
-rw-r--r--modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp4
-rw-r--r--modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp35
-rw-r--r--modules/sensors/dynamic_sensor/DynamicSensorsSubHal.h12
-rw-r--r--modules/sensors/dynamic_sensor/HidRawSensorDaemon.cpp1
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 &regex);
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) {