From e743eba68aefd9f4966505369542651b82a53bc7 Mon Sep 17 00:00:00 2001 From: Cosmin Tanislav Date: Tue, 21 Sep 2021 02:43:52 +0300 Subject: [PATCH] aidl: sensors: Standardize xiaomi pickup sensor * use standard sensor type * ignore non-wakeup sensor variant * ignore events that do not properly match a pickup Change-Id: Ibe2f9fee1551da613713d40c1b8d0a26d38a93ae Signed-off-by: ralph950412 --- aidl/sensors/HalProxy.cpp | 24 ++++++++++++++++++++++++ aidl/sensors/HalProxyCallback.cpp | 8 +++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/aidl/sensors/HalProxy.cpp b/aidl/sensors/HalProxy.cpp index 305383e..b8a92ad 100644 --- a/aidl/sensors/HalProxy.cpp +++ b/aidl/sensors/HalProxy.cpp @@ -81,6 +81,25 @@ int64_t msFromNs(int64_t nanos) { return nanos / nanosecondsInAMillsecond; } +bool patchXiaomiPickupSensor(V2_1::SensorInfo& sensor) { + if (sensor.typeAsString != "xiaomi.sensor.pickup") { + return true; + } + + /* + * Implement only the wake-up version of this sensor. + */ + if (!(sensor.flags & V1_0::SensorFlagBits::WAKE_UP)) { + return false; + } + + sensor.type = V2_1::SensorType::PICK_UP_GESTURE; + sensor.typeAsString = SENSOR_STRING_TYPE_PICK_UP_GESTURE; + sensor.maxRange = 1; + + return true; +} + HalProxy::HalProxy() { static const std::string kMultiHalConfigFiles[] = {"/vendor/etc/sensors/hals.conf", "/odm/etc/sensors/hals.conf"}; @@ -496,6 +515,11 @@ void HalProxy::initializeSensorList() { ALOGV("Loaded sensor: %s", sensor.name.c_str()); sensor.sensorHandle = setSubHalIndex(sensor.sensorHandle, subHalIndex); setDirectChannelFlags(&sensor, mSubHalList[subHalIndex]); + bool keep = patchXiaomiPickupSensor(sensor); + if (!keep) { + continue; + } + mSensors[sensor.sensorHandle] = sensor; } } diff --git a/aidl/sensors/HalProxyCallback.cpp b/aidl/sensors/HalProxyCallback.cpp index addefe8..fcdf2ad 100644 --- a/aidl/sensors/HalProxyCallback.cpp +++ b/aidl/sensors/HalProxyCallback.cpp @@ -72,11 +72,17 @@ std::vector HalProxyCallbackBase::processEvents(const std::vectorgetSensorInfo(event.sensorHandle); + + if (sensor.type == V2_1::SensorType::PICK_UP_GESTURE + && event.u.scalar != 1) { + continue; + } + if ((sensor.flags & V1_0::SensorFlagBits::WAKE_UP) != 0) { (*numWakeupEvents)++; } + eventsOut.push_back(event); } return eventsOut; }