1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 20 #ifndef H_BLE_HCI_COMMON_ 21 #define H_BLE_HCI_COMMON_ 22 23 #include "ble.h" 24 25 #ifdef __cplusplus 26 extern "C" { 27 #endif 28 29 /* 30 * HCI Command Header 31 * 32 * Comprises the following fields 33 * -> Opcode group field & Opcode command field (2) 34 * -> Parameter Length (1) 35 * Length of all the parameters (does not include any part of the hci 36 * command header 37 */ 38 #define BLE_HCI_CMD_HDR_LEN (3) 39 40 #define BLE_HCI_OPCODE_NOP (0) 41 42 /* Set opcode based on OCF and OGF */ 43 #define BLE_HCI_OP(ogf, ocf) ((ocf) | ((ogf) << 10)) 44 45 /* Get the OGF and OCF from the opcode in the command */ 46 #define BLE_HCI_OGF(opcode) (((opcode) >> 10) & 0x003F) 47 #define BLE_HCI_OCF(opcode) ((opcode) & 0x03FF) 48 49 /* Opcode Group definitions (note: 0x07 not defined in spec) */ 50 #define BLE_HCI_OGF_LINK_CTRL (0x01) 51 #define BLE_HCI_OGF_LINK_POLICY (0x02) 52 #define BLE_HCI_OGF_CTLR_BASEBAND (0x03) 53 #define BLE_HCI_OGF_INFO_PARAMS (0x04) 54 #define BLE_HCI_OGF_STATUS_PARAMS (0x05) 55 #define BLE_HCI_OGF_TESTING (0x06) 56 #define BLE_HCI_OGF_LE (0x08) 57 #define BLE_HCI_OGF_VENDOR (0x3F) 58 59 /* 60 * Number of LE commands. NOTE: this is really just used to size the array 61 * containing the lengths of the LE commands. 62 */ 63 #define BLE_HCI_NUM_LE_CMDS (79) 64 65 /* List of OCF for Link Control commands (OGF=0x01) */ 66 #define BLE_HCI_OCF_DISCONNECT_CMD (0x0006) 67 #define BLE_HCI_OCF_RD_REM_VER_INFO (0x001D) 68 69 /* List of OCF for Controller and Baseband commands (OGF=0x03) */ 70 #define BLE_HCI_OCF_CB_SET_EVENT_MASK (0x0001) 71 #define BLE_HCI_OCF_CB_RESET (0x0003) 72 #define BLE_HCI_OCF_CB_READ_TX_PWR (0x002D) 73 #define BLE_HCI_OCF_CB_SET_CTLR_TO_HOST_FC (0x0031) 74 #define BLE_HCI_OCF_CB_HOST_BUF_SIZE (0x0033) 75 #define BLE_HCI_OCF_CB_HOST_NUM_COMP_PKTS (0x0035) 76 #define BLE_HCI_OCF_CB_SET_EVENT_MASK2 (0x0063) 77 #define BLE_HCI_OCF_CB_RD_AUTH_PYLD_TMO (0x007B) 78 #define BLE_HCI_OCF_CB_WR_AUTH_PYLD_TMO (0x007C) 79 80 /* List of OCF for Info Param commands (OGF=0x04) */ 81 #define BLE_HCI_OCF_IP_RD_LOCAL_VER (0x0001) 82 #define BLE_HCI_OCF_IP_RD_LOC_SUPP_CMD (0x0002) 83 #define BLE_HCI_OCF_IP_RD_LOC_SUPP_FEAT (0x0003) 84 #define BLE_HCI_OCF_IP_RD_BUF_SIZE (0x0005) 85 #define BLE_HCI_OCF_IP_RD_BD_ADDR (0x0009) 86 87 /* List of OCF for Status parameters commands (OGF = 0x05) */ 88 #define BLE_HCI_OCF_RD_RSSI (0x0005) 89 90 /* List of OCF for LE commands (OGF = 0x08) */ 91 #define BLE_HCI_OCF_LE_SET_EVENT_MASK (0x0001) 92 #define BLE_HCI_OCF_LE_RD_BUF_SIZE (0x0002) 93 #define BLE_HCI_OCF_LE_RD_LOC_SUPP_FEAT (0x0003) 94 /* NOTE: 0x0004 is intentionally left undefined */ 95 #define BLE_HCI_OCF_LE_SET_RAND_ADDR (0x0005) 96 #define BLE_HCI_OCF_LE_SET_ADV_PARAMS (0x0006) 97 #define BLE_HCI_OCF_LE_RD_ADV_CHAN_TXPWR (0x0007) 98 #define BLE_HCI_OCF_LE_SET_ADV_DATA (0x0008) 99 #define BLE_HCI_OCF_LE_SET_SCAN_RSP_DATA (0x0009) 100 #define BLE_HCI_OCF_LE_SET_ADV_ENABLE (0x000A) 101 #define BLE_HCI_OCF_LE_SET_SCAN_PARAMS (0x000B) 102 #define BLE_HCI_OCF_LE_SET_SCAN_ENABLE (0x000C) 103 #define BLE_HCI_OCF_LE_CREATE_CONN (0x000D) 104 #define BLE_HCI_OCF_LE_CREATE_CONN_CANCEL (0x000E) 105 #define BLE_HCI_OCF_LE_RD_WHITE_LIST_SIZE (0x000F) 106 #define BLE_HCI_OCF_LE_CLEAR_WHITE_LIST (0x0010) 107 #define BLE_HCI_OCF_LE_ADD_WHITE_LIST (0x0011) 108 #define BLE_HCI_OCF_LE_RMV_WHITE_LIST (0x0012) 109 #define BLE_HCI_OCF_LE_CONN_UPDATE (0x0013) 110 #define BLE_HCI_OCF_LE_SET_HOST_CHAN_CLASS (0x0014) 111 #define BLE_HCI_OCF_LE_RD_CHAN_MAP (0x0015) 112 #define BLE_HCI_OCF_LE_RD_REM_FEAT (0x0016) 113 #define BLE_HCI_OCF_LE_ENCRYPT (0x0017) 114 #define BLE_HCI_OCF_LE_RAND (0x0018) 115 #define BLE_HCI_OCF_LE_START_ENCRYPT (0x0019) 116 #define BLE_HCI_OCF_LE_LT_KEY_REQ_REPLY (0x001A) 117 #define BLE_HCI_OCF_LE_LT_KEY_REQ_NEG_REPLY (0x001B) 118 #define BLE_HCI_OCF_LE_RD_SUPP_STATES (0x001C) 119 #define BLE_HCI_OCF_LE_RX_TEST (0x001D) 120 #define BLE_HCI_OCF_LE_TX_TEST (0x001E) 121 #define BLE_HCI_OCF_LE_TEST_END (0x001F) 122 #define BLE_HCI_OCF_LE_REM_CONN_PARAM_RR (0x0020) 123 #define BLE_HCI_OCF_LE_REM_CONN_PARAM_NRR (0x0021) 124 #define BLE_HCI_OCF_LE_SET_DATA_LEN (0x0022) 125 #define BLE_HCI_OCF_LE_RD_SUGG_DEF_DATA_LEN (0x0023) 126 #define BLE_HCI_OCF_LE_WR_SUGG_DEF_DATA_LEN (0x0024) 127 #define BLE_HCI_OCF_LE_RD_P256_PUBKEY (0x0025) 128 #define BLE_HCI_OCF_LE_GEN_DHKEY (0x0026) 129 #define BLE_HCI_OCF_LE_ADD_RESOLV_LIST (0x0027) 130 #define BLE_HCI_OCF_LE_RMV_RESOLV_LIST (0x0028) 131 #define BLE_HCI_OCF_LE_CLR_RESOLV_LIST (0x0029) 132 #define BLE_HCI_OCF_LE_RD_RESOLV_LIST_SIZE (0x002A) 133 #define BLE_HCI_OCF_LE_RD_PEER_RESOLV_ADDR (0x002B) 134 #define BLE_HCI_OCF_LE_RD_LOCAL_RESOLV_ADDR (0x002C) 135 #define BLE_HCI_OCF_LE_SET_ADDR_RES_EN (0x002D) 136 #define BLE_HCI_OCF_LE_SET_RPA_TMO (0x002E) 137 #define BLE_HCI_OCF_LE_RD_MAX_DATA_LEN (0x002F) 138 #define BLE_HCI_OCF_LE_RD_PHY (0x0030) 139 #define BLE_HCI_OCF_LE_SET_DEFAULT_PHY (0x0031) 140 #define BLE_HCI_OCF_LE_SET_PHY (0x0032) 141 #define BLE_HCI_OCF_LE_ENH_RX_TEST (0x0033) 142 #define BLE_HCI_OCF_LE_ENH_TX_TEST (0x0034) 143 #define BLE_HCI_OCF_LE_SET_ADV_SET_RND_ADDR (0x0035) 144 #define BLE_HCI_OCF_LE_SET_EXT_ADV_PARAM (0x0036) 145 #define BLE_HCI_OCF_LE_SET_EXT_ADV_DATA (0x0037) 146 #define BLE_HCI_OCF_LE_SET_EXT_SCAN_RSP_DATA (0x0038) 147 #define BLE_HCI_OCF_LE_SET_EXT_ADV_ENABLE (0x0039) 148 #define BLE_HCI_OCF_LE_RD_MAX_ADV_DATA_LEN (0x003A) 149 #define BLE_HCI_OCF_LE_RD_NUM_OF_ADV_SETS (0x003B) 150 #define BLE_HCI_OCF_LE_REMOVE_ADV_SET (0x003C) 151 #define BLE_HCI_OCF_LE_CLEAR_ADV_SETS (0x003D) 152 #define BLE_HCI_OCF_LE_SET_PER_ADV_PARAMS (0x003E) 153 #define BLE_HCI_OCF_LE_SET_PER_ADV_DATA (0x003F) 154 #define BLE_HCI_OCF_LE_SET_PER_ADV_ENABLE (0x0040) 155 #define BLE_HCI_OCF_LE_SET_EXT_SCAN_PARAM (0x0041) 156 #define BLE_HCI_OCF_LE_SET_EXT_SCAN_ENABLE (0x0042) 157 #define BLE_HCI_OCF_LE_EXT_CREATE_CONN (0x0043) 158 #define BLE_HCI_OCF_LE_PER_ADV_CREATE_SYNC (0x0044) 159 #define BLE_HCI_OCF_LE_PER_ADV_CREATE_SYNC_CANCEL (0x0045) 160 #define BLE_HCI_OCF_LE_PER_ADV_TERM_SYNC (0x0046) 161 #define BLE_HCI_OCF_LE_ADD_DEV_TO_PER_ADV_LIST (0x0047) 162 #define BLE_HCI_OCF_LE_REM_DEV_FROM_PER_ADV_LIST (0x0048) 163 #define BLE_HCI_OCF_LE_CLEAR_PER_ADV_LIST (0x0049) 164 #define BLE_HCI_OCF_LE_RD_PER_ADV_LIST_SIZE (0x004A) 165 #define BLE_HCI_OCF_LE_RD_TRANSMIT_POWER (0x004B) 166 #define BLE_HCI_OCF_LE_RD_RF_PATH_COMPENSATION (0x004C) 167 #define BLE_HCI_OCF_LE_WR_RF_PATH_COMPENSATION (0x004D) 168 #define BLE_HCI_OCF_LE_SET_PRIVACY_MODE (0x004E) 169 170 /* Command Specific Definitions */ 171 #define BLE_HCI_VARIABLE_LEN (0xFF) 172 173 /* --- Disconnect command (OGF 0x01, OCF 0x0006) --- */ 174 #define BLE_HCI_DISCONNECT_CMD_LEN (3) 175 176 /* --- Set event mask (OGF 0x03, OCF 0x0001 --- */ 177 #define BLE_HCI_SET_EVENT_MASK_LEN (8) 178 179 /* --- Set controller to host flow control (OGF 0x03, OCF 0x0031) --- */ 180 #define BLE_HCI_CTLR_TO_HOST_FC_LEN (1) 181 182 #define BLE_HCI_CTLR_TO_HOST_FC_OFF (0) 183 #define BLE_HCI_CTLR_TO_HOST_FC_ACL (1) 184 #define BLE_HCI_CTLR_TO_HOST_FC_SYNC (2) 185 #define BLE_HCI_CTLR_TO_HOST_FC_BOTH (3) 186 187 /* --- Host buffer size (OGF 0x03, OCF 0x0033) --- */ 188 #define BLE_HCI_HOST_BUF_SIZE_LEN (7) 189 190 /* --- Host number of completed packets (OGF 0x03, OCF 0x0035) --- */ 191 #define BLE_HCI_HOST_NUM_COMP_PKTS_HDR_LEN (1) 192 #define BLE_HCI_HOST_NUM_COMP_PKTS_ENT_LEN (4) 193 194 /* --- Read BD_ADDR (OGF 0x04, OCF 0x0009 --- */ 195 #define BLE_HCI_IP_RD_BD_ADDR_ACK_PARAM_LEN (6) 196 197 /* --- Read buffer size (OGF 0x04, OCF 0x0005) --- */ 198 #define BLE_HCI_IP_RD_BUF_SIZE_LEN (0) 199 #define BLE_HCI_IP_RD_BUF_SIZE_RSPLEN (7) /* No status byte. */ 200 201 /* --- Read/Write authenticated payload timeout (ocf 0x007B/0x007C) */ 202 #define BLE_HCI_RD_AUTH_PYLD_TMO_LEN (4) 203 #define BLE_HCI_WR_AUTH_PYLD_TMO_LEN (2) 204 205 /* --- Read local version information (OGF 0x04, OCF 0x0001) --- */ 206 #define BLE_HCI_RD_LOC_VER_INFO_RSPLEN (8) /* No status byte. */ 207 208 /* --- Read local supported command (OGF 0x04, OCF 0x0002) --- */ 209 #define BLE_HCI_RD_LOC_SUPP_CMD_RSPLEN (64) /* No status byte. */ 210 211 /* --- Read local supported features (OGF 0x04, OCF 0x0003) --- */ 212 #define BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN (8) /* No status byte. */ 213 214 /* --- Read RSSI (OGF 0x05, OCF 0x0005) --- */ 215 #define BLE_HCI_READ_RSSI_LEN (2) 216 #define BLE_HCI_READ_RSSI_ACK_PARAM_LEN (3) /* No status byte. */ 217 218 /* --- LE set event mask (OCF 0x0001) --- */ 219 #define BLE_HCI_SET_LE_EVENT_MASK_LEN (8) 220 221 /* --- LE read buffer size (OCF 0x0002) --- */ 222 #define BLE_HCI_RD_BUF_SIZE_LEN (0) 223 #define BLE_HCI_RD_BUF_SIZE_RSPLEN (3) /* No status byte. */ 224 225 /* --- LE read local supported features (OCF 0x0003) --- */ 226 #define BLE_HCI_RD_LE_LOC_SUPP_FEAT_RSPLEN (8) /* No status byte. */ 227 228 /* --- LE set random address (OCF 0x0005) */ 229 #define BLE_HCI_SET_RAND_ADDR_LEN (6) 230 231 /* --- LE set advertising parameters (OCF 0x0006) */ 232 #define BLE_HCI_SET_ADV_PARAM_LEN (15) 233 234 /* Advertising types */ 235 #define BLE_HCI_ADV_TYPE_ADV_IND (0) 236 #define BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_HD (1) 237 #define BLE_HCI_ADV_TYPE_ADV_SCAN_IND (2) 238 #define BLE_HCI_ADV_TYPE_ADV_NONCONN_IND (3) 239 #define BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_LD (4) 240 #define BLE_HCI_ADV_TYPE_MAX (4) 241 242 #define BLE_HCI_ADV_CONN_MASK (0x0001) 243 #define BLE_HCI_ADV_SCAN_MASK (0x0002) 244 #define BLE_HCI_ADV_DIRECT_MASK (0x0004) 245 #define BLE_HCI_ADV_SCAN_RSP_MASK (0x0008) 246 #define BLE_HCI_ADV_LEGACY_MASK (0x0010) 247 248 #define BLE_HCI_ADV_DATA_STATUS_COMPLETE (0x0000) 249 #define BLE_HCI_ADV_DATA_STATUS_INCOMPLETE (0x0020) 250 #define BLE_HCI_ADV_DATA_STATUS_TRUNCATED (0x0040) 251 #define BLE_HCI_ADV_DATA_STATUS_MASK (0x0060) 252 253 /* Own address types */ 254 #define BLE_HCI_ADV_OWN_ADDR_PUBLIC (0) 255 #define BLE_HCI_ADV_OWN_ADDR_RANDOM (1) 256 #define BLE_HCI_ADV_OWN_ADDR_PRIV_PUB (2) 257 #define BLE_HCI_ADV_OWN_ADDR_PRIV_RAND (3) 258 #define BLE_HCI_ADV_OWN_ADDR_MAX (3) 259 260 /* Advertisement peer address Type */ 261 #define BLE_HCI_ADV_PEER_ADDR_PUBLIC (0) 262 #define BLE_HCI_ADV_PEER_ADDR_RANDOM (1) 263 #define BLE_HCI_ADV_PEER_ADDR_MAX (1) 264 265 /* --- LE advertising channel tx power (OCF 0x0007) */ 266 #define BLE_HCI_ADV_CHAN_TXPWR_ACK_PARAM_LEN (2) /* Includes status byte. */ 267 #define BLE_HCI_ADV_CHAN_TXPWR_MIN (-20) 268 #define BLE_HCI_ADV_CHAN_TXPWR_MAX (10) 269 270 /* --- LE set advertising data (OCF 0x0008) */ 271 #define BLE_HCI_MAX_ADV_DATA_LEN (31) 272 #define BLE_HCI_SET_ADV_DATA_LEN (32) 273 274 /* --- LE set scan response data (OCF 0x0009) */ 275 #define BLE_HCI_MAX_SCAN_RSP_DATA_LEN (31) 276 #define BLE_HCI_SET_SCAN_RSP_DATA_LEN (32) 277 278 /* --- LE set advertising enable (OCF 0x000a) */ 279 #define BLE_HCI_SET_ADV_ENABLE_LEN (1) 280 281 /* --- LE set scan enable (OCF 0x000c) */ 282 #define BLE_HCI_SET_SCAN_ENABLE_LEN (2) 283 284 /* Connect peer address type */ 285 #define BLE_HCI_CONN_PEER_ADDR_PUBLIC (0) 286 #define BLE_HCI_CONN_PEER_ADDR_RANDOM (1) 287 #define BLE_HCI_CONN_PEER_ADDR_PUBLIC_IDENT (2) 288 #define BLE_HCI_CONN_PEER_ADDR_RANDOM_IDENT (3) 289 #define BLE_HCI_CONN_PEER_ADDR_MAX (3) 290 291 /* 292 * Advertising filter policy 293 * 294 * Determines how an advertiser filters scan and connection requests. 295 * 296 * NONE: no filtering (default value). No whitelist used. 297 * SCAN: process all connection requests but only scans from white list. 298 * CONN: process all scan request but only connection requests from white list 299 * BOTH: ignore all scan and connection requests unless in white list. 300 */ 301 #define BLE_HCI_ADV_FILT_NONE (0) 302 #define BLE_HCI_ADV_FILT_SCAN (1) 303 #define BLE_HCI_ADV_FILT_CONN (2) 304 #define BLE_HCI_ADV_FILT_BOTH (3) 305 #define BLE_HCI_ADV_FILT_MAX (3) 306 307 #define BLE_HCI_ADV_FILT_DEF (BLE_HCI_ADV_FILT_NONE) 308 309 /* Advertising interval */ 310 #define BLE_HCI_ADV_ITVL (625) /* usecs */ 311 #define BLE_HCI_ADV_ITVL_MIN (32) /* units */ 312 #define BLE_HCI_ADV_ITVL_MAX (16384) /* units */ 313 #define BLE_HCI_ADV_ITVL_NONCONN_MIN (160) /* units */ 314 315 #define BLE_HCI_ADV_ITVL_DEF (0x800) /* 1.28 seconds */ 316 #define BLE_HCI_ADV_CHANMASK_DEF (0x7) /* all channels */ 317 318 /* Set scan parameters */ 319 #define BLE_HCI_SET_SCAN_PARAM_LEN (7) 320 #define BLE_HCI_SCAN_TYPE_PASSIVE (0) 321 #define BLE_HCI_SCAN_TYPE_ACTIVE (1) 322 323 /* Scan interval and scan window timing */ 324 #define BLE_HCI_SCAN_ITVL (625) /* usecs */ 325 #define BLE_HCI_SCAN_ITVL_MIN (4) /* units */ 326 #define BLE_HCI_SCAN_ITVL_MAX (16384) /* units */ 327 #define BLE_HCI_SCAN_ITVL_DEF (16) /* units */ 328 #define BLE_HCI_SCAN_WINDOW_MIN (4) /* units */ 329 #define BLE_HCI_SCAN_WINDOW_MAX (16384) /* units */ 330 #define BLE_HCI_SCAN_WINDOW_DEF (16) /* units */ 331 332 /* 333 * Scanning filter policy 334 * NO_WL: 335 * Scanner processes all advertising packets (white list not used) except 336 * directed, connectable advertising packets not sent to the scanner. 337 * USE_WL: 338 * Scanner processes advertisements from white list only. A connectable, 339 * directed advertisment is ignored unless it contains scanners address. 340 * NO_WL_INITA: 341 * Scanner process all advertising packets (white list not used). A 342 * connectable, directed advertisement shall not be ignored if the InitA 343 * is a resolvable private address. 344 * USE_WL_INITA: 345 * Scanner process advertisements from white list only. A connectable, 346 * directed advertisement shall not be ignored if the InitA is a 347 * resolvable private address. 348 */ 349 #define BLE_HCI_SCAN_FILT_NO_WL (0) 350 #define BLE_HCI_SCAN_FILT_USE_WL (1) 351 #define BLE_HCI_SCAN_FILT_NO_WL_INITA (2) 352 #define BLE_HCI_SCAN_FILT_USE_WL_INITA (3) 353 #define BLE_HCI_SCAN_FILT_MAX (3) 354 355 /* Whitelist commands */ 356 #define BLE_HCI_ADD_WHITE_LIST_LEN (7) 357 #define BLE_HCI_RMV_WHITE_LIST_LEN (7) 358 359 /* Create Connection */ 360 #define BLE_HCI_CREATE_CONN_LEN (25) 361 #define BLE_HCI_CONN_ITVL (1250) /* usecs */ 362 #define BLE_HCI_CONN_FILT_NO_WL (0) 363 #define BLE_HCI_CONN_FILT_USE_WL (1) 364 #define BLE_HCI_CONN_FILT_MAX (1) 365 #define BLE_HCI_CONN_ITVL_MIN (0x0006) 366 #define BLE_HCI_CONN_ITVL_MAX (0x0c80) 367 #define BLE_HCI_CONN_LATENCY_MIN (0x0000) 368 #define BLE_HCI_CONN_LATENCY_MAX (0x01f3) 369 #define BLE_HCI_CONN_SPVN_TIMEOUT_MIN (0x000a) 370 #define BLE_HCI_CONN_SPVN_TIMEOUT_MAX (0x0c80) 371 #define BLE_HCI_CONN_SPVN_TMO_UNITS (10) /* msecs */ 372 #define BLE_HCI_INITIATOR_FILT_POLICY_MAX (1) 373 374 /* Peer Address Type */ 375 #define BLE_HCI_CONN_PEER_ADDR_PUBLIC (0) 376 #define BLE_HCI_CONN_PEER_ADDR_RANDOM (1) 377 #define BLE_HCI_CONN_PEER_ADDR_PUB_ID (2) 378 #define BLE_HCI_CONN_PEER_ADDR_RAND_ID (3) 379 #define BLE_HCI_CONN_PEER_ADDR_MAX (3) 380 381 /* --- LE connection update (OCF 0x0013) */ 382 #define BLE_HCI_CONN_UPDATE_LEN (14) 383 384 /* --- LE set host channel classification command (OCF 0x0014) */ 385 #define BLE_HCI_SET_HOST_CHAN_CLASS_LEN (5) 386 387 /* --- LE read channel map command (OCF 0x0015) */ 388 #define BLE_HCI_RD_CHANMAP_LEN (2) 389 #define BLE_HCI_RD_CHANMAP_RSP_LEN (7) 390 391 /* --- LE read remote features (OCF 0x0016) */ 392 #define BLE_HCI_CONN_RD_REM_FEAT_LEN (2) 393 394 /* --- LE encrypt (OCF 0x0017) */ 395 #define BLE_HCI_LE_ENCRYPT_LEN (32) 396 397 /* --- LE rand (OCF 0x0018) */ 398 #define BLE_HCI_LE_RAND_LEN (8) 399 400 /* --- LE start encryption (OCF 0x0019) */ 401 #define BLE_HCI_LE_START_ENCRYPT_LEN (28) 402 403 /* --- LE long term key request reply command (OCF 0x001a) */ 404 #define BLE_HCI_LT_KEY_REQ_REPLY_LEN (18) 405 #define BLE_HCI_LT_KEY_REQ_REPLY_ACK_PARAM_LEN (2) /* No status byte. */ 406 407 /* --- LE long term key request negative reply command (OCF 0x001b) */ 408 #define BLE_HCI_LT_KEY_REQ_NEG_REPLY_LEN (2) 409 #define BLE_HCI_LT_KEY_REQ_NEG_REPLY_ACK_PARAM_LEN (2) 410 411 /* --- LE read supported states (OCF 0x001C) --- */ 412 #define BLE_HCI_RD_SUPP_STATES_RSPLEN (8) 413 414 /* --- LE receiver test command (OCF 0x001D) --- */ 415 #define BLE_HCI_RX_TEST_LEN (1) 416 417 /* --- LE transitter test command (OCF 0x001E) --- */ 418 #define BLE_HCI_TX_TEST_LEN (3) 419 420 /* --- LE remote connection parameter request reply (OCF 0x0020) */ 421 #define BLE_HCI_CONN_PARAM_REPLY_LEN (14) 422 423 /* --- LE remote connection parameter request negative reply (OCF 0x0021) */ 424 #define BLE_HCI_CONN_PARAM_NEG_REPLY_LEN (3) 425 426 /* --- LE set data length (OCF 0x0022) */ 427 #define BLE_HCI_SET_DATALEN_LEN (6) 428 #define BLE_HCI_SET_DATALEN_ACK_PARAM_LEN (2) /* No status byte. */ 429 #define BLE_HCI_SET_DATALEN_TX_OCTETS_MIN (0x001b) 430 #define BLE_HCI_SET_DATALEN_TX_OCTETS_MAX (0x00fb) 431 #define BLE_HCI_SET_DATALEN_TX_TIME_MIN (0x0148) 432 #define BLE_HCI_SET_DATALEN_TX_TIME_MAX (0x4290) 433 434 /* --- LE read suggested default data length (OCF 0x0023) */ 435 #define BLE_HCI_RD_SUGG_DATALEN_RSPLEN (4) 436 437 /* --- LE write suggested default data length (OCF 0x0024) */ 438 #define BLE_HCI_WR_SUGG_DATALEN_LEN (4) 439 440 /* --- LE generate DHKEY command (OCF 0x0026) */ 441 #define BLE_HCI_GEN_DHKEY_LEN (64) 442 443 /* --- LE add device to resolving list (OCF 0x0027) */ 444 #define BLE_HCI_ADD_TO_RESOLV_LIST_LEN (39) 445 446 /* --- LE add device to resolving list (OCF 0x0028) */ 447 #define BLE_HCI_RMV_FROM_RESOLV_LIST_LEN (7) 448 449 /* --- LE read peer resolvable address (OCF 0x002B) */ 450 #define BLE_HCI_RD_PEER_RESOLV_ADDR_LEN (7) 451 452 /* --- LE read peer resolvable address (OCF 0x002C) */ 453 #define BLE_HCI_RD_LOC_RESOLV_ADDR_LEN (7) 454 455 /* --- LE set address resolution enable (OCF 0x002D) */ 456 #define BLE_HCI_SET_ADDR_RESOL_ENA_LEN (1) 457 458 /* --- LE set resolvable private address timeout (OCF 0x002E) */ 459 #define BLE_HCI_SET_RESOLV_PRIV_ADDR_TO_LEN (2) 460 461 /* --- LE read maximum data length (OCF 0x002F) */ 462 #define BLE_HCI_RD_MAX_DATALEN_RSPLEN (8) 463 464 /* --- LE read maximum default PHY (OCF 0x0030) */ 465 #define BLE_HCI_LE_RD_PHY_LEN (2) 466 #define BLE_HCI_LE_RD_PHY_RSPLEN (4) 467 #define BLE_HCI_LE_PHY_1M (1) 468 #define BLE_HCI_LE_PHY_2M (2) 469 #define BLE_HCI_LE_PHY_CODED (3) 470 471 /* --- LE set default PHY (OCF 0x0031) */ 472 #define BLE_HCI_LE_SET_DEFAULT_PHY_LEN (3) 473 #define BLE_HCI_LE_PHY_NO_TX_PREF_MASK (0x01) 474 #define BLE_HCI_LE_PHY_NO_RX_PREF_MASK (0x02) 475 #define BLE_HCI_LE_PHY_1M_PREF_MASK (0x01) 476 #define BLE_HCI_LE_PHY_2M_PREF_MASK (0x02) 477 #define BLE_HCI_LE_PHY_CODED_PREF_MASK (0x04) 478 479 #define BLE_HCI_LE_PHY_PREF_MASK_ALL \ 480 (BLE_HCI_LE_PHY_1M_PREF_MASK | BLE_HCI_LE_PHY_2M_PREF_MASK | \ 481 BLE_HCI_LE_PHY_CODED_PREF_MASK) 482 483 /* --- LE set PHY (OCF 0x0032) */ 484 #define BLE_HCI_LE_SET_PHY_LEN (7) 485 #define BLE_HCI_LE_PHY_CODED_ANY (0x0000) 486 #define BLE_HCI_LE_PHY_CODED_S2_PREF (0x0001) 487 #define BLE_HCI_LE_PHY_CODED_S8_PREF (0x0002) 488 489 /* --- LE enhanced receiver test (OCF 0x0033) */ 490 #define BLE_HCI_LE_ENH_RX_TEST_LEN (3) 491 #define BLE_HCI_LE_PHY_1M (1) 492 #define BLE_HCI_LE_PHY_2M (2) 493 #define BLE_HCI_LE_PHY_CODED (3) 494 495 /* --- LE enhanced transmitter test (OCF 0x0034) */ 496 #define BLE_HCI_LE_ENH_TX_TEST_LEN (4) 497 #define BLE_HCI_LE_PHY_CODED_S8 (3) 498 #define BLE_HCI_LE_PHY_CODED_S2 (4) 499 500 /* --- LE set advertising set random address (OCF 0x0035) */ 501 #define BLE_HCI_LE_SET_ADV_SET_RND_ADDR_LEN (7) 502 503 /* --- LE set extended advertising parameters (OCF 0x0036) */ 504 #define BLE_HCI_LE_SET_EXT_ADV_PARAM_LEN (25) 505 #define BLE_HCI_LE_SET_EXT_ADV_PROP_CONNECTABLE (0x0001) 506 #define BLE_HCI_LE_SET_EXT_ADV_PROP_SCANNABLE (0x0002) 507 #define BLE_HCI_LE_SET_EXT_ADV_PROP_DIRECTED (0x0004) 508 #define BLE_HCI_LE_SET_EXT_ADV_PROP_HD_DIRECTED (0x0008) 509 #define BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY (0x0010) 510 #define BLE_HCI_LE_SET_EXT_ADV_PROP_ANON_ADV (0x0020) 511 #define BLE_HCI_LE_SET_EXT_ADV_PROP_INC_TX_PWR (0x0040) 512 #define BLE_HCI_LE_SET_EXT_ADV_PROP_MASK (0x7F) 513 514 #define BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY_IND (0x0013) 515 #define BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY_LD_DIR (0x0015) 516 #define BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY_HD_DIR (0x001d) 517 #define BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY_SCAN (0x0012) 518 #define BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY_NONCONN (0x0010) 519 520 /* --- LE set extended advertising data (OCF 0x0037) */ 521 #define BLE_HCI_MAX_EXT_ADV_DATA_LEN (251) 522 #define BLE_HCI_SET_EXT_ADV_DATA_HDR_LEN (4) 523 524 #define BLE_HCI_LE_SET_EXT_ADV_DATA_LEN BLE_HCI_VARIABLE_LEN 525 #define BLE_HCI_LE_SET_EXT_ADV_DATA_OPER_INT (0) 526 #define BLE_HCI_LE_SET_EXT_ADV_DATA_OPER_FIRST (1) 527 #define BLE_HCI_LE_SET_EXT_ADV_DATA_OPER_LAST (2) 528 #define BLE_HCI_LE_SET_EXT_ADV_DATA_OPER_COMPLETE (3) 529 #define BLE_HCI_LE_SET_EXT_ADV_DATA_OPER_UNCHANGED (4) 530 531 /* --- LE set extended scan response data (OCF 0x0038) */ 532 #define BLE_HCI_MAX_EXT_SCAN_RSP_DATA_LEN (251) 533 #define BLE_HCI_SET_EXT_SCAN_RSP_DATA_HDR_LEN (4) 534 535 #define BLE_HCI_LE_SET_EXT_SCAN_RSP_DATA_LEN BLE_HCI_VARIABLE_LEN 536 #define BLE_HCI_LE_SET_EXT_SCAN_RSP_DATA_OPER_INT (0) 537 #define BLE_HCI_LE_SET_EXT_SCAN_RSP_DATA_OPER_FIRST (1) 538 #define BLE_HCI_LE_SET_EXT_SCAN_RSP_DATA_OPER_LAST (2) 539 #define BLE_HCI_LE_SET_EXT_SCAN_RSP_DATA_OPER_COMPLETE (3) 540 541 /* --- LE set extended advertising enable (OCF 0x0039) */ 542 #define BLE_HCI_LE_SET_EXT_ADV_ENABLE_LEN BLE_HCI_VARIABLE_LEN 543 544 /* --- LE remove advertising set (OCF 0x003C) */ 545 #define BLE_HCI_LE_REMOVE_ADV_SET_LEN (1) 546 547 /* --- LE read maximum advertising data length (OCF 0x003A) */ 548 #define BLE_HCI_RD_MAX_ADV_DATA_LEN (2) 549 550 /* --- LE read number of supported advertising sets (OCF 0x003B) */ 551 #define BLE_HCI_RD_NR_SUP_ADV_SETS (1) 552 553 /* --- LE set periodic advertising parameters (OCF 0x003E) */ 554 #define BLE_HCI_LE_SET_PER_ADV_PARAMS_LEN (7) 555 556 /* --- LE set periodic advertising data (OCF 0x003F) */ 557 #define BLE_HCI_LE_SET_PER_ADV_DATA_LEN BLE_HCI_VARIABLE_LEN 558 559 /* --- LE periodic advertising enable (OCF 0x0040) */ 560 #define BLE_HCI_LE_SET_PER_ADV_ENABLE_LEN (2) 561 562 /* --- LE set extended scan parameters (OCF 0x0041) */ 563 #define BLE_HCI_LE_SET_EXT_SCAN_PARAM_LEN BLE_HCI_VARIABLE_LEN 564 #define BLE_HCI_LE_EXT_SCAN_BASE_LEN (3) 565 #define BLE_HCI_LE_EXT_SCAN_SINGLE_PARAM_LEN (5) 566 567 /* --- LE set extended scan enable (OCF 0x0042) */ 568 #define BLE_HCI_LE_SET_EXT_SCAN_ENABLE_LEN (6) 569 570 /* --- LE extended create connection (OCF 0x0043) */ 571 #define BLE_HCI_LE_EXT_CREATE_CONN_LEN BLE_HCI_VARIABLE_LEN 572 #define BLE_HCI_LE_EXT_CREATE_CONN_BASE_LEN (10) 573 574 /* --- LE periodic advertising create sync (OCF 0x0044) */ 575 #define BLE_HCI_LE_PER_ADV_CREATE_SYNC_LEN (14) 576 577 /* --- LE periodic advertising terminate (OCF 0x0046) */ 578 #define BLE_HCI_LE_PER_ADV_TERM_SYNC_LEN (2) 579 580 /* --- LE add device to periodic advertising list (OCF 0x0047) */ 581 #define BLE_HCI_LE_ADD_DEV_TO_PER_ADV_LIST_LEN (8) 582 583 /* --- LE remove device from periodic advertising list (OCF 0x0048) */ 584 #define BLE_HCI_LE_REM_DEV_FROM_PER_ADV_LIST_LEN (8) 585 586 /* --- LE write RF path (OCF 0x004D) */ 587 #define BLE_HCI_LE_WR_RF_PATH_COMPENSATION_LEN (4) 588 589 /* --- LE set privacy mode (OCF 0x004E) */ 590 #define BLE_HCI_LE_SET_PRIVACY_MODE_LEN (8) 591 #define BLE_HCI_PRIVACY_NETWORK (0) 592 #define BLE_HCI_PRIVACY_DEVICE (1) 593 594 /* Event Codes */ 595 #define BLE_HCI_EVCODE_INQUIRY_CMP (0x01) 596 #define BLE_HCI_EVCODE_INQUIRY_RESULT (0x02) 597 #define BLE_HCI_EVCODE_CONN_DONE (0x03) 598 #define BLE_HCI_EVCODE_CONN_REQUEST (0x04) 599 #define BLE_HCI_EVCODE_DISCONN_CMP (0x05) 600 #define BLE_HCI_EVCODE_AUTH_CMP (0x06) 601 #define BLE_HCI_EVCODE_REM_NAME_REQ_CMP (0x07) 602 #define BLE_HCI_EVCODE_ENCRYPT_CHG (0x08) 603 #define BLE_HCI_EVCODE_CHG_LINK_KEY_CMP (0x09) 604 #define BLE_HCI_EVCODE_MASTER_LINK_KEY_CMP (0x0A) 605 #define BLE_HCI_EVCODE_RD_REM_SUPP_FEAT_CMP (0x0B) 606 #define BLE_HCI_EVCODE_RD_REM_VER_INFO_CMP (0x0C) 607 #define BLE_HCI_EVCODE_QOS_SETUP_CMP (0x0D) 608 #define BLE_HCI_EVCODE_COMMAND_COMPLETE (0x0E) 609 #define BLE_HCI_EVCODE_COMMAND_STATUS (0x0F) 610 #define BLE_HCI_EVCODE_HW_ERROR (0x10) 611 #define BLE_HCI_EVCODE_NUM_COMP_PKTS (0x13) 612 #define BLE_HCI_EVCODE_MODE_CHANGE (0x14) 613 #define BLE_HCI_EVCODE_RETURN_LINK_KEYS (0x15) 614 #define BLE_HCI_EVCODE_PIN_CODE_REQ (0x16) 615 #define BLE_HCI_EVCODE_LINK_KEY_REQ (0x17) 616 #define BLE_HCI_EVCODE_LINK_KEY_NOTIFY (0x18) 617 #define BLE_HCI_EVCODE_LOOPBACK_CMD (0x19) 618 #define BLE_HCI_EVCODE_DATA_BUF_OVERFLOW (0x1A) 619 #define BLE_HCI_EVCODE_MAX_SLOTS_CHG (0x1B) 620 #define BLE_HCI_EVCODE_READ_CLK_OFF_COMP (0x1C) 621 #define BLE_HCI_EVCODE_CONN_PKT_TYPE_CHG (0x1D) 622 #define BLE_HCI_EVCODE_QOS_VIOLATION (0x1E) 623 /* NOTE: 0x1F not defined */ 624 #define BLE_HCI_EVCODE_PSR_MODE_CHG (0x20) 625 #define BLE_HCI_EVCODE_FLOW_SPEC_COMP (0x21) 626 #define BLE_HCI_EVCODE_INQ_RESULT_RSSI (0x22) 627 #define BLE_HCI_EVCODE_READ_REM_EXT_FEAT (0x23) 628 /* NOTE: 0x24 - 0x2B not defined */ 629 #define BLE_HCI_EVCODE_SYNCH_CONN_COMP (0x2C) 630 #define BLE_HCI_EVCODE_SYNCH_CONN_CHG (0x2D) 631 #define BLE_HCI_EVCODE_SNIFF_SUBRATING (0x2E) 632 #define BLE_HCI_EVCODE_EXT_INQ_RESULT (0x2F) 633 #define BLE_HCI_EVCODE_ENC_KEY_REFRESH (0x30) 634 #define BLE_HCI_EVOCDE_IO_CAP_REQ (0x31) 635 #define BLE_HCI_EVCODE_IO_CAP_RSP (0x32) 636 #define BLE_HCI_EVCODE_USER_CONFIRM_REQ (0x33) 637 #define BLE_HCI_EVCODE_PASSKEY_REQ (0x34) 638 #define BLE_HCI_EVCODE_REM_OOB_DATA_REQ (0x35) 639 #define BLE_HCI_EVCODE_SIMPLE_PAIR_COMP (0x36) 640 /* NOTE: 0x37 not defined */ 641 #define BLE_HCI_EVCODE_LNK_SPVN_TMO_CHG (0x38) 642 #define BLE_HCI_EVCODE_ENH_FLUSH_COMP (0x39) 643 #define BLE_HCI_EVCODE_USER_PASSKEY_NOTIFY (0x3B) 644 #define BLE_HCI_EVCODE_KEYPRESS_NOTIFY (0x3C) 645 #define BLE_HCI_EVCODE_REM_HOST_SUPP_FEAT (0x3D) 646 #define BLE_HCI_EVCODE_LE_META (0x3E) 647 /* NOTE: 0x3F not defined */ 648 #define BLE_HCI_EVCODE_PHYS_LINK_COMP (0x40) 649 #define BLE_HCI_EVCODE_CHAN_SELECTED (0x41) 650 #define BLE_HCI_EVCODE_DISCONN_PHYS_LINK (0x42) 651 #define BLE_HCI_EVCODE_PHYS_LINK_LOSS_EARLY (0x43) 652 #define BLE_HCI_EVCODE_PHYS_LINK_RECOVERY (0x44) 653 #define BLE_HCI_EVCODE_LOGICAL_LINK_COMP (0x45) 654 #define BLE_HCI_EVCODE_DISCONN_LOGICAL_LINK (0x46) 655 #define BLE_HCI_EVCODE_FLOW_SPEC_MODE_COMP (0x47) 656 #define BLE_HCI_EVCODE_NUM_COMP_DATA_BLKS (0x48) 657 #define BLE_HCI_EVCODE_AMP_START_TEST (0x49) 658 #define BLE_HCI_EVOCDE_AMP_TEST_END (0x4A) 659 #define BLE_HCI_EVOCDE_AMP_RCVR_REPORT (0x4B) 660 #define BLE_HCI_EVCODE_SHORT_RANGE_MODE_CHG (0x4C) 661 #define BLE_HCI_EVCODE_AMP_STATUS_CHG (0x4D) 662 #define BLE_HCI_EVCODE_TRIG_CLK_CAPTURE (0x4E) 663 #define BLE_HCI_EVCODE_SYNCH_TRAIN_COMP (0x4F) 664 #define BLE_HCI_EVCODE_SYNCH_TRAIN_RCVD (0x50) 665 #define BLE_HCI_EVCODE_SLAVE_BCAST_RX (0x51) 666 #define BLE_HCI_EVCODE_SLAVE_BCAST_TMO (0x52) 667 #define BLE_HCI_EVCODE_TRUNC_PAGE_COMP (0x53) 668 #define BLE_HCI_EVCODE_SLAVE_PAGE_RSP_TMO (0x54) 669 #define BLE_HCI_EVCODE_SLAVE_BCAST_CHAN_MAP (0x55) 670 #define BLE_HCI_EVCODE_INQ_RSP_NOTIFY (0x56) 671 #define BLE_HCI_EVCODE_AUTH_PYLD_TMO (0x57) 672 #define BLE_HCI_EVCODE_VENDOR_DEBUG (0xFF) 673 674 /* LE sub-event codes */ 675 #define BLE_HCI_LE_SUBEV_CONN_COMPLETE (0x01) 676 #define BLE_HCI_LE_SUBEV_ADV_RPT (0x02) 677 #define BLE_HCI_LE_SUBEV_CONN_UPD_COMPLETE (0x03) 678 #define BLE_HCI_LE_SUBEV_RD_REM_USED_FEAT (0x04) 679 #define BLE_HCI_LE_SUBEV_LT_KEY_REQ (0x05) 680 #define BLE_HCI_LE_SUBEV_REM_CONN_PARM_REQ (0x06) 681 #define BLE_HCI_LE_SUBEV_DATA_LEN_CHG (0x07) 682 #define BLE_HCI_LE_SUBEV_RD_LOC_P256_PUBKEY (0x08) 683 #define BLE_HCI_LE_SUBEV_GEN_DHKEY_COMPLETE (0x09) 684 #define BLE_HCI_LE_SUBEV_ENH_CONN_COMPLETE (0x0A) 685 #define BLE_HCI_LE_SUBEV_DIRECT_ADV_RPT (0x0B) 686 #define BLE_HCI_LE_SUBEV_PHY_UPDATE_COMPLETE (0x0C) 687 #define BLE_HCI_LE_SUBEV_EXT_ADV_RPT (0x0D) 688 #define BLE_HCI_LE_SUBEV_PER_ADV_SYNC_ESTAB (0x0E) 689 #define BLE_HCI_LE_SUBEV_PER_ADV_RPT (0x0F) 690 #define BLE_HCI_LE_SUBEV_PER_ADV_SYNC_LOST (0x10) 691 #define BLE_HCI_LE_SUBEV_SCAN_TIMEOUT (0x11) 692 #define BLE_HCI_LE_SUBEV_ADV_SET_TERMINATED (0x12) 693 #define BLE_HCI_LE_SUBEV_SCAN_REQ_RCVD (0x13) 694 #define BLE_HCI_LE_SUBEV_CHAN_SEL_ALG (0x14) 695 696 /* Generic event header */ 697 #define BLE_HCI_EVENT_HDR_LEN (2) 698 699 /* Event specific definitions */ 700 /* Event disconnect complete */ 701 #define BLE_HCI_EVENT_DISCONN_COMPLETE_LEN (4) 702 703 /* Event encryption change (code=0x08) */ 704 #define BLE_HCI_EVENT_ENCRYPT_CHG_LEN (4) 705 706 /* Event hardware error (code=0x10) */ 707 #define BLE_HCI_EVENT_HW_ERROR_LEN (1) 708 709 /* Event key refresh complete (code=0x30) */ 710 #define BLE_HCI_EVENT_ENC_KEY_REFRESH_LEN (3) 711 712 /* Event command complete */ 713 #define BLE_HCI_EVENT_CMD_COMPLETE_HDR_LEN (5) 714 #define BLE_HCI_EVENT_CMD_COMPLETE_MIN_LEN (6) 715 716 /* Event command status */ 717 #define BLE_HCI_EVENT_CMD_STATUS_LEN (6) 718 719 /* Number of completed packets */ 720 #define BLE_HCI_EVENT_NUM_COMP_PKTS_HDR_LEN (1) 721 #define BLE_HCI_EVENT_NUM_COMP_PKTS_ENT_LEN (4) 722 723 /* Read remote version informaton */ 724 #define BLE_HCI_EVENT_RD_RM_VER_LEN (8) 725 726 /* Data buffer overflow event */ 727 #define BLE_HCI_EVENT_DATABUF_OVERFLOW_LEN (1) 728 #define BLE_HCI_EVENT_ACL_BUF_OVERFLOW (0x01) 729 730 /* Advertising report */ 731 #define BLE_HCI_ADV_RPT_EVTYPE_ADV_IND (0) 732 #define BLE_HCI_ADV_RPT_EVTYPE_DIR_IND (1) 733 #define BLE_HCI_ADV_RPT_EVTYPE_SCAN_IND (2) 734 #define BLE_HCI_ADV_RPT_EVTYPE_NONCONN_IND (3) 735 #define BLE_HCI_ADV_RPT_EVTYPE_SCAN_RSP (4) 736 737 /* Bluetooth 5, Vol 2, Part E, 7.7.65.13 */ 738 #define BLE_HCI_LEGACY_ADV_EVTYPE_ADV_IND (0x13) 739 #define BLE_HCI_LEGACY_ADV_EVTYPE_ADV_DIRECT_IND (0x15) 740 #define BLE_HCI_LEGACY_ADV_EVTYPE_ADV_SCAN_IND (0x12) 741 #define BLE_HCI_LEGACY_ADV_EVTYPE_ADV_NONCON_IND (0x10) 742 #define BLE_HCI_LEGACY_ADV_EVTYPE_SCAN_RSP_ADV_IND (0x1b) 743 #define BLE_HCI_LEGACY_ADV_EVTYPE_SCAN_RSP_ADV_SCAN_IND (0x1a) 744 745 /* LE sub-event specific definitions */ 746 #define BLE_HCI_LE_MIN_LEN (1) /* Not including event hdr. */ 747 748 /* LE connection complete event (sub event 0x01) */ 749 #define BLE_HCI_LE_CONN_COMPLETE_LEN (19) 750 #define BLE_HCI_LE_CONN_COMPLETE_ROLE_MASTER (0x00) 751 #define BLE_HCI_LE_CONN_COMPLETE_ROLE_SLAVE (0x01) 752 753 /* Maximum valid connection handle value */ 754 #define BLE_HCI_LE_CONN_HANDLE_MAX (0x0eff) 755 756 /* LE advertising report event. (sub event 0x02) */ 757 #define BLE_HCI_LE_ADV_RPT_MIN_LEN (12) 758 #define BLE_HCI_LE_ADV_DIRECT_RPT_LEN (18) 759 #define BLE_HCI_LE_ADV_RPT_NUM_RPTS_MIN (1) 760 #define BLE_HCI_LE_ADV_RPT_NUM_RPTS_MAX (0x19) 761 762 /* Length of each record in an LE direct advertising report event. */ 763 #define BLE_HCI_LE_ADV_DIRECT_RPT_SUB_LEN (16) 764 765 /* LE connection update complete event (sub event 0x03) */ 766 #define BLE_HCI_LE_CONN_UPD_LEN (10) 767 768 /* LE long term key request event (sub event 0x05) */ 769 #define BLE_HCI_LE_LT_KEY_REQ_LEN (13) 770 771 /* LE connection update complete event (sub event 0x03) */ 772 #define BLE_HCI_LE_RD_REM_USED_FEAT_LEN (12) 773 774 /* LE remote connection parameter request event (sub event 0x06) */ 775 #define BLE_HCI_LE_REM_CONN_PARM_REQ_LEN (11) 776 777 /* LE data length change event (sub event 0x07) */ 778 #define BLE_HCI_LE_DATA_LEN_CHG_LEN (11) 779 780 /* LE PHY update complete event (sub event 0x0C) */ 781 #define BLE_HCI_LE_PHY_UPD_LEN (6) 782 783 /* LE Scan Timeout Event (sub event 0x11) */ 784 #define BLE_HCI_LE_SUBEV_SCAN_TIMEOUT_LEN (1) 785 786 /* LE Advertising Set Terminated Event (sub event 0x12) */ 787 #define BLE_HCI_LE_SUBEV_ADV_SET_TERMINATED_LEN (6) 788 789 /* LE Scan Request Received event (sub event 0x13) */ 790 #define BLE_HCI_LE_SUBEV_SCAN_REQ_RCVD_LEN (9) 791 792 /* LE Channel Selection Algorithm event (sub event 0x14) */ 793 #define BLE_HCI_LE_SUBEV_CHAN_SEL_ALG_LEN (4) 794 795 /* Bluetooth Assigned numbers for version information.*/ 796 #define BLE_HCI_VER_BCS_1_0b (0) 797 #define BLE_HCI_VER_BCS_1_1 (1) 798 #define BLE_HCI_VER_BCS_1_2 (2) 799 #define BLE_HCI_VER_BCS_2_0_EDR (3) 800 #define BLE_HCI_VER_BCS_2_1_EDR (4) 801 #define BLE_HCI_VER_BCS_3_0_HCS (5) 802 #define BLE_HCI_VER_BCS_4_0 (6) 803 #define BLE_HCI_VER_BCS_4_1 (7) 804 #define BLE_HCI_VER_BCS_4_2 (8) 805 #define BLE_HCI_VER_BCS_5_0 (9) 806 807 #define BLE_LMP_VER_BCS_1_0b (0) 808 #define BLE_LMP_VER_BCS_1_1 (1) 809 #define BLE_LMP_VER_BCS_1_2 (2) 810 #define BLE_LMP_VER_BCS_2_0_EDR (3) 811 #define BLE_LMP_VER_BCS_2_1_EDR (4) 812 #define BLE_LMP_VER_BCS_3_0_HCS (5) 813 #define BLE_LMP_VER_BCS_4_0 (6) 814 #define BLE_LMP_VER_BCS_4_1 (7) 815 #define BLE_LMP_VER_BCS_4_2 (8) 816 #define BLE_LMP_VER_BCS_5_0 (9) 817 818 /* Sub-event 0x0A: enhanced connection complete */ 819 #define BLE_HCI_LE_ENH_CONN_COMPLETE_LEN (31) 820 821 /*--- Shared data structures ---*/ 822 823 /* Host buffer size (OGF=0x03, OCF=0x0033) */ 824 struct hci_host_buf_size 825 { 826 uint16_t acl_pkt_len; 827 uint8_t sync_pkt_len; 828 uint16_t num_acl_pkts; 829 uint16_t num_sync_pkts; 830 }; 831 832 /* Host number of completed packets (OGF=0x03, OCF=0x0035) */ 833 struct hci_host_num_comp_pkts_entry 834 { 835 uint16_t conn_handle; 836 uint16_t num_pkts; 837 }; 838 839 /* Read local version information (OGF=0x0004, OCF=0x0001) */ 840 struct hci_loc_ver_info 841 { 842 uint8_t status; 843 uint8_t hci_version; 844 uint16_t hci_revision; 845 uint8_t lmp_pal_version; 846 uint16_t mfrg_name; 847 uint8_t lmp_pal_subversion; 848 }; 849 850 /* set random address command (ocf = 0x0005) */ 851 struct hci_rand_addr 852 { 853 uint8_t addr[6]; 854 }; 855 856 /* set advertising parameters command (ocf = 0x0006) */ 857 struct hci_adv_params 858 { 859 uint8_t adv_type; 860 uint8_t adv_channel_map; 861 uint8_t own_addr_type; 862 uint8_t peer_addr_type; 863 uint8_t adv_filter_policy; 864 uint16_t adv_itvl_min; 865 uint16_t adv_itvl_max; 866 uint8_t peer_addr[BLE_DEV_ADDR_LEN]; 867 }; 868 869 /* LE create connection command (ocf=0x000d). */ 870 struct hci_create_conn 871 { 872 uint16_t scan_itvl; 873 uint16_t scan_window; 874 uint8_t filter_policy; 875 uint8_t peer_addr_type; 876 uint8_t peer_addr[BLE_DEV_ADDR_LEN]; 877 uint8_t own_addr_type; 878 uint16_t conn_itvl_min; 879 uint16_t conn_itvl_max; 880 uint16_t conn_latency; 881 uint16_t supervision_timeout; 882 uint16_t min_ce_len; 883 uint16_t max_ce_len; 884 }; 885 886 /* LE Read Local P-256 Public Key Complete Event */ 887 struct hci_le_subev_rd_loc_p256_pubkey { 888 uint8_t status; 889 uint8_t pubkey[64]; 890 } __attribute__((packed)); 891 892 /* LE Generate DHKey Complete Event */ 893 struct hci_le_subev_gen_dhkey_complete { 894 uint8_t status; 895 uint8_t dhkey[32]; 896 } __attribute__((packed)); 897 898 /* LE Directed Advertising Report Event */ 899 struct hci_le_subev_direct_adv_rpt_param { 900 uint8_t evt_type; 901 uint8_t addr_type; 902 uint8_t addr[6]; 903 uint8_t dir_addr_type; 904 uint8_t dir_addr[6]; 905 int8_t rssi; 906 } __attribute__((packed)); 907 908 struct hci_le_subev_direct_adv_rpt { 909 uint8_t num_reports; 910 struct hci_le_subev_direct_adv_rpt_param params[0]; 911 } __attribute__((packed)); 912 913 #if MYNEWT_VAL(BLE_EXT_ADV) 914 /* LE create connection command (ocf=0x0043). */ 915 struct hci_ext_conn_params 916 { 917 uint16_t scan_itvl; 918 uint16_t scan_window; 919 uint16_t conn_itvl_min; 920 uint16_t conn_itvl_max; 921 uint16_t conn_latency; 922 uint16_t supervision_timeout; 923 uint16_t min_ce_len; 924 uint16_t max_ce_len; 925 }; 926 927 struct hci_ext_create_conn 928 { 929 uint8_t filter_policy; 930 uint8_t own_addr_type; 931 uint8_t peer_addr_type; 932 uint8_t peer_addr[BLE_DEV_ADDR_LEN]; 933 uint8_t init_phy_mask; 934 struct hci_ext_conn_params params[3]; 935 }; 936 937 struct hci_ext_adv_report_param { 938 uint16_t evt_type; 939 uint8_t addr_type; 940 uint8_t addr[6]; 941 uint8_t prim_phy; 942 uint8_t sec_phy; 943 uint8_t sid; 944 uint8_t tx_power; 945 int8_t rssi; 946 uint16_t per_adv_itvl; 947 uint8_t dir_addr_type; 948 uint8_t dir_addr[6]; 949 uint8_t adv_data_len; 950 uint8_t adv_data[0]; 951 } __attribute__((packed)); 952 953 struct hci_ext_adv_report { 954 /* We support one report per event for now */ 955 uint8_t subevt; 956 uint8_t num_reports; 957 struct hci_ext_adv_report_param params[0]; 958 } __attribute__((packed)); 959 960 /* Ext Adv Set enable parameters, not in HCI order */ 961 struct hci_ext_adv_set 962 { 963 uint8_t handle; 964 uint8_t events; 965 uint16_t duration; 966 }; 967 968 /* Ext Advertising Parameters */ 969 struct hci_ext_adv_params 970 { 971 uint16_t properties; 972 uint32_t min_interval; 973 uint32_t max_interval; 974 uint8_t chan_map; 975 uint8_t own_addr_type; 976 uint8_t peer_addr_type; 977 uint8_t peer_addr[6]; 978 uint8_t filter_policy; 979 int8_t tx_power; 980 uint8_t primary_phy; 981 uint8_t max_skip; 982 uint8_t secondary_phy; 983 uint8_t sid; 984 uint8_t scan_req_notif; 985 }; 986 987 /* LE Extended Advertising Report Event */ 988 struct hci_le_subev_ext_adv_rpt { 989 uint8_t num_reports; 990 struct hci_ext_adv_report_param params[0]; 991 } __attribute__((packed)); 992 993 /* LE Periodic Advertising Sync Established Event */ 994 struct hci_le_subev_per_adv_sync_estab { 995 uint8_t status; 996 uint16_t sync_handle; 997 uint8_t sid; 998 uint8_t adv_addr_type; 999 uint8_t adv_addr[6]; 1000 uint8_t adv_phy; 1001 uint16_t per_adv_ival; 1002 uint8_t adv_clk_accuracy; 1003 } __attribute__((packed)); 1004 1005 /* LE Periodic Advertising Report Event */ 1006 struct hci_le_subev_per_adv_rpt { 1007 uint16_t sync_handle; 1008 uint8_t tx_power; 1009 int8_t rssi; 1010 uint8_t _unused; 1011 uint8_t data_status; 1012 uint8_t data_length; 1013 uint8_t data[0]; 1014 } __attribute__((packed)); 1015 1016 /* LE Periodic Advertising Sync Lost Event */ 1017 struct hci_le_subev_per_adv_sync_lost { 1018 uint16_t sync_handle; 1019 } __attribute__((packed)); 1020 1021 /* LE Advertising Set Terminated Event */ 1022 struct hci_le_subev_adv_set_terminated { 1023 uint8_t status; 1024 uint8_t adv_handle; 1025 uint16_t conn_handle; 1026 uint8_t num_compl_ext_adv_ev; 1027 } __attribute__((packed)); 1028 1029 /* LE Scan Request Received Event */ 1030 struct hci_le_subev_scan_req_rcvd { 1031 uint8_t adv_handle; 1032 uint8_t scan_addr_type; 1033 uint8_t scan_addr[6]; 1034 } __attribute__((packed)); 1035 1036 #endif 1037 1038 /* LE Channel Selection Algorithm Event */ 1039 struct hci_le_subev_chan_sel_alg { 1040 uint16_t conn_handle; 1041 uint8_t chan_sel_alg; 1042 } __attribute__((packed)); 1043 1044 /* LE connection update command (ocf=0x0013). */ 1045 struct hci_conn_update 1046 { 1047 uint16_t handle; 1048 uint16_t conn_itvl_min; 1049 uint16_t conn_itvl_max; 1050 uint16_t conn_latency; 1051 uint16_t supervision_timeout; 1052 uint16_t min_ce_len; 1053 uint16_t max_ce_len; 1054 }; 1055 1056 /* LE start encryption command (ocf=0x0019) (note: fields out of order). */ 1057 struct hci_start_encrypt 1058 { 1059 uint16_t connection_handle; 1060 uint16_t encrypted_diversifier; 1061 uint64_t random_number; 1062 uint8_t long_term_key[16]; 1063 }; 1064 1065 /* LE long term key request reply command (ocf=0x001a). */ 1066 struct hci_lt_key_req_reply 1067 { 1068 uint16_t conn_handle; 1069 uint8_t long_term_key[16]; 1070 }; 1071 1072 /* LE Remote connection parameter request reply command */ 1073 struct hci_conn_param_reply 1074 { 1075 uint16_t handle; 1076 uint16_t conn_itvl_min; 1077 uint16_t conn_itvl_max; 1078 uint16_t conn_latency; 1079 uint16_t supervision_timeout; 1080 uint16_t min_ce_len; 1081 uint16_t max_ce_len; 1082 }; 1083 1084 /* LE Remote connection parameter request negative reply command */ 1085 struct hci_conn_param_neg_reply 1086 { 1087 uint16_t handle; 1088 uint8_t reason; 1089 }; 1090 1091 /* Encryption change event (code=0x08) (note: fields out of order) */ 1092 struct hci_encrypt_change 1093 { 1094 uint8_t status; 1095 uint8_t encryption_enabled; 1096 uint16_t connection_handle; 1097 }; 1098 1099 /* Encryption key refresh complete event (code=0x30) */ 1100 struct hci_encrypt_key_refresh 1101 { 1102 uint8_t status; 1103 uint16_t connection_handle; 1104 }; 1105 1106 /* Connection complete LE meta subevent */ 1107 struct hci_le_conn_complete 1108 { 1109 uint8_t subevent_code; 1110 uint8_t status; 1111 uint16_t connection_handle; 1112 uint8_t role; 1113 uint8_t peer_addr_type; 1114 uint8_t peer_addr[BLE_DEV_ADDR_LEN]; 1115 uint16_t conn_itvl; 1116 uint16_t conn_latency; 1117 uint16_t supervision_timeout; 1118 uint8_t master_clk_acc; 1119 uint8_t local_rpa[BLE_DEV_ADDR_LEN]; 1120 uint8_t peer_rpa[BLE_DEV_ADDR_LEN]; 1121 }; 1122 1123 /* Connection update complete LE meta subevent */ 1124 struct hci_le_conn_upd_complete 1125 { 1126 uint8_t subevent_code; 1127 uint8_t status; 1128 uint16_t connection_handle; 1129 uint16_t conn_itvl; 1130 uint16_t conn_latency; 1131 uint16_t supervision_timeout; 1132 }; 1133 1134 /* Remote connection parameter request LE meta subevent */ 1135 struct hci_le_conn_param_req 1136 { 1137 uint8_t subevent_code; 1138 uint16_t connection_handle; 1139 uint16_t itvl_min; 1140 uint16_t itvl_max; 1141 uint16_t latency; 1142 uint16_t timeout; 1143 }; 1144 1145 /* Read Remote Supported Features complete LE meta subevent */ 1146 struct hci_le_rd_rem_supp_feat_complete 1147 { 1148 uint8_t subevent_code; 1149 uint8_t status; 1150 uint16_t connection_handle; 1151 uint8_t features[8]; 1152 }; 1153 1154 /* LE long term key request event (note: fields out of order). */ 1155 struct hci_le_lt_key_req 1156 { 1157 uint64_t random_number; 1158 uint16_t connection_handle; 1159 uint16_t encrypted_diversifier; 1160 uint8_t subevent_code; 1161 }; 1162 1163 /* Disconnection complete event (note: fields out of order). */ 1164 struct hci_disconn_complete 1165 { 1166 uint16_t connection_handle; 1167 uint8_t status; 1168 uint8_t reason; 1169 }; 1170 1171 /* Read RSSI command-complete parameters (note: fields out of order). */ 1172 struct hci_read_rssi_ack_params 1173 { 1174 uint16_t connection_handle; 1175 uint8_t status; 1176 int8_t rssi; 1177 }; 1178 1179 /* PHY updated completed LE meta subevent */ 1180 struct hci_le_phy_upd_complete 1181 { 1182 uint8_t subevent_code; 1183 uint8_t status; 1184 uint16_t connection_handle; 1185 uint8_t tx_phy; 1186 uint8_t rx_phy; 1187 }; 1188 1189 /* LE Advertising Set Terminated subevent*/ 1190 struct hci_le_adv_set_terminated 1191 { 1192 uint8_t subevent_code; 1193 uint8_t status; 1194 uint8_t adv_handle; 1195 uint16_t conn_handle; 1196 uint8_t completed_events; 1197 }; 1198 1199 #define BLE_HCI_DATA_HDR_SZ 4 1200 #define BLE_HCI_DATA_HANDLE(handle_pb_bc) (((handle_pb_bc) & 0x0fff) >> 0) 1201 #define BLE_HCI_DATA_PB(handle_pb_bc) (((handle_pb_bc) & 0x3000) >> 12) 1202 #define BLE_HCI_DATA_BC(handle_pb_bc) (((handle_pb_bc) & 0xc000) >> 14) 1203 1204 struct hci_data_hdr 1205 { 1206 uint16_t hdh_handle_pb_bc; 1207 uint16_t hdh_len; 1208 }; 1209 1210 #define BLE_HCI_PB_FIRST_NON_FLUSH 0 1211 #define BLE_HCI_PB_MIDDLE 1 1212 #define BLE_HCI_PB_FIRST_FLUSH 2 1213 #define BLE_HCI_PB_FULL 3 1214 1215 struct hci_add_dev_to_resolving_list { 1216 uint8_t addr_type; 1217 uint8_t addr[6]; 1218 uint8_t local_irk[16]; 1219 uint8_t peer_irk[16]; 1220 }; 1221 1222 /* External data structures */ 1223 extern const uint8_t g_ble_hci_le_cmd_len[BLE_HCI_NUM_LE_CMDS]; 1224 1225 #ifdef __cplusplus 1226 } 1227 #endif 1228 1229 #endif /* H_BLE_HCI_COMMON_ */ 1230