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

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

See merge request espressif/esp-idf!50292
This commit is contained in:
Wang Meng Yang
2026-07-06 10:41:17 +08:00
2 changed files with 18 additions and 2 deletions

View File

@@ -170,6 +170,7 @@ const char *c_inband_ring_state_str[] = {
};
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
// 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.chld_feat);
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;
}

View File

@@ -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
*/
@@ -28,10 +28,14 @@
#endif
#include "app_hf_msg_set.h"
#define HF_INQUIRY_LEN 30
esp_bd_addr_t peer_addr = {0};
bool hf_client_connected = false;
static char peer_bdname[ESP_BT_GAP_MAX_BDNAME_LEN + 1];
static uint8_t peer_bdname_len;
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)
{
@@ -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
&& get_name_from_eir(param->disc_res.prop[i].val, peer_bdname, &peer_bdname_len)){
if (strcmp(peer_bdname, remote_device_name) == 0) {
s_peer_device_found = true;
memcpy(peer_addr, param->disc_res.bda, ESP_BD_ADDR_LEN);
ESP_LOGI(BT_HF_TAG, "Found a target device address:");
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:
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_SRVC_REC_EVT:
break;
@@ -276,7 +286,7 @@ static void bt_hf_client_hdl_stack_evt(uint16_t event, void *p_param)
/* start 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;
}
default: