Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1000994 authored by Sharvil Nanavati's avatar Sharvil Nanavati
Browse files

resolve merge conflicts of 0cb67c5d to nyc-dev

Change-Id: I94b431287ae831d64dc734f8cd3f071e49a9d6eb
parents b185601b 0cb67c5d
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -54,7 +54,16 @@ typedef enum {
  // Keyboards should use a variable pin at all times. However, some keyboards
  // require a fixed pin of all 0000. This workaround enables auto pairing for
  // those keyboards.
  INTEROP_KEYBOARD_REQUIRES_FIXED_PIN
  INTEROP_KEYBOARD_REQUIRES_FIXED_PIN,

  // Some headsets have audio jitter issues because of increased re-transmissions as the
  // 3 Mbps packets have a lower link margin, and are more prone to interference. We can
  // disable 3DH packets (use only 2DH packets) for the ACL link to improve sensitivity
  // when streaming A2DP audio to the headset. Air sniffer logs show reduced
  // re-transmissions after switching to 2DH packets.
  //
  // Disable 3Mbps packets and use only 2Mbps packets for ACL links when streaming audio.
  INTEROP_2MBPS_LINK_ONLY
} interop_feature_t;

// Check if a given |addr| matches a known interoperability workaround as identified
+4 −1
Original line number Diff line number Diff line
@@ -81,7 +81,10 @@ static const interop_addr_entry_t interop_addr_database[] = {
  {{{0xe0, 0x75, 0x0a,      0,0,0}}, 3, INTEROP_DISABLE_AUTO_PAIRING},

  // Unknown keyboard (carried over from auto_pair_devlist.conf)
  {{{0x00, 0x0F, 0xF6,      0,0,0}}, 3, INTEROP_KEYBOARD_REQUIRES_FIXED_PIN}
  {{{0x00, 0x0F, 0xF6,      0,0,0}}, 3, INTEROP_KEYBOARD_REQUIRES_FIXED_PIN},

  // Jaybird Family
  {{{0x00, 0x18, 0x91,       0,0,0}}, 3, INTEROP_2MBPS_LINK_ONLY},
};

typedef struct {
+1 −0
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@ static const char* interop_feature_string_(const interop_feature_t feature) {
    CASE_RETURN_STR(INTEROP_DISABLE_ABSOLUTE_VOLUME)
    CASE_RETURN_STR(INTEROP_DISABLE_AUTO_PAIRING)
    CASE_RETURN_STR(INTEROP_KEYBOARD_REQUIRES_FIXED_PIN)
    CASE_RETURN_STR(INTEROP_2MBPS_LINK_ONLY)
  }

  return "UNKNOWN";
+19 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include "l2cdefs.h"
#include "btm_api.h"
#include "btm_int.h"
#include "device/include/interop.h"


/* callback function declarations */
@@ -202,6 +203,15 @@ void avdt_l2c_connect_ind_cback(BD_ADDR bd_addr, UINT16 lcid, UINT16 psm, UINT8
            p_tbl->state = AVDT_AD_ST_SEC_ACP;
            p_tbl->cfg_flags = AVDT_L2C_CFG_CONN_ACP;

            if (interop_match_addr(INTEROP_2MBPS_LINK_ONLY, (const bt_bdaddr_t *)&bd_addr)) {
                // Disable 3DH packets for AVDT ACL to improve sensitivity on HS
                tACL_CONN *p_acl_cb = btm_bda_to_acl(bd_addr, BT_TRANSPORT_BR_EDR);
                btm_set_packet_types(p_acl_cb, (btm_cb.btm_acl_pkt_types_supported |
                                                HCI_PKT_TYPES_MASK_NO_3_DH1 |
                                                HCI_PKT_TYPES_MASK_NO_3_DH3 |
                                                HCI_PKT_TYPES_MASK_NO_3_DH5));
            }

            /* Check the security */
            rc = btm_sec_mx_access_request (bd_addr, AVDT_PSM,
                FALSE, BTM_SEC_PROTO_AVDT,
@@ -321,6 +331,15 @@ void avdt_l2c_connect_cfm_cback(UINT16 lcid, UINT16 result)
                        p_tbl->lcid = lcid;
                        p_tbl->cfg_flags = AVDT_L2C_CFG_CONN_INT;

                        if (interop_match_addr(INTEROP_2MBPS_LINK_ONLY, (const bt_bdaddr_t *) &p_ccb->peer_addr)) {
                            // Disable 3DH packets for AVDT ACL to improve sensitivity on HS
                            tACL_CONN *p_acl_cb = btm_bda_to_acl(p_ccb->peer_addr, BT_TRANSPORT_BR_EDR);
                            btm_set_packet_types(p_acl_cb, (btm_cb.btm_acl_pkt_types_supported |
                                                            HCI_PKT_TYPES_MASK_NO_3_DH1 |
                                                            HCI_PKT_TYPES_MASK_NO_3_DH3 |
                                                            HCI_PKT_TYPES_MASK_NO_3_DH5));
                        }

                        /* Check the security */
                        btm_sec_mx_access_request (p_ccb->peer_addr, AVDT_PSM,
                            TRUE, BTM_SEC_PROTO_AVDT,