summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-11-24 00:07:18 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-11-24 00:07:18 +0000
commit8191b204ce0d237c88890629ea8bb01c6abdd861 (patch)
tree5ff79a5edd4acb5438ddb7df14f03c4b0dd0d9cf
parent02cffb0d6b30458fbc69c11c73f35e87fbaebf72 (diff)
parentf99f73ceebb4a0cfe7b8554194b9dc54f05a902f (diff)
downloadlibhardware-8191b204ce0d237c88890629ea8bb01c6abdd861.tar.gz
Snap for 7940976 from f99f73ceebb4a0cfe7b8554194b9dc54f05a902f to sc-v2-release
Change-Id: If570c8d4ef839fd9e2454f6ca3a4bd63933b6372
-rw-r--r--modules/sensors/dynamic_sensor/HidRawSensor.cpp68
-rw-r--r--modules/sensors/dynamic_sensor/HidRawSensor.h4
-rw-r--r--modules/sensors/dynamic_sensor/HidSensorDef.h30
-rw-r--r--modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp1
-rw-r--r--modules/sensors/dynamic_sensor/HidUtils/HidParser.h1
5 files changed, 79 insertions, 25 deletions
diff --git a/modules/sensors/dynamic_sensor/HidRawSensor.cpp b/modules/sensors/dynamic_sensor/HidRawSensor.cpp
index f3c8a27b..91aed0a5 100644
--- a/modules/sensors/dynamic_sensor/HidRawSensor.cpp
+++ b/modules/sensors/dynamic_sensor/HidRawSensor.cpp
@@ -784,8 +784,9 @@ bool HidRawSensor::detectAndroidCustomSensor(const std::string &description) {
}
bool HidRawSensor::findSensorControlUsage(const std::vector<HidParser::ReportPacket> &packets) {
+ using namespace Hid::Sensor::PowerStateUsage;
using namespace Hid::Sensor::PropertyUsage;
- using namespace Hid::Sensor::RawMinMax;
+ using namespace Hid::Sensor::ReportingStateUsage;
//REPORTING_STATE
const HidParser::ReportItem *reportingState
@@ -793,13 +794,31 @@ bool HidRawSensor::findSensorControlUsage(const std::vector<HidParser::ReportPac
if (reportingState == nullptr
|| !reportingState->isByteAligned()
- || reportingState->bitSize != 8
- || reportingState->minRaw != REPORTING_STATE_MIN
- || reportingState->maxRaw != REPORTING_STATE_MAX) {
+ || reportingState->bitSize != 8) {
LOG_W << "Cannot find valid reporting state feature" << LOG_ENDL;
} else {
mReportingStateId = reportingState->id;
mReportingStateOffset = reportingState->bitOffset / 8;
+
+ mReportingStateDisableIndex = -1;
+ mReportingStateEnableIndex = -1;
+ for (unsigned i = 0; i < reportingState->usageVector.size(); ++i) {
+ if (reportingState->usageVector[i] == REPORTING_STATE_NO_EVENTS) {
+ mReportingStateDisableIndex = i;
+ }
+ if (reportingState->usageVector[i] == REPORTING_STATE_ALL_EVENTS) {
+ mReportingStateEnableIndex = i;
+ }
+ }
+ if (mReportingStateDisableIndex < 0) {
+ LOG_W << "Cannot find reporting state to disable sensor"
+ << LOG_ENDL;
+ mReportingStateId = -1;
+ }
+ if (mReportingStateEnableIndex < 0) {
+ LOG_W << "Cannot find reporting state to enable sensor" << LOG_ENDL;
+ mReportingStateId = -1;
+ }
}
//POWER_STATE
@@ -807,13 +826,31 @@ bool HidRawSensor::findSensorControlUsage(const std::vector<HidParser::ReportPac
= find(packets, POWER_STATE, HidParser::REPORT_TYPE_FEATURE);
if (powerState == nullptr
|| !powerState->isByteAligned()
- || powerState->bitSize != 8
- || powerState->minRaw != POWER_STATE_MIN
- || powerState->maxRaw != POWER_STATE_MAX) {
+ || powerState->bitSize != 8) {
LOG_W << "Cannot find valid power state feature" << LOG_ENDL;
} else {
mPowerStateId = powerState->id;
mPowerStateOffset = powerState->bitOffset / 8;
+
+ mPowerStateOffIndex = -1;
+ mPowerStateOnIndex = -1;
+ for (unsigned i = 0; i < powerState->usageVector.size(); ++i) {
+ if (powerState->usageVector[i] == POWER_STATE_D4_POWER_OFF) {
+ mPowerStateOffIndex = i;
+ }
+ if (powerState->usageVector[i] == POWER_STATE_D0_FULL_POWER) {
+ mPowerStateOnIndex = i;
+ }
+ }
+ if (mPowerStateOffIndex < 0) {
+ LOG_W << "Cannot find power state to power off sensor"
+ << LOG_ENDL;
+ mPowerStateId = -1;
+ }
+ if (mPowerStateOnIndex < 0) {
+ LOG_W << "Cannot find power state to power on sensor" << LOG_ENDL;
+ mPowerStateId = -1;
+ }
}
//REPORT_INTERVAL
@@ -846,7 +883,6 @@ void HidRawSensor::getUuid(uint8_t* uuid) const {
}
int HidRawSensor::enable(bool enable) {
- using namespace Hid::Sensor::StateValue;
SP(HidDevice) device = PROMOTE(mDevice);
if (device == nullptr) {
@@ -864,7 +900,8 @@ int HidRawSensor::enable(bool enable) {
uint8_t id = static_cast<uint8_t>(mPowerStateId);
if (device->getFeature(id, &buffer)
&& buffer.size() > mPowerStateOffset) {
- buffer[mPowerStateOffset] = enable ? POWER_STATE_FULL_POWER : POWER_STATE_POWER_OFF;
+ buffer[mPowerStateOffset] =
+ enable ? mPowerStateOnIndex : mPowerStateOffIndex;
setPowerOk = device->setFeature(id, buffer);
} else {
LOG_E << "enable: changing POWER STATE failed" << LOG_ENDL;
@@ -878,7 +915,8 @@ int HidRawSensor::enable(bool enable) {
if (device->getFeature(id, &buffer)
&& buffer.size() > mReportingStateOffset) {
buffer[mReportingStateOffset]
- = enable ? REPORTING_STATE_ALL_EVENT : REPORTING_STATE_NO_EVENT;
+ = enable ? mReportingStateEnableIndex :
+ mReportingStateDisableIndex;
setReportingOk = device->setFeature(id, buffer);
} else {
LOG_E << "enable: changing REPORTING STATE failed" << LOG_ENDL;
@@ -1019,7 +1057,10 @@ std::string HidRawSensor::dump() const {
ss << " Power state ";
if (mPowerStateId >= 0) {
ss << "found, id: " << mPowerStateId
- << " offset: " << mPowerStateOffset << LOG_ENDL;
+ << " offset: " << mPowerStateOffset
+ << " power off index: " << mPowerStateOffIndex
+ << " power on index: " << mPowerStateOnIndex
+ << LOG_ENDL;
} else {
ss << "not found" << LOG_ENDL;
}
@@ -1027,7 +1068,10 @@ std::string HidRawSensor::dump() const {
ss << " Reporting state ";
if (mReportingStateId >= 0) {
ss << "found, id: " << mReportingStateId
- << " offset: " << mReportingStateOffset << LOG_ENDL;
+ << " offset: " << mReportingStateOffset
+ << " disable index: " << mReportingStateDisableIndex
+ << " enable index: " << mReportingStateEnableIndex
+ << LOG_ENDL;
} else {
ss << "not found" << LOG_ENDL;
}
diff --git a/modules/sensors/dynamic_sensor/HidRawSensor.h b/modules/sensors/dynamic_sensor/HidRawSensor.h
index 2dd32b61..201e72e9 100644
--- a/modules/sensors/dynamic_sensor/HidRawSensor.h
+++ b/modules/sensors/dynamic_sensor/HidRawSensor.h
@@ -138,9 +138,13 @@ private:
// Features for control sensor
int mReportingStateId;
unsigned int mReportingStateOffset;
+ int mReportingStateDisableIndex;
+ int mReportingStateEnableIndex;
int mPowerStateId;
unsigned int mPowerStateOffset;
+ int mPowerStateOffIndex;
+ int mPowerStateOnIndex;
int mReportIntervalId;
unsigned int mReportIntervalOffset;
diff --git a/modules/sensors/dynamic_sensor/HidSensorDef.h b/modules/sensors/dynamic_sensor/HidSensorDef.h
index 2728b28a..8f47a850 100644
--- a/modules/sensors/dynamic_sensor/HidSensorDef.h
+++ b/modules/sensors/dynamic_sensor/HidSensorDef.h
@@ -77,24 +77,28 @@ enum {
};
} // namespace ReportUsage
-namespace RawMinMax {
+namespace ReportingStateUsage {
enum {
- REPORTING_STATE_MIN = 0,
- REPORTING_STATE_MAX = 5,
- POWER_STATE_MIN = 0,
- POWER_STATE_MAX = 5,
+ REPORTING_STATE_NO_EVENTS = 0x0840,
+ REPORTING_STATE_ALL_EVENTS = 0x0841,
+ REPORTING_STATE_REPORT_THRESHOLD_EVENTS = 0x0842,
+ REPORTING_STATE_REPORT_WAKE_ON_NO_EVENTS = 0x0843,
+ REPORTING_STATE_REPORT_WAKE_ON_ALL_EVENTS = 0x0844,
+ REPORTING_STATE_REPORT_WAKE_ON_THRESHOLD_EVENTS = 0x0845,
};
-} // namespace RawMinMax
+} // namespace ReportingStateUsage
-namespace StateValue {
+namespace PowerStateUsage {
enum {
- POWER_STATE_FULL_POWER = 1,
- POWER_STATE_POWER_OFF = 5,
-
- REPORTING_STATE_ALL_EVENT = 1,
- REPORTING_STATE_NO_EVENT = 0,
+ POWER_STATE_UNDEFINED = 0x0850,
+ POWER_STATE_D0_FULL_POWER = 0x0851,
+ POWER_STATE_D1_LOW_POWER = 0x0852,
+ POWER_STATE_D2_STANDBY_POWER_WITH_WAKEUP = 0x0853,
+ POWER_STATE_D3_SLEEP_WITH_WAKEUP = 0x0854,
+ POWER_STATE_D4_POWER_OFF = 0x0855,
};
-} // StateValue
+} // namespace PowerStateUsage
+
} // namespace Sensor
} // namespace Hid
#endif // HID_SENSOR_DEF_H_
diff --git a/modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp b/modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp
index 264f13c2..704a1b39 100644
--- a/modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp
+++ b/modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp
@@ -248,6 +248,7 @@ std::vector<HidParser::ReportPacket> HidParser::convertGroupToPacket(
ReportItem digest = {
.usage = r.getFullUsage(),
.id = id,
+ .usageVector = r.getUsageVector(),
.minRaw = logical.first,
.maxRaw = logical.second,
.a = scale,
diff --git a/modules/sensors/dynamic_sensor/HidUtils/HidParser.h b/modules/sensors/dynamic_sensor/HidUtils/HidParser.h
index 4ef5ec6c..20dcf637 100644
--- a/modules/sensors/dynamic_sensor/HidUtils/HidParser.h
+++ b/modules/sensors/dynamic_sensor/HidUtils/HidParser.h
@@ -89,6 +89,7 @@ struct HidParser::ReportItem {
unsigned int usage;
unsigned int id;
int type; // feature, input or output
+ std::vector<unsigned int> usageVector;
int64_t minRaw;
int64_t maxRaw;