Merge branch 'feat/ble_mesh_micellaneous_fix_v5.2' into 'release/v5.2'

Feat/ble mesh micellaneous fix (v5.2)

See merge request espressif/esp-idf!39635
This commit is contained in:
Island
2025-06-18 10:17:04 +08:00
5 changed files with 29 additions and 9 deletions

View File

@@ -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++) { 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
*/ */
@@ -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);
} }

View File

@@ -1341,7 +1341,7 @@ int bt_mesh_proxy_server_segment_send(struct bt_mesh_conn *conn, uint8_t type,
net_buf_simple_pull(msg, mtu); net_buf_simple_pull(msg, mtu);
while (msg->len) { while (msg->len) {
if (msg->len + 1 < mtu) { if (msg->len + 1 <= mtu) {
net_buf_simple_push_u8(msg, BLE_MESH_PROXY_PDU_HDR(BLE_MESH_PROXY_SAR_LAST, type)); net_buf_simple_push_u8(msg, BLE_MESH_PROXY_PDU_HDR(BLE_MESH_PROXY_SAR_LAST, type));
proxy_send(conn, msg->data, msg->len); proxy_send(conn, msg->data, msg->len);
break; break;

View File

@@ -2,7 +2,7 @@
/* /*
* SPDX-FileCopyrightText: 2017 Intel Corporation * SPDX-FileCopyrightText: 2017 Intel Corporation
* SPDX-FileContributor: 2020-2024 Espressif Systems (Shanghai) CO LTD * SPDX-FileContributor: 2020-2025 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@@ -86,13 +86,14 @@ int bt_mesh_unprov_dev_info_query(uint8_t uuid[16], uint8_t addr[6],
{ {
uint8_t idx = 0; uint8_t idx = 0;
uint8_t cnt = 0; uint8_t cnt = 0;
uint8_t pair_num = unprov_dev_info_fifo.pair_num;
if (uuid == NULL || addr == NULL) { if (uuid == NULL && addr == NULL) {
BT_WARN("No available information to query"); BT_WARN("No available information to query");
return -1; return -1;
} }
while (cnt < unprov_dev_info_fifo.pair_num) { while (cnt < pair_num) {
idx = (cnt + unprov_dev_info_fifo.start_idx) % BLE_MESH_STORE_UNPROV_INFO_MAX_NUM; idx = (cnt + unprov_dev_info_fifo.start_idx) % BLE_MESH_STORE_UNPROV_INFO_MAX_NUM;
if (query_type & BLE_MESH_STORE_UNPROV_INFO_QUERY_TYPE_UUID) { if (query_type & BLE_MESH_STORE_UNPROV_INFO_QUERY_TYPE_UUID) {
if (!memcmp(unprov_dev_info_fifo.info[idx].addr, addr, 6)) { if (!memcmp(unprov_dev_info_fifo.info[idx].addr, addr, 6)) {
@@ -118,7 +119,7 @@ int bt_mesh_unprov_dev_info_query(uint8_t uuid[16], uint8_t addr[6],
cnt++; cnt++;
} }
if (cnt == unprov_dev_info_fifo.pair_num) { if (cnt == pair_num) {
return -1; return -1;
} }