1 /*
2  * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef __ESP_BT_DEFS_H__
8 #define __ESP_BT_DEFS_H__
9 
10 #include <stdint.h>
11 #include <stdbool.h>
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 #define ESP_BLUEDROID_STATUS_CHECK(status)           \
18     if (esp_bluedroid_get_status() != (status)) {    \
19         return ESP_ERR_INVALID_STATE;                \
20     }
21 
22 #define ESP_BT_STATUS_BASE_FOR_HCI_ERR  0X0100  /* base for converting HCI error code to ESP status */
23 
24 /* relate to BT_STATUS_xxx in bt_def.h */
25 /// Status Return Value
26 typedef enum {
27     ESP_BT_STATUS_SUCCESS       = 0,            /* relate to BT_STATUS_SUCCESS in bt_def.h */
28     ESP_BT_STATUS_FAIL,                         /* relate to BT_STATUS_FAIL in bt_def.h */
29     ESP_BT_STATUS_NOT_READY,                    /* relate to BT_STATUS_NOT_READY in bt_def.h */
30     ESP_BT_STATUS_NOMEM,                        /* relate to BT_STATUS_NOMEM in bt_def.h */
31     ESP_BT_STATUS_BUSY,                         /* relate to BT_STATUS_BUSY in bt_def.h */
32     ESP_BT_STATUS_DONE          = 5,            /* relate to BT_STATUS_DONE in bt_def.h */
33     ESP_BT_STATUS_UNSUPPORTED,                  /* relate to BT_STATUS_UNSUPPORTED in bt_def.h */
34     ESP_BT_STATUS_PARM_INVALID,                 /* relate to BT_STATUS_PARM_INVALID in bt_def.h */
35     ESP_BT_STATUS_UNHANDLED,                    /* relate to BT_STATUS_UNHANDLED in bt_def.h */
36     ESP_BT_STATUS_AUTH_FAILURE,                 /* relate to BT_STATUS_AUTH_FAILURE in bt_def.h */
37     ESP_BT_STATUS_RMT_DEV_DOWN  = 10,           /* relate to BT_STATUS_RMT_DEV_DOWN in bt_def.h */
38     ESP_BT_STATUS_AUTH_REJECTED,                /* relate to BT_STATUS_AUTH_REJECTED in bt_def.h */
39     ESP_BT_STATUS_INVALID_STATIC_RAND_ADDR,     /* relate to BT_STATUS_INVALID_STATIC_RAND_ADDR in bt_def.h */
40     ESP_BT_STATUS_PENDING,                      /* relate to BT_STATUS_PENDING in bt_def.h */
41     ESP_BT_STATUS_UNACCEPT_CONN_INTERVAL,       /* relate to BT_UNACCEPT_CONN_INTERVAL in bt_def.h */
42     ESP_BT_STATUS_PARAM_OUT_OF_RANGE,           /* relate to BT_PARAM_OUT_OF_RANGE in bt_def.h */
43     ESP_BT_STATUS_TIMEOUT,                      /* relate to BT_STATUS_TIMEOUT in bt_def.h */
44     ESP_BT_STATUS_PEER_LE_DATA_LEN_UNSUPPORTED, /* relate to BTM_PEER_LE_DATA_LEN_UNSUPPORTED in stack/btm_api.h */
45     ESP_BT_STATUS_CONTROL_LE_DATA_LEN_UNSUPPORTED,/* relate to BTM_CONTROL_LE_DATA_LEN_UNSUPPORTED in stack/btm_api.h */
46     ESP_BT_STATUS_ERR_ILLEGAL_PARAMETER_FMT,    /* relate to HCI_ERR_ILLEGAL_PARAMETER_FMT in stack/hcidefs.h */
47     ESP_BT_STATUS_MEMORY_FULL   = 20,           /* relate to BT_STATUS_MEMORY_FULL in bt_def.h */
48     ESP_BT_STATUS_EIR_TOO_LARGE,                /* relate to BT_STATUS_EIR_TOO_LARGE in bt_def.h */
49     ESP_BT_STATUS_HCI_SUCCESS   = ESP_BT_STATUS_BASE_FOR_HCI_ERR,
50     ESP_BT_STATUS_HCI_ILLEGAL_COMMAND,
51     ESP_BT_STATUS_HCI_NO_CONNECTION,
52     ESP_BT_STATUS_HCI_HW_FAILURE,
53     ESP_BT_STATUS_HCI_PAGE_TIMEOUT,
54     ESP_BT_STATUS_HCI_AUTH_FAILURE,
55     ESP_BT_STATUS_HCI_KEY_MISSING,
56     ESP_BT_STATUS_HCI_MEMORY_FULL,
57     ESP_BT_STATUS_HCI_CONNECTION_TOUT,
58     ESP_BT_STATUS_HCI_MAX_NUM_OF_CONNECTIONS,
59     ESP_BT_STATUS_HCI_MAX_NUM_OF_SCOS,
60     ESP_BT_STATUS_HCI_CONNECTION_EXISTS,
61     ESP_BT_STATUS_HCI_COMMAND_DISALLOWED,
62     ESP_BT_STATUS_HCI_HOST_REJECT_RESOURCES,
63     ESP_BT_STATUS_HCI_HOST_REJECT_SECURITY,
64     ESP_BT_STATUS_HCI_HOST_REJECT_DEVICE,
65     ESP_BT_STATUS_HCI_HOST_TIMEOUT,
66     ESP_BT_STATUS_HCI_UNSUPPORTED_VALUE,
67     ESP_BT_STATUS_HCI_ILLEGAL_PARAMETER_FMT,
68     ESP_BT_STATUS_HCI_PEER_USER,
69     ESP_BT_STATUS_HCI_PEER_LOW_RESOURCES,
70     ESP_BT_STATUS_HCI_PEER_POWER_OFF,
71     ESP_BT_STATUS_HCI_CONN_CAUSE_LOCAL_HOST,
72     ESP_BT_STATUS_HCI_REPEATED_ATTEMPTS,
73     ESP_BT_STATUS_HCI_PAIRING_NOT_ALLOWED,
74     ESP_BT_STATUS_HCI_UNKNOWN_LMP_PDU,
75     ESP_BT_STATUS_HCI_UNSUPPORTED_REM_FEATURE,
76     ESP_BT_STATUS_HCI_SCO_OFFSET_REJECTED,
77     ESP_BT_STATUS_HCI_SCO_INTERVAL_REJECTED,
78     ESP_BT_STATUS_HCI_SCO_AIR_MODE,
79     ESP_BT_STATUS_HCI_INVALID_LMP_PARAM,
80     ESP_BT_STATUS_HCI_UNSPECIFIED,
81     ESP_BT_STATUS_HCI_UNSUPPORTED_LMP_PARAMETERS,
82     ESP_BT_STATUS_HCI_ROLE_CHANGE_NOT_ALLOWED,
83     ESP_BT_STATUS_HCI_LMP_RESPONSE_TIMEOUT,
84     ESP_BT_STATUS_HCI_LMP_ERR_TRANS_COLLISION,
85     ESP_BT_STATUS_HCI_LMP_PDU_NOT_ALLOWED,
86     ESP_BT_STATUS_HCI_ENCRY_MODE_NOT_ACCEPTABLE,
87     ESP_BT_STATUS_HCI_UNIT_KEY_USED,
88     ESP_BT_STATUS_HCI_QOS_NOT_SUPPORTED,
89     ESP_BT_STATUS_HCI_INSTANT_PASSED,
90     ESP_BT_STATUS_HCI_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED,
91     ESP_BT_STATUS_HCI_DIFF_TRANSACTION_COLLISION,
92     ESP_BT_STATUS_HCI_UNDEFINED_0x2B,
93     ESP_BT_STATUS_HCI_QOS_UNACCEPTABLE_PARAM,
94     ESP_BT_STATUS_HCI_QOS_REJECTED,
95     ESP_BT_STATUS_HCI_CHAN_CLASSIF_NOT_SUPPORTED,
96     ESP_BT_STATUS_HCI_INSUFFCIENT_SECURITY,
97     ESP_BT_STATUS_HCI_PARAM_OUT_OF_RANGE,
98     ESP_BT_STATUS_HCI_UNDEFINED_0x31,
99     ESP_BT_STATUS_HCI_ROLE_SWITCH_PENDING,
100     ESP_BT_STATUS_HCI_UNDEFINED_0x33,
101     ESP_BT_STATUS_HCI_RESERVED_SLOT_VIOLATION,
102     ESP_BT_STATUS_HCI_ROLE_SWITCH_FAILED,
103     ESP_BT_STATUS_HCI_INQ_RSP_DATA_TOO_LARGE,
104     ESP_BT_STATUS_HCI_SIMPLE_PAIRING_NOT_SUPPORTED,
105     ESP_BT_STATUS_HCI_HOST_BUSY_PAIRING,
106     ESP_BT_STATUS_HCI_REJ_NO_SUITABLE_CHANNEL,
107     ESP_BT_STATUS_HCI_CONTROLLER_BUSY,
108     ESP_BT_STATUS_HCI_UNACCEPT_CONN_INTERVAL,
109     ESP_BT_STATUS_HCI_DIRECTED_ADVERTISING_TIMEOUT,
110     ESP_BT_STATUS_HCI_CONN_TOUT_DUE_TO_MIC_FAILURE,
111     ESP_BT_STATUS_HCI_CONN_FAILED_ESTABLISHMENT,
112     ESP_BT_STATUS_HCI_MAC_CONNECTION_FAILED,
113     ESP_BT_STATUS_HCI_CCA_REJECTED,
114     ESP_BT_STATUS_HCI_TYPE0_SUBMAP_NOT_DEFINED,
115     ESP_BT_STATUS_HCI_UNKNOWN_ADV_ID,
116     ESP_BT_STATUS_HCI_LIMIT_REACHED,
117     ESP_BT_STATUS_HCI_OPT_CANCEL_BY_HOST,
118     ESP_BT_STATUS_HCI_PKT_TOO_LONG,
119     ESP_BT_STATUS_HCI_TOO_LATE,
120     ESP_BT_STATUS_HCI_TOO_EARLY,
121 } esp_bt_status_t;
122 
123 
124 /*Define the bt octet 16 bit size*/
125 #define ESP_BT_OCTET16_LEN    16
126 typedef uint8_t esp_bt_octet16_t[ESP_BT_OCTET16_LEN];   /* octet array: size 16 */
127 
128 #define ESP_BT_OCTET8_LEN    8
129 typedef uint8_t esp_bt_octet8_t[ESP_BT_OCTET8_LEN];   /* octet array: size 8 */
130 
131 typedef uint8_t esp_link_key[ESP_BT_OCTET16_LEN];      /* Link Key */
132 
133 /// Default GATT interface id
134 #define ESP_DEFAULT_GATT_IF             0xff
135 
136 #if BLE_HIGH_DUTY_ADV_INTERVAL
137 #define ESP_BLE_PRIM_ADV_INT_MIN            0x000008     /*!< Minimum advertising interval for undirected and low duty cycle directed advertising */
138 #else
139 #define ESP_BLE_PRIM_ADV_INT_MIN            0x000020     /*!< Minimum advertising interval for undirected and low duty cycle directed advertising */
140 #endif
141 #define ESP_BLE_PRIM_ADV_INT_MAX            0xFFFFFF     /*!< Maximum advertising interval for undirected and low duty cycle directed advertising */
142 #define ESP_BLE_CONN_INT_MIN                0x0006       /*!< relate to BTM_BLE_CONN_INT_MIN in stack/btm_ble_api.h */
143 #define ESP_BLE_CONN_INT_MAX                0x0C80       /*!< relate to BTM_BLE_CONN_INT_MAX in stack/btm_ble_api.h */
144 #define ESP_BLE_CONN_LATENCY_MAX            499          /*!< relate to ESP_BLE_CONN_LATENCY_MAX in stack/btm_ble_api.h */
145 #define ESP_BLE_CONN_SUP_TOUT_MIN           0x000A       /*!< relate to BTM_BLE_CONN_SUP_TOUT_MIN in stack/btm_ble_api.h */
146 #define ESP_BLE_CONN_SUP_TOUT_MAX           0x0C80       /*!< relate to ESP_BLE_CONN_SUP_TOUT_MAX in stack/btm_ble_api.h */
147 
148 #define ESP_BLE_PHY_1M_PREF_MASK       (1 << 0) /*!< The Host prefers use the LE1M transmitter or receiver PHY */
149 #define ESP_BLE_PHY_2M_PREF_MASK       (1 << 1) /*!< The Host prefers use the LE2M transmitter or receiver PHY */
150 #define ESP_BLE_PHY_CODED_PREF_MASK    (1 << 2) /*!< The Host prefers use the LE CODED transmitter or receiver PHY */
151 typedef uint8_t esp_ble_phy_mask_t;
152 
153 /**
154 * @brief create connection parameters
155 */
156 typedef struct {
157     uint16_t scan_interval;       /*!< Initial scan interval, in units of 0.625ms, the range is 0x0004(2.5ms) to 0xFFFF(10.24s). */
158     uint16_t scan_window;         /*!< Initial scan window, in units of 0.625ms, the range is 0x0004(2.5ms) to 0xFFFF(10.24s). */
159     uint16_t interval_min;        /*!< Minimum connection interval, in units of 1.25ms, the range is 0x0006(7.5ms) to 0x0C80(4s). */
160     uint16_t interval_max;        /*!< Maximum connection interval, in units of 1.25ms, the range is 0x0006(7.5ms) to 0x0C80(4s). */
161     uint16_t latency;             /*!< Connection latency, the range is 0x0000(0) to 0x01F3(499). */
162     uint16_t supervision_timeout; /*!< Connection supervision timeout, in units of 10ms, the range is from 0x000A(100ms) to 0x0C80(32s). */
163     uint16_t min_ce_len;          /*!< Minimum connection event length, in units of 0.625ms, setting to 0 for no preferred parameters. */
164     uint16_t max_ce_len;          /*!< Maximum connection event length, in units of 0.625ms, setting to 0 for no preferred parameters. */
165 } esp_ble_conn_params_t;
166 
167 /// Check the param is valid or not
168 #define ESP_BLE_IS_VALID_PARAM(x, min, max)  (((x) >= (min) && (x) <= (max)) )
169 
170 /// UUID type
171 typedef struct {
172 #define ESP_UUID_LEN_16     2
173 #define ESP_UUID_LEN_32     4
174 #define ESP_UUID_LEN_128    16
175     uint16_t len;							/*!< UUID length, 16bit, 32bit or 128bit */
176     union {
177         uint16_t    uuid16;                 /*!< 16bit UUID */
178         uint32_t    uuid32;                 /*!< 32bit UUID */
179         uint8_t     uuid128[ESP_UUID_LEN_128]; /*!< 128bit UUID */
180     } uuid;									/*!< UUID */
181 } __attribute__((packed)) esp_bt_uuid_t;
182 
183 /// Bluetooth device type
184 typedef enum {
185     ESP_BT_DEVICE_TYPE_BREDR   = 0x01,
186     ESP_BT_DEVICE_TYPE_BLE     = 0x02,
187     ESP_BT_DEVICE_TYPE_DUMO    = 0x03,
188 } esp_bt_dev_type_t;
189 
190 /// Bluetooth address length
191 #define ESP_BD_ADDR_LEN     6
192 
193 /// Bluetooth peer irk
194 #define ESP_PEER_IRK_LEN    16
195 
196 /// Bluetooth device address
197 typedef uint8_t esp_bd_addr_t[ESP_BD_ADDR_LEN];
198 
199 /// BLE device address type
200 typedef enum {
201     BLE_ADDR_TYPE_PUBLIC        = 0x00,     /*!< Public Device Address */
202     BLE_ADDR_TYPE_RANDOM        = 0x01,     /*!< Random Device Address. To set this address, use the function esp_ble_gap_set_rand_addr(esp_bd_addr_t rand_addr) */
203     BLE_ADDR_TYPE_RPA_PUBLIC    = 0x02,     /*!< Resolvable Private Address (RPA) with public identity address */
204     BLE_ADDR_TYPE_RPA_RANDOM    = 0x03,     /*!< Resolvable Private Address (RPA) with random identity address. To set this address, use the function esp_ble_gap_set_rand_addr(esp_bd_addr_t rand_addr) */
205 } esp_ble_addr_type_t;
206 
207 /// white list address type
208 typedef enum {
209     BLE_WL_ADDR_TYPE_PUBLIC        = 0x00,
210     BLE_WL_ADDR_TYPE_RANDOM        = 0x01,
211 } esp_ble_wl_addr_type_t;
212 
213 /// Used to exchange the encryption key in the init key & response key
214 #define ESP_BLE_ENC_KEY_MASK    (1 << 0)            /* relate to BTM_BLE_ENC_KEY_MASK in stack/btm_api.h */
215 /// Used to exchange the IRK key in the init key & response key
216 #define ESP_BLE_ID_KEY_MASK     (1 << 1)            /* relate to BTM_BLE_ID_KEY_MASK in stack/btm_api.h */
217 /// Used to exchange the CSRK key in the init key & response key
218 #define ESP_BLE_CSR_KEY_MASK    (1 << 2)            /* relate to BTM_BLE_CSR_KEY_MASK in stack/btm_api.h */
219 /// Used to exchange the link key(this key just used in the BLE & BR/EDR coexist mode) in the init key & response key
220 #define ESP_BLE_LINK_KEY_MASK   (1 << 3)            /* relate to BTM_BLE_LINK_KEY_MASK in stack/btm_api.h */
221 typedef uint8_t esp_ble_key_mask_t;            /* the key mask type */
222 
223 /// Minimum of the application id
224 #define ESP_APP_ID_MIN  0x0000
225 /// Maximum of the application id
226 #define ESP_APP_ID_MAX  0x7fff
227 
228 #define ESP_BD_ADDR_STR         "%02x:%02x:%02x:%02x:%02x:%02x"
229 #define ESP_BD_ADDR_HEX(addr)   addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]
230 
231 #define ESP_BLE_ADV_NAME_LEN_MAX 29
232 
233 #ifdef __cplusplus
234 }
235 #endif
236 
237 #endif     /* __ESP_BT_DEFS_H__ */
238