diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-11-24 00:07:18 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-11-24 00:07:18 +0000 |
commit | 8191b204ce0d237c88890629ea8bb01c6abdd861 (patch) | |
tree | 5ff79a5edd4acb5438ddb7df14f03c4b0dd0d9cf | |
parent | 02cffb0d6b30458fbc69c11c73f35e87fbaebf72 (diff) | |
parent | f99f73ceebb4a0cfe7b8554194b9dc54f05a902f (diff) | |
download | libhardware-8191b204ce0d237c88890629ea8bb01c6abdd861.tar.gz |
Snap for 7940976 from f99f73ceebb4a0cfe7b8554194b9dc54f05a902f to sc-v2-release
Change-Id: If570c8d4ef839fd9e2454f6ca3a4bd63933b6372
-rw-r--r-- | modules/sensors/dynamic_sensor/HidRawSensor.cpp | 68 | ||||
-rw-r--r-- | modules/sensors/dynamic_sensor/HidRawSensor.h | 4 | ||||
-rw-r--r-- | modules/sensors/dynamic_sensor/HidSensorDef.h | 30 | ||||
-rw-r--r-- | modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp | 1 | ||||
-rw-r--r-- | modules/sensors/dynamic_sensor/HidUtils/HidParser.h | 1 |
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; |