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

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

See merge request espressif/esp-idf!37182
This commit is contained in:
Wang Meng Yang 2025-02-25 17:51:06 +08:00
commit 73d6bd722f
5 changed files with 32 additions and 9 deletions

View File

@ -184,6 +184,14 @@ config BT_HID_DEVICE_ENABLED
help
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
config BT_BLE_ENABLED
bool "Bluetooth Low Energy"
depends on BT_BLUEDROID_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);
break;
case BTA_HD_VC_UNPLUG_EVT: {
bt_bdaddr_t *bd_addr = (bt_bdaddr_t *)&p_data->conn.bda;
if (bta_dm_check_if_only_hd_connected(p_data->conn.bda)) {
BTC_TRACE_DEBUG("%s: Removing bonding as only HID profile connected", __func__);
BTA_DmRemoveDevice((uint8_t *)&p_data->conn.bda, BT_TRANSPORT_BR_EDR);
} else {
BTC_TRACE_DEBUG("%s: Only removing HID data as some other profiles connected", __func__);
btc_hd_remove_device(*bd_addr);
}
#if BTC_HID_REMOVE_DEVICE_BONDING
BTC_TRACE_DEBUG("%s: Removing bonding information", __func__);
BTA_DmRemoveDevice((uint8_t *)&p_data->conn.bda, BT_TRANSPORT_BR_EDR);
#endif
if (btc_hd_cb.status == BTC_HD_DISCONNECTING || btc_hd_cb.status == BTC_HD_CONNECTING ||
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) {
p_dev->local_vup = false;
#if BTC_HID_REMOVE_DEVICE_BONDING
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;
@ -1406,8 +1409,9 @@ void btc_hh_cb_handler(btc_msg_t *msg)
// [boblane]
if (p_dev->local_vup) {
p_dev->local_vup = false;
#if BTC_HID_REMOVE_DEVICE_BONDING
BTA_DmRemoveDevice(p_dev->bd_addr, BT_TRANSPORT_BR_EDR);
} else {
#endif
btc_hh_remove_device(p_dev->bd_addr);
}
param.unplug.status = p_data->dev_status.status;

View File

@ -102,6 +102,13 @@
#define UC_BT_HID_DEVICE_ENABLED FALSE
#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)
#ifdef CONFIG_BT_CLASSIC_BQB_ENABLED
#define UC_BT_CLASSIC_BQB_ENABLED CONFIG_BT_CLASSIC_BQB_ENABLED

View File

@ -168,6 +168,10 @@
#define BTC_HD_INCLUDED TRUE
#endif /* UC_BT_HID_DEVICE_ENABLED */
#if UC_BT_HID_REMOVE_DEVICE_BONDING_ENABLED
#define BTC_HID_REMOVE_DEVICE_BONDING TRUE
#endif
#endif /* UC_BT_CLASSIC_ENABLED */
/* This is set to enable use of GAP L2CAP connections. */
@ -404,6 +408,10 @@
#define BTC_HD_INCLUDED FALSE
#endif
#ifndef BTC_HID_REMOVE_DEVICE_BONDING
#define BTC_HID_REMOVE_DEVICE_BONDING FALSE
#endif
#ifndef SBC_DEC_INCLUDED
#define SBC_DEC_INCLUDED FALSE
#endif