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

Commit 21e48a15 authored by Himanshu Rawat's avatar Himanshu Rawat
Browse files

Use LE transport when Headtracker service is available

Test: mmm packages/modules/Bluetooth
Test: manual | Pair with buds supporting Android Headtracker service
Flag: com.android.bluetooth.flags.android_headtracker_service
Bug: 332590397
Bug: 335708774
Change-Id: Id1eda9565a0fe97d7bce699a743ab42fa1ac255c
parent 79aa6760
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -1512,6 +1512,7 @@ static bt_status_t init(bthh_callbacks_t* callbacks) {
static void btif_hh_transport_select(tAclLinkSpec& link_spec) {
  bool hid_available = false;
  bool hogp_available = false;
  bool headtracker_available = false;
  bool le_preferred = false;
  bluetooth::Uuid remote_uuids[BT_MAX_NUM_UUIDS] = {};
  bt_property_t remote_properties = {BT_PROPERTY_UUIDS, sizeof(remote_uuids),
@@ -1537,10 +1538,14 @@ static void btif_hh_transport_select(tAclLinkSpec& link_spec) {
          hid_available = true;
        } else if (remote_uuids[i].As16Bit() == UUID_SERVCLASS_LE_HID) {
          hogp_available = true;
        } else if (remote_uuids[i] == ANDROID_HEADTRACKER_SERVICE_UUID) {
          if (com::android::bluetooth::flags::android_headtracker_service()) {
            headtracker_available = true;
          }
        }
      }

      if (hid_available && hogp_available) {
      if (hid_available && (hogp_available || headtracker_available)) {
        break;
      }
    }
@@ -1549,11 +1554,11 @@ static void btif_hh_transport_select(tAclLinkSpec& link_spec) {
  /* Decide whether to connect HID or HOGP */
  if (bredr_acl && hid_available) {
    le_preferred = false;
  } else if (le_acl && hogp_available) {
  } else if (le_acl && (hogp_available || headtracker_available)) {
    le_preferred = true;
  } else if (hid_available) {
    le_preferred = false;
  } else if (hogp_available) {
  } else if (hogp_available || headtracker_available) {
    le_preferred = true;
  } else if (bredr_acl) {
    le_preferred = false;
@@ -1566,10 +1571,10 @@ static void btif_hh_transport_select(tAclLinkSpec& link_spec) {
  link_spec.transport = le_preferred ? BT_TRANSPORT_LE : BT_TRANSPORT_BR_EDR;
  log::info(
      "link_spec:{}, bredr_acl:{}, hid_available:{}, le_acl:{}, "
      "hogp_available:{}, "
      "hogp_available:{}, headtracker_available:{}, "
      "dev_type:{}, le_preferred:{}",
      link_spec.ToRedactedStringForLogging(), bredr_acl, hid_available, le_acl,
      hogp_available, dev_type, le_preferred);
      hogp_available, headtracker_available, dev_type, le_preferred);
}
/*******************************************************************************
 *
+11 −0
Original line number Diff line number Diff line
@@ -25,6 +25,17 @@
#include "stack/include/bt_hdr.h"
#include "test/common/mock_functions.h"

using namespace bluetooth;

const Uuid ANDROID_HEADTRACKER_SERVICE_UUID =
    Uuid::FromString(ANDROID_HEADTRACKER_SERVICE_UUID_STRING);
const Uuid ANDROID_HEADTRACKER_VERSION_CHARAC_UUID =
    Uuid::FromString(ANDROID_HEADTRACKER_VERSION_CHARAC_UUID_STRING);
const Uuid ANDROID_HEADTRACKER_CONTROL_CHARAC_UUID =
    Uuid::FromString(ANDROID_HEADTRACKER_CONTROL_CHARAC_UUID_STRING);
const Uuid ANDROID_HEADTRACKER_REPORT_CHARAC_UUID =
    Uuid::FromString(ANDROID_HEADTRACKER_REPORT_CHARAC_UUID_STRING);

void BTA_HhEnable(tBTA_HH_CBACK* /* p_cback */, bool /* enable_hidp */,
                  bool /* enable_hogp */) {
  inc_func_call_count(__func__);