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

This commit is contained in:
linruihao
2025-02-17 11:42:33 +08:00
parent 6150ea9a43
commit 0c95b541e8
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
config BT_GOEPC_ENABLED config BT_GOEPC_ENABLED
bool bool
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 OBEX_INCLUDED #ifndef OBEX_INCLUDED
#define OBEX_INCLUDED TRUE #define OBEX_INCLUDED TRUE
@@ -423,6 +427,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