summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Eisenbach <eisenbach@google.com>2015-12-11 12:32:21 -0800
committerThe Android Automerger <android-build@android.com>2016-03-01 19:15:48 -0800
commit3f448e48af795e3017f9fc792c411c33e8b2c9c1 (patch)
treea7b596632bbcfe8875019dfc7d9e5524cf176953
parent11b7a84bd390192852c0b137284184846e5f281b (diff)
downloadandroid_system_bt-3f448e48af795e3017f9fc792c411c33e8b2c9c1.tar.gz
android_system_bt-3f448e48af795e3017f9fc792c411c33e8b2c9c1.tar.bz2
android_system_bt-3f448e48af795e3017f9fc792c411c33e8b2c9c1.zip
DO NOT MERGE Blacklist devices for absolute volume control
Some devices do not play well with absolute volume control. They either play back music at unacceptably loud volume levels or provide insufficiently granular volume control where a single "step" of volume change results in unexpectedly large jumps in volume. Bug: 26070064, 26060431 Change-Id: I5a336fba87119325b47a5ad385e9c48a631f2121
-rw-r--r--btif/src/btif_rc.c8
-rw-r--r--device/include/interop.h7
-rw-r--r--device/include/interop_database.h18
-rw-r--r--device/src/interop.c1
4 files changed, 27 insertions, 7 deletions
diff --git a/btif/src/btif_rc.c b/btif/src/btif_rc.c
index 6667ddb95..15fc9cf37 100644
--- a/btif/src/btif_rc.c
+++ b/btif/src/btif_rc.c
@@ -36,6 +36,7 @@
#include "btif_common.h"
#include "btif_util.h"
#include "btif_av.h"
+#include "device/include/interop.h"
#include "hardware/bt_rc.h"
#include "uinput.h"
@@ -324,11 +325,8 @@ void handle_rc_features()
bt_bdaddr_t rc_addr;
bdcpy(rc_addr.address, btif_rc_cb.rc_addr);
- // TODO(eisenbach): If devices need to be blacklisted for absolute
- // volume, it should be added to device/include/interop_database.h
- // For now, everything goes... If blacklisting is necessary, exclude
- // the following bit here:
- // btif_rc_cb.rc_features &= ~BTA_AV_FEAT_ADV_CTRL;
+ if (interop_match(INTEROP_DISABLE_ABSOLUTE_VOLUME, &rc_addr))
+ btif_rc_cb.rc_features &= ~BTA_AV_FEAT_ADV_CTRL;
if (btif_rc_cb.rc_features & BTA_AV_FEAT_BROWSE)
{
diff --git a/device/include/interop.h b/device/include/interop.h
index b2b01bb4e..883e24532 100644
--- a/device/include/interop.h
+++ b/device/include/interop.h
@@ -34,7 +34,12 @@ typedef enum {
// requiring multiple retries to complete pairing. To avoid degrading the user
// experience for those devices, automatically re-try pairing if page
// timeouts are received during pairing.
- INTEROP_AUTO_RETRY_PAIRING
+ INTEROP_AUTO_RETRY_PAIRING,
+
+ // Devices requiring this workaround do not handle Bluetooth Absolute Volume
+ // control correctly, leading to undesirable (potentially harmful) volume levels
+ // or general lack of controlability.
+ INTEROP_DISABLE_ABSOLUTE_VOLUME
} 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 9148f6845..58d5ba5d1 100644
--- a/device/include/interop_database.h
+++ b/device/include/interop_database.h
@@ -43,5 +43,21 @@ static const interop_entry_t interop_database[] = {
{{0x80, 0xe4, 0xda, 0x70, 0,0}, 4, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
// BMW car kits (Harman/Becker)
- {{0x9c, 0xdf, 0x03, 0,0,0}, 3, INTEROP_AUTO_RETRY_PAIRING}
+ {{0x9c, 0xdf, 0x03, 0,0,0}, 3, INTEROP_AUTO_RETRY_PAIRING},
+
+ // JayBird BlueBuds X - low granularity on volume control
+ {{0x44, 0x5e, 0xf3, 0,0,0}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
+
+ // LG Tone HBS-730 - unacceptably loud volume
+ {{0x00, 0x18, 0x6b, 0,0,0}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
+ {{0xb8, 0xad, 0x3e, 0,0,0}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
+
+ // LG Tone HV-800 - unacceptably loud volume
+ {{0xa0, 0xe9, 0xdb, 0,0,0}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
+
+ // SOL REPUBLIC Tracks Air - unable to adjust volume back off from max
+ {{0xa4, 0x15, 0x66, 0,0,0}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
+
+ // VW Car Kit - not enough granularity with volume
+ {{0x00, 0x26, 0x7e, 0,0,0}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
};
diff --git a/device/src/interop.c b/device/src/interop.c
index 605d7be05..f25348a32 100644
--- a/device/src/interop.c
+++ b/device/src/interop.c
@@ -96,6 +96,7 @@ static const char* interop_feature_string_(const interop_feature_t feature) {
switch (feature) {
CASE_RETURN_STR(INTEROP_DISABLE_LE_SECURE_CONNECTIONS)
CASE_RETURN_STR(INTEROP_AUTO_RETRY_PAIRING)
+ CASE_RETURN_STR(INTEROP_DISABLE_ABSOLUTE_VOLUME)
}
return "UNKNOWN";