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 ccd365f56fc..dbe705549ee 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 @@ -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; } diff --git a/examples/bluetooth/bluedroid/classic_bt/hfp_hf/main/main.c b/examples/bluetooth/bluedroid/classic_bt/hfp_hf/main/main.c index 88df9180ef2..d39354c8e5e 100644 --- a/examples/bluetooth/bluedroid/classic_bt/hfp_hf/main/main.c +++ b/examples/bluetooth/bluedroid/classic_bt/hfp_hf/main/main.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 */ @@ -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: