1 /*
2  * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef __BTC_GAP_BT_H__
8 #define __BTC_GAP_BT_H__
9 
10 #include "common/bt_target.h"
11 #include "common/bt_defs.h"
12 #include "esp_bt_defs.h"
13 #include "esp_gap_bt_api.h"
14 #include "btc/btc_task.h"
15 #include "bta/utl.h"
16 
17 #if (BTC_GAP_BT_INCLUDED == TRUE)
18 typedef enum {
19     BTC_GAP_BT_SEARCH_DEVICES_EVT = 0,
20     BTC_GAP_BT_SEARCH_SERVICES_EVT,
21     BTC_GAP_BT_SEARCH_SERVICE_RECORD_EVT,
22     BTC_GAP_BT_AUTH_CMPL_EVT,
23     BTC_GAP_BT_PIN_REQ_EVT,
24     BTC_GAP_BT_CFM_REQ_EVT,
25     BTC_GAP_BT_KEY_NOTIF_EVT,
26     BTC_GAP_BT_KEY_REQ_EVT,
27     BTC_GAP_BT_READ_RSSI_DELTA_EVT,
28     BTC_GAP_BT_CONFIG_EIR_DATA_EVT,
29     BTC_GAP_BT_SET_AFH_CHANNELS_EVT,
30     BTC_GAP_BT_READ_REMOTE_NAME_EVT,
31     BTC_GAP_BT_MODE_CHG_EVT,
32     BTC_GAP_BT_REMOVE_BOND_DEV_COMPLETE_EVT,
33     BTC_GAP_BT_QOS_EVT,
34     BTC_GAP_BT_SET_ACL_PKT_TYPES_EVT,
35 }btc_gap_bt_evt_t;
36 
37 typedef enum {
38     BTC_GAP_BT_ACT_SET_SCAN_MODE = 0,
39     BTC_GAP_BT_ACT_START_DISCOVERY,
40     BTC_GAP_BT_ACT_CANCEL_DISCOVERY,
41     BTC_GAP_BT_ACT_GET_REMOTE_SERVICES,
42     BTC_GAP_BT_ACT_GET_REMOTE_SERVICE_RECORD,
43     BTC_GAP_BT_ACT_SET_COD,
44     BTC_GAP_BT_ACT_READ_RSSI_DELTA,
45     BTC_GAP_BT_ACT_REMOVE_BOND_DEVICE,
46     BTC_GAP_BT_ACT_SET_PIN_TYPE,
47     BTC_GAP_BT_ACT_PIN_REPLY,
48     BTC_GAP_BT_ACT_SET_SECURITY_PARAM,
49     BTC_GAP_BT_ACT_PASSKEY_REPLY,
50     BTC_GAP_BT_ACT_CONFIRM_REPLY,
51     BTC_GAP_BT_ACT_CONFIG_EIR,
52     BTC_GAP_BT_ACT_SET_AFH_CHANNELS,
53     BTC_GAP_BT_ACT_READ_REMOTE_NAME,
54     BTC_GAP_BT_ACT_SET_QOS,
55     BTC_GAP_BT_ACT_SET_ACL_PKT_TYPES,
56 } btc_gap_bt_act_t;
57 
58 /* btc_bt_gap_args_t */
59 typedef union {
60     // BTC_BT_GAP_ACT_SET_SCAN_MODE,
61     struct set_bt_scan_mode_args {
62         esp_bt_connection_mode_t c_mode;
63         esp_bt_discovery_mode_t d_mode;
64     } set_scan_mode;
65 
66     // BTC_GAP_BT_ACT_START_DISCOVERY
67     struct start_disc_args {
68         esp_bt_inq_mode_t mode;
69         uint8_t inq_len;
70         uint8_t num_rsps;
71     } start_disc;
72 
73     // BTC_GAP_BT_ACT_GET_REMOTE_SERVICES
74     bt_bdaddr_t bda;
75 
76     // BTC_GAP_BT_ACT_GET_REMOTE_SERVICE_RECORD
77     struct get_rmt_srv_rcd_args {
78         bt_bdaddr_t bda;
79         esp_bt_uuid_t uuid;
80     } get_rmt_srv_rcd;
81 
82     // BTC_GAP_BT_ACT_SET_COD
83     struct set_cod_args {
84        esp_bt_cod_t cod;
85        esp_bt_cod_mode_t mode;
86     } set_cod;
87 
88     //BTC_GAP_BT_ACT_READ_RSSI_DELTA,
89     struct bt_read_rssi_delta_args {
90         bt_bdaddr_t bda;
91     } read_rssi_delta;
92 
93     // BTC_GAP_BT_ACT_REMOVE_BOND_DEVICE
94     struct rm_bond_device_args {
95        bt_bdaddr_t bda;
96     } rm_bond_device;
97 
98     // BTC_GAP_BT_ACT_SET_PIN_TYPE
99     struct set_pin_type_args {
100         esp_bt_pin_type_t pin_type;
101         uint8_t pin_code_len;
102         esp_bt_pin_code_t pin_code;
103     } set_pin_type;
104 
105     // BTC_GAP_BT_ACT_PIN_REPLY
106     struct pin_reply_args {
107         bt_bdaddr_t bda;
108         bool accept;
109         uint8_t pin_code_len;
110         esp_bt_pin_code_t pin_code;
111     } pin_reply;
112 
113     // BTC_GAP_BT_ACT_SET_SECURITY_PARAM
114     struct set_sec_param_args {
115         esp_bt_sp_param_t param_type;
116         uint8_t len;
117         uint8_t *value;
118     } set_security_param;
119 
120     // BTC_GAP_BT_ACT_PASSKEY_REPLY
121     struct passkey_reply_args {
122        bt_bdaddr_t bda;
123        bool accept;
124        uint32_t passkey;
125     } passkey_reply;
126 
127     // BTC_GAP_BT_ACT_CONFIRM_REPLY
128     struct confirm_reply_args {
129        bt_bdaddr_t bda;
130        bool accept;
131     } confirm_reply;
132 
133     // BTC_GAP_BT_ACT_CONFIG_EIR
134     struct config_eir_args {
135        esp_bt_eir_data_t eir_data;
136     } config_eir;
137 
138     // BTC_GAP_BT_ACT_SET_AFH_CHANNELS
139     struct set_afh_channels_args {
140        esp_bt_gap_afh_channels channels;
141     } set_afh_channels;
142 
143     // BTC_GAP_BT_ACT_READ_REMOTE_NAME
144     bt_bdaddr_t rmt_name_bda;
145 
146     // BTC_GAP_BT_ACT_SET_QOS
147     struct set_qos_args {
148         bt_bdaddr_t bda;
149         uint32_t t_poll;
150     } set_qos;
151 
152     // BTC_GAP_BT_ACT_SET_ACL_PKT_TYPES
153     struct set_acl_pkt_types_args {
154         bt_bdaddr_t bda;
155         uint16_t pkt_types;
156     } set_acl_pkt_types;
157 
158 } btc_gap_bt_args_t;
159 
160 void btc_gap_bt_call_handler(btc_msg_t *msg);
161 void btc_gap_bt_cb_handler(btc_msg_t *msg);
162 void btc_gap_bt_arg_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src);
163 void btc_gap_bt_arg_deep_free(btc_msg_t *msg);
164 void btc_gap_bt_busy_level_updated(uint8_t bl_flags);
165 
166 esp_err_t btc_gap_bt_get_cod(esp_bt_cod_t *cod);
167 #endif /* #if BTC_GAP_BT_INCLUDED */
168 
169 #endif /* __BTC_GAP_BT_H__ */
170