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

Commit fdc6f017 authored by Andre Eisenbach's avatar Andre Eisenbach Committed by android-build-merger
Browse files

Limit sniff mode for Nintendo Pro Controller to 11.25ms

am: f425b665

Change-Id: Ic6398eb054f7bc20c7ab4dc2ee1e603c683c9044
parents 56e55f58 f425b665
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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
@@ -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;
+5 −1
Original line number Diff line number Diff line
@@ -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
+4 −0
Original line number Diff line number Diff line
@@ -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 {
+1 −0
Original line number Diff line number Diff line
@@ -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";