From ab73b3fd8e34da2991cfcb9c4f9edd36aaeecb00 Mon Sep 17 00:00:00 2001 From: lly Date: Mon, 18 May 2020 10:39:51 +0800 Subject: [PATCH 1/4] ble_mesh: Add init flag for friend init/deinit Since bt_mesh_friend_init() will only be invoked when a device is provisioned or Provisioner is enabled, so we add a flag to indicate if the friend functionality is initialized in case deinit before initialization. --- components/bt/esp_ble_mesh/mesh_core/friend.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/components/bt/esp_ble_mesh/mesh_core/friend.c b/components/bt/esp_ble_mesh/mesh_core/friend.c index 615ef6f8e6..bf78bb5ad6 100644 --- a/components/bt/esp_ble_mesh/mesh_core/friend.c +++ b/components/bt/esp_ble_mesh/mesh_core/friend.c @@ -67,6 +67,8 @@ enum { static void (*friend_cb)(bool establish, u16_t lpn_addr, u8_t reason); +static bool friend_init = false; + static struct bt_mesh_subnet *friend_subnet_get(u16_t net_idx) { struct bt_mesh_subnet *sub = NULL; @@ -1243,6 +1245,11 @@ int bt_mesh_friend_init(void) { int i; + if (friend_init == true) { + BT_WARN("%s, Already", __func__); + return -EALREADY; + } + for (i = 0; i < ARRAY_SIZE(bt_mesh.frnd); i++) { struct bt_mesh_friend *frnd = &bt_mesh.frnd[i]; int j; @@ -1259,6 +1266,8 @@ int bt_mesh_friend_init(void) } } + friend_init = true; + return 0; } @@ -1266,6 +1275,11 @@ int bt_mesh_friend_deinit(void) { int i; + if (friend_init == false) { + BT_WARN("%s, Already", __func__); + return -EALREADY; + } + bt_mesh_friend_clear_net_idx(BLE_MESH_KEY_ANY); for (i = 0; i < ARRAY_SIZE(bt_mesh.frnd); i++) { @@ -1280,6 +1294,8 @@ int bt_mesh_friend_deinit(void) bt_mesh_unref_buf_from_pool(&friend_buf_pool); memset(adv_pool, 0, sizeof(adv_pool)); + friend_init = false; + return 0; } From f02d095ff1fd57ba687d2c7a94bba473feed468c Mon Sep 17 00:00:00 2001 From: lly Date: Mon, 18 May 2020 15:21:47 +0800 Subject: [PATCH 2/4] ble_mesh: Init device name during proxy server init Device name will be reset when deinit mesh stack. If not initializing device name during the next mesh stack init, it will fail to set the device name when using bluedroid. --- components/bt/esp_ble_mesh/mesh_core/proxy_server.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/bt/esp_ble_mesh/mesh_core/proxy_server.c b/components/bt/esp_ble_mesh/mesh_core/proxy_server.c index 4305a3ebb2..be4703c108 100644 --- a/components/bt/esp_ble_mesh/mesh_core/proxy_server.c +++ b/components/bt/esp_ble_mesh/mesh_core/proxy_server.c @@ -109,7 +109,7 @@ static enum { MESH_GATT_PROXY, } gatt_svc = MESH_GATT_NONE; -static char device_name[DEVICE_NAME_SIZE + 1] = "ESP-BLE-MESH"; +static char device_name[DEVICE_NAME_SIZE + 1]; int bt_mesh_set_device_name(const char *name) { @@ -1416,6 +1416,7 @@ int bt_mesh_proxy_init(void) bt_mesh_gatts_conn_cb_register(&conn_callbacks); + strncpy(device_name, "ESP-BLE-MESH", DEVICE_NAME_SIZE); return bt_mesh_gatts_set_local_device_name(device_name); } From 52fa4c7f96b5dd60c731a0a4d067db4be107ac56 Mon Sep 17 00:00:00 2001 From: lly Date: Tue, 19 May 2020 13:35:18 +0800 Subject: [PATCH 3/4] ble_mesh: Add missing sdkconfig.h --- components/bt/esp_ble_mesh/mesh_common/include/mesh_buf.h | 1 + components/bt/esp_ble_mesh/mesh_core/include/mesh_bearer_adapt.h | 1 + 2 files changed, 2 insertions(+) diff --git a/components/bt/esp_ble_mesh/mesh_common/include/mesh_buf.h b/components/bt/esp_ble_mesh/mesh_common/include/mesh_buf.h index bcc7b513a0..32c12817ef 100644 --- a/components/bt/esp_ble_mesh/mesh_common/include/mesh_buf.h +++ b/components/bt/esp_ble_mesh/mesh_common/include/mesh_buf.h @@ -11,6 +11,7 @@ #ifndef _BLE_MESH_BUF_H_ #define _BLE_MESH_BUF_H_ +#include "sdkconfig.h" #include "mesh_slist.h" #include "mesh_compiler.h" diff --git a/components/bt/esp_ble_mesh/mesh_core/include/mesh_bearer_adapt.h b/components/bt/esp_ble_mesh/mesh_core/include/mesh_bearer_adapt.h index e9fbeb54ed..ffaf1c9e7b 100644 --- a/components/bt/esp_ble_mesh/mesh_core/include/mesh_bearer_adapt.h +++ b/components/bt/esp_ble_mesh/mesh_core/include/mesh_bearer_adapt.h @@ -10,6 +10,7 @@ #define _BLE_MESH_BEARER_ADRPT_H_ #include +#include "sdkconfig.h" #include "mesh_types.h" #include "mesh_util.h" #include "mesh_uuid.h" From 715cb64288f72ee010e8b0e7e70b8d2c6b3b7844 Mon Sep 17 00:00:00 2001 From: lly Date: Tue, 19 May 2020 14:13:39 +0800 Subject: [PATCH 4/4] ble_mesh: Clear two more vars during proxy server deinit --- components/bt/esp_ble_mesh/mesh_core/proxy_server.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/bt/esp_ble_mesh/mesh_core/proxy_server.c b/components/bt/esp_ble_mesh/mesh_core/proxy_server.c index be4703c108..5f1ef084f5 100644 --- a/components/bt/esp_ble_mesh/mesh_core/proxy_server.c +++ b/components/bt/esp_ble_mesh/mesh_core/proxy_server.c @@ -1429,6 +1429,7 @@ int bt_mesh_proxy_deinit(void) #if defined(CONFIG_BLE_MESH_GATT_PROXY_SERVER) bt_mesh_gatts_service_deregister(&proxy_svc); + next_idx = 0; #endif #if defined(CONFIG_BLE_MESH_PB_GATT) @@ -1445,6 +1446,7 @@ int bt_mesh_proxy_deinit(void) memset(device_name, 0, sizeof(device_name)); bt_mesh_gatts_conn_cb_deregister(); + conn_count = 0; return 0; }