1 /*
2  * SPDX-FileCopyrightText: 2017-2021 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <stdint.h>
8 #include <string.h>
9 
10 #include "esp_err.h"
11 
12 #include "btc_ble_mesh_ble.h"
13 #include "esp_ble_mesh_ble_api.h"
14 
15 #if CONFIG_BLE_MESH_BLE_COEX_SUPPORT
esp_ble_mesh_register_ble_callback(esp_ble_mesh_ble_cb_t callback)16 esp_err_t esp_ble_mesh_register_ble_callback(esp_ble_mesh_ble_cb_t callback)
17 {
18     ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
19 
20     return (btc_profile_cb_set(BTC_PID_BLE_MESH_BLE_COEX, callback) == 0 ? ESP_OK : ESP_FAIL);
21 }
22 #endif /* CONFIG_BLE_MESH_BLE_COEX_SUPPORT */
23 
24 #if CONFIG_BLE_MESH_SUPPORT_BLE_ADV
esp_ble_mesh_start_ble_advertising(const esp_ble_mesh_ble_adv_param_t * param,const esp_ble_mesh_ble_adv_data_t * data)25 esp_err_t esp_ble_mesh_start_ble_advertising(const esp_ble_mesh_ble_adv_param_t *param,
26                                              const esp_ble_mesh_ble_adv_data_t *data)
27 {
28     btc_ble_mesh_ble_args_t arg = {0};
29     btc_msg_t msg = {0};
30 
31     if (param == NULL) {
32         return ESP_ERR_INVALID_ARG;
33     }
34 
35     ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
36 
37     msg.sig = BTC_SIG_API_CALL;
38     msg.pid = BTC_PID_BLE_MESH_BLE_COEX;
39     msg.act = BTC_BLE_MESH_ACT_START_BLE_ADV;
40 
41     memcpy(&arg.start_ble_adv.param, param, sizeof(esp_ble_mesh_ble_adv_param_t));
42     if (data) {
43         memcpy(&arg.start_ble_adv.data, data, sizeof(esp_ble_mesh_ble_adv_data_t));
44     }
45 
46     return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_mesh_ble_args_t), NULL, NULL)
47             == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
48 }
49 
esp_ble_mesh_stop_ble_advertising(uint8_t index)50 esp_err_t esp_ble_mesh_stop_ble_advertising(uint8_t index)
51 {
52     btc_ble_mesh_ble_args_t arg = {0};
53     btc_msg_t msg = {0};
54 
55     if (index >= CONFIG_BLE_MESH_BLE_ADV_BUF_COUNT) {
56         return ESP_ERR_INVALID_ARG;
57     }
58 
59     ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
60 
61     msg.sig = BTC_SIG_API_CALL;
62     msg.pid = BTC_PID_BLE_MESH_BLE_COEX;
63     msg.act = BTC_BLE_MESH_ACT_STOP_BLE_ADV;
64 
65     arg.stop_ble_adv.index = index;
66 
67     return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_mesh_ble_args_t), NULL, NULL)
68             == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
69 }
70 #endif /* CONFIG_BLE_MESH_SUPPORT_BLE_ADV */
71 
72 #if CONFIG_BLE_MESH_SUPPORT_BLE_SCAN
esp_ble_mesh_start_ble_scanning(esp_ble_mesh_ble_scan_param_t * param)73 esp_err_t esp_ble_mesh_start_ble_scanning(esp_ble_mesh_ble_scan_param_t *param)
74 {
75     btc_ble_mesh_ble_args_t arg = {0};
76     btc_msg_t msg = {0};
77 
78     ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
79 
80     msg.sig = BTC_SIG_API_CALL;
81     msg.pid = BTC_PID_BLE_MESH_BLE_COEX;
82     msg.act = BTC_BLE_MESH_ACT_START_BLE_SCAN;
83 
84     return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_mesh_ble_args_t), NULL, NULL)
85             == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
86 }
87 
esp_ble_mesh_stop_ble_scanning(void)88 esp_err_t esp_ble_mesh_stop_ble_scanning(void)
89 {
90     btc_ble_mesh_ble_args_t arg = {0};
91     btc_msg_t msg = {0};
92 
93     ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
94 
95     msg.sig = BTC_SIG_API_CALL;
96     msg.pid = BTC_PID_BLE_MESH_BLE_COEX;
97     msg.act = BTC_BLE_MESH_ACT_STOP_BLE_SCAN;
98 
99     return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_mesh_ble_args_t), NULL, NULL)
100             == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
101 }
102 #endif /* CONFIG_BLE_MESH_SUPPORT_BLE_SCAN */
103