summaryrefslogtreecommitdiffstats
path: root/device
diff options
context:
space:
mode:
authorHemant Gupta <hemantg@codeaurora.org>2015-08-18 16:22:06 +0530
committerLinux Build Service Account <lnxbuild@localhost>2015-10-06 03:21:51 -0600
commit257929ac3b056223e9bbf057363ed8b1a43bbd79 (patch)
treee271e09e72c77302664f2c040ab793c070b2737e /device
parent7548c0e3b73d40cf7e058121e55197379a4c131b (diff)
downloadandroid_system_bt-257929ac3b056223e9bbf057363ed8b1a43bbd79.tar.gz
android_system_bt-257929ac3b056223e9bbf057363ed8b1a43bbd79.tar.bz2
android_system_bt-257929ac3b056223e9bbf057363ed8b1a43bbd79.zip
HID: Disable sniff for some particluar remote devices
This patch disables sniff on hid link for certain remote devices in presence of SCO/esCO to prevent IOT issues of ACL disconnection on HID link. Change-Id: Ia9fe1d8f5578b55c0e708e8791c5c37c3dbc48ff
Diffstat (limited to 'device')
-rw-r--r--device/include/interop.h8
-rw-r--r--device/include/interop_database.h3
-rw-r--r--device/src/interop.c3
3 files changed, 13 insertions, 1 deletions
diff --git a/device/include/interop.h b/device/include/interop.h
index 69b62d752..2c50bf0ef 100644
--- a/device/include/interop.h
+++ b/device/include/interop.h
@@ -47,6 +47,14 @@ typedef enum {
// To avoid degrading the user experience with those devices, authentication request
// is not requested explictly.
INTEROP_DISABLE_AUTH_FOR_HID_POINTING,
+
+ // Some HID devices have problematic behaviour where when hid link is in Sniff
+ // and DUT is in Slave role for SCO link ( not eSCO) any solution cannot maintain
+ // the link as SCO scheduling over a short period will overlap with Sniff link due to
+ // slave drift.
+ // To avoid degrading the user experience with those devices, sniff is disabled from
+ // link policy when sco is active, and enabled when sco is disabled.
+ INTEROP_DISABLE_SNIFF_DURING_SCO,
} interop_feature_t;
// Check if a given |addr| matches a known interoperability workaround as identified
diff --git a/device/include/interop_database.h b/device/include/interop_database.h
index 38a2d1145..8837b92b4 100644
--- a/device/include/interop_database.h
+++ b/device/include/interop_database.h
@@ -94,4 +94,7 @@ static const interop_name_t interop_name_database[] = {
static const interop_manufacturer_t interop_manufctr_database[] = {
// Apple Devices
{76, INTEROP_DISABLE_SDP_AFTER_PAIRING},
+
+ // Apple Devices
+ {76, INTEROP_DISABLE_SNIFF_DURING_SCO},
};
diff --git a/device/src/interop.c b/device/src/interop.c
index 6036a1107..e3713eb02 100644
--- a/device/src/interop.c
+++ b/device/src/interop.c
@@ -33,6 +33,7 @@ static const char* interop_feature_string(const interop_feature_t feature) {
CASE_RETURN_STR(INTEROP_AUTO_RETRY_PAIRING)
CASE_RETURN_STR(INTEROP_DISABLE_SDP_AFTER_PAIRING)
CASE_RETURN_STR(INTEROP_DISABLE_AUTH_FOR_HID_POINTING)
+ CASE_RETURN_STR(INTEROP_DISABLE_SNIFF_DURING_SCO)
}
return "UNKNOWN";
@@ -85,7 +86,7 @@ bool interop_manufacturer_match(const interop_feature_t feature, uint16_t manufa
if (feature == interop_manufctr_database[i].feature &&
manufacturer == interop_manufctr_database[i].manufacturer) {
char bdstr[20] = {0};
- LOG_WARN("%s() Device with manufacturer id: %d is a match for interop manufacturer"
+ LOG_WARN("%s() Device with manufacturer id: %d is a match for interop manufacturer "
"workaround %s", __func__, manufacturer, interop_feature_string(feature));
return true;
}