diff options
author | Arthur Ishiguro <arthuri@google.com> | 2023-12-05 20:45:14 +0000 |
---|---|---|
committer | Arthur Ishiguro <arthuri@google.com> | 2023-12-06 22:01:55 +0000 |
commit | 374655eeeaea0e54af29942f59f6e3a58828fcfb (patch) | |
tree | fe3477673a87dd725da932e1d0fed167be5535f7 | |
parent | 0649c003613f1db0019c1a668cde22d8a63186e5 (diff) | |
download | libhardware-374655eeeaea0e54af29942f59f6e3a58828fcfb.tar.gz |
Updates LE transport selection logic
Bug: 298450041
Test: Tested on device
Change-Id: Ifb541280f12a72496e887b4d99d18064e97cda3f
-rw-r--r-- | modules/sensors/dynamic_sensor/HidRawSensor.cpp | 26 | ||||
-rw-r--r-- | modules/sensors/dynamic_sensor/HidRawSensor.h | 2 | ||||
-rw-r--r-- | modules/sensors/dynamic_sensor/HidSensorDef.h | 7 |
3 files changed, 34 insertions, 1 deletions
diff --git a/modules/sensors/dynamic_sensor/HidRawSensor.cpp b/modules/sensors/dynamic_sensor/HidRawSensor.cpp index 57df74d0..336461c7 100644 --- a/modules/sensors/dynamic_sensor/HidRawSensor.cpp +++ b/modules/sensors/dynamic_sensor/HidRawSensor.cpp @@ -849,6 +849,7 @@ bool HidRawSensor::findSensorControlUsage(const std::vector<HidParser::ReportPac using namespace Hid::Sensor::PowerStateUsage; using namespace Hid::Sensor::PropertyUsage; using namespace Hid::Sensor::ReportingStateUsage; + using namespace Hid::Sensor::LeTransportUsage; //REPORTING_STATE const HidParser::ReportItem *reportingState @@ -948,6 +949,26 @@ bool HidRawSensor::findSensorControlUsage(const std::vector<HidParser::ReportPac mLeTransportId = leTransport->id; mLeTransportBitOffset = leTransport->bitOffset; mLeTransportBitSize = leTransport->bitSize; + + mLeTransportAclIndex = -1; + mLeTransportIsoIndex = -1; + for (unsigned i = 0; i < leTransport->usageVector.size(); ++i) { + if (leTransport->usageVector[i] == LE_TRANSPORT_ACL) { + mLeTransportAclIndex = i; + } + if (leTransport->usageVector[i] == LE_TRANSPORT_ISO) { + mLeTransportIsoIndex = i; + } + } + if (mLeTransportAclIndex < 0) { + LOG_W << "Cannot find LE transport to enable ACL" + << LOG_ENDL; + mLeTransportId = -1; + } + if (mLeTransportIsoIndex < 0) { + LOG_W << "Cannot find LE transport to enable ISO" << LOG_ENDL; + mLeTransportId = -1; + } } } @@ -1009,7 +1030,10 @@ int HidRawSensor::enable(bool enable) { } else { value = (capability & kIsoBitMask) ? kLeIsoValue : kLeAclValue; } - HidUtil::copyBits(&value, &(buffer[0]), buffer.size(), 0, + + uint8_t index = (value == kLeAclValue) ? mLeTransportAclIndex : + mLeTransportIsoIndex; + HidUtil::copyBits(&index, &(buffer[0]), buffer.size(), 0, mLeTransportBitOffset, mLeTransportBitSize); setLeAudioTransportOk = device->setFeature(id, buffer); if (!setLeAudioTransportOk) { diff --git a/modules/sensors/dynamic_sensor/HidRawSensor.h b/modules/sensors/dynamic_sensor/HidRawSensor.h index 3d2d94d0..a9847c8e 100644 --- a/modules/sensors/dynamic_sensor/HidRawSensor.h +++ b/modules/sensors/dynamic_sensor/HidRawSensor.h @@ -204,6 +204,8 @@ private: unsigned int mLeTransportBitOffset; unsigned int mLeTransportBitSize; bool mRequiresLeTransport; + int mLeTransportAclIndex; + int mLeTransportIsoIndex; // Input report translate table std::vector<ReportTranslateRecord> mTranslateTable; diff --git a/modules/sensors/dynamic_sensor/HidSensorDef.h b/modules/sensors/dynamic_sensor/HidSensorDef.h index 30c2f88a..d347ef67 100644 --- a/modules/sensors/dynamic_sensor/HidSensorDef.h +++ b/modules/sensors/dynamic_sensor/HidSensorDef.h @@ -100,6 +100,13 @@ enum { }; } // namespace PowerStateUsage +namespace LeTransportUsage { +enum { + LE_TRANSPORT_ACL = 0xF800, + LE_TRANSPORT_ISO = 0xF801, +}; +} // namespace LeTransportUsage + } // namespace Sensor } // namespace Hid #endif // HID_SENSOR_DEF_H_ |