From 97b10b7096ebe64f218385ad3a3cf747de7b3c24 Mon Sep 17 00:00:00 2001 From: Jin Cheng Date: Wed, 5 Aug 2026 18:01:21 +0800 Subject: [PATCH] change(bt/bluedroid): optimized the HFP example workflow to improve audio quality Disabled inquiry scan and page scan after SCO connection establishment to reduce over-the-air bandwidth usage and improve audio quality by prevent scan activities from interrupting SCO traffic. --- .../bluedroid/classic_bt/hfp_ag/main/bt_app_hf.c | 12 +++++++++--- .../bluedroid/classic_bt/hfp_hf/main/bt_app_hf.c | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/bt_app_hf.c b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/bt_app_hf.c index 07ee4b07916..90a3d8716be 100644 --- a/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/bt_app_hf.c +++ b/examples/bluetooth/bluedroid/classic_bt/hfp_ag/main/bt_app_hf.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -315,10 +315,12 @@ void bt_app_hf_cb(esp_hf_cb_event_t event, esp_hf_cb_param_t *param) case ESP_HF_AUDIO_STATE_EVT: { ESP_LOGI(BT_HF_TAG, "--Audio State %s", c_audio_state_str[param->audio_stat.state]); -#if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI if (param->audio_stat.state == ESP_HF_AUDIO_STATE_CONNECTED || param->audio_stat.state == ESP_HF_AUDIO_STATE_CONNECTED_MSBC) { + /* Disable connectable and discoverable mode to save the over-the-air bandwidth and ensure audio quality */ + esp_bt_gap_set_scan_mode(ESP_BT_NON_CONNECTABLE, ESP_BT_NON_DISCOVERABLE); +#if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI if(param->audio_stat.state == ESP_HF_AUDIO_STATE_CONNECTED) { s_audio_code = ESP_HF_AUDIO_STATE_CONNECTED; } else { @@ -328,11 +330,15 @@ void bt_app_hf_cb(esp_hf_cb_event_t event, esp_hf_cb_param_t *param) esp_hf_ag_register_data_callback(bt_app_hf_incoming_cb, bt_app_hf_outgoing_cb); /* Begin send esco data task */ bt_app_send_data(); +#endif /* #if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI */ } else if (param->audio_stat.state == ESP_HF_AUDIO_STATE_DISCONNECTED) { ESP_LOGI(BT_HF_TAG, "--ESP AG Audio Connection Disconnected."); + /* Resume connectable and discoverable mode */ + esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE); +#if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI bt_app_send_data_shut_down(); - } #endif /* #if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI */ + } break; } diff --git a/examples/bluetooth/bluedroid/classic_bt/hfp_hf/main/bt_app_hf.c b/examples/bluetooth/bluedroid/classic_bt/hfp_hf/main/bt_app_hf.c index dbe705549ee..70d0b8635a0 100644 --- a/examples/bluetooth/bluedroid/classic_bt/hfp_hf/main/bt_app_hf.c +++ b/examples/bluetooth/bluedroid/classic_bt/hfp_hf/main/bt_app_hf.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -258,16 +258,22 @@ void bt_app_hf_client_cb(esp_hf_client_cb_event_t event, esp_hf_client_cb_param_ { ESP_LOGI(BT_HF_TAG, "--audio state %s", c_audio_state_str[param->audio_stat.state]); - #if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI if (param->audio_stat.state == ESP_HF_CLIENT_AUDIO_STATE_CONNECTED || param->audio_stat.state == ESP_HF_CLIENT_AUDIO_STATE_CONNECTED_MSBC) { + /* Disable connectable and discoverable mode to save the over-the-air bandwidth and ensure audio quality */ + esp_bt_gap_set_scan_mode(ESP_BT_NON_CONNECTABLE, ESP_BT_NON_DISCOVERABLE); +#if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI esp_hf_client_register_data_callback(bt_app_hf_client_incoming_cb, bt_app_hf_client_outgoing_cb); bt_app_hf_client_audio_open(); +#endif /* #if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI */ } else if (param->audio_stat.state == ESP_HF_CLIENT_AUDIO_STATE_DISCONNECTED) { + /* Resume connectable and discoverable mode */ + esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE); +#if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI bt_app_hf_client_audio_close(); +#endif /* #if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI */ } - #endif /* #if CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI */ break; }