From 6f0fa9f127190347269ce45bf502a6d927e20432 Mon Sep 17 00:00:00 2001 From: luoxu Date: Wed, 28 May 2025 17:21:26 +0800 Subject: [PATCH] fix(ble_mesh): fixed issue with recv ntf before ccc done --- .../core/bluedroid_host/adapter.c | 4 +++- .../bt/esp_ble_mesh/core/proxy_client.c | 21 +++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/components/bt/esp_ble_mesh/core/bluedroid_host/adapter.c b/components/bt/esp_ble_mesh/core/bluedroid_host/adapter.c index 2480494181..2f3b3d351b 100644 --- a/components/bt/esp_ble_mesh/core/bluedroid_host/adapter.c +++ b/components/bt/esp_ble_mesh/core/bluedroid_host/adapter.c @@ -1599,8 +1599,10 @@ static void bt_mesh_bta_gattc_cb(tBTA_GATTC_EVT event, tBTA_GATTC *p_data) for (i = 0; i < ARRAY_SIZE(bt_mesh_gattc_info); i++) { if (bt_mesh_gattc_info[i].conn.handle == handle) { if (bt_mesh_gattc_info[i].wr_desc_done == false) { - BT_DBG("Receive notification before finishing to write ccc"); + BT_WARN("Receive notification before finishing to write ccc"); +#if !CONFIG_BLE_MESH_BQB_TEST return; +#endif } conn = &bt_mesh_gattc_info[i].conn; diff --git a/components/bt/esp_ble_mesh/core/proxy_client.c b/components/bt/esp_ble_mesh/core/proxy_client.c index 016db7f2ce..d89c5ff1fd 100644 --- a/components/bt/esp_ble_mesh/core/proxy_client.c +++ b/components/bt/esp_ble_mesh/core/proxy_client.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2017-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2017-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -31,7 +31,7 @@ static struct bt_mesh_proxy_server { struct bt_mesh_conn *conn; - + bt_mesh_addr_t addr; enum __attribute__((packed)) { CLI_NONE, CLI_PROV, @@ -465,6 +465,7 @@ static void proxy_connected(bt_mesh_addr_t *addr, struct bt_mesh_conn *conn, int server->conn = bt_mesh_conn_ref(conn); server->conn_type = CLI_NONE; + memcpy(&server->addr, addr, sizeof(bt_mesh_addr_t)); net_buf_simple_reset(&server->buf); #if CONFIG_BLE_MESH_RPR_SRV && CONFIG_BLE_MESH_PB_GATT @@ -629,6 +630,12 @@ static ssize_t proxy_write_ccc(bt_mesh_addr_t *addr, struct bt_mesh_conn *conn) return 0; } +#if CONFIG_BLE_MESH_BQB_TEST + /* notify maybe received first */ + if (server->conn_type == CLI_PROXY) { + return 0; + } +#endif return -EINVAL; } @@ -641,6 +648,16 @@ static ssize_t proxy_recv_ntf(struct bt_mesh_conn *conn, uint8_t *data, uint16_t return -ENOTCONN; } +#if CONFIG_BLE_MESH_BQB_TEST + /* update conn type if notify received before write ccc */ + if (server->conn_type == CLI_NONE) { + server->conn_type = CLI_PROXY; + if (proxy_client_connect_cb) { + proxy_client_connect_cb(&server->addr, server - servers, server->net_idx); + } + } +#endif + if (server->conn_type == CLI_PROXY) { return proxy_recv(conn, NULL, data, len, 0, 0); }