summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Ishiguro <arthuri@google.com>2023-12-05 20:45:14 +0000
committerArthur Ishiguro <arthuri@google.com>2023-12-06 22:01:55 +0000
commit374655eeeaea0e54af29942f59f6e3a58828fcfb (patch)
treefe3477673a87dd725da932e1d0fed167be5535f7
parent0649c003613f1db0019c1a668cde22d8a63186e5 (diff)
downloadlibhardware-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.cpp26
-rw-r--r--modules/sensors/dynamic_sensor/HidRawSensor.h2
-rw-r--r--modules/sensors/dynamic_sensor/HidSensorDef.h7
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_