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

Commit 20d84252 authored by Eric Shih's avatar Eric Shih
Browse files

Handle LC3 codec event for HFPC

- handle lc3 codec in codec negotiate
- handle lC3 callback event to java native layer

Bug: 278469604
Test: atest BtifCoreTest
Change-Id: I5a730aee6a1cc983b624b0c40fd5ecb8f7a68dd9
parent 9a054332
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -486,8 +486,22 @@ static void bta_hf_client_handle_bcs(tBTA_HF_CLIENT_CB* client_cb,
                                     uint32_t codec) {
  LOG_VERBOSE("%s: codec: %u sco listen state: %d", __func__, codec,
              client_cb->sco_state);
  if (codec == BTM_SCO_CODEC_CVSD || codec == BTM_SCO_CODEC_MSBC) {
    client_cb->negotiated_codec = codec;
  if (codec == UUID_CODEC_CVSD || codec == UUID_CODEC_MSBC ||
      (bta_hf_client_cb_arr.is_support_lc3 && codec == UUID_CODEC_LC3)) {
    switch (codec) {
      case UUID_CODEC_CVSD:
        client_cb->negotiated_codec = BTM_SCO_CODEC_CVSD;
        break;
      case UUID_CODEC_MSBC:
        client_cb->negotiated_codec = BTM_SCO_CODEC_MSBC;
        break;
      case UUID_CODEC_LC3:
        client_cb->negotiated_codec = BTM_SCO_CODEC_LC3;
        break;
      default:
        client_cb->negotiated_codec = BTM_SCO_CODEC_CVSD;
        break;
    }
    bta_hf_client_send_at_bcs(client_cb, codec);
  } else {
    client_cb->negotiated_codec = BTM_SCO_CODEC_CVSD;
@@ -1783,7 +1797,11 @@ void bta_hf_client_send_at_bac(tBTA_HF_CLIENT_CB* client_cb) {

  LOG_VERBOSE("%s", __func__);

  if (bta_hf_client_cb_arr.is_support_lc3) {
    buf = "AT+BAC=1,2,3\r";
  } else {
    buf = "AT+BAC=1,2\r";
  }

  bta_hf_client_send_at(client_cb, BTA_HF_CLIENT_AT_BAC, buf, strlen(buf));
}
+6 −1
Original line number Diff line number Diff line
@@ -111,6 +111,9 @@ static void bta_hf_client_sco_conn_rsp(tBTA_HF_CLIENT_CB* client_cb,
    if (p_data->link_type == BTM_LINK_TYPE_SCO) {
      // SCO
      resp = esco_parameters_for_codec(SCO_CODEC_CVSD_D1, true);
    } else if (client_cb->negotiated_codec == BTM_SCO_CODEC_LC3) {
      // eSCO LC3, HFP 1.9
      resp = esco_parameters_for_codec(ESCO_CODEC_LC3_T2, true);
    } else if (client_cb->negotiated_codec == BTM_SCO_CODEC_MSBC) {
      // eSCO mSBC
      resp = esco_parameters_for_codec(ESCO_CODEC_MSBC_T2, true);
@@ -567,7 +570,9 @@ void bta_hf_client_sco_conn_open(tBTA_HF_CLIENT_DATA* p_data) {

  bta_sys_sco_open(BTA_ID_HS, 1, client_cb->peer_addr);

  if (client_cb->negotiated_codec == BTM_SCO_CODEC_MSBC) {
  if (client_cb->negotiated_codec == BTM_SCO_CODEC_LC3) {
    bta_hf_client_cback_sco(client_cb, BTA_HF_CLIENT_AUDIO_LC3_OPEN_EVT);
  } else if (client_cb->negotiated_codec == BTM_SCO_CODEC_MSBC) {
    bta_hf_client_cback_sco(client_cb, BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT);
  } else {
    bta_hf_client_cback_sco(client_cb, BTA_HF_CLIENT_AUDIO_OPEN_EVT);
+2 −1
Original line number Diff line number Diff line
@@ -134,7 +134,8 @@ typedef uint8_t tBTA_HF_CLIENT_AT_RESULT_TYPE;
#define BTA_HF_CLIENT_RING_INDICATION 21 /* HF Client ring indication */

#define BTA_HF_CLIENT_UNKNOWN_EVT 22 /* Unknown or vendor specific Event */

#define BTA_HF_CLIENT_AUDIO_LC3_OPEN_EVT \
  23 /* Audio connection with LC3 codec open */
#define BTA_HF_CLIENT_DISABLE_EVT 30     /* HF Client disabled */

typedef uint8_t tBTA_HF_CLIENT_EVT;
+1 −0
Original line number Diff line number Diff line
@@ -215,6 +215,7 @@ const char* dump_hf_client_event(uint16_t event) {
    CASE_RETURN_STR(BTA_HF_CLIENT_CONN_EVT)
    CASE_RETURN_STR(BTA_HF_CLIENT_AUDIO_OPEN_EVT)
    CASE_RETURN_STR(BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT)
    CASE_RETURN_STR(BTA_HF_CLIENT_AUDIO_LC3_OPEN_EVT)
    CASE_RETURN_STR(BTA_HF_CLIENT_AUDIO_CLOSE_EVT)
    CASE_RETURN_STR(BTA_HF_CLIENT_SPK_EVT)
    CASE_RETURN_STR(BTA_HF_CLIENT_MIC_EVT)
+2 −0
Original line number Diff line number Diff line
@@ -384,6 +384,8 @@ TEST_F(BtifCoreTest, dump_hf_client_event) {
                     "BTA_HF_CLIENT_AUDIO_OPEN_EVT"),
      std::make_pair(BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT,
                     "BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT"),
      std::make_pair(BTA_HF_CLIENT_AUDIO_LC3_OPEN_EVT,
                     "BTA_HF_CLIENT_AUDIO_LC3_OPEN_EVT"),
      std::make_pair(BTA_HF_CLIENT_AUDIO_CLOSE_EVT,
                     "BTA_HF_CLIENT_AUDIO_CLOSE_EVT"),
      std::make_pair(BTA_HF_CLIENT_SPK_EVT, "BTA_HF_CLIENT_SPK_EVT"),
Loading