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

Commit 2b63f8b7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Limit sniff mode for Nintendo Pro Controller to 11.25ms"

parents 6da53a4d 7b56da41
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";