mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
fix: Fix the HFP example fails to discovery target device
This commit is contained in:
@@ -172,6 +172,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};
|
||||||
|
|
||||||
@@ -302,6 +303,10 @@ void bt_app_hf_client_cb(esp_hf_client_cb_event_t event, esp_hf_client_cb_param_
|
|||||||
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_SLC_CONNECTED) {
|
if (param->conn_stat.state == ESP_HF_CLIENT_CONNECTION_STATE_SLC_CONNECTED) {
|
||||||
esp_pbac_connect(peer_addr);
|
esp_pbac_connect(peer_addr);
|
||||||
|
} else 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
|
||||||
*/
|
*/
|
||||||
@@ -30,10 +30,14 @@
|
|||||||
#include "app_hf_msg_set.h"
|
#include "app_hf_msg_set.h"
|
||||||
#include "bt_app_pbac.h"
|
#include "bt_app_pbac.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)
|
||||||
{
|
{
|
||||||
@@ -87,6 +91,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);
|
||||||
@@ -101,6 +106,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;
|
||||||
@@ -282,7 +292,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:
|
||||||
|
|||||||
Reference in New Issue
Block a user