mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 12:14:32 +02:00
fix(ble_mesh): fixed issue with recv ntf before ccc done
This commit is contained in:
@@ -2153,8 +2153,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;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2017-2024 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
|
||||||
*/
|
*/
|
||||||
@@ -31,7 +31,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 __attribute__((packed)) {
|
enum __attribute__((packed)) {
|
||||||
CLI_NONE,
|
CLI_NONE,
|
||||||
CLI_PROV,
|
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 = bt_mesh_conn_ref(conn);
|
||||||
server->conn_type = CLI_NONE;
|
server->conn_type = CLI_NONE;
|
||||||
|
memcpy(&server->addr, addr, sizeof(bt_mesh_addr_t));
|
||||||
net_buf_simple_reset(&server->buf);
|
net_buf_simple_reset(&server->buf);
|
||||||
|
|
||||||
#if CONFIG_BLE_MESH_RPR_SRV && CONFIG_BLE_MESH_PB_GATT
|
#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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CONFIG_BLE_MESH_BQB_TEST
|
||||||
|
/* notify maybe received first */
|
||||||
|
if (server->conn_type == CLI_PROXY) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -641,6 +648,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 == 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) {
|
if (server->conn_type == CLI_PROXY) {
|
||||||
return proxy_recv(conn, NULL, data, len, 0, 0);
|
return proxy_recv(conn, NULL, data, len, 0, 0);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user