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

Commit 0faf430a authored by Himanshu Rawat's avatar Himanshu Rawat
Browse files

Update Android Headtracker data size

Headtracker report should only be 13 bytes but we allocate 15 bytes in the
CIS. This means that we are wasting 2 bytes worth of bandwidth per CIS
subevent.

Test: mmm packages/modules/Bluetooth
Flag: com.android.bluetooth.flags.headtracker_sdu_size
Bug: 349901879
Bug: 350090733
Change-Id: I4e1bf8fb588065bb8d2360d487f365a94fcad69d
parent e545ba38
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -36,6 +36,9 @@
#include "stack/include/bt_hdr.h"
#include "types/raw_address.h"

#define ANDROID_HEADTRACKER_DATA_SIZE 13
#define ANDROID_HEADTRACKER_REPORT_ID 1

/* state machine events, these events are handled by the state machine */
enum tBTA_HH_INT_EVT : uint16_t {
  BTA_HH_API_OPEN_EVT = BTA_SYS_EVT_START(BTA_ID_HH),
+18 −1
Original line number Diff line number Diff line
@@ -2364,6 +2364,23 @@ static bool bta_hh_le_iso_data_callback(const RawAddress& addr,
    return false;
  }

  bta_hh_co_data(p_dev_cb->hid_handle, data, size);
  uint8_t* report = data;
  uint8_t len = size;
  if (com::android::bluetooth::flags::headtracker_sdu_size()) {
    if (size == ANDROID_HEADTRACKER_DATA_SIZE) {
      report = (uint8_t*)osi_malloc(size + 1);
      report[0] = ANDROID_HEADTRACKER_REPORT_ID;
      mempcpy(&report[1], data, size);
      len = size + 1;
    } else if (size != ANDROID_HEADTRACKER_DATA_SIZE + 1) {
      log::warn("Unexpected headtracker data size {} from {}", size, addr);
    }
  }

  bta_hh_co_data(p_dev_cb->hid_handle, report, len);

  if (report != data) {
    osi_free(report);
  }
  return true;
}
+6 −0
Original line number Diff line number Diff line
@@ -315,6 +315,12 @@ constexpr uint8_t kLeAudioMetadataHeadtrackerTransportVal = 1;
constexpr uint8_t kLeAudioMetadataHeadtrackerTransportLeAcl = 1;
constexpr uint8_t kLeAudioMetadataHeadtrackerTransportLeIso = 2;

/* Android Headtracker config parameters */
constexpr uint32_t kLeAudioHeadtrackerSduItv = 20000;
constexpr uint16_t kLeAudioHeadtrackerMaxTransLat = 20;
constexpr uint16_t kLeAudioHeadtrackerMaxSduSize = 13;
constexpr uint8_t kLeAudioHeadtrackerRtn = 2;

/* CSIS Types */
constexpr uint8_t kDefaultScanDurationS = 5;
constexpr uint8_t kDefaultCsisSetSize = 2;
+8 −5
Original line number Diff line number Diff line
@@ -1485,11 +1485,14 @@ class LeAudioGroupStateMachineImpl : public LeAudioGroupStateMachine {

                group->dsa_.active = true;

                /* Todo: Replace literal values */
                param.sdu_itv_stom = 20000;
                param.max_trans_lat_stom = 20;
                param.sdu_itv_stom = bluetooth::le_audio::types::kLeAudioHeadtrackerSduItv;
                param.max_trans_lat_stom =
                        bluetooth::le_audio::types::kLeAudioHeadtrackerMaxTransLat;
                it->max_sdu_size_stom = bluetooth::le_audio::types::kLeAudioHeadtrackerMaxSduSize;
                if (!com::android::bluetooth::flags::headtracker_sdu_size()) {
                  it->max_sdu_size_stom = 15;
                it->rtn_stom = 2;
                }
                it->rtn_stom = bluetooth::le_audio::types::kLeAudioHeadtrackerRtn;

                it++;
              }