From f4dfd427250f45e42d7922f4270c4ba96c9fc879 Mon Sep 17 00:00:00 2001 From: zhiweijian Date: Tue, 6 Jan 2026 16:01:22 +0800 Subject: [PATCH] fix(ble/bluedroid): Fixed bluedroid host get white list size error --- .../host/bluedroid/api/include/api/esp_gap_ble_api.h | 1 + .../bt/host/bluedroid/stack/btm/btm_ble_bgconn.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h b/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h index ab818604fc..01c2be6b21 100644 --- a/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h +++ b/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h @@ -3088,6 +3088,7 @@ esp_err_t esp_ble_gap_clear_whitelist(void); /** * @brief Get the whitelist size in the controller +* Note: This API returns a constant value indicating the maximum number of whitelists supported by the controller * * @param[out] length: the white list length. * @return diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_bgconn.c b/components/bt/host/bluedroid/stack/btm/btm_ble_bgconn.c index 82bbcf1c3b..452d3b3a1a 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_bgconn.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_bgconn.c @@ -464,7 +464,15 @@ void btm_ble_add_2_white_list_complete(UINT8 status) BTM_TRACE_EVENT("%s status=%d", __func__, status); tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; if (status == HCI_SUCCESS) { - --btm_cb.ble_ctr_cb.white_list_avail_size; + // --btm_cb.ble_ctr_cb.white_list_avail_size; + /* + According to the latest Bluetooth spec: + If the device is already in the Filter Accept List, the Controller should not add the device + to the Filter Accept List again and should return success. + The host cannot obtain the controller as the actual remaining white list size unless the host + also maintains a white list + Keep consistent behavior with the NimBLE host stack + */ } // add whitelist complete callback if (p_cb->update_wl_cb) @@ -487,7 +495,7 @@ void btm_ble_remove_from_white_list_complete(UINT8 *p, UINT16 evt_len) UNUSED(evt_len); BTM_TRACE_EVENT ("%s status=%d", __func__, *p); if (*p == HCI_SUCCESS) { - ++btm_cb.ble_ctr_cb.white_list_avail_size; + // ++btm_cb.ble_ctr_cb.white_list_avail_size; } if (p_cb->update_wl_cb) {