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