From e06a5587c7465314cb877cfa599dd2e937213e2d Mon Sep 17 00:00:00 2001 From: lly Date: Mon, 26 Oct 2020 16:04:34 +0800 Subject: [PATCH] ble_mesh: stack: Add a btc file for ble coex functions Previously if starting/stopping BLE advertising when BLE Mesh is enabled, the corresponding events will be notified through the callback registered by esp_ble_mesh_register_prov_callback(). With this commit, the func esp_ble_mesh_register_ble_callback() needs to be invoked for resgitering the callback used for BLE coexistence related functionalities (i.e. ADV/SCAN). --- components/bt/CMakeLists.txt | 1 + components/bt/common/btc/core/btc_task.c | 4 + .../bt/common/btc/include/btc/btc_task.h | 1 + components/bt/esp_ble_mesh/Kconfig.in | 40 ++--- .../api/core/esp_ble_mesh_ble_api.c | 37 ++--- .../api/core/include/esp_ble_mesh_ble_api.h | 76 +++++++++- .../bt/esp_ble_mesh/api/esp_ble_mesh_defs.h | 46 ------ .../bt/esp_ble_mesh/btc/btc_ble_mesh_ble.c | 140 ++++++++++++++++++ .../bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c | 20 --- .../btc/include/btc_ble_mesh_ble.h | 50 +++++++ .../btc/include/btc_ble_mesh_prov.h | 9 -- 11 files changed, 313 insertions(+), 111 deletions(-) create mode 100644 components/bt/esp_ble_mesh/btc/btc_ble_mesh_ble.c create mode 100644 components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_ble.h diff --git a/components/bt/CMakeLists.txt b/components/bt/CMakeLists.txt index 974a517169..ed96570a20 100644 --- a/components/bt/CMakeLists.txt +++ b/components/bt/CMakeLists.txt @@ -337,6 +337,7 @@ if(CONFIG_BT_ENABLED) "esp_ble_mesh/api/models/esp_ble_mesh_lighting_model_api.c" "esp_ble_mesh/api/models/esp_ble_mesh_sensor_model_api.c" "esp_ble_mesh/api/models/esp_ble_mesh_time_scene_model_api.c" + "esp_ble_mesh/btc/btc_ble_mesh_ble.c" "esp_ble_mesh/btc/btc_ble_mesh_config_model.c" "esp_ble_mesh/btc/btc_ble_mesh_generic_model.c" "esp_ble_mesh/btc/btc_ble_mesh_health_model.c" diff --git a/components/bt/common/btc/core/btc_task.c b/components/bt/common/btc/core/btc_task.c index 0f816fb7d2..8d5287f987 100644 --- a/components/bt/common/btc/core/btc_task.c +++ b/components/bt/common/btc/core/btc_task.c @@ -57,6 +57,7 @@ #endif #if CONFIG_BLE_MESH +#include "btc_ble_mesh_ble.h" #include "btc_ble_mesh_prov.h" #include "btc_ble_mesh_health_model.h" #include "btc_ble_mesh_config_model.h" @@ -158,6 +159,9 @@ static const btc_func_t profile_tab[BTC_PID_NUM] = { #if CONFIG_BLE_MESH_TIME_SCENE_SERVER [BTC_PID_TIME_SCENE_SERVER] = {NULL, btc_ble_mesh_time_scene_server_cb_handler}, #endif /* CONFIG_BLE_MESH_TIME_SCENE_SERVER */ +#if CONFIG_BLE_MESH_SUPPORT_BLE_ADV + [BTC_PID_BLE_MESH_BLE_COEX] = {btc_ble_mesh_ble_call_handler, btc_ble_mesh_ble_cb_handler }, +#endif /* CONFIG_BLE_MESH_SUPPORT_BLE_ADV */ #endif /* #if CONFIG_BLE_MESH */ }; diff --git a/components/bt/common/btc/include/btc/btc_task.h b/components/bt/common/btc/include/btc/btc_task.h index 7222399729..cc9382590a 100644 --- a/components/bt/common/btc/include/btc/btc_task.h +++ b/components/bt/common/btc/include/btc/btc_task.h @@ -87,6 +87,7 @@ typedef enum { BTC_PID_LIGHTING_SERVER, BTC_PID_SENSOR_SERVER, BTC_PID_TIME_SCENE_SERVER, + BTC_PID_BLE_MESH_BLE_COEX, #endif /* CONFIG_BLE_MESH */ BTC_PID_NUM, } btc_pid_t; //btc profile id diff --git a/components/bt/esp_ble_mesh/Kconfig.in b/components/bt/esp_ble_mesh/Kconfig.in index d63985d146..a1946c6cc7 100644 --- a/components/bt/esp_ble_mesh/Kconfig.in +++ b/components/bt/esp_ble_mesh/Kconfig.in @@ -85,6 +85,28 @@ if BLE_MESH If enabled, users can use the function esp_ble_mesh_deinit() to de-initialize the whole BLE Mesh stack. + menu "BLE Mesh and BLE coexistence support" + + config BLE_MESH_SUPPORT_BLE_ADV + bool "Support sending normal BLE advertising packets" + default n + help + When selected, users can send normal BLE advertising packets + with specific API. + + if BLE_MESH_SUPPORT_BLE_ADV + + config BLE_MESH_BLE_ADV_BUF_COUNT + int "Number of advertising buffers for BLE advertising packets" + default 3 + range 1 255 + help + Number of advertising buffers for BLE packets available. + + endif # BLE_MESH_SUPPORT_BLE_ADV + + endmenu # BLE Mesh and BLE coexistence support + config BLE_MESH_FAST_PROV bool "Enable BLE Mesh Fast Provisioning" select BLE_MESH_NODE @@ -493,24 +515,6 @@ if BLE_MESH SDU size is 60 bytes, which leaves 56 bytes for application layer data using a 4-byte MIC, or 52 bytes using an 8-byte MIC. - config BLE_MESH_SUPPORT_BLE_ADV - bool "Support sending normal BLE advertising packets" - default n - help - When selected, users can send normal BLE advertising packets - with specific API. - - if BLE_MESH_SUPPORT_BLE_ADV - - config BLE_MESH_BLE_ADV_BUF_COUNT - int "Number of advertising buffers for BLE advertising packets" - default 3 - range 1 255 - help - Number of advertising buffers for BLE packets available. - - endif # BLE_MESH_SUPPORT_BLE_ADV - config BLE_MESH_IVU_DIVIDER int "Divider for IV Update state refresh timer" default 4 diff --git a/components/bt/esp_ble_mesh/api/core/esp_ble_mesh_ble_api.c b/components/bt/esp_ble_mesh/api/core/esp_ble_mesh_ble_api.c index 1ba2dcd578..8039d6162e 100644 --- a/components/bt/esp_ble_mesh/api/core/esp_ble_mesh_ble_api.c +++ b/components/bt/esp_ble_mesh/api/core/esp_ble_mesh_ble_api.c @@ -1,4 +1,4 @@ -// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD +// Copyright 2017-2020 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,19 +15,23 @@ #include #include -#include "btc/btc_manage.h" - #include "esp_err.h" -#include "btc_ble_mesh_prov.h" -#include "esp_ble_mesh_defs.h" +#include "btc_ble_mesh_ble.h" +#include "esp_ble_mesh_ble_api.h" #if CONFIG_BLE_MESH_SUPPORT_BLE_ADV +esp_err_t esp_ble_mesh_register_ble_callback(esp_ble_mesh_ble_cb_t callback) +{ + ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED); + + return (btc_profile_cb_set(BTC_PID_BLE_MESH_BLE_COEX, callback) == 0 ? ESP_OK : ESP_FAIL); +} esp_err_t esp_ble_mesh_start_ble_advertising(const esp_ble_mesh_ble_adv_param_t *param, const esp_ble_mesh_ble_adv_data_t *data) { - btc_ble_mesh_prov_args_t arg = {0}; + btc_ble_mesh_ble_args_t arg = {0}; btc_msg_t msg = {0}; if (param == NULL) { @@ -37,21 +41,21 @@ esp_err_t esp_ble_mesh_start_ble_advertising(const esp_ble_mesh_ble_adv_param_t ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED); msg.sig = BTC_SIG_API_CALL; - msg.pid = BTC_PID_PROV; - msg.act = BTC_BLE_MESH_ACT_START_BLE_ADVERTISING; + msg.pid = BTC_PID_BLE_MESH_BLE_COEX; + msg.act = BTC_BLE_MESH_ACT_START_BLE_ADV; - memcpy(&arg.start_ble_advertising.param, param, sizeof(esp_ble_mesh_ble_adv_param_t)); + memcpy(&arg.start_ble_adv.param, param, sizeof(esp_ble_mesh_ble_adv_param_t)); if (data) { - memcpy(&arg.start_ble_advertising.data, data, sizeof(esp_ble_mesh_ble_adv_data_t)); + memcpy(&arg.start_ble_adv.data, data, sizeof(esp_ble_mesh_ble_adv_data_t)); } - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_mesh_prov_args_t), NULL) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_mesh_ble_args_t), NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } esp_err_t esp_ble_mesh_stop_ble_advertising(uint8_t index) { - btc_ble_mesh_prov_args_t arg = {0}; + btc_ble_mesh_ble_args_t arg = {0}; btc_msg_t msg = {0}; if (index >= CONFIG_BLE_MESH_BLE_ADV_BUF_COUNT) { @@ -61,13 +65,12 @@ esp_err_t esp_ble_mesh_stop_ble_advertising(uint8_t index) ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED); msg.sig = BTC_SIG_API_CALL; - msg.pid = BTC_PID_PROV; - msg.act = BTC_BLE_MESH_ACT_STOP_BLE_ADVERTISING; + msg.pid = BTC_PID_BLE_MESH_BLE_COEX; + msg.act = BTC_BLE_MESH_ACT_STOP_BLE_ADV; - arg.stop_ble_advertising.index = index; + arg.stop_ble_adv.index = index; - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_mesh_prov_args_t), NULL) + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_mesh_ble_args_t), NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } - #endif /* CONFIG_BLE_MESH_SUPPORT_BLE_ADV */ diff --git a/components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_ble_api.h b/components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_ble_api.h index 23ebca66b6..f36c2bd067 100644 --- a/components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_ble_api.h +++ b/components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_ble_api.h @@ -1,4 +1,4 @@ -// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD +// Copyright 2017-2020 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,6 +21,80 @@ extern "C" { #endif +/** This enum value is the event of BLE operations */ +typedef enum { + ESP_BLE_MESH_START_BLE_ADVERTISING_COMP_EVT, /*!< Start BLE advertising completion event */ + ESP_BLE_MESH_STOP_BLE_ADVERTISING_COMP_EVT, /*!< Stop BLE advertising completion event */ + ESP_BLE_MESH_BLE_EVT_MAX, +} esp_ble_mesh_ble_cb_event_t; + +/** BLE operation callback parameters */ +typedef union { + /** + * @brief ESP_BLE_MESH_START_BLE_ADVERTISING_COMP_EVT + */ + struct { + int err_code; /*!< Indicate the result of starting BLE advertising */ + uint8_t index; /*!< Index of the BLE advertising */ + } start_ble_advertising_comp; /*!< Event parameters of ESP_BLE_MESH_START_BLE_ADVERTISING_COMP_EVT */ + /** + * @brief ESP_BLE_MESH_STOP_BLE_ADVERTISING_COMP_EVT + */ + struct { + int err_code; /*!< Indicate the result of stopping BLE advertising */ + uint8_t index; /*!< Index of the BLE advertising */ + } stop_ble_advertising_comp; /*!< Event parameters of ESP_BLE_MESH_STOP_BLE_ADVERTISING_COMP_EVT */ +} esp_ble_mesh_ble_cb_param_t; + +/** + * @brief BLE scanning callback function type + * + * @param event: BLE scanning callback event type + * @param param: BLE scanning callback parameter + */ +typedef void (* esp_ble_mesh_ble_cb_t)(esp_ble_mesh_ble_cb_event_t event, + esp_ble_mesh_ble_cb_param_t *param); + +/** + * @brief Register BLE scanning callback. + * + * @param[in] callback: Pointer to the BLE scaning callback function. + * + * @return ESP_OK on success or error code otherwise. + * + */ +esp_err_t esp_ble_mesh_register_ble_callback(esp_ble_mesh_ble_cb_t callback); + +/** Count for sending BLE advertising packet infinitely */ +#define ESP_BLE_MESH_BLE_ADV_INFINITE 0xFFFF + +/*!< This enum value is the priority of BLE advertising packet */ +typedef enum { + ESP_BLE_MESH_BLE_ADV_PRIO_LOW, + ESP_BLE_MESH_BLE_ADV_PRIO_HIGH, +} esp_ble_mesh_ble_adv_priority_t; + +/** Context of BLE advertising parameters. */ +typedef struct { + uint16_t interval; /*!< BLE advertising interval */ + uint8_t adv_type; /*!< BLE advertising type */ + uint8_t own_addr_type; /*!< Own address type */ + uint8_t peer_addr_type; /*!< Peer address type */ + uint8_t peer_addr[BD_ADDR_LEN]; /*!< Peer address */ + uint16_t duration; /*!< Duration is milliseconds */ + uint16_t period; /*!< Period in milliseconds */ + uint16_t count; /*!< Number of advertising duration */ + uint8_t priority:2; /*!< Priority of BLE advertising packet */ +} esp_ble_mesh_ble_adv_param_t; + +/** Context of BLE advertising data. */ +typedef struct { + uint8_t adv_data_len; /*!< Advertising data length */ + uint8_t adv_data[31]; /*!< Advertising data */ + uint8_t scan_rsp_data_len; /*!< Scan response data length */ + uint8_t scan_rsp_data[31]; /*!< Scan response data */ +} esp_ble_mesh_ble_adv_data_t; + /** * @brief This function is called to start BLE advertising with the corresponding data * and parameters while BLE Mesh is working at the same time. diff --git a/components/bt/esp_ble_mesh/api/esp_ble_mesh_defs.h b/components/bt/esp_ble_mesh/api/esp_ble_mesh_defs.h index 3318278522..ea02c53b5d 100644 --- a/components/bt/esp_ble_mesh/api/esp_ble_mesh_defs.h +++ b/components/bt/esp_ble_mesh/api/esp_ble_mesh_defs.h @@ -777,36 +777,6 @@ typedef enum { PROXY_FILTER_BLACKLIST, } esp_ble_mesh_proxy_filter_type_t; -/** Count for sending BLE advertising packet infinitely */ -#define ESP_BLE_MESH_BLE_ADV_INFINITE 0xFFFF - -/*!< This enum value is the priority of BLE advertising packet */ -typedef enum { - ESP_BLE_MESH_BLE_ADV_PRIO_LOW, - ESP_BLE_MESH_BLE_ADV_PRIO_HIGH, -} esp_ble_mesh_ble_adv_priority_t; - -/** Context of BLE advertising parameters. */ -typedef struct { - uint16_t interval; /*!< BLE advertising interval */ - uint8_t adv_type; /*!< BLE advertising type */ - uint8_t own_addr_type; /*!< Own address type */ - uint8_t peer_addr_type; /*!< Peer address type */ - uint8_t peer_addr[BD_ADDR_LEN]; /*!< Peer address */ - uint16_t duration; /*!< Duration is milliseconds */ - uint16_t period; /*!< Period in milliseconds */ - uint16_t count; /*!< Number of advertising duration */ - uint8_t priority:2; /*!< Priority of BLE advertising packet */ -} esp_ble_mesh_ble_adv_param_t; - -/** Context of BLE advertising data. */ -typedef struct { - uint8_t adv_data_len; /*!< Advertising data length */ - uint8_t adv_data[31]; /*!< Advertising data */ - uint8_t scan_rsp_data_len; /*!< Scan response data length */ - uint8_t scan_rsp_data[31]; /*!< Scan response data */ -} esp_ble_mesh_ble_adv_data_t; - /*!< Provisioner heartbeat filter type */ #define ESP_BLE_MESH_HEARTBEAT_FILTER_ACCEPTLIST 0x00 #define ESP_BLE_MESH_HEARTBEAT_FILTER_REJECTLIST 0x01 @@ -902,8 +872,6 @@ typedef enum { ESP_BLE_MESH_PROXY_CLIENT_SET_FILTER_TYPE_COMP_EVT, /*!< Proxy Client set filter type completion event */ ESP_BLE_MESH_PROXY_CLIENT_ADD_FILTER_ADDR_COMP_EVT, /*!< Proxy Client add filter address completion event */ ESP_BLE_MESH_PROXY_CLIENT_REMOVE_FILTER_ADDR_COMP_EVT, /*!< Proxy Client remove filter address completion event */ - ESP_BLE_MESH_START_BLE_ADVERTISING_COMP_EVT, /*!< Start BLE advertising completion event */ - ESP_BLE_MESH_STOP_BLE_ADVERTISING_COMP_EVT, /*!< Stop BLE advertising completion event */ ESP_BLE_MESH_MODEL_SUBSCRIBE_GROUP_ADDR_COMP_EVT, /*!< Local model subscribes group address completion event */ ESP_BLE_MESH_MODEL_UNSUBSCRIBE_GROUP_ADDR_COMP_EVT, /*!< Local model unsubscribes group address completion event */ ESP_BLE_MESH_DEINIT_MESH_COMP_EVT, /*!< De-initialize BLE Mesh stack completion event */ @@ -1486,20 +1454,6 @@ typedef union { uint8_t conn_handle; /*!< Proxy connection handle */ uint16_t net_idx; /*!< Corresponding NetKey Index */ } proxy_client_remove_filter_addr_comp; /*!< Event parameter of ESP_BLE_MESH_PROXY_CLIENT_REMOVE_FILTER_ADDR_COMP_EVT */ - /** - * @brief ESP_BLE_MESH_START_BLE_ADVERTISING_COMP_EVT - */ - struct ble_mesh_start_ble_advertising_comp_param { - int err_code; /*!< Indicate the result of starting BLE advertising */ - uint8_t index; /*!< Index of the BLE advertising */ - } start_ble_advertising_comp; /*!< Event parameter of ESP_BLE_MESH_START_BLE_ADVERTISING_COMP_EVT */ - /** - * @brief ESP_BLE_MESH_STOP_BLE_ADVERTISING_COMP_EVT - */ - struct ble_mesh_stop_ble_advertising_comp_param { - int err_code; /*!< Indicate the result of stopping BLE advertising */ - uint8_t index; /*!< Index of the BLE advertising */ - } stop_ble_advertising_comp; /*!< Event parameter of ESP_BLE_MESH_STOP_BLE_ADVERTISING_COMP_EVT */ /** * @brief ESP_BLE_MESH_MODEL_SUBSCRIBE_GROUP_ADDR_COMP_EVT */ diff --git a/components/bt/esp_ble_mesh/btc/btc_ble_mesh_ble.c b/components/bt/esp_ble_mesh/btc/btc_ble_mesh_ble.c new file mode 100644 index 0000000000..c9cf8f5a23 --- /dev/null +++ b/components/bt/esp_ble_mesh/btc/btc_ble_mesh_ble.c @@ -0,0 +1,140 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "btc_ble_mesh_ble.h" +#include "adv.h" +#include "mesh_bearer_adapt.h" +#include "esp_ble_mesh_ble_api.h" + +#if CONFIG_BLE_MESH_SUPPORT_BLE_ADV + +static void btc_ble_mesh_ble_copy_req_data(btc_msg_t *msg, void *p_dst, void *p_src) +{ + esp_ble_mesh_ble_cb_param_t *p_dst_data = (esp_ble_mesh_ble_cb_param_t *)p_dst; + esp_ble_mesh_ble_cb_param_t *p_src_data = (esp_ble_mesh_ble_cb_param_t *)p_src; + + if (!msg || !p_src_data || !p_dst_data) { + BT_ERR("%s, Invalid parameter", __func__); + return; + } + + switch (msg->act) { + default: + break; + } +} + +static void btc_ble_mesh_ble_free_req_data(btc_msg_t *msg) +{ + if (!msg || !msg->arg) { + BT_ERR("%s, Invalid parameter", __func__); + return; + } + + switch (msg->act) { + default: + break; + } +} + +static void btc_ble_mesh_ble_callback(esp_ble_mesh_ble_cb_param_t *cb_params, uint8_t act) +{ + btc_msg_t msg = {0}; + + /* If corresponding callback is not registered, event will not be posted. */ + if (!btc_profile_cb_get(BTC_PID_BLE_MESH_BLE_COEX)) { + return; + } + + msg.sig = BTC_SIG_API_CB; + msg.pid = BTC_PID_BLE_MESH_BLE_COEX; + msg.act = act; + + btc_transfer_context(&msg, cb_params, sizeof(esp_ble_mesh_ble_cb_param_t), + btc_ble_mesh_ble_copy_req_data); +} + +void btc_ble_mesh_ble_call_handler(btc_msg_t *msg) +{ + esp_ble_mesh_ble_cb_param_t param = {0}; + btc_ble_mesh_ble_args_t *arg = NULL; + + if (!msg || !msg->arg) { + BT_ERR("%s, Invalid parameter", __func__); + return; + } + + arg = (btc_ble_mesh_ble_args_t *)msg->arg; + + switch (msg->act) { +#if CONFIG_BLE_MESH_SUPPORT_BLE_ADV + case BTC_BLE_MESH_ACT_START_BLE_ADV: { + struct bt_mesh_ble_adv_param *set = (struct bt_mesh_ble_adv_param *)&arg->start_ble_adv.param; + struct bt_mesh_ble_adv_data *data = NULL; + if (arg->start_ble_adv.data.adv_data_len || arg->start_ble_adv.data.scan_rsp_data_len) { + data = (struct bt_mesh_ble_adv_data *)&arg->start_ble_adv.data; + } + + param.start_ble_advertising_comp.err_code = + bt_mesh_start_ble_advertising(set, data, ¶m.start_ble_advertising_comp.index); + + btc_ble_mesh_ble_callback(¶m, ESP_BLE_MESH_START_BLE_ADVERTISING_COMP_EVT); + break; + } + case BTC_BLE_MESH_ACT_STOP_BLE_ADV: + param.stop_ble_advertising_comp.index = arg->stop_ble_adv.index; + param.stop_ble_advertising_comp.err_code = + bt_mesh_stop_ble_advertising(arg->stop_ble_adv.index); + + btc_ble_mesh_ble_callback(¶m, ESP_BLE_MESH_STOP_BLE_ADVERTISING_COMP_EVT); + break; +#endif /* CONFIG_BLE_MESH_SUPPORT_BLE_ADV */ + default: + return; + } +} + +static inline void btc_ble_mesh_ble_cb_to_app(esp_ble_mesh_ble_cb_event_t event, + esp_ble_mesh_ble_cb_param_t *param) +{ + esp_ble_mesh_ble_cb_t btc_ble_mesh_cb = (esp_ble_mesh_ble_cb_t)btc_profile_cb_get(BTC_PID_BLE_MESH_BLE_COEX); + if (btc_ble_mesh_cb) { + btc_ble_mesh_cb(event, param); + } +} + +void btc_ble_mesh_ble_cb_handler(btc_msg_t *msg) +{ + esp_ble_mesh_ble_cb_param_t *param = NULL; + + if (!msg) { + BT_ERR("%s, Invalid parameter", __func__); + return; + } + + param = (esp_ble_mesh_ble_cb_param_t *)msg->arg; + + if (msg->act < ESP_BLE_MESH_BLE_EVT_MAX) { + btc_ble_mesh_ble_cb_to_app(msg->act, param); + } else { + BT_ERR("%s, Unknown act %d", __func__, msg->act); + } + + btc_ble_mesh_ble_free_req_data(msg); +} + +#endif /* CONFIG_BLE_MESH_SUPPORT_BLE_ADV */ diff --git a/components/bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c b/components/bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c index 19e0732f31..6fe3da8b7e 100644 --- a/components/bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c +++ b/components/bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c @@ -2209,26 +2209,6 @@ void btc_ble_mesh_prov_call_handler(btc_msg_t *msg) break; } #endif /* CONFIG_BLE_MESH_GATT_PROXY_CLIENT */ -#if CONFIG_BLE_MESH_SUPPORT_BLE_ADV - case BTC_BLE_MESH_ACT_START_BLE_ADVERTISING: { - struct bt_mesh_ble_adv_param *set = (struct bt_mesh_ble_adv_param *)&arg->start_ble_advertising.param; - struct bt_mesh_ble_adv_data *data = NULL; - if (arg->start_ble_advertising.data.adv_data_len || - arg->start_ble_advertising.data.scan_rsp_data_len) { - data = (struct bt_mesh_ble_adv_data *)&arg->start_ble_advertising.data; - } - act = ESP_BLE_MESH_START_BLE_ADVERTISING_COMP_EVT; - param.start_ble_advertising_comp.err_code = - bt_mesh_start_ble_advertising(set, data, ¶m.start_ble_advertising_comp.index); - break; - } - case BTC_BLE_MESH_ACT_STOP_BLE_ADVERTISING: - act = ESP_BLE_MESH_STOP_BLE_ADVERTISING_COMP_EVT; - param.stop_ble_advertising_comp.index = arg->stop_ble_advertising.index; - param.stop_ble_advertising_comp.err_code = - bt_mesh_stop_ble_advertising(arg->stop_ble_advertising.index); - break; -#endif /* CONFIG_BLE_MESH_SUPPORT_BLE_ADV */ case BTC_BLE_MESH_ACT_MODEL_SUBSCRIBE_GROUP_ADDR: act = ESP_BLE_MESH_MODEL_SUBSCRIBE_GROUP_ADDR_COMP_EVT; param.model_sub_group_addr_comp.element_addr = arg->model_sub_group_addr.element_addr; diff --git a/components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_ble.h b/components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_ble.h new file mode 100644 index 0000000000..2fa785ef87 --- /dev/null +++ b/components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_ble.h @@ -0,0 +1,50 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _BTC_BLE_MESH_BLE_H_ +#define _BTC_BLE_MESH_BLE_H_ + +#include +#include "btc/btc_manage.h" +#include "mesh_bearer_adapt.h" +#include "esp_ble_mesh_ble_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef union { + struct { + esp_ble_mesh_ble_adv_param_t param; + esp_ble_mesh_ble_adv_data_t data; + } start_ble_adv; + struct { + uint8_t index; + } stop_ble_adv; +} btc_ble_mesh_ble_args_t; + +typedef enum { + BTC_BLE_MESH_ACT_START_BLE_ADV, + BTC_BLE_MESH_ACT_STOP_BLE_ADV, +} btc_ble_mesh_ble_act_t; + +void btc_ble_mesh_ble_call_handler(btc_msg_t *msg); + +void btc_ble_mesh_ble_cb_handler(btc_msg_t *msg); + +#ifdef __cplusplus +} +#endif + +#endif /* _BTC_BLE_MESH_BLE_H_ */ diff --git a/components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_prov.h b/components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_prov.h index ac47a4ab82..86aa74796e 100644 --- a/components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_prov.h +++ b/components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_prov.h @@ -83,8 +83,6 @@ typedef enum { BTC_BLE_MESH_ACT_PROXY_CLIENT_SET_FILTER_TYPE, BTC_BLE_MESH_ACT_PROXY_CLIENT_ADD_FILTER_ADDR, BTC_BLE_MESH_ACT_PROXY_CLIENT_REMOVE_FILTER_ADDR, - BTC_BLE_MESH_ACT_START_BLE_ADVERTISING, - BTC_BLE_MESH_ACT_STOP_BLE_ADVERTISING, BTC_BLE_MESH_ACT_MODEL_SUBSCRIBE_GROUP_ADDR, BTC_BLE_MESH_ACT_MODEL_UNSUBSCRIBE_GROUP_ADDR, BTC_BLE_MESH_ACT_DEINIT_MESH, @@ -305,13 +303,6 @@ typedef union { uint16_t addr_num; uint16_t *addr; } proxy_client_remove_filter_addr; - struct ble_mesh_start_ble_advertising_args { - esp_ble_mesh_ble_adv_param_t param; - esp_ble_mesh_ble_adv_data_t data; - } start_ble_advertising; - struct ble_mesh_stop_ble_advertising_args { - uint8_t index; - } stop_ble_advertising; struct ble_mesh_model_sub_group_addr_args { uint16_t element_addr; uint16_t company_id;