fix(ble_mesh): fixed issue with recv ntf before ccc done

This commit is contained in:
luoxu
2025-05-28 17:21:26 +08:00
parent 91ee3fab5a
commit c71bba7f9c
2 changed files with 22 additions and 2 deletions

View File

@@ -1576,8 +1576,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++) { 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].conn.handle == handle) {
if (bt_mesh_gattc_info[i].wr_desc_done == false) { 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; return;
#endif
} }
conn = &bt_mesh_gattc_info[i].conn; conn = &bt_mesh_gattc_info[i].conn;

View File

@@ -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 * SPDX-License-Identifier: Apache-2.0
*/ */
@@ -37,6 +37,7 @@
static struct bt_mesh_proxy_server { static struct bt_mesh_proxy_server {
struct bt_mesh_conn *conn; struct bt_mesh_conn *conn;
bt_mesh_addr_t addr;
enum __packed { enum __packed {
NONE, NONE,
PROV, PROV,
@@ -411,6 +412,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 = bt_mesh_conn_ref(conn);
server->conn_type = NONE; server->conn_type = NONE;
memcpy(&server->addr, addr, sizeof(bt_mesh_addr_t));
net_buf_simple_reset(&server->buf); net_buf_simple_reset(&server->buf);
bt_mesh_gattc_exchange_mtu(id); bt_mesh_gattc_exchange_mtu(id);
@@ -544,6 +546,12 @@ static ssize_t proxy_write_ccc(bt_mesh_addr_t *addr, struct bt_mesh_conn *conn)
return 0; return 0;
} }
#if CONFIG_BLE_MESH_BQB_TEST
/* notify maybe received first */
if (server->conn_type == PROXY) {
return 0;
}
#endif
return -EINVAL; return -EINVAL;
} }
@@ -556,6 +564,16 @@ static ssize_t proxy_recv_ntf(struct bt_mesh_conn *conn, uint8_t *data, uint16_t
return -ENOTCONN; return -ENOTCONN;
} }
#if CONFIG_BLE_MESH_BQB_TEST
/* update conn type if notify received before write ccc */
if (server->conn_type == NONE) {
server->conn_type = PROXY;
if (proxy_client_connect_cb) {
proxy_client_connect_cb(&server->addr, server - servers, server->net_idx);
}
}
#endif
if (server->conn_type == PROXY) { if (server->conn_type == PROXY) {
return proxy_recv(conn, NULL, data, len, 0, 0); return proxy_recv(conn, NULL, data, len, 0, 0);
} }