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

Commit 9a115540 authored by kuanyuhuang's avatar kuanyuhuang
Browse files

Support setting BT controller Low Latency mode(2/2)

Handle bta latency event and set acl priority and latency by sending vendor vsc.

Bug: 240637363
Bug: 223126227
Tag: #feature
Ignore-AOSP-First: TM QPR1 feature
Test: test on sink device support dynamic spatial audio
Change-Id: I55188cc7a316f213156c39d2985420f0617421e2
parent ca4a03aa
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -1352,6 +1352,25 @@ void bta_av_set_use_latency_mode(tBTA_AV_SCB* p_scb, bool use_latency_mode) {
  L2CA_UseLatencyMode(p_scb->PeerAddress(), use_latency_mode);
}

/*******************************************************************************
 *
 * Function         bta_av_api_set_latency
 *
 * Description      set stream latency.
 *
 * Returns          void
 *
 ******************************************************************************/
void bta_av_api_set_latency(tBTA_AV_DATA* p_data) {
  tBTA_AV_SCB* p_scb =
      bta_av_hndl_to_scb(p_data->api_set_latency.hdr.layer_specific);

  tL2CAP_LATENCY latency = p_data->api_set_latency.is_low_latency
                               ? L2CAP_LATENCY_LOW
                               : L2CAP_LATENCY_NORMAL;
  L2CA_SetAclLatency(p_scb->PeerAddress(), latency);
}

/**
 * Find the index for the free LCB entry to use.
 *
+1 −0
Original line number Diff line number Diff line
@@ -741,6 +741,7 @@ extern bool bta_av_link_role_ok(tBTA_AV_SCB* p_scb, uint8_t bits);
extern void bta_av_api_disconnect(tBTA_AV_DATA* p_data);
extern void bta_av_set_use_latency_mode(tBTA_AV_SCB* p_scb,
                                        bool use_latency_mode);
extern void bta_av_api_set_latency(tBTA_AV_DATA* p_data);
extern void bta_av_sig_chg(tBTA_AV_DATA* p_data);
extern void bta_av_signalling_timer(tBTA_AV_DATA* p_data);
extern void bta_av_rc_disc_done(tBTA_AV_DATA* p_data);
+3 −0
Original line number Diff line number Diff line
@@ -1105,6 +1105,9 @@ static void bta_av_non_state_machine_event(uint16_t event,
    case BTA_AV_API_DISCONNECT_EVT:
      bta_av_api_disconnect(p_data);
      break;
    case BTA_AV_API_SET_LATENCY_EVT:
      bta_av_api_set_latency(p_data);
      break;
    case BTA_AV_CI_SRC_DATA_READY_EVT:
      bta_av_ci_data(p_data);
      break;
+6 −2
Original line number Diff line number Diff line
@@ -888,9 +888,13 @@ typedef struct {

/* Parameter information for HCI_BRCM_SET_ACL_PRIORITY */
#define HCI_BRCM_ACL_PRIORITY_PARAM_SIZE 3
#define HCI_BRCM_ACL_PRIORITY_LOW 0x00
#define HCI_BRCM_ACL_PRIORITY_HIGH 0xFF
#define HCI_BRCM_SET_ACL_PRIORITY (0x0057 | HCI_GRP_VENDOR_SPECIFIC)
#define HCI_BRCM_ACL_HIGH_PRIORITY_TO_NORMAL_PRIORITY 0x00
#define HCI_BRCM_ACL_NORMAL_PRIORITY_TO_HIGH_PRIORITY 0xFF
#define HCI_BRCM_ACL_NORMAL_PRIORITY_TO_HIGH_PRIORITY_LOW_LATENCY 0xF3
#define HCI_BRCM_ACL_HIGH_PRIORITY_LOW_LATENCY_TO_NORMAL_PRIORITY 0xF2
#define HCI_BRCM_ACL_HIGH_PRIORITY_TO_HIGH_PRIORITY_LOW_LATENCY 0xF1
#define HCI_BRCM_ACL_HIGH_PRIORITY_LOW_LATENCY_TO_HIGH_PRIORITY 0xF0

#define LMP_COMPID_GOOGLE 0xE0

+18 −0
Original line number Diff line number Diff line
@@ -63,6 +63,12 @@ typedef enum : uint8_t {
  L2CAP_PRIORITY_HIGH = 1,
} tL2CAP_PRIORITY;

/* Values for priority parameter to L2CA_SetAclLatency */
typedef enum : uint8_t {
  L2CAP_LATENCY_NORMAL = 0,
  L2CAP_LATENCY_LOW = 1,
} tL2CAP_LATENCY;

/* Values for priority parameter to L2CA_SetTxPriority */
#define L2CAP_CHNL_PRIORITY_HIGH 0
#define L2CAP_CHNL_PRIORITY_LOW 2
@@ -660,6 +666,18 @@ extern bool L2CA_UseLatencyMode(const RawAddress& bd_addr,
extern bool L2CA_SetAclPriority(const RawAddress& bd_addr,
                                tL2CAP_PRIORITY priority);

/*******************************************************************************
 *
 * Function         L2CA_SetAclLatency
 *
 * Description      Sets the transmission latency for a channel.
 *
 * Returns          true if a valid channel, else false
 *
 ******************************************************************************/
extern bool L2CA_SetAclLatency(const RawAddress& bd_addr,
                               tL2CAP_LATENCY latency);

/*******************************************************************************
 *
 * Function         L2CA_SetTxPriority
Loading