Loading system/device/include/interop.h +6 −1 Original line number Diff line number Diff line Loading @@ -84,7 +84,12 @@ typedef enum { // Some car kits indicate that role switch is supported, but then reject // role switch attempts. After rejecting several role switch attempts, // such car kits will go into bad state. INTEROP_DYNAMIC_ROLE_SWITCH INTEROP_DYNAMIC_ROLE_SWITCH, // Disable role switch for headsets/car-kits. // Some car kits allow role switch but when the Phone initiates role switch, // the Remote device will go into bad state that will lead to LMP time out. INTEROP_DISABLE_ROLE_SWITCH } interop_feature_t; // Check if a given |addr| matches a known interoperability workaround as Loading system/device/include/interop_database.h +18 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,24 @@ static const interop_addr_entry_t interop_addr_database[] = { // Kenwood KMM-BT518HD - no audio when A2DP codec sample rate is changed {{{0x00, 0x1d, 0x86, 0, 0, 0}}, 3, INTEROP_DISABLE_AVDTP_RECONFIGURE}, // NAC FORD-2013 - Lincoln {{{0x00, 0x26, 0xb4, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, // Toyota Prius - 2015 {{{0xfc, 0xc2, 0xde, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, // OBU II Bluetooth dongle {{{0x00, 0x04, 0x3e, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, // Roman R9020 {{{0x00, 0x23, 0x01, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, // Jabra Storm {{{0x1c, 0x48, 0xf9, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, // Jeep Uconnect {{{0x00, 0x54, 0xaf, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, }; typedef struct { Loading system/device/src/interop.cc +1 −0 Original line number Diff line number Diff line Loading @@ -128,6 +128,7 @@ static const char* interop_feature_string_(const interop_feature_t feature) { CASE_RETURN_STR(INTEROP_GATTC_NO_SERVICE_CHANGED_IND) CASE_RETURN_STR(INTEROP_DISABLE_AVDTP_RECONFIGURE) CASE_RETURN_STR(INTEROP_DYNAMIC_ROLE_SWITCH) CASE_RETURN_STR(INTEROP_DISABLE_ROLE_SWITCH) } return "UNKNOWN"; Loading system/stack/btm/btm_acl.cc +3 −0 Original line number Diff line number Diff line Loading @@ -558,6 +558,9 @@ tBTM_STATUS BTM_SwitchRole(const RawAddress& remote_bd_addr, uint8_t new_role, /* Finished if already in desired role */ if (p->link_role == new_role) return (BTM_SUCCESS); if (interop_match_addr(INTEROP_DISABLE_ROLE_SWITCH, &remote_bd_addr)) return BTM_DEV_BLACKLISTED; #if (BTM_SCO_INCLUDED == TRUE) /* Check if there is any SCO Active on this BD Address */ is_sco_active = btm_is_sco_active_by_bdaddr(remote_bd_addr); Loading Loading
system/device/include/interop.h +6 −1 Original line number Diff line number Diff line Loading @@ -84,7 +84,12 @@ typedef enum { // Some car kits indicate that role switch is supported, but then reject // role switch attempts. After rejecting several role switch attempts, // such car kits will go into bad state. INTEROP_DYNAMIC_ROLE_SWITCH INTEROP_DYNAMIC_ROLE_SWITCH, // Disable role switch for headsets/car-kits. // Some car kits allow role switch but when the Phone initiates role switch, // the Remote device will go into bad state that will lead to LMP time out. INTEROP_DISABLE_ROLE_SWITCH } interop_feature_t; // Check if a given |addr| matches a known interoperability workaround as Loading
system/device/include/interop_database.h +18 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,24 @@ static const interop_addr_entry_t interop_addr_database[] = { // Kenwood KMM-BT518HD - no audio when A2DP codec sample rate is changed {{{0x00, 0x1d, 0x86, 0, 0, 0}}, 3, INTEROP_DISABLE_AVDTP_RECONFIGURE}, // NAC FORD-2013 - Lincoln {{{0x00, 0x26, 0xb4, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, // Toyota Prius - 2015 {{{0xfc, 0xc2, 0xde, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, // OBU II Bluetooth dongle {{{0x00, 0x04, 0x3e, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, // Roman R9020 {{{0x00, 0x23, 0x01, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, // Jabra Storm {{{0x1c, 0x48, 0xf9, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, // Jeep Uconnect {{{0x00, 0x54, 0xaf, 0, 0, 0}}, 3, INTEROP_DISABLE_ROLE_SWITCH}, }; typedef struct { Loading
system/device/src/interop.cc +1 −0 Original line number Diff line number Diff line Loading @@ -128,6 +128,7 @@ static const char* interop_feature_string_(const interop_feature_t feature) { CASE_RETURN_STR(INTEROP_GATTC_NO_SERVICE_CHANGED_IND) CASE_RETURN_STR(INTEROP_DISABLE_AVDTP_RECONFIGURE) CASE_RETURN_STR(INTEROP_DYNAMIC_ROLE_SWITCH) CASE_RETURN_STR(INTEROP_DISABLE_ROLE_SWITCH) } return "UNKNOWN"; Loading
system/stack/btm/btm_acl.cc +3 −0 Original line number Diff line number Diff line Loading @@ -558,6 +558,9 @@ tBTM_STATUS BTM_SwitchRole(const RawAddress& remote_bd_addr, uint8_t new_role, /* Finished if already in desired role */ if (p->link_role == new_role) return (BTM_SUCCESS); if (interop_match_addr(INTEROP_DISABLE_ROLE_SWITCH, &remote_bd_addr)) return BTM_DEV_BLACKLISTED; #if (BTM_SCO_INCLUDED == TRUE) /* Check if there is any SCO Active on this BD Address */ is_sco_active = btm_is_sco_active_by_bdaddr(remote_bd_addr); Loading