1 /*
2 * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <string.h>
8
9 #include "esp_bt_main.h"
10 #include "btc/btc_manage.h"
11
12 #include "btc_l2cap.h"
13 #include "esp_l2cap_bt_api.h"
14 #include "common/bt_target.h"
15
16 #if (defined BTC_L2CAP_INCLUDED && BTC_L2CAP_INCLUDED == TRUE)
17
esp_bt_l2cap_register_callback(esp_bt_l2cap_cb_t callback)18 esp_err_t esp_bt_l2cap_register_callback(esp_bt_l2cap_cb_t callback)
19 {
20 ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
21
22 if (callback == NULL) {
23 return ESP_FAIL;
24 }
25
26 btc_profile_cb_set(BTC_PID_L2CAP, callback);
27 return ESP_OK;
28 }
29
esp_bt_l2cap_init(void)30 esp_err_t esp_bt_l2cap_init(void)
31 {
32 btc_msg_t msg;
33 ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
34
35 msg.sig = BTC_SIG_API_CALL;
36 msg.pid = BTC_PID_L2CAP;
37 msg.act = BTC_L2CAP_ACT_INIT;
38
39 return (btc_transfer_context(&msg, NULL, 0, NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
40 }
41
esp_bt_l2cap_deinit(void)42 esp_err_t esp_bt_l2cap_deinit(void)
43 {
44 btc_msg_t msg;
45 ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
46
47 msg.sig = BTC_SIG_API_CALL;
48 msg.pid = BTC_PID_L2CAP;
49 msg.act = BTC_L2CAP_ACT_UNINIT;
50
51 return (btc_transfer_context(&msg, NULL, 0, NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
52 }
53
esp_bt_l2cap_connect(esp_bt_l2cap_cntl_flags_t cntl_flag,uint16_t remote_psm,esp_bd_addr_t peer_bd_addr)54 esp_err_t esp_bt_l2cap_connect(esp_bt_l2cap_cntl_flags_t cntl_flag, uint16_t remote_psm, esp_bd_addr_t peer_bd_addr)
55 {
56 btc_msg_t msg;
57 btc_l2cap_args_t arg;
58 ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
59
60 msg.sig = BTC_SIG_API_CALL;
61 msg.pid = BTC_PID_L2CAP;
62 msg.act = BTC_L2CAP_ACT_CONNECT;
63
64 arg.connect.sec_mask = (cntl_flag & 0xffff);
65 arg.connect.remote_psm = remote_psm;
66 memcpy(arg.connect.peer_bd_addr, peer_bd_addr, ESP_BD_ADDR_LEN);
67
68 return (btc_transfer_context(&msg, &arg, sizeof(btc_l2cap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
69 }
70
esp_bt_l2cap_start_srv(esp_bt_l2cap_cntl_flags_t cntl_flag,uint16_t local_psm)71 esp_err_t esp_bt_l2cap_start_srv(esp_bt_l2cap_cntl_flags_t cntl_flag, uint16_t local_psm)
72 {
73 btc_msg_t msg;
74 btc_l2cap_args_t arg;
75 ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
76
77 msg.sig = BTC_SIG_API_CALL;
78 msg.pid = BTC_PID_L2CAP;
79 msg.act = BTC_L2CAP_ACT_START_SRV;
80
81 arg.start_srv.sec_mask = (cntl_flag & 0xffff);
82 arg.start_srv.local_psm = local_psm;
83
84 return (btc_transfer_context(&msg, &arg, sizeof(btc_l2cap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
85 }
86
esp_bt_l2cap_stop_all_srv(void)87 esp_err_t esp_bt_l2cap_stop_all_srv(void)
88 {
89 btc_msg_t msg;
90 btc_l2cap_args_t arg;
91 ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
92
93 msg.sig = BTC_SIG_API_CALL;
94 msg.pid = BTC_PID_L2CAP;
95 msg.act = BTC_L2CAP_ACT_STOP_SRV;
96
97 arg.stop_srv.psm = BTC_L2CAP_INVALID_PSM;
98
99 return (btc_transfer_context(&msg, &arg, sizeof(btc_l2cap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
100 }
101
esp_bt_l2cap_stop_srv(uint16_t local_psm)102 esp_err_t esp_bt_l2cap_stop_srv(uint16_t local_psm)
103 {
104 btc_msg_t msg;
105 btc_l2cap_args_t arg;
106 ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
107
108 msg.sig = BTC_SIG_API_CALL;
109 msg.pid = BTC_PID_L2CAP;
110 msg.act = BTC_L2CAP_ACT_STOP_SRV;
111
112 arg.stop_srv.psm = local_psm;
113
114 return (btc_transfer_context(&msg, &arg, sizeof(btc_l2cap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
115 }
116
esp_bt_l2cap_vfs_register(void)117 esp_err_t esp_bt_l2cap_vfs_register(void)
118 {
119 ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
120
121 return btc_l2cap_vfs_register();
122 }
123
esp_bt_l2cap_vfs_unregister(void)124 esp_err_t esp_bt_l2cap_vfs_unregister(void)
125 {
126 ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
127
128 return btc_l2cap_vfs_unregister();
129 }
130
131 #endif ///defined BTC_L2CAP_INCLUDED && BTC_L2CAP_INCLUDED == TRUE
132