Merge branch 'bugfix/fix_hid_reconnect_issue' into 'master'

feat(bt/bluedroid): Add Kconfig option to keep device bonding info when HID unplugging

See merge request espressif/esp-idf!36975
This commit is contained in:
Jiang Jiang Jian 2025-02-20 17:25:34 +08:00
commit f390fcbd90
5 changed files with 32 additions and 9 deletions

View File

@ -192,6 +192,14 @@ config BT_HID_DEVICE_ENABLED
help help
This enables the BT HID Device This enables the BT HID Device
config BT_HID_REMOVE_DEVICE_BONDING_ENABLED
bool "Remove Device Bonding Information when HID Virtual Cable Unplugging"
depends on BT_HID_ENABLED
default y
help
This enables the BT HID to remove device bonding information when virtual cable unplugging,
removing device bonding information is optional in HID 1.0 but mandatory in HID 1.1
menuconfig BT_PBAC_ENABLED menuconfig BT_PBAC_ENABLED
bool "PBAP Client" bool "PBAP Client"
depends on BT_CLASSIC_ENABLED depends on BT_CLASSIC_ENABLED

View File

@ -903,14 +903,10 @@ void btc_hd_cb_handler(btc_msg_t *msg)
btc_hd_cb_to_app(ESP_HIDD_INTR_DATA_EVT, &param); btc_hd_cb_to_app(ESP_HIDD_INTR_DATA_EVT, &param);
break; break;
case BTA_HD_VC_UNPLUG_EVT: { case BTA_HD_VC_UNPLUG_EVT: {
bt_bdaddr_t *bd_addr = (bt_bdaddr_t *)&p_data->conn.bda; #if BTC_HID_REMOVE_DEVICE_BONDING
if (bta_dm_check_if_only_hd_connected(p_data->conn.bda)) { BTC_TRACE_DEBUG("%s: Removing bonding information", __func__);
BTC_TRACE_DEBUG("%s: Removing bonding as only HID profile connected", __func__); BTA_DmRemoveDevice((uint8_t *)&p_data->conn.bda, BT_TRANSPORT_BR_EDR);
BTA_DmRemoveDevice((uint8_t *)&p_data->conn.bda, BT_TRANSPORT_BR_EDR); #endif
} else {
BTC_TRACE_DEBUG("%s: Only removing HID data as some other profiles connected", __func__);
btc_hd_remove_device(*bd_addr);
}
if (btc_hd_cb.status == BTC_HD_DISCONNECTING || btc_hd_cb.status == BTC_HD_CONNECTING || if (btc_hd_cb.status == BTC_HD_DISCONNECTING || btc_hd_cb.status == BTC_HD_CONNECTING ||
btc_hd_cb.status == BTC_HD_CONNECTED) { btc_hd_cb.status == BTC_HD_CONNECTED) {

View File

@ -1372,7 +1372,10 @@ void btc_hh_cb_handler(btc_msg_t *msg)
*/ */
if (p_dev->local_vup) { if (p_dev->local_vup) {
p_dev->local_vup = false; p_dev->local_vup = false;
#if BTC_HID_REMOVE_DEVICE_BONDING
BTA_DmRemoveDevice(p_dev->bd_addr, BT_TRANSPORT_BR_EDR); BTA_DmRemoveDevice(p_dev->bd_addr, BT_TRANSPORT_BR_EDR);
#endif
btc_hh_remove_device(p_dev->bd_addr);
} }
btc_hh_cb.status = (BTC_HH_STATUS)BTC_HH_DEV_DISCONNECTED; btc_hh_cb.status = (BTC_HH_STATUS)BTC_HH_DEV_DISCONNECTED;
@ -1406,8 +1409,9 @@ void btc_hh_cb_handler(btc_msg_t *msg)
// [boblane] // [boblane]
if (p_dev->local_vup) { if (p_dev->local_vup) {
p_dev->local_vup = false; p_dev->local_vup = false;
#if BTC_HID_REMOVE_DEVICE_BONDING
BTA_DmRemoveDevice(p_dev->bd_addr, BT_TRANSPORT_BR_EDR); BTA_DmRemoveDevice(p_dev->bd_addr, BT_TRANSPORT_BR_EDR);
} else { #endif
btc_hh_remove_device(p_dev->bd_addr); btc_hh_remove_device(p_dev->bd_addr);
} }
param.unplug.status = p_data->dev_status.status; param.unplug.status = p_data->dev_status.status;

View File

@ -108,6 +108,13 @@
#define UC_BT_HID_DEVICE_ENABLED FALSE #define UC_BT_HID_DEVICE_ENABLED FALSE
#endif #endif
//HID remove device bonding option
#ifdef CONFIG_BT_HID_REMOVE_DEVICE_BONDING_ENABLED
#define UC_BT_HID_REMOVE_DEVICE_BONDING_ENABLED CONFIG_BT_HID_REMOVE_DEVICE_BONDING_ENABLED
#else
#define UC_BT_HID_REMOVE_DEVICE_BONDING_ENABLED FALSE
#endif
//BQB(BT) //BQB(BT)
#ifdef CONFIG_BT_CLASSIC_BQB_ENABLED #ifdef CONFIG_BT_CLASSIC_BQB_ENABLED
#define UC_BT_CLASSIC_BQB_ENABLED CONFIG_BT_CLASSIC_BQB_ENABLED #define UC_BT_CLASSIC_BQB_ENABLED CONFIG_BT_CLASSIC_BQB_ENABLED

View File

@ -176,6 +176,10 @@
#define BTC_HD_INCLUDED TRUE #define BTC_HD_INCLUDED TRUE
#endif /* UC_BT_HID_DEVICE_ENABLED */ #endif /* UC_BT_HID_DEVICE_ENABLED */
#if UC_BT_HID_REMOVE_DEVICE_BONDING_ENABLED
#define BTC_HID_REMOVE_DEVICE_BONDING TRUE
#endif
#if UC_BT_GOEPC_ENABLED #if UC_BT_GOEPC_ENABLED
#ifndef RFCOMM_INCLUDED #ifndef RFCOMM_INCLUDED
#define RFCOMM_INCLUDED TRUE #define RFCOMM_INCLUDED TRUE
@ -481,6 +485,10 @@
#define BTC_HD_INCLUDED FALSE #define BTC_HD_INCLUDED FALSE
#endif #endif
#ifndef BTC_HID_REMOVE_DEVICE_BONDING
#define BTC_HID_REMOVE_DEVICE_BONDING FALSE
#endif
#ifndef SBC_DEC_INCLUDED #ifndef SBC_DEC_INCLUDED
#define SBC_DEC_INCLUDED FALSE #define SBC_DEC_INCLUDED FALSE
#endif #endif