Loading system/bta/hh/bta_hh_utils.cc +6 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #if (BTA_HH_INCLUDED == TRUE) #include "bta_hh_int.h" #include "device/include/interop.h" #include "osi/include/osi.h" /* if SSR max latency is not defined by remote device, set the default value Loading Loading @@ -393,6 +394,11 @@ tBTA_HH_STATUS bta_hh_read_ssr_param(const RawAddress& bd_addr, if (ssr_max_latency > BTA_HH_SSR_MAX_LATENCY_DEF) ssr_max_latency = BTA_HH_SSR_MAX_LATENCY_DEF; if (interop_match_addr(INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL, &bd_addr)) { if (ssr_max_latency > 18 /* slots * 0.625ms */) ssr_max_latency = 18; } *p_max_ssr_lat = ssr_max_latency; } else *p_max_ssr_lat = p_cb->kdev[i].dscp_info.ssr_max_latency; Loading system/device/include/interop.h +5 −1 Original line number Diff line number Diff line Loading @@ -89,7 +89,11 @@ typedef enum { // 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_DISABLE_ROLE_SWITCH, // Set a very low initial sniff subrating for HID devices that do not // set their own sniff interval. INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL, } interop_feature_t; // Check if a given |addr| matches a known interoperability workaround as Loading system/device/include/interop_database.h +4 −0 Original line number Diff line number Diff line Loading @@ -143,6 +143,10 @@ static const interop_addr_entry_t interop_addr_database[] = { // AirPods 2 - unacceptably loud volume {{{0x94, 0x16, 0x25, 0, 0, 0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME}, // Nintendo Switch Pro Controller - does not set sniff interval dynamically. // Requires custom HID report command to change mode. {{{0x98, 0xB6, 0xE9, 0, 0, 0}}, 3, INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL}, }; 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_DISABLE_AVDTP_RECONFIGURE) CASE_RETURN_STR(INTEROP_DYNAMIC_ROLE_SWITCH) CASE_RETURN_STR(INTEROP_DISABLE_ROLE_SWITCH) CASE_RETURN_STR(INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL) } return "UNKNOWN"; Loading Loading
system/bta/hh/bta_hh_utils.cc +6 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #if (BTA_HH_INCLUDED == TRUE) #include "bta_hh_int.h" #include "device/include/interop.h" #include "osi/include/osi.h" /* if SSR max latency is not defined by remote device, set the default value Loading Loading @@ -393,6 +394,11 @@ tBTA_HH_STATUS bta_hh_read_ssr_param(const RawAddress& bd_addr, if (ssr_max_latency > BTA_HH_SSR_MAX_LATENCY_DEF) ssr_max_latency = BTA_HH_SSR_MAX_LATENCY_DEF; if (interop_match_addr(INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL, &bd_addr)) { if (ssr_max_latency > 18 /* slots * 0.625ms */) ssr_max_latency = 18; } *p_max_ssr_lat = ssr_max_latency; } else *p_max_ssr_lat = p_cb->kdev[i].dscp_info.ssr_max_latency; Loading
system/device/include/interop.h +5 −1 Original line number Diff line number Diff line Loading @@ -89,7 +89,11 @@ typedef enum { // 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_DISABLE_ROLE_SWITCH, // Set a very low initial sniff subrating for HID devices that do not // set their own sniff interval. INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL, } interop_feature_t; // Check if a given |addr| matches a known interoperability workaround as Loading
system/device/include/interop_database.h +4 −0 Original line number Diff line number Diff line Loading @@ -143,6 +143,10 @@ static const interop_addr_entry_t interop_addr_database[] = { // AirPods 2 - unacceptably loud volume {{{0x94, 0x16, 0x25, 0, 0, 0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME}, // Nintendo Switch Pro Controller - does not set sniff interval dynamically. // Requires custom HID report command to change mode. {{{0x98, 0xB6, 0xE9, 0, 0, 0}}, 3, INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL}, }; 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_DISABLE_AVDTP_RECONFIGURE) CASE_RETURN_STR(INTEROP_DYNAMIC_ROLE_SWITCH) CASE_RETURN_STR(INTEROP_DISABLE_ROLE_SWITCH) CASE_RETURN_STR(INTEROP_HID_HOST_LIMIT_SNIFF_INTERVAL) } return "UNKNOWN"; Loading