#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"
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)
{
// 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
{{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},
};