Merge branch 'bugfix/hfp_example_ci_v5.4' into 'release/v5.4'

fix: Fix the HFP example fails to discovery target device (v5.4)

See merge request espressif/esp-idf!50291
This commit is contained in:
Wang Meng Yang
2026-07-06 10:41:13 +08:00
2 changed files with 18 additions and 2 deletions
@@ -170,6 +170,7 @@ const char *c_inband_ring_state_str[] = {
}; };
extern esp_bd_addr_t peer_addr; extern esp_bd_addr_t peer_addr;
extern bool hf_client_connected;
// If you want to connect a specific device, add it's address here // If you want to connect a specific device, add it's address here
// esp_bd_addr_t peer_addr = {0xac, 0x67, 0xb2, 0x53, 0x77, 0xbe}; // esp_bd_addr_t peer_addr = {0xac, 0x67, 0xb2, 0x53, 0x77, 0xbe};
@@ -245,6 +246,11 @@ void bt_app_hf_client_cb(esp_hf_client_cb_event_t event, esp_hf_client_cb_param_
param->conn_stat.peer_feat, param->conn_stat.peer_feat,
param->conn_stat.chld_feat); param->conn_stat.chld_feat);
memcpy(peer_addr,param->conn_stat.remote_bda,ESP_BD_ADDR_LEN); memcpy(peer_addr,param->conn_stat.remote_bda,ESP_BD_ADDR_LEN);
if (param->conn_stat.state == ESP_HF_CLIENT_CONNECTION_STATE_CONNECTED) {
hf_client_connected = true;
} else if (param->conn_stat.state == ESP_HF_CLIENT_CONNECTION_STATE_DISCONNECTED) {
hf_client_connected = false;
}
break; break;
} }
@@ -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 * SPDX-License-Identifier: Unlicense OR CC0-1.0
*/ */
@@ -28,10 +28,14 @@
#endif #endif
#include "app_hf_msg_set.h" #include "app_hf_msg_set.h"
#define HF_INQUIRY_LEN 30
esp_bd_addr_t peer_addr = {0}; esp_bd_addr_t peer_addr = {0};
bool hf_client_connected = false;
static char peer_bdname[ESP_BT_GAP_MAX_BDNAME_LEN + 1]; static char peer_bdname[ESP_BT_GAP_MAX_BDNAME_LEN + 1];
static uint8_t peer_bdname_len; static uint8_t peer_bdname_len;
static const char remote_device_name[] = CONFIG_EXAMPLE_PEER_DEVICE_NAME; static const char remote_device_name[] = CONFIG_EXAMPLE_PEER_DEVICE_NAME;
static bool s_peer_device_found = false;
static char *bda2str(esp_bd_addr_t bda, char *str, size_t size) static char *bda2str(esp_bd_addr_t bda, char *str, size_t size)
{ {
@@ -85,6 +89,7 @@ void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param)
if (param->disc_res.prop[i].type == ESP_BT_GAP_DEV_PROP_EIR if (param->disc_res.prop[i].type == ESP_BT_GAP_DEV_PROP_EIR
&& get_name_from_eir(param->disc_res.prop[i].val, peer_bdname, &peer_bdname_len)){ && get_name_from_eir(param->disc_res.prop[i].val, peer_bdname, &peer_bdname_len)){
if (strcmp(peer_bdname, remote_device_name) == 0) { if (strcmp(peer_bdname, remote_device_name) == 0) {
s_peer_device_found = true;
memcpy(peer_addr, param->disc_res.bda, ESP_BD_ADDR_LEN); memcpy(peer_addr, param->disc_res.bda, ESP_BD_ADDR_LEN);
ESP_LOGI(BT_HF_TAG, "Found a target device address:"); ESP_LOGI(BT_HF_TAG, "Found a target device address:");
ESP_LOG_BUFFER_HEX(BT_HF_TAG, peer_addr, ESP_BD_ADDR_LEN); ESP_LOG_BUFFER_HEX(BT_HF_TAG, peer_addr, ESP_BD_ADDR_LEN);
@@ -99,6 +104,11 @@ void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param)
} }
case ESP_BT_GAP_DISC_STATE_CHANGED_EVT: case ESP_BT_GAP_DISC_STATE_CHANGED_EVT:
ESP_LOGI(BT_HF_TAG, "ESP_BT_GAP_DISC_STATE_CHANGED_EVT"); ESP_LOGI(BT_HF_TAG, "ESP_BT_GAP_DISC_STATE_CHANGED_EVT");
if (param->disc_st_chg.state == ESP_BT_GAP_DISCOVERY_STOPPED && !s_peer_device_found && !hf_client_connected) {
ESP_LOGI(BT_HF_TAG, "Device discovery failed, continue to discover...");
esp_bt_gap_start_discovery(ESP_BT_INQ_MODE_GENERAL_INQUIRY, HF_INQUIRY_LEN, 0);
}
break;
case ESP_BT_GAP_RMT_SRVCS_EVT: case ESP_BT_GAP_RMT_SRVCS_EVT:
case ESP_BT_GAP_RMT_SRVC_REC_EVT: case ESP_BT_GAP_RMT_SRVC_REC_EVT:
break; break;
@@ -276,7 +286,7 @@ static void bt_hf_client_hdl_stack_evt(uint16_t event, void *p_param)
/* start device discovery */ /* start device discovery */
ESP_LOGI(BT_HF_TAG, "Starting device discovery..."); ESP_LOGI(BT_HF_TAG, "Starting device discovery...");
esp_bt_gap_start_discovery(ESP_BT_INQ_MODE_GENERAL_INQUIRY, 10, 0); esp_bt_gap_start_discovery(ESP_BT_INQ_MODE_GENERAL_INQUIRY, HF_INQUIRY_LEN, 0);
break; break;
} }
default: default: