From f0d54d4a8c929dd85ed5e0f765a42d935801bea8 Mon Sep 17 00:00:00 2001 From: Jin Cheng Date: Thu, 14 May 2026 10:35:25 +0800 Subject: [PATCH 1/2] fix(bt/bluedroid): fixed building errors in HFP datapath --- .../bt/host/bluedroid/btc/profile/std/hf_ag/bta_ag_co.c | 2 +- .../bluedroid/btc/profile/std/hf_client/bta_hf_client_co.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/bt/host/bluedroid/btc/profile/std/hf_ag/bta_ag_co.c b/components/bt/host/bluedroid/btc/profile/std/hf_ag/bta_ag_co.c index 3a0d8f465a5..117a1c5ce3b 100644 --- a/components/bt/host/bluedroid/btc/profile/std/hf_ag/bta_ag_co.c +++ b/components/bt/host/bluedroid/btc/profile/std/hf_ag/bta_ag_co.c @@ -71,7 +71,7 @@ static bta_hf_ct_plc_t *bta_hf_ct_plc_ptr; #define BTA_HF_H2_HEADER_SN1_BIT_OFFSET2 15 #define BTA_HF_H2_HEADER_SYNC_WORD_CHECK(p) \ - ((((UINT16)(((UINT8 *)(p))[0])) | (((UINT16)(((UINT8 *)(p))[1])) << 8)) & \ + (((((UINT16)(((UINT8 *)(p))[0])) | (((UINT16)(((UINT8 *)(p))[1])) << 8)) & \ BTA_HF_H2_HEADER_SYNC_WORD_MASK) == \ BTA_HF_H2_HEADER_SYNC_WORD) diff --git a/components/bt/host/bluedroid/btc/profile/std/hf_client/bta_hf_client_co.c b/components/bt/host/bluedroid/btc/profile/std/hf_client/bta_hf_client_co.c index 3f37a3ae074..d02d68d5929 100644 --- a/components/bt/host/bluedroid/btc/profile/std/hf_client/bta_hf_client_co.c +++ b/components/bt/host/bluedroid/btc/profile/std/hf_client/bta_hf_client_co.c @@ -31,7 +31,7 @@ #define BTA_HF_H2_HEADER_SN1_BIT_OFFSET2 15 #define BTA_HF_H2_HEADER_SYNC_WORD_CHECK(p) \ - ((((UINT16)(((UINT8 *)(p))[0])) | (((UINT16)(((UINT8 *)(p))[1])) << 8)) & \ + (((((UINT16)(((UINT8 *)(p))[0])) | (((UINT16)(((UINT8 *)(p))[1])) << 8)) & \ BTA_HF_H2_HEADER_SYNC_WORD_MASK) == \ BTA_HF_H2_HEADER_SYNC_WORD) @@ -538,7 +538,7 @@ void bta_hf_client_sco_co_in_data(BT_HDR *p_buf, tBTM_SCO_DATA_FLAG status) } btc_hf_client_audio_data_cb_to_app((uint8_t *)p_new_buf, (uint8_t *)p_data, BTM_MSBC_FRAME_SIZE, bta_hf_client_co_cb.is_bad_frame); bta_hf_client_co_cb.is_bad_frame = false; - memset(bta_hf_client_co_cb.rx_half_msbc_data, 0, BTM_MSBC_FRAME_SIZE); + memset(bta_hf_client_co_cb.rx_half_msbc_data, 0, BTM_MSBC_FRAME_SIZE / 2); } bta_hf_client_co_cb.rx_first_pkt = !bta_hf_client_co_cb.rx_first_pkt; } From ad6f33e9d14d92fe633fc86c397ab331e0e26053 Mon Sep 17 00:00:00 2001 From: Jin Cheng Date: Thu, 14 May 2026 12:10:47 +0800 Subject: [PATCH 2/2] feat(ci): added example tests for HFP using external codec --- .../classic_bt/hfp_ag/sdkconfig.ci.extcodec | 13 +++++++++++++ .../classic_bt/hfp_hf/sdkconfig.ci.extcodec | 13 +++++++++++++ .../bluedroid/classic_bt/pytest_classic_bt_test.py | 8 +++++++- 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 examples/bluetooth/bluedroid/classic_bt/hfp_ag/sdkconfig.ci.extcodec create mode 100644 examples/bluetooth/bluedroid/classic_bt/hfp_hf/sdkconfig.ci.extcodec diff --git a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/sdkconfig.ci.extcodec b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/sdkconfig.ci.extcodec new file mode 100644 index 00000000000..761b29c1457 --- /dev/null +++ b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/sdkconfig.ci.extcodec @@ -0,0 +1,13 @@ +# Override some defaults so BT stack is enabled and +# Classic BT is enabled and BT_DRAM_RELEASE is disabled +CONFIG_BT_ENABLED=y +CONFIG_BT_BLE_ENABLED=n +CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY=y +CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN=1 +CONFIG_BT_BLUEDROID_ENABLED=y +CONFIG_BT_CLASSIC_ENABLED=y +CONFIG_BT_HFP_ENABLE=y +CONFIG_BT_HFP_AG_ENABLE=y +CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI=y +CONFIG_BT_HFP_USE_EXTERNAL_CODEC=y +CONFIG_EXAMPLE_ENABLE_CONSOLE_REPL=n diff --git a/examples/bluetooth/bluedroid/classic_bt/hfp_hf/sdkconfig.ci.extcodec b/examples/bluetooth/bluedroid/classic_bt/hfp_hf/sdkconfig.ci.extcodec new file mode 100644 index 00000000000..62e13eedb8c --- /dev/null +++ b/examples/bluetooth/bluedroid/classic_bt/hfp_hf/sdkconfig.ci.extcodec @@ -0,0 +1,13 @@ +# Override some defaults so BT stack is enabled and +# Classic BT is enabled and BT_DRAM_RELEASE is disabled +CONFIG_BT_ENABLED=y +CONFIG_BT_BLE_ENABLED=n +CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY=y +CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN=1 +CONFIG_BT_BLUEDROID_ENABLED=y +CONFIG_BT_CLASSIC_ENABLED=y +CONFIG_BT_HFP_ENABLE=y +CONFIG_BT_HFP_CLIENT_ENABLE=y +CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI=y +CONFIG_BT_HFP_USE_EXTERNAL_CODEC=y +CONFIG_EXAMPLE_ENABLE_CONSOLE_REPL=n diff --git a/examples/bluetooth/bluedroid/classic_bt/pytest_classic_bt_test.py b/examples/bluetooth/bluedroid/classic_bt/pytest_classic_bt_test.py index 67974de2379..ce84f642f2a 100644 --- a/examples/bluetooth/bluedroid/classic_bt/pytest_classic_bt_test.py +++ b/examples/bluetooth/bluedroid/classic_bt/pytest_classic_bt_test.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 from pathlib import Path @@ -82,6 +82,12 @@ def test_bt_spp_vfs(app_path: str, dut: tuple[IdfDut, IdfDut]) -> None: 'esp32|esp32', 'all', ), + ( + 2, + f'{str(CUR_DIR / "hfp_ag")}|{str(CUR_DIR / "hfp_hf")}', + 'esp32|esp32', + 'extcodec', + ), ], indirect=True, )