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