1 /* 2 * Copyright (C) 2014 BlueKitchen GmbH 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of the copyright holders nor the names of 14 * contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 4. Any redistribution, use, or modification is done solely for 17 * personal benefit and not for any commercial purpose or for 18 * monetary gain. 19 * 20 * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BLUEKITCHEN 24 * GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 27 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 30 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * Please inquire about commercial licensing options at 34 * [email protected] 35 * 36 */ 37 38 #define BTSTACK_FILE__ "hci_cmd.c" 39 40 /* 41 * hci_cmd.c 42 * 43 * Created by Matthias Ringwald on 7/23/09. 44 */ 45 46 #include "btstack_config.h" 47 48 #include "hci.h" 49 #include "hci_cmd.h" 50 #include "btstack_debug.h" 51 52 #include <string.h> 53 54 55 #ifdef ENABLE_SDP 56 #include "classic/sdp_util.h" 57 #endif 58 59 // calculate combined ogf/ocf value 60 #define OPCODE(ogf, ocf) ((ocf) | ((ogf) << 10)) 61 62 #define INVALID_VAR_LEN 0xffffu 63 // hci_le_set_cig_parameters_test has 10 arrayed parameters 64 #define MAX_NR_ARRAY_FIELDS 10 65 #define INVALID_ARRAY_LEN 0xff 66 67 /** 68 * construct HCI Command based on template 69 * 70 * Format: 71 * 1,2,3,4: one to four byte value 72 * H: HCI connection handle 73 * B: Bluetooth Baseband Address (BD_ADDR) 74 * D: 8 byte data block 75 * E: Extended Inquiry Result 76 * N: Name up to 248 chars, \0 terminated 77 * P: 16 byte data block. Pairing code, Simple Pairing Hash and Randomizer 78 * A: 31 bytes advertising data 79 * S: Service Record (Data Element Sequence) 80 * Q: 32 byte data block, e.g. for X and Y coordinates of P-256 public key 81 * J: 8-bit length of variable size element 82 * V: variable size element, len was given with param 'J' 83 * a: number of elements in following arrayed parameters(s), specified as '[...]' 84 * b: bit field indicating number of arrayed parameters(s), specified as '[...]' 85 * [: start of arrayed param sequence 86 * ]: end of arrayed param sequence 87 */ 88 uint16_t hci_cmd_create_from_template(uint8_t *hci_cmd_buffer, const hci_cmd_t *cmd, va_list argptr){ 89 90 hci_cmd_buffer[0] = cmd->opcode & 0xffu; 91 hci_cmd_buffer[1] = cmd->opcode >> 8; 92 uint16_t pos = 3; 93 94 const char *format = cmd->format; 95 uint16_t word; 96 uint32_t longword; 97 uint8_t * ptr; 98 99 #ifdef ENABLE_BLE 100 // variable size data 101 uint16_t var_len = INVALID_VAR_LEN; 102 // array processing 103 const char * array_format = NULL; 104 void * array_data[MAX_NR_ARRAY_FIELDS]; 105 uint8_t array_num_elements = INVALID_ARRAY_LEN; 106 uint8_t array_num_fields; 107 uint8_t array_element_index; 108 bool array_done; 109 #endif 110 111 bool done_format = false; 112 while (!done_format) { 113 switch(*format) { 114 case 0: 115 done_format = true; 116 break; 117 case '1': // 8 bit value 118 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE 119 hci_cmd_buffer[pos++] = word & 0xffu; 120 break; 121 case '2': // 16 bit value 122 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE 123 hci_cmd_buffer[pos++] = word & 0xffu; 124 hci_cmd_buffer[pos++] = word >> 8; 125 break; 126 case 'H': // hci_handle 127 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE 128 hci_cmd_buffer[pos++] = word & 0xffu; 129 hci_cmd_buffer[pos++] = word >> 8; 130 break; 131 case '3': 132 longword = va_arg(argptr, uint32_t); // LCOV_EXCL_BR_LINE 133 hci_cmd_buffer[pos++] = longword; 134 hci_cmd_buffer[pos++] = longword >> 8; 135 hci_cmd_buffer[pos++] = longword >> 16; 136 break; 137 case '4': 138 longword = va_arg(argptr, uint32_t); // LCOV_EXCL_BR_LINE 139 hci_cmd_buffer[pos++] = longword; 140 hci_cmd_buffer[pos++] = longword >> 8; 141 hci_cmd_buffer[pos++] = longword >> 16; 142 hci_cmd_buffer[pos++] = longword >> 24; 143 break; 144 case 'B': // bt-addr 145 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 146 hci_cmd_buffer[pos++] = ptr[5]; 147 hci_cmd_buffer[pos++] = ptr[4]; 148 hci_cmd_buffer[pos++] = ptr[3]; 149 hci_cmd_buffer[pos++] = ptr[2]; 150 hci_cmd_buffer[pos++] = ptr[1]; 151 hci_cmd_buffer[pos++] = ptr[0]; 152 break; 153 case 'D': // 8 byte data block 154 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 155 (void)memcpy(&hci_cmd_buffer[pos], ptr, 8); 156 pos += 8; 157 break; 158 case 'E': // Extended Inquiry Information 240 octets 159 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 160 (void)memcpy(&hci_cmd_buffer[pos], ptr, 240); 161 pos += 240; 162 break; 163 case 'N': { // UTF-8 string, null terminated 164 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 165 uint16_t len = (uint16_t) strlen((const char*) ptr); 166 if (len > 248u) { 167 len = 248; 168 } 169 (void)memcpy(&hci_cmd_buffer[pos], ptr, len); 170 if (len < 248u) { 171 // fill remaining space with zeroes 172 memset(&hci_cmd_buffer[pos+len], 0u, 248u-len); 173 } 174 pos += 248; 175 break; 176 } 177 case 'P': // 16 byte PIN code or link key in little endian 178 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 179 (void)memcpy(&hci_cmd_buffer[pos], ptr, 16); 180 pos += 16; 181 break; 182 case 'K': // 16 byte OOB Data or Link Key in big endian 183 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 184 reverse_bytes(ptr, &hci_cmd_buffer[pos], 16); 185 pos += 16; 186 break; 187 #ifdef ENABLE_BLE 188 case 'A': // 31 bytes advertising data 189 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 190 (void)memcpy(&hci_cmd_buffer[pos], ptr, 31); 191 pos += 31; 192 break; 193 case 'J': // 8 bit variable length indicator for 'V' 194 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE 195 var_len = word & 0xffu; 196 hci_cmd_buffer[pos++] = (uint8_t) var_len; 197 break; 198 case 'V': 199 btstack_assert(var_len != INVALID_VAR_LEN); 200 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 201 (void)memcpy(&hci_cmd_buffer[pos], ptr, var_len); 202 pos += var_len; 203 var_len = INVALID_VAR_LEN; 204 break; 205 case 'a': 206 btstack_assert(array_num_elements == INVALID_ARRAY_LEN); 207 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE 208 hci_cmd_buffer[pos++] = word & 0xff; 209 array_num_elements = word & 0xffu; 210 break; 211 case 'b': 212 btstack_assert(array_num_elements == INVALID_ARRAY_LEN); 213 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE 214 hci_cmd_buffer[pos++] = word & 0xff; 215 array_num_elements = count_set_bits_uint32(word & 0xffu); 216 break; 217 case '[': 218 btstack_assert(array_num_elements != INVALID_ARRAY_LEN); 219 // process array 220 format++; 221 array_format = format; 222 array_num_fields = 0; 223 array_done = false; 224 while (!array_done){ 225 switch (*format){ 226 case 0: 227 array_done = true; 228 done_format = true; 229 break; 230 case ']': 231 array_done = true; 232 break; 233 case '1': 234 case '2': 235 // all arrayed parameters are passed in as arrays 236 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 237 array_data[array_num_fields++] = ptr; 238 format++; 239 break; 240 default: 241 btstack_unreachable(); 242 break; 243 } 244 } 245 for (array_element_index = 0; array_element_index < array_num_elements ; array_element_index++){ 246 uint8_t array_field_index; 247 for (array_field_index = 0; array_field_index < array_num_fields ; array_field_index++){ 248 switch (array_format[array_field_index]){ 249 case '1': 250 hci_cmd_buffer[pos++] = ((const uint8_t *) array_data[array_field_index])[array_element_index]; 251 break; 252 case '2': 253 little_endian_store_16(hci_cmd_buffer, pos, ((const uint16_t *) array_data[array_field_index])[array_element_index]); 254 pos += 2; 255 break; 256 default: 257 btstack_unreachable(); 258 break; 259 } 260 } 261 } 262 break; 263 #endif 264 #ifdef ENABLE_LE_SECURE_CONNECTIONS 265 case 'Q': 266 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 267 reverse_bytes(ptr, &hci_cmd_buffer[pos], 32); 268 pos += 32; 269 break; 270 #endif 271 #ifdef ENABLE_SDP 272 // used by daemon 273 case 'S': { // Service Record (Data Element Sequence) 274 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 275 uint16_t len = de_get_len(ptr); 276 (void)memcpy(&hci_cmd_buffer[pos], ptr, len); 277 pos += len; 278 break; 279 } 280 #endif 281 default: 282 btstack_unreachable(); 283 break; 284 } 285 format++; 286 }; 287 hci_cmd_buffer[2] = pos - 3; 288 return pos; 289 } 290 291 292 uint16_t hci_cmd_create_from_template_with_vargs(uint8_t * hci_cmd_buffer, const hci_cmd_t * cmd, ...){ 293 va_list argptr; 294 va_start(argptr, cmd); 295 uint16_t size = hci_cmd_create_from_template(hci_cmd_buffer, cmd, argptr); 296 va_end(argptr); 297 return size; 298 } 299 300 /** 301 * Link Control Commands 302 */ 303 304 /** 305 * @param lap 306 * @param inquiry_length 307 * @param num_responses 308 */ 309 const hci_cmd_t hci_inquiry = { 310 HCI_OPCODE_HCI_INQUIRY, "311" 311 }; 312 313 /** 314 */ 315 const hci_cmd_t hci_inquiry_cancel = { 316 HCI_OPCODE_HCI_INQUIRY_CANCEL, "" 317 }; 318 319 /** 320 * @param max_period_length 321 * @param min_period_length 322 * @param lap 323 * @param inquiry_length 324 * @param num_responses 325 */ 326 const hci_cmd_t hci_periodic_inquiry_mode = { 327 HCI_OPCODE_HCI_PERIODIC_INQUIRY_MODE, "22311" 328 }; 329 330 /** 331 */ 332 const hci_cmd_t hci_exit_periodic_inquiry_mode = { 333 HCI_OPCODE_HCI_EXIT_PERIODIC_INQUIRY_MODE, "" 334 }; 335 336 /** 337 * @param bd_addr 338 * @param packet_type 339 * @param page_scan_repetition_mode 340 * @param reserved 341 * @param clock_offset 342 * @param allow_role_switch 343 */ 344 const hci_cmd_t hci_create_connection = { 345 HCI_OPCODE_HCI_CREATE_CONNECTION, "B21121" 346 }; 347 348 /** 349 * @param handle 350 * @param reason (0x05, 0x13-0x15, 0x1a, 0x29, see Errors Codes in BT Spec Part D) 351 */ 352 const hci_cmd_t hci_disconnect = { 353 HCI_OPCODE_HCI_DISCONNECT, "H1" 354 }; 355 356 /** 357 * @param bd_addr 358 */ 359 const hci_cmd_t hci_create_connection_cancel = { 360 HCI_OPCODE_HCI_CREATE_CONNECTION_CANCEL, "B" 361 }; 362 363 /** 364 * @param bd_addr 365 * @param role (become master, stay slave) 366 */ 367 const hci_cmd_t hci_accept_connection_request = { 368 HCI_OPCODE_HCI_ACCEPT_CONNECTION_REQUEST, "B1" 369 }; 370 371 /** 372 * @param bd_addr 373 * @param reason (e.g. CONNECTION REJECTED DUE TO LIMITED RESOURCES (0x0d)) 374 */ 375 const hci_cmd_t hci_reject_connection_request = { 376 HCI_OPCODE_HCI_REJECT_CONNECTION_REQUEST, "B1" 377 }; 378 379 /** 380 * @param bd_addr 381 * @param link_key 382 */ 383 const hci_cmd_t hci_link_key_request_reply = { 384 HCI_OPCODE_HCI_LINK_KEY_REQUEST_REPLY, "BP" 385 }; 386 387 /** 388 * @param bd_addr 389 */ 390 const hci_cmd_t hci_link_key_request_negative_reply = { 391 HCI_OPCODE_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY, "B" 392 }; 393 394 /** 395 * @param bd_addr 396 * @param pin_length 397 * @param pin (c-string) 398 */ 399 const hci_cmd_t hci_pin_code_request_reply = { 400 HCI_OPCODE_HCI_PIN_CODE_REQUEST_REPLY, "B1P" 401 }; 402 403 /** 404 * @param bd_addr 405 */ 406 const hci_cmd_t hci_pin_code_request_negative_reply = { 407 HCI_OPCODE_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY, "B" 408 }; 409 410 /** 411 * @param handle 412 * @param packet_type 413 */ 414 const hci_cmd_t hci_change_connection_packet_type = { 415 HCI_OPCODE_HCI_CHANGE_CONNECTION_PACKET_TYPE, "H2" 416 }; 417 418 /** 419 * @param handle 420 */ 421 const hci_cmd_t hci_authentication_requested = { 422 HCI_OPCODE_HCI_AUTHENTICATION_REQUESTED, "H" 423 }; 424 425 /** 426 * @param handle 427 * @param encryption_enable 428 */ 429 const hci_cmd_t hci_set_connection_encryption = { 430 HCI_OPCODE_HCI_SET_CONNECTION_ENCRYPTION, "H1" 431 }; 432 433 /** 434 * @param handle 435 */ 436 const hci_cmd_t hci_change_connection_link_key = { 437 HCI_OPCODE_HCI_CHANGE_CONNECTION_LINK_KEY, "H" 438 }; 439 440 /** 441 * @param bd_addr 442 * @param page_scan_repetition_mode 443 * @param reserved 444 * @param clock_offset 445 */ 446 const hci_cmd_t hci_remote_name_request = { 447 HCI_OPCODE_HCI_REMOTE_NAME_REQUEST, "B112" 448 }; 449 450 451 /** 452 * @param bd_addr 453 */ 454 const hci_cmd_t hci_remote_name_request_cancel = { 455 HCI_OPCODE_HCI_REMOTE_NAME_REQUEST_CANCEL, "B" 456 }; 457 458 /** 459 * @param handle 460 */ 461 const hci_cmd_t hci_read_remote_supported_features_command = { 462 HCI_OPCODE_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND, "H" 463 }; 464 465 /** 466 * @param handle 467 */ 468 const hci_cmd_t hci_read_remote_extended_features_command = { 469 HCI_OPCODE_HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND, "H1" 470 }; 471 472 /** 473 * @param handle 474 */ 475 const hci_cmd_t hci_read_remote_version_information = { 476 HCI_OPCODE_HCI_READ_REMOTE_VERSION_INFORMATION, "H" 477 }; 478 479 /** 480 * @param handle 481 */ 482 const hci_cmd_t hci_read_clock_offset = { 483 HCI_OPCODE_HCI_READ_CLOCK_OFFSET, "H" 484 }; 485 486 /** 487 * @param handle 488 * @param transmit_bandwidth 8000(64kbps) 489 * @param receive_bandwidth 8000(64kbps) 490 * @param max_latency >= 7ms for eSCO, 0xFFFF do not care 491 * @param voice_settings e.g. CVSD, Input Coding: Linear, Input Data Format: 2’s complement, data 16bit: 00011000000 == 0x60 492 * @param retransmission_effort e.g. 0xFF do not care 493 * @param packet_type at least EV3 for eSCO 494 */ 495 const hci_cmd_t hci_setup_synchronous_connection = { 496 HCI_OPCODE_HCI_SETUP_SYNCHRONOUS_CONNECTION, "H442212" 497 }; 498 499 /** 500 * @param bd_addr 501 * @param transmit_bandwidth 502 * @param receive_bandwidth 503 * @param max_latency 504 * @param voice_settings 505 * @param retransmission_effort 506 * @param packet_type 507 */ 508 const hci_cmd_t hci_accept_synchronous_connection = { 509 HCI_OPCODE_HCI_ACCEPT_SYNCHRONOUS_CONNECTION, "B442212" 510 }; 511 512 /** 513 * @param bd_addr 514 * @param IO_capability 515 * @param OOB_data_present 516 * @param authentication_requirements 517 */ 518 const hci_cmd_t hci_io_capability_request_reply = { 519 HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_REPLY, "B111" 520 }; 521 522 /** 523 * @param bd_addr 524 */ 525 const hci_cmd_t hci_user_confirmation_request_reply = { 526 HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_REPLY, "B" 527 }; 528 529 /** 530 * @param bd_addr 531 */ 532 const hci_cmd_t hci_user_confirmation_request_negative_reply = { 533 HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY, "B" 534 }; 535 536 /** 537 * @param bd_addr 538 * @param numeric_value 539 */ 540 const hci_cmd_t hci_user_passkey_request_reply = { 541 HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_REPLY, "B4" 542 }; 543 544 /** 545 * @param bd_addr 546 */ 547 const hci_cmd_t hci_user_passkey_request_negative_reply = { 548 HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY, "B" 549 }; 550 551 /** 552 * @param bd_addr 553 * @param c Simple Pairing Hash C 554 * @param r Simple Pairing Randomizer R 555 */ 556 const hci_cmd_t hci_remote_oob_data_request_reply = { 557 HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_REPLY, "BKK" 558 }; 559 560 /** 561 * @param bd_addr 562 */ 563 const hci_cmd_t hci_remote_oob_data_request_negative_reply = { 564 HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY, "B" 565 }; 566 567 /** 568 * @param bd_addr 569 * @param reason (Part D, Error codes) 570 */ 571 const hci_cmd_t hci_io_capability_request_negative_reply = { 572 HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY, "B1" 573 }; 574 575 /** 576 * @param handle 577 * @param transmit_bandwidth 578 * @param receive_bandwidth 579 * @param transmit_coding_format_type 580 * @param transmit_coding_format_company 581 * @param transmit_coding_format_codec 582 * @param receive_coding_format_type 583 * @param receive_coding_format_company 584 * @param receive_coding_format_codec 585 * @param transmit_coding_frame_size 586 * @param receive_coding_frame_size 587 * @param input_bandwidth 588 * @param output_bandwidth 589 * @param input_coding_format_type 590 * @param input_coding_format_company 591 * @param input_coding_format_codec 592 * @param output_coding_format_type 593 * @param output_coding_format_company 594 * @param output_coding_format_codec 595 * @param input_coded_data_size 596 * @param outupt_coded_data_size 597 * @param input_pcm_data_format 598 * @param output_pcm_data_format 599 * @param input_pcm_sample_payload_msb_position 600 * @param output_pcm_sample_payload_msb_position 601 * @param input_data_path 602 * @param output_data_path 603 * @param input_transport_unit_size 604 * @param output_transport_unit_size 605 * @param max_latency 606 * @param packet_type 607 * @param retransmission_effort 608 */ 609 const hci_cmd_t hci_enhanced_setup_synchronous_connection = { 610 HCI_OPCODE_HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION, "H4412212222441221222211111111221" 611 }; 612 613 /** 614 * @param bd_addr 615 * @param transmit_bandwidth 616 * @param receive_bandwidth 617 * @param transmit_coding_format_type 618 * @param transmit_coding_format_company 619 * @param transmit_coding_format_codec 620 * @param receive_coding_format_type 621 * @param receive_coding_format_company 622 * @param receive_coding_format_codec 623 * @param transmit_coding_frame_size 624 * @param receive_coding_frame_size 625 * @param input_bandwidth 626 * @param output_bandwidth 627 * @param input_coding_format_type 628 * @param input_coding_format_company 629 * @param input_coding_format_codec 630 * @param output_coding_format_type 631 * @param output_coding_format_company 632 * @param output_coding_format_codec 633 * @param input_coded_data_size 634 * @param outupt_coded_data_size 635 * @param input_pcm_data_format 636 * @param output_pcm_data_format 637 * @param input_pcm_sample_payload_msb_position 638 * @param output_pcm_sample_payload_msb_position 639 * @param input_data_path 640 * @param output_data_path 641 * @param input_transport_unit_size 642 * @param output_transport_unit_size 643 * @param max_latency 644 * @param packet_type 645 * @param retransmission_effort 646 */ 647 const hci_cmd_t hci_enhanced_accept_synchronous_connection = { 648 HCI_OPCODE_HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION, "B4412212222441221222211111111221" 649 }; 650 651 /** 652 * @param bd_addr 653 * @param c_192 Simple Pairing Hash C derived from P-192 public key 654 * @param r_192 Simple Pairing Randomizer derived from P-192 public key 655 * @param c_256 Simple Pairing Hash C derived from P-256 public key 656 * @param r_256 Simple Pairing Randomizer derived from P-256 public key 657 */ 658 const hci_cmd_t hci_remote_oob_extended_data_request_reply = { 659 HCI_OPCODE_HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY, "BKKKK" 660 }; 661 662 /** 663 * Link Policy Commands 664 */ 665 666 /** 667 * @param handle 668 * @param hold_mode_max_interval * 0.625 ms, range: 0x0002..0xFFFE; only even values are valid. 669 * @param hold_mode_min_interval * 0.625 ms, range: 0x0002..0xFFFE; only even values are valid. 670 */ 671 const hci_cmd_t hci_hold_mode = { 672 HCI_OPCODE_HCI_HOLD_MODE, "H22" 673 }; 674 675 /** 676 * @param handle 677 * @param sniff_max_interval 678 * @param sniff_min_interval 679 * @param sniff_attempt 680 * @param sniff_timeout 681 */ 682 const hci_cmd_t hci_sniff_mode = { 683 HCI_OPCODE_HCI_SNIFF_MODE, "H2222" 684 }; 685 686 /** 687 * @param handle 688 */ 689 const hci_cmd_t hci_exit_sniff_mode = { 690 HCI_OPCODE_HCI_EXIT_SNIFF_MODE, "H" 691 }; 692 693 /** 694 * @note Removed in Bluetooth Core v5.0 695 * @param handle 696 * @param beacon_max_interval * 0.625 ms, range: 0x000E..0xFFFE; only even values are valid. 697 * @param beacon_max_interval * 0.625 ms, range: 0x000E..0xFFFE; only even values are valid. 698 */ 699 const hci_cmd_t hci_park_state = { 700 HCI_OPCODE_HCI_PARK_STATE, "H22" 701 }; 702 703 /** 704 * @note Removed in Bluetooth Core v5.0 705 * @param handle 706 */ 707 const hci_cmd_t hci_exit_park_state = { 708 HCI_OPCODE_HCI_EXIT_PARK_STATE, "H" 709 }; 710 711 /** 712 * @param handle 713 * @param flags 714 * @param service_type 715 * @param token_rate (bytes/s) 716 * @param peak_bandwith (bytes/s) 717 * @param latency (us) 718 * @param delay_variation (us) 719 */ 720 const hci_cmd_t hci_qos_setup = { 721 HCI_OPCODE_HCI_QOS_SETUP, "H114444" 722 }; 723 724 /** 725 * @param handle 726 */ 727 const hci_cmd_t hci_role_discovery = { 728 HCI_OPCODE_HCI_ROLE_DISCOVERY, "H" 729 }; 730 731 /** 732 * @param bd_addr 733 * @param role (0=master,1=slave) 734 */ 735 const hci_cmd_t hci_switch_role_command= { 736 HCI_OPCODE_HCI_SWITCH_ROLE_COMMAND, "B1" 737 }; 738 739 /** 740 * @param handle 741 */ 742 const hci_cmd_t hci_read_link_policy_settings = { 743 HCI_OPCODE_HCI_READ_LINK_POLICY_SETTINGS, "H" 744 }; 745 746 /** 747 * @param handle 748 * @param settings 749 */ 750 const hci_cmd_t hci_write_link_policy_settings = { 751 HCI_OPCODE_HCI_WRITE_LINK_POLICY_SETTINGS, "H2" 752 }; 753 754 /** 755 * @param handle 756 * @param max_latency 757 * @param min_remote_timeout 758 * @param min_local_timeout 759 */ 760 const hci_cmd_t hci_sniff_subrating = { 761 HCI_OPCODE_HCI_SNIFF_SUBRATING, "H222" 762 }; 763 764 /** 765 * @param policy 766 */ 767 const hci_cmd_t hci_write_default_link_policy_setting = { 768 HCI_OPCODE_HCI_WRITE_DEFAULT_LINK_POLICY_SETTING, "2" 769 }; 770 771 /** 772 * @param handle 773 * @param unused 774 * @param flow_direction 775 * @param service_type 776 * @param token_rate 777 * @param token_bucket_size 778 * @param peak_bandwidth 779 * @param access_latency 780 */ 781 const hci_cmd_t hci_flow_specification = { 782 HCI_OPCODE_HCI_FLOW_SPECIFICATION, "H1114444" 783 }; 784 785 786 /** 787 * Controller & Baseband Commands 788 */ 789 790 791 /** 792 * @param event_mask_lower_octets 793 * @param event_mask_higher_octets 794 */ 795 const hci_cmd_t hci_set_event_mask = { 796 HCI_OPCODE_HCI_SET_EVENT_MASK, "44" 797 }; 798 799 /** 800 */ 801 const hci_cmd_t hci_reset = { 802 HCI_OPCODE_HCI_RESET, "" 803 }; 804 805 /** 806 * @param handle 807 */ 808 const hci_cmd_t hci_flush = { 809 HCI_OPCODE_HCI_FLUSH, "H" 810 }; 811 812 /** 813 * @param handle 814 */ 815 const hci_cmd_t hci_read_pin_type = { 816 HCI_OPCODE_HCI_READ_PIN_TYPE, "" 817 }; 818 819 /** 820 * @param handle 821 */ 822 const hci_cmd_t hci_write_pin_type = { 823 HCI_OPCODE_HCI_WRITE_PIN_TYPE, "1" 824 }; 825 826 /** 827 * @param bd_addr 828 * @param delete_all_flags 829 */ 830 const hci_cmd_t hci_delete_stored_link_key = { 831 HCI_OPCODE_HCI_DELETE_STORED_LINK_KEY, "B1" 832 }; 833 834 #ifdef ENABLE_CLASSIC 835 /** 836 * @param local_name (UTF-8, Null Terminated, max 248 octets) 837 */ 838 const hci_cmd_t hci_write_local_name = { 839 HCI_OPCODE_HCI_WRITE_LOCAL_NAME, "N" 840 }; 841 #endif 842 843 /** 844 */ 845 const hci_cmd_t hci_read_local_name = { 846 HCI_OPCODE_HCI_READ_LOCAL_NAME, "" 847 }; 848 849 /** 850 */ 851 const hci_cmd_t hci_read_page_timeout = { 852 HCI_OPCODE_HCI_READ_PAGE_TIMEOUT, "" 853 }; 854 855 /** 856 * @param page_timeout (* 0.625 ms) 857 */ 858 const hci_cmd_t hci_write_page_timeout = { 859 HCI_OPCODE_HCI_WRITE_PAGE_TIMEOUT, "2" 860 }; 861 862 /** 863 * @param scan_enable (no, inq, page, inq+page) 864 */ 865 const hci_cmd_t hci_write_scan_enable = { 866 HCI_OPCODE_HCI_WRITE_SCAN_ENABLE, "1" 867 }; 868 869 /** 870 */ 871 const hci_cmd_t hci_read_page_scan_activity = { 872 HCI_OPCODE_HCI_READ_PAGE_SCAN_ACTIVITY, "" 873 }; 874 875 /** 876 * @param page_scan_interval (* 0.625 ms) 877 * @param page_scan_window (* 0.625 ms, must be <= page_scan_interval) 878 */ 879 const hci_cmd_t hci_write_page_scan_activity = { 880 HCI_OPCODE_HCI_WRITE_PAGE_SCAN_ACTIVITY, "22" 881 }; 882 883 /** 884 */ 885 const hci_cmd_t hci_read_inquiry_scan_activity = { 886 HCI_OPCODE_HCI_READ_INQUIRY_SCAN_ACTIVITY, "" 887 }; 888 889 /** 890 * @param inquiry_scan_interval (* 0.625 ms) 891 * @param inquiry_scan_window (* 0.625 ms, must be <= inquiry_scan_interval) 892 */ 893 const hci_cmd_t hci_write_inquiry_scan_activity = { 894 HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_ACTIVITY, "22" 895 }; 896 897 /** 898 * @param authentication_enable 899 */ 900 const hci_cmd_t hci_write_authentication_enable = { 901 HCI_OPCODE_HCI_WRITE_AUTHENTICATION_ENABLE, "1" 902 }; 903 904 /** 905 * @param handle 906 * @param timeout, max 0x07FF 907 */ 908 const hci_cmd_t hci_write_automatic_flush_timeout = { 909 HCI_OPCODE_HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT, "H2" 910 }; 911 912 /** 913 * @param class_of_device 914 */ 915 const hci_cmd_t hci_write_class_of_device = { 916 HCI_OPCODE_HCI_WRITE_CLASS_OF_DEVICE, "3" 917 }; 918 919 /** 920 */ 921 const hci_cmd_t hci_read_num_broadcast_retransmissions = { 922 HCI_OPCODE_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS, "" 923 }; 924 925 /** 926 * @param num_broadcast_retransmissions (e.g. 0 for a single broadcast) 927 */ 928 const hci_cmd_t hci_write_num_broadcast_retransmissions = { 929 HCI_OPCODE_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS, "1" 930 }; 931 932 /** 933 * @param connection_handle 934 * @param type 0 = current transmit level, 1 = max transmit level 935 */ 936 const hci_cmd_t hci_read_transmit_power_level = { 937 HCI_OPCODE_HCI_READ_TRANSMIT_POWER_LEVEL, "H1" 938 }; 939 940 /** 941 * @param synchronous_flow_control_enable - if yes, num completed packet everts are sent for SCO packets 942 */ 943 const hci_cmd_t hci_write_synchronous_flow_control_enable = { 944 HCI_OPCODE_HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE, "1" 945 }; 946 947 #ifdef ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL 948 949 /** 950 * @param flow_control_enable - 0: off, 1: ACL only, 2: SCO only, 3: ACL + SCO 951 */ 952 const hci_cmd_t hci_set_controller_to_host_flow_control = { 953 HCI_OPCODE_HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL, "1" 954 }; 955 956 /** 957 * @param host_acl_data_packet_length 958 * @param host_synchronous_data_packet_length 959 * @param host_total_num_acl_data_packets 960 * @param host_total_num_synchronous_data_packets 961 */ 962 const hci_cmd_t hci_host_buffer_size = { 963 HCI_OPCODE_HCI_HOST_BUFFER_SIZE, "2122" 964 }; 965 966 967 #if 0 968 // 969 // command sent manually sent by hci_host_num_completed_packets 970 // 971 /** 972 * @note only single handle supported by BTstack command generator 973 * @param number_of_handles must be 1 974 * @param connection_handle 975 * @param host_num_of_completed_packets for the given connection handle 976 */ 977 const hci_cmd_t hci_host_number_of_completed_packets = { 978 HCI_OPCODE_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS, "1H2" 979 }; 980 #endif 981 982 #endif 983 984 /** 985 * @param handle 986 */ 987 const hci_cmd_t hci_read_link_supervision_timeout = { 988 HCI_OPCODE_HCI_READ_LINK_SUPERVISION_TIMEOUT, "H" 989 }; 990 991 /** 992 * @param handle 993 * @param timeout (0x0001 - 0xFFFF Time -> Range: 0.625ms - 40.9 sec) 994 */ 995 const hci_cmd_t hci_write_link_supervision_timeout = { 996 HCI_OPCODE_HCI_WRITE_LINK_SUPERVISION_TIMEOUT, "H2" 997 }; 998 999 /** 1000 * @param num_current_iac must be 2 1001 * @param iac_lap1 1002 * @param iac_lap2 1003 */ 1004 const hci_cmd_t hci_write_current_iac_lap_two_iacs = { 1005 HCI_OPCODE_HCI_WRITE_CURRENT_IAC_LAP_TWO_IACS, "133" 1006 }; 1007 1008 /** 1009 * @param inquiry_scan_type (0x00 = standard, 0x01 = interlaced) 1010 */ 1011 const hci_cmd_t hci_write_inquiry_scan_type = { 1012 HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_TYPE, "1" 1013 }; 1014 1015 /** 1016 * @param inquiry_mode (0x00 = standard, 0x01 = with RSSI, 0x02 = extended) 1017 */ 1018 const hci_cmd_t hci_write_inquiry_mode = { 1019 HCI_OPCODE_HCI_WRITE_INQUIRY_MODE, "1" 1020 }; 1021 1022 /** 1023 * @param page_scan_type (0x00 = standard, 0x01 = interlaced) 1024 */ 1025 const hci_cmd_t hci_write_page_scan_type = { 1026 HCI_OPCODE_HCI_WRITE_PAGE_SCAN_TYPE, "1" 1027 }; 1028 1029 /** 1030 * @param fec_required 1031 * @param exstended_inquiry_response 1032 */ 1033 const hci_cmd_t hci_write_extended_inquiry_response = { 1034 HCI_OPCODE_HCI_WRITE_EXTENDED_INQUIRY_RESPONSE, "1E" 1035 }; 1036 1037 /** 1038 * @param mode (0 = off, 1 = on) 1039 */ 1040 const hci_cmd_t hci_write_simple_pairing_mode = { 1041 HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_MODE, "1" 1042 }; 1043 1044 /** 1045 */ 1046 const hci_cmd_t hci_read_local_oob_data = { 1047 HCI_OPCODE_HCI_READ_LOCAL_OOB_DATA, "" 1048 // return status, C, R 1049 }; 1050 1051 /** 1052 */ 1053 const hci_cmd_t hci_read_inquiry_response_transmit_power_level = { 1054 HCI_OPCODE_HCI_READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL, "" 1055 // return status, pwr level 1056 }; 1057 1058 /** 1059 */ 1060 const hci_cmd_t hci_write_inquiry_transmit_power_level = { 1061 HCI_OPCODE_HCI_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL, "1" 1062 // return status 1063 }; 1064 1065 /** 1066 * @param mode (0 = off, 1 = on) 1067 */ 1068 const hci_cmd_t hci_write_default_erroneous_data_reporting = { 1069 HCI_OPCODE_HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING, "1" 1070 }; 1071 1072 /** 1073 * @param event_mask_page_2_lower_octets 1074 * @param event_mask_page_2_higher_octets 1075 */ 1076 const hci_cmd_t hci_set_event_mask_2 = { 1077 HCI_OPCODE_HCI_SET_EVENT_MASK_2, "44" 1078 }; 1079 1080 /** 1081 */ 1082 const hci_cmd_t hci_read_le_host_supported = { 1083 HCI_OPCODE_HCI_READ_LE_HOST_SUPPORTED, "" 1084 // return: status, le supported host, simultaneous le host 1085 }; 1086 1087 /** 1088 * @param le_supported_host 1089 * @param simultaneous_le_host 1090 */ 1091 const hci_cmd_t hci_write_le_host_supported = { 1092 HCI_OPCODE_HCI_WRITE_LE_HOST_SUPPORTED, "11" 1093 // return: status 1094 }; 1095 1096 /** 1097 * @param secure_connections_host_support 1098 */ 1099 const hci_cmd_t hci_write_secure_connections_host_support = { 1100 HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT, "1" 1101 // return: status 1102 }; 1103 1104 /** 1105 */ 1106 const hci_cmd_t hci_read_local_extended_oob_data = { 1107 HCI_OPCODE_HCI_READ_LOCAL_EXTENDED_OOB_DATA, "" 1108 // return status, C_192, R_192, R_256, C_256 1109 }; 1110 1111 /** 1112 */ 1113 const hci_cmd_t hci_read_extended_page_timeout = { 1114 HCI_OPCODE_HCI_READ_EXTENDED_PAGE_TIMEOUT, "" 1115 // return: status, extender page timeout 1116 }; 1117 1118 /** 1119 * @param extended_page_timeout 1120 */ 1121 const hci_cmd_t hci_write_extended_page_timeout = { 1122 HCI_OPCODE_HCI_WRITE_EXTENDED_PAGE_TIMEOUT, "2" 1123 // return: status 1124 }; 1125 1126 /** 1127 */ 1128 const hci_cmd_t hci_read_extended_inquiry_length = { 1129 HCI_OPCODE_HCI_READ_EXTENDED_INQUIRY_LENGTH, "" 1130 // return: status, extended_inquiry_length 1131 }; 1132 1133 /** 1134 * @param extended_inquiry_length 1135 */ 1136 const hci_cmd_t hci_write_extended_inquiry_length = { 1137 HCI_OPCODE_HCI_WRITE_EXTENDED_INQUIRY_LENGTH, "2" 1138 // return: status 1139 }; 1140 1141 /** 1142 * @param interval 1143 */ 1144 const hci_cmd_t hci_set_ecosystem_base_interval = { 1145 HCI_OPCODE_HCI_SET_ECOSYSTEM_BASE_INTERVAL, "2" 1146 // return: status 1147 }; 1148 1149 /** 1150 * @param data_path_direction 1151 * @param data_path_id 1152 * @param vendor_specific_config_length 1153 * @param vendor_specific_config 1154 */ 1155 const hci_cmd_t hci_configure_data_path = { 1156 HCI_OPCODE_HCI_CONFIGURE_DATA_PATH, "11JV" 1157 // return: status 1158 }; 1159 1160 /** 1161 * @param min_encryption_key_size 1162 */ 1163 const hci_cmd_t hci_set_min_encryption_key_size = { 1164 HCI_OPCODE_HCI_SET_MIN_ENCRYPTION_KEY_SIZE, "1" 1165 // return: status 1166 }; 1167 1168 1169 /** 1170 * Testing Commands 1171 */ 1172 1173 1174 /** 1175 */ 1176 const hci_cmd_t hci_read_loopback_mode = { 1177 HCI_OPCODE_HCI_READ_LOOPBACK_MODE, "" 1178 // return: status, loopback mode (0 = off, 1 = local loopback, 2 = remote loopback) 1179 }; 1180 1181 /** 1182 * @param loopback_mode 1183 */ 1184 const hci_cmd_t hci_write_loopback_mode = { 1185 HCI_OPCODE_HCI_WRITE_LOOPBACK_MODE, "1" 1186 // return: status 1187 }; 1188 1189 /** 1190 */ 1191 const hci_cmd_t hci_enable_device_under_test_mode = { 1192 HCI_OPCODE_HCI_ENABLE_DEVICE_UNDER_TEST_MODE, "" 1193 // return: status 1194 }; 1195 1196 /** 1197 * @param simple_pairing_debug_mode 1198 */ 1199 const hci_cmd_t hci_write_simple_pairing_debug_mode = { 1200 HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE, "1" 1201 // return: status 1202 }; 1203 1204 /** 1205 * @param handle 1206 * @param dm1_acl_u_mode 1207 * @param esco_loopback_mode 1208 */ 1209 const hci_cmd_t hci_write_secure_connections_test_mode = { 1210 HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE, "H11" 1211 // return: status 1212 }; 1213 1214 1215 /** 1216 * Informational Parameters 1217 */ 1218 1219 const hci_cmd_t hci_read_local_version_information = { 1220 HCI_OPCODE_HCI_READ_LOCAL_VERSION_INFORMATION, "" 1221 }; 1222 const hci_cmd_t hci_read_local_supported_commands = { 1223 HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_COMMANDS, "" 1224 }; 1225 const hci_cmd_t hci_read_local_supported_features = { 1226 HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_FEATURES, "" 1227 }; 1228 const hci_cmd_t hci_read_buffer_size = { 1229 HCI_OPCODE_HCI_READ_BUFFER_SIZE, "" 1230 }; 1231 const hci_cmd_t hci_read_bd_addr = { 1232 HCI_OPCODE_HCI_READ_BD_ADDR, "" 1233 }; 1234 1235 /** 1236 * Status Paramteers 1237 */ 1238 1239 /** 1240 * @param handle 1241 */ 1242 const hci_cmd_t hci_read_failed_contact_counter = { 1243 HCI_OPCODE_HCI_READ_FAILED_CONTACT_COUNTER, "H" 1244 }; 1245 1246 /** 1247 * @param handle 1248 */ 1249 const hci_cmd_t hci_reset_failed_contact_counter = { 1250 HCI_OPCODE_HCI_RESET_FAILED_CONTACT_COUNTER, "H" 1251 }; 1252 1253 /** 1254 * @param handle 1255 */ 1256 const hci_cmd_t hci_read_link_quality = { 1257 HCI_OPCODE_HCI_READ_LINK_QUALITY, "H" 1258 }; 1259 1260 /** 1261 * @param handle 1262 */ 1263 const hci_cmd_t hci_read_rssi = { 1264 HCI_OPCODE_HCI_READ_RSSI, "H" 1265 }; 1266 1267 /** 1268 * @param handle 1269 * @param which_clock 1270 */ 1271 const hci_cmd_t hci_read_clock = { 1272 HCI_OPCODE_HCI_READ_CLOCK, "H1" 1273 }; 1274 1275 /** 1276 * @param handle 1277 */ 1278 const hci_cmd_t hci_read_encryption_key_size = { 1279 HCI_OPCODE_HCI_READ_ENCRYPTION_KEY_SIZE, "H" 1280 }; 1281 1282 1283 #ifdef ENABLE_BLE 1284 /** 1285 * Low Energy Commands 1286 */ 1287 1288 /** 1289 * @param event_mask_lower_octets 1290 * @param event_mask_higher_octets 1291 */ 1292 const hci_cmd_t hci_le_set_event_mask = { 1293 HCI_OPCODE_HCI_LE_SET_EVENT_MASK, "44" 1294 // return: status 1295 }; 1296 1297 const hci_cmd_t hci_le_read_buffer_size = { 1298 HCI_OPCODE_HCI_LE_READ_BUFFER_SIZE, "" 1299 // return: status, le acl data packet len (16), total num le acl data packets(8) 1300 }; 1301 const hci_cmd_t hci_le_read_local_supported_features = { 1302 HCI_OPCODE_HCI_LE_READ_LOCAL_SUPPORTED_FEATURES, "" 1303 // return: LE_Features See [Vol 6] Part B, Section 4.6 1304 }; 1305 1306 /** 1307 * @param random_bd_addr 1308 */ 1309 const hci_cmd_t hci_le_set_random_address = { 1310 HCI_OPCODE_HCI_LE_SET_RANDOM_ADDRESS, "B" 1311 // return: status 1312 }; 1313 1314 /** 1315 * @param advertising_interval_min ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec) 1316 * @param advertising_interval_max ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec) 1317 * @param advertising_type (enum from 0: ADV_IND, ADC_DIRECT_IND, ADV_SCAN_IND, ADV_NONCONN_IND) 1318 * @param own_address_type (enum from 0: public device address, random device address) 1319 * @param direct_address_type () 1320 * @param direct_address (public or random address of device to be connecteed) 1321 * @param advertising_channel_map (flags: chan_37(1), chan_38(2), chan_39(4)) 1322 * @param advertising_filter_policy (enum from 0: scan any conn any, scan whitelist, con any, scan any conn whitelist, scan whitelist, con whitelist) 1323 */ 1324 const hci_cmd_t hci_le_set_advertising_parameters = { 1325 HCI_OPCODE_HCI_LE_SET_ADVERTISING_PARAMETERS, "22111B11" 1326 // return: status 1327 }; 1328 1329 const hci_cmd_t hci_le_read_advertising_channel_tx_power = { 1330 HCI_OPCODE_HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER, "" 1331 // return: status, level [-20,10] signed int (8), units dBm 1332 }; 1333 1334 /** 1335 * @param advertising_data_length 1336 * @param advertising_data (31 bytes) 1337 */ 1338 const hci_cmd_t hci_le_set_advertising_data= { 1339 HCI_OPCODE_HCI_LE_SET_ADVERTISING_DATA, "1A" 1340 // return: status 1341 }; 1342 1343 /** 1344 * @param scan_response_data_length 1345 * @param scan_response_data (31 bytes) 1346 */ 1347 const hci_cmd_t hci_le_set_scan_response_data= { 1348 HCI_OPCODE_HCI_LE_SET_SCAN_RESPONSE_DATA, "1A" 1349 // return: status 1350 }; 1351 1352 /** 1353 * @param advertise_enable (off: 0, on: 1) 1354 */ 1355 const hci_cmd_t hci_le_set_advertise_enable = { 1356 HCI_OPCODE_HCI_LE_SET_ADVERTISE_ENABLE, "1" 1357 // return: status 1358 }; 1359 1360 /** 1361 * @param le_scan_type (passive (0), active (1)) 1362 * @param le_scan_interval ([0x0004,0x4000], unit: 0.625 msec) 1363 * @param le_scan_window ([0x0004,0x4000], unit: 0.625 msec) 1364 * @param own_address_type (public (0), random (1)) 1365 * @param scanning_filter_policy (any (0), only whitelist (1)) 1366 */ 1367 const hci_cmd_t hci_le_set_scan_parameters = { 1368 HCI_OPCODE_HCI_LE_SET_SCAN_PARAMETERS, "12211" 1369 // return: status 1370 }; 1371 1372 /** 1373 * @param le_scan_enable (disabled (0), enabled (1)) 1374 * @param filter_duplices (disabled (0), enabled (1)) 1375 */ 1376 const hci_cmd_t hci_le_set_scan_enable = { 1377 HCI_OPCODE_HCI_LE_SET_SCAN_ENABLE, "11" 1378 // return: status 1379 }; 1380 1381 /** 1382 * @param le_scan_interval ([0x0004, 0x4000], unit: 0.625 msec) 1383 * @param le_scan_window ([0x0004, 0x4000], unit: 0.625 msec) 1384 * @param initiator_filter_policy (peer address type + peer address (0), whitelist (1)) 1385 * @param peer_address_type (public (0), random (1)) 1386 * @param peer_address 1387 * @param own_address_type (public (0), random (1)) 1388 * @param conn_interval_min ([0x0006, 0x0c80], unit: 1.25 msec) 1389 * @param conn_interval_max ([0x0006, 0x0c80], unit: 1.25 msec) 1390 * @param conn_latency (number of connection events [0x0000, 0x01f4]) 1391 * @param supervision_timeout ([0x000a, 0x0c80], unit: 10 msec) 1392 * @param minimum_CE_length ([0x0000, 0xffff], unit: 0.625 msec) 1393 * @param maximum_CE_length ([0x0000, 0xffff], unit: 0.625 msec) 1394 */ 1395 const hci_cmd_t hci_le_create_connection= { 1396 HCI_OPCODE_HCI_LE_CREATE_CONNECTION, "2211B1222222" 1397 // return: none -> le create connection complete event 1398 }; 1399 1400 const hci_cmd_t hci_le_create_connection_cancel = { 1401 HCI_OPCODE_HCI_LE_CREATE_CONNECTION_CANCEL, "" 1402 // return: status 1403 }; 1404 1405 const hci_cmd_t hci_le_read_white_list_size = { 1406 HCI_OPCODE_HCI_LE_READ_WHITE_LIST_SIZE, "" 1407 // return: status, number of entries in controller whitelist 1408 }; 1409 1410 const hci_cmd_t hci_le_clear_white_list = { 1411 HCI_OPCODE_HCI_LE_CLEAR_WHITE_LIST, "" 1412 // return: status 1413 }; 1414 1415 /** 1416 * @param address_type (public (0), random (1)) 1417 * @param bd_addr 1418 */ 1419 const hci_cmd_t hci_le_add_device_to_white_list = { 1420 HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_WHITE_LIST, "1B" 1421 // return: status 1422 }; 1423 1424 /** 1425 * @param address_type (public (0), random (1)) 1426 * @param bd_addr 1427 */ 1428 const hci_cmd_t hci_le_remove_device_from_white_list = { 1429 HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST, "1B" 1430 // return: status 1431 }; 1432 1433 /** 1434 * @param conn_handle 1435 * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec) 1436 * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec) 1437 * @param conn_latency ([0x0000,0x03e8], number of connection events) 1438 * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec) 1439 * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec) 1440 * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec) 1441 */ 1442 const hci_cmd_t hci_le_connection_update = { 1443 HCI_OPCODE_HCI_LE_CONNECTION_UPDATE, "H222222" 1444 // return: none -> le connection update complete event 1445 }; 1446 1447 /** 1448 * @param channel_map_lower_32bits 1449 * @param channel_map_higher_5bits 1450 */ 1451 const hci_cmd_t hci_le_set_host_channel_classification = { 1452 HCI_OPCODE_HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION, "41" 1453 // return: status 1454 }; 1455 1456 /** 1457 * @param conn_handle 1458 */ 1459 const hci_cmd_t hci_le_read_channel_map = { 1460 HCI_OPCODE_HCI_LE_READ_CHANNEL_MAP, "H" 1461 // return: status, connection handle, channel map (5 bytes, 37 used) 1462 }; 1463 1464 /** 1465 * @param conn_handle 1466 */ 1467 const hci_cmd_t hci_le_read_remote_used_features = { 1468 HCI_OPCODE_HCI_LE_READ_REMOTE_USED_FEATURES, "H" 1469 // return: none -> le read remote used features complete event 1470 }; 1471 1472 /** 1473 * @param key ((128) for AES-128) 1474 * @param plain_text (128) 1475 */ 1476 const hci_cmd_t hci_le_encrypt = { 1477 HCI_OPCODE_HCI_LE_ENCRYPT, "PP" 1478 // return: status, encrypted data (128) 1479 }; 1480 1481 const hci_cmd_t hci_le_rand = { 1482 HCI_OPCODE_HCI_LE_RAND, "" 1483 // return: status, random number (64) 1484 }; 1485 1486 /** 1487 * @param conn_handle 1488 * @param random_number_lower_32bits 1489 * @param random_number_higher_32bits 1490 * @param encryption_diversifier (16) 1491 * @param long_term_key (128) 1492 */ 1493 const hci_cmd_t hci_le_start_encryption = { 1494 HCI_OPCODE_HCI_LE_START_ENCRYPTION, "H442P" 1495 // return: none -> encryption changed or encryption key refresh complete event 1496 }; 1497 1498 /** 1499 * @param connection_handle 1500 * @param long_term_key (128) 1501 */ 1502 const hci_cmd_t hci_le_long_term_key_request_reply = { 1503 HCI_OPCODE_HCI_LE_LONG_TERM_KEY_REQUEST_REPLY, "HP" 1504 // return: status, connection handle 1505 }; 1506 1507 /** 1508 * @param conn_handle 1509 */ 1510 const hci_cmd_t hci_le_long_term_key_negative_reply = { 1511 HCI_OPCODE_HCI_LE_LONG_TERM_KEY_NEGATIVE_REPLY, "H" 1512 // return: status, connection handle 1513 }; 1514 1515 /** 1516 * @param conn_handle 1517 */ 1518 const hci_cmd_t hci_le_read_supported_states = { 1519 HCI_OPCODE_HCI_LE_READ_SUPPORTED_STATES, "H" 1520 // return: status, LE states (64) 1521 }; 1522 1523 /** 1524 * @param rx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2) 1525 */ 1526 const hci_cmd_t hci_le_receiver_test = { 1527 HCI_OPCODE_HCI_LE_RECEIVER_TEST, "1" 1528 // return: status 1529 }; 1530 1531 /** 1532 * @param tx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2) 1533 * @param test_payload_lengh ([0x00,0x25]) 1534 * @param packet_payload ([0,7] different patterns) 1535 */ 1536 const hci_cmd_t hci_le_transmitter_test = { 1537 HCI_OPCODE_HCI_LE_TRANSMITTER_TEST, "111" 1538 // return: status 1539 }; 1540 1541 /** 1542 * @param end_test_cmd 1543 */ 1544 const hci_cmd_t hci_le_test_end = { 1545 HCI_OPCODE_HCI_LE_TEST_END, "1" 1546 // return: status, number of packets (8) 1547 }; 1548 1549 /** 1550 * @param conn_handle 1551 * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec) 1552 * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec) 1553 * @param conn_latency ([0x0000,0x03e8], number of connection events) 1554 * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec) 1555 * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec) 1556 * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec) 1557 */ 1558 const hci_cmd_t hci_le_remote_connection_parameter_request_reply = { 1559 HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY, "H222222" 1560 // return: status, connection handle 1561 }; 1562 1563 /** 1564 * @param con_handle 1565 * @param reason 1566 */ 1567 const hci_cmd_t hci_le_remote_connection_parameter_request_negative_reply = { 1568 HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY, "H1" 1569 // return: status, connection handle 1570 }; 1571 1572 /** 1573 * @param con_handle 1574 * @param tx_octets 1575 * @param tx_time 1576 */ 1577 const hci_cmd_t hci_le_set_data_length = { 1578 HCI_OPCODE_HCI_LE_SET_DATA_LENGTH, "H22" 1579 // return: status, connection handle 1580 }; 1581 1582 /** 1583 */ 1584 const hci_cmd_t hci_le_read_suggested_default_data_length = { 1585 HCI_OPCODE_HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH, "" 1586 // return: status, suggested max tx octets, suggested max tx time 1587 }; 1588 1589 /** 1590 * @param suggested_max_tx_octets 1591 * @param suggested_max_tx_time 1592 */ 1593 const hci_cmd_t hci_le_write_suggested_default_data_length = { 1594 HCI_OPCODE_HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH, "22" 1595 // return: status 1596 }; 1597 1598 /** 1599 */ 1600 const hci_cmd_t hci_le_read_local_p256_public_key = { 1601 HCI_OPCODE_HCI_LE_READ_LOCAL_P256_PUBLIC_KEY, "" 1602 // LE Read Local P-256 Public Key Complete is generated on completion 1603 }; 1604 1605 /** 1606 * @param public key 1607 * @param private key 1608 */ 1609 const hci_cmd_t hci_le_generate_dhkey = { 1610 HCI_OPCODE_HCI_LE_GENERATE_DHKEY, "QQ" 1611 // LE Generate DHKey Complete is generated on completion 1612 }; 1613 1614 /** 1615 * @param Peer_Identity_Address_Type 1616 * @param Peer_Identity_Address 1617 * @param Peer_IRK 1618 * @param Local_IRK 1619 */ 1620 const hci_cmd_t hci_le_add_device_to_resolving_list = { 1621 HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST, "1BPP" 1622 }; 1623 1624 /** 1625 * @param Peer_Identity_Address_Type 1626 * @param Peer_Identity_Address 1627 */ 1628 const hci_cmd_t hci_le_remove_device_from_resolving_list = { 1629 HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST, "1B" 1630 }; 1631 1632 /** 1633 */ 1634 const hci_cmd_t hci_le_clear_resolving_list = { 1635 HCI_OPCODE_HCI_LE_CLEAR_RESOLVING_LIST, "" 1636 }; 1637 1638 /** 1639 */ 1640 const hci_cmd_t hci_le_read_resolving_list_size = { 1641 HCI_OPCODE_HCI_LE_READ_RESOLVING_LIST_SIZE, "" 1642 }; 1643 1644 /** 1645 * @param Peer_Identity_Address_Type 1646 * @param Peer_Identity_Address 1647 */ 1648 const hci_cmd_t hci_le_read_peer_resolvable_address = { 1649 HCI_OPCODE_HCI_LE_READ_PEER_RESOLVABLE_ADDRESS, "" 1650 }; 1651 1652 /** 1653 * @param Peer_Identity_Address_Type 1654 * @param Peer_Identity_Address 1655 */ 1656 const hci_cmd_t hci_le_read_local_resolvable_address = { 1657 HCI_OPCODE_HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS, "" 1658 }; 1659 1660 /** 1661 * @param Address_Resolution_Enable 1662 */ 1663 const hci_cmd_t hci_le_set_address_resolution_enabled= { 1664 HCI_OPCODE_HCI_LE_SET_ADDRESS_RESOLUTION_ENABLED, "1" 1665 }; 1666 1667 /** 1668 * @param RPA_Timeout in seconds, range 0x0001 to 0x0E10, default: 900 s 1669 */ 1670 const hci_cmd_t hci_le_set_resolvable_private_address_timeout= { 1671 HCI_OPCODE_HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT, "2" 1672 }; 1673 1674 /** 1675 */ 1676 const hci_cmd_t hci_le_read_maximum_data_length = { 1677 HCI_OPCODE_HCI_LE_READ_MAXIMUM_DATA_LENGTH, "" 1678 // return: status, supported max tx octets, supported max tx time, supported max rx octets, supported max rx time 1679 }; 1680 1681 /** 1682 * @param con_handle 1683 */ 1684 const hci_cmd_t hci_le_read_phy = { 1685 HCI_OPCODE_HCI_LE_READ_PHY, "H" 1686 // return: status, connection handler, tx phy, rx phy 1687 }; 1688 1689 /** 1690 * @param all_phys 1691 * @param tx_phys 1692 * @param rx_phys 1693 */ 1694 const hci_cmd_t hci_le_set_default_phy = { 1695 HCI_OPCODE_HCI_LE_SET_DEFAULT_PHY, "111" 1696 // return: status 1697 }; 1698 1699 /** 1700 * @param con_handle 1701 * @param all_phys 1702 * @param tx_phys 1703 * @param rx_phys 1704 * @param phy_options 1705 */ 1706 const hci_cmd_t hci_le_set_phy = { 1707 HCI_OPCODE_HCI_LE_SET_PHY, "H1112" 1708 // LE PHY Update Complete is generated on completion 1709 }; 1710 1711 /** 1712 * @param rx_channel 1713 * @param phy 1714 * @param modulation_index 1715 */ 1716 const hci_cmd_t hci_le_receiver_test_v2 = { 1717 HCI_OPCODE_HCI_LE_RECEIVER_TEST_V2, "111" 1718 }; 1719 1720 /** 1721 * @param tx_channel 1722 * @param test_data_length 1723 * @param packet_payload 1724 * @param phy 1725 */ 1726 const hci_cmd_t hci_le_transmitter_test_v2 = { 1727 HCI_OPCODE_HCI_LE_TRANSMITTER_TEST_V2, "1111" 1728 }; 1729 1730 /** 1731 * @param advertising_handle 1732 * @param random_address 1733 */ 1734 const hci_cmd_t hci_le_set_advertising_set_random_address = { 1735 HCI_OPCODE_HCI_LE_SET_ADVERTISING_SET_RANDOM_ADDRESS, "1B" 1736 }; 1737 1738 /** 1739 * @param advertising_handle 1740 * @param advertising_event_properties 1741 * @param primary_advertising_interval_min in 0.625 ms, range: 0x000020..0xffffff 1742 * @param primary_advertising_interval_max in 0.625 ms, range: 0x000020..0xffffff 1743 * @param primary_advertising_channel_map 1744 * @param own_address_type 1745 * @param peer_address_type 1746 * @param peer_address 1747 * @param advertising_filter_policy 1748 * @param advertising_tx_power in dBm, range: -127..20 1749 * @param primary_advertising_phy 1750 * @param secondary_advertising_max_skip 1751 * @param secondary_advertising_phy 1752 * @param advertising_sid 1753 * @param scan_request_notification_enable 1754 */ 1755 const hci_cmd_t hci_le_set_extended_advertising_parameters = { 1756 HCI_OPCODE_HCI_LE_SET_EXTENDED_ADVERTISING_PARAMETERS, "1233111B1111111" 1757 }; 1758 1759 /** 1760 * @param advertising_handle 1761 * @param operation 1762 * @param fragment_preference 1763 * @param advertising_data_length 1764 * @param advertising_data 1765 */ 1766 1767 const hci_cmd_t hci_le_set_extended_advertising_data = { 1768 HCI_OPCODE_HCI_LE_SET_EXTENDED_ADVERTISING_DATA, "111JV" 1769 }; 1770 1771 /** 1772 * @param advertising_handle 1773 * @param operation 1774 * @param fragment_preference 1775 * @param scan_response_data_length 1776 * @param scan_response_data 1777 */ 1778 1779 const hci_cmd_t hci_le_set_extended_scan_response_data = { 1780 HCI_OPCODE_HCI_LE_SET_EXTENDED_SCAN_RESPONSE_DATA, "111JV" 1781 }; 1782 1783 /** 1784 * @param enable 1785 * @param num_sets 1786 * @param advertising_handle[i] 1787 * @param duration[i] 1788 * @param max_extended_advertising_events[i] 1789 */ 1790 1791 const hci_cmd_t hci_le_set_extended_advertising_enable = { 1792 HCI_OPCODE_HCI_LE_SET_EXTENDED_ADVERTISING_ENABLE, "1a[121]" 1793 }; 1794 1795 /** 1796 */ 1797 const hci_cmd_t hci_le_read_maximum_advertising_data_length = { 1798 HCI_OPCODE_HCI_LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH, "" 1799 }; 1800 1801 /** 1802 */ 1803 const hci_cmd_t hci_le_read_number_of_supported_advertising_sets = { 1804 HCI_OPCODE_HCI_LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS, "" 1805 }; 1806 1807 /** 1808 * @param advertising_handle 1809 */ 1810 const hci_cmd_t hci_le_remove_advertising_set = { 1811 HCI_OPCODE_HCI_LE_REMOVE_ADVERTISING_SET, "1" 1812 }; 1813 1814 /** 1815 */ 1816 const hci_cmd_t hci_le_clear_advertising_sets = { 1817 HCI_OPCODE_HCI_LE_CLEAR_ADVERTISING_SETS, "" 1818 }; 1819 1820 /** 1821 * @param advertising_handle 1822 * @param periodic_advertising_interval_min * 1.25 ms, range 0x0006..0xffff 1823 * @param periodic_advertising_interval_max * 1.25 ms, range 0x0006..0xffff 1824 * @param periodic_advertising_properties 1825 */ 1826 const hci_cmd_t hci_le_set_periodic_advertising_parameters = { 1827 HCI_OPCODE_HCI_LE_SET_PERIODIC_ADVERTISING_PARAMETERS, "1222" 1828 }; 1829 1830 /** 1831 * @param advertising_handle 1832 * @param operation 1833 * @param advertising_data_length 1834 * @param advertising_data 1835 */ 1836 1837 const hci_cmd_t hci_le_set_periodic_advertising_data = { 1838 HCI_OPCODE_HCI_LE_SET_PERIODIC_ADVERTISING_DATA, "11JV" 1839 }; 1840 1841 /** 1842 * @param enable 1843 * @param advertising_handle 1844 */ 1845 const hci_cmd_t hci_le_set_periodic_advertising_enable = { 1846 HCI_OPCODE_HCI_LE_SET_PERIODIC_ADVERTISING_ENABLE, "11" 1847 }; 1848 1849 /** 1850 * @param own_address_type 1851 * @param scanning_filter_policy 1852 * @param scanning_phys 0 = LE 1M PHY | 2 = LE Coded PHY 1853 * @param scan_type[i] 1854 * @param scan_interval[i] * 0.625, range = 0x0004..0xffff 1855 * @param scan_window[i] * 0.625, range = 0x0004..0xffff 1856 */ 1857 1858 const hci_cmd_t hci_le_set_extended_scan_parameters = { 1859 HCI_OPCODE_HCI_LE_SET_EXTENDED_SCAN_PARAMETERS, "11b[122]" 1860 }; 1861 1862 /** 1863 * @param enable 1864 * @param filter_duplicates 1865 * @param duration 0 = Scan continuously until explicitly disable, 10 ms 1866 * @param period 0 = Scan continuously, 1.28 s 1867 */ 1868 const hci_cmd_t hci_le_set_extended_scan_enable = { 1869 HCI_OPCODE_HCI_LE_SET_EXTENDED_SCAN_ENABLE, "1122" 1870 }; 1871 1872 /** 1873 * @param initiator_filter_policy 1874 * @param own_address_type 1875 * @param peer_address_type 1876 * @param peer_address 1877 * @param initiating_phys with bit 0 = LE 1M PHY, bit 1 = LE 2M PHY, bit 2 = Coded PHY 1878 * @param scan_interval[i] * 0.625 ms 1879 * @param scan_window[i] * 0.625 ms 1880 * @param connection_interval_min[i] * 1.25 ms 1881 * @param connection_interval_max[i] * 1.25 ms 1882 * @param connection_latency[i] 1883 * @param supervision_timeout[i] * 10 ms 1884 * @param min_ce_length[i] * 0.625 ms 1885 * @param max_ce_length[i] * 0.625 ms 1886 */ 1887 1888 const hci_cmd_t hci_le_extended_create_connection = { 1889 HCI_OPCODE_HCI_LE_EXTENDED_CREATE_CONNECTION, "111Bb[22222222]" 1890 }; 1891 1892 /** 1893 * @param options 1894 * @param advertising_sid 1895 * @param advertiser_address_type 1896 * @param advertiser_address 1897 * @param skip 1898 * @param sync_timeout * 10 ms 1899 * @param sync_cte_type 1900 */ 1901 const hci_cmd_t hci_le_periodic_advertising_create_sync = { 1902 HCI_OPCODE_HCI_LE_PERIODIC_ADVERTISING_CREATE_SYNC, "111B221" 1903 }; 1904 1905 /** 1906 */ 1907 const hci_cmd_t hci_le_periodic_advertising_create_sync_cancel = { 1908 HCI_OPCODE_HCI_LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL, "" 1909 }; 1910 1911 /** 1912 * @param sync_handle 1913 */ 1914 const hci_cmd_t hci_le_periodic_advertising_terminate_sync = { 1915 HCI_OPCODE_HCI_LE_PERIODIC_ADVERTISING_TERMINATE_SYNC, "2" 1916 }; 1917 1918 /** 1919 * @param advertiser_address_type 1920 * @param advertiser_address 1921 * @param advertising_sid 1922 */ 1923 const hci_cmd_t hci_le_add_device_to_periodic_advertiser_list = { 1924 HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_PERIODIC_ADVERTISER_LIST, "1B1" 1925 }; 1926 1927 /** 1928 * @param advertiser_address_type 1929 * @param advertiser_address 1930 * @param advertising_sid 1931 */ 1932 const hci_cmd_t hci_le_remove_device_from_periodic_advertiser_list = { 1933 HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISER_LIST, "1B1" 1934 }; 1935 1936 /** 1937 */ 1938 const hci_cmd_t hci_le_clear_periodic_advertiser_list = { 1939 HCI_OPCODE_HCI_LE_CLEAR_PERIODIC_ADVERTISER_LIST, "" 1940 }; 1941 1942 /** 1943 */ 1944 const hci_cmd_t hci_le_read_periodic_advertiser_list_size = { 1945 HCI_OPCODE_HCI_LE_READ_PERIODIC_ADVERTISER_LIST_SIZE, "" 1946 }; 1947 1948 /** 1949 */ 1950 const hci_cmd_t hci_le_read_transmit_power = { 1951 HCI_OPCODE_HCI_LE_READ_TRANSMIT_POWER, "" 1952 }; 1953 1954 /** 1955 */ 1956 const hci_cmd_t hci_le_read_rf_path_compensation = { 1957 HCI_OPCODE_HCI_LE_READ_RF_PATH_COMPENSATION, "" 1958 }; 1959 1960 /** 1961 * @param rf_tx_path_compensation_value * 0.1 dB, signed 1962 * @param rf_rx_path_compensation_value * 0.1 dB, signed 1963 */ 1964 const hci_cmd_t hci_le_write_rf_path_compensation = { 1965 HCI_OPCODE_HCI_LE_WRITE_RF_PATH_COMPENSATION, "22" 1966 }; 1967 1968 /** 1969 * @param peer_identity_address_type 1970 * @param peer_identity_address 1971 * @param privacy_mode 1972 */ 1973 const hci_cmd_t hci_le_set_privacy_mode = { 1974 HCI_OPCODE_HCI_LE_SET_PRIVACY_MODE, "1B1" 1975 }; 1976 1977 /** 1978 * @param rx_channel 1979 * @param phy 1980 * @param modulation_index 1981 * @param expected_cte_length 1982 * @param expected_cte_type 1983 * @param slot_durations 1984 * @param switching_pattern_length 1985 * @param antenna_ids[i] 1986 */ 1987 1988 const hci_cmd_t hci_le_receiver_test_v3 = { 1989 HCI_OPCODE_HCI_LE_RECEIVER_TEST_V3, "111111a[1]" 1990 }; 1991 1992 /** 1993 * @param tx_channel 1994 * @param test_data_length 1995 * @param packet_payload 1996 * @param phy 1997 * @param cte_length 1998 * @param cte_type 1999 * @param switching_pattern_length 2000 * @param antenna_ids[i] 2001 */ 2002 2003 const hci_cmd_t hci_le_transmitter_test_v3 = { 2004 HCI_OPCODE_HCI_LE_TRANSMITTER_TEST_V3, "111111a[1]" 2005 }; 2006 2007 /** 2008 * @param advertising_handle 2009 * @param cte_length 2010 * @param cte_type 2011 * @param cte_count 2012 * @param switching_pattern_length 2013 * @param antenna_ids[i] 2014 */ 2015 2016 const hci_cmd_t hci_le_set_connectionless_cte_transmit_parameters = { 2017 HCI_OPCODE_HCI_LE_SET_CONNECTIONLESS_CTE_TRANSMIT_PARAMETERS, "1111a[1]" 2018 }; 2019 2020 /** 2021 * @param advertising_handle 2022 * @param cte_enable 2023 */ 2024 const hci_cmd_t hci_le_set_connectionless_cte_transmit_enable = { 2025 HCI_OPCODE_HCI_LE_SET_CONNECTIONLESS_CTE_TRANSMIT_ENABLE, "11" 2026 }; 2027 2028 /** 2029 * @param sync_handle 2030 * @param sampling_enable 2031 * @param slot_durations 2032 * @param max_sampled_ctes 2033 * @param switching_pattern_length 2034 * @param antenna_ids[i] 2035 */ 2036 2037 const hci_cmd_t hci_le_set_connectionless_iq_sampling_enable = { 2038 HCI_OPCODE_HCI_LE_SET_CONNECTIONLESS_IQ_SAMPLING_ENABLE, "2111a[i]" 2039 }; 2040 2041 /** 2042 * @param connection_handle 2043 * @param sampling_enable 2044 * @param slot_durations 2045 * @param switching_pattern_length 2046 * @param antenna_ids[i] 2047 */ 2048 2049 const hci_cmd_t hci_le_set_connection_cte_receive_parameters = { 2050 HCI_OPCODE_HCI_LE_SET_CONNECTION_CTE_RECEIVE_PARAMETERS, "211a[1]" 2051 }; 2052 2053 /** 2054 * @param connection_handle 2055 * @param cte_types 2056 * @param switching_pattern_length 2057 * @param antenna_ids[i] 2058 */ 2059 2060 const hci_cmd_t hci_le_set_connection_cte_transmit_parameters = { 2061 HCI_OPCODE_HCI_LE_SET_CONNECTION_CTE_TRANSMIT_PARAMETERS, "21a[1]" 2062 }; 2063 2064 /** 2065 * @param connection_handle 2066 * @param enable 2067 * @param cte_request_interval 2068 * @param requested_cte_length 2069 * @param requested_cte_type 2070 */ 2071 const hci_cmd_t hci_le_connection_cte_request_enable = { 2072 HCI_OPCODE_HCI_LE_CONNECTION_CTE_REQUEST_ENABLE, "H1211" 2073 }; 2074 2075 /** 2076 * @param connection_handle 2077 * @param enable 2078 */ 2079 const hci_cmd_t hci_le_connection_cte_response_enable = { 2080 HCI_OPCODE_HCI_LE_CONNECTION_CTE_RESPONSE_ENABLE, "H1" 2081 }; 2082 2083 /** 2084 */ 2085 const hci_cmd_t hci_le_read_antenna_information = { 2086 HCI_OPCODE_HCI_LE_READ_ANTENNA_INFORMATION, "" 2087 }; 2088 2089 /** 2090 * @param sync_handle 2091 * @param enable 2092 */ 2093 const hci_cmd_t hci_le_set_periodic_advertising_receive_enable = { 2094 HCI_OPCODE_HCI_LE_SET_PERIODIC_ADVERTISING_RECEIVE_ENABLE, "H1" 2095 }; 2096 2097 /** 2098 * @param connection_handle 2099 * @param service_data 2100 * @param sync_handle 2101 */ 2102 const hci_cmd_t hci_le_periodic_advertising_sync_transfer = { 2103 HCI_OPCODE_HCI_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER, "H22" 2104 }; 2105 2106 /** 2107 * @param connection_handle 2108 * @param service_data 2109 * @param advertising_handle 2110 */ 2111 const hci_cmd_t hci_le_periodic_advertising_set_info_transfer = { 2112 HCI_OPCODE_HCI_LE_PERIODIC_ADVERTISING_SET_INFO_TRANSFER, "H21" 2113 }; 2114 2115 /** 2116 * @param connection_handle 2117 * @param mode 2118 * @param skip 2119 * @param sync_timeout 2120 * @param cte_type 2121 */ 2122 const hci_cmd_t hci_le_set_periodic_advertising_sync_transfer_parameters = { 2123 HCI_OPCODE_HCI_LE_SET_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS, "H1221" 2124 }; 2125 2126 /** 2127 * @param mode 2128 * @param skip 2129 * @param sync_timeout 2130 * @param cte_type 2131 */ 2132 const hci_cmd_t hci_le_set_default_periodic_advertising_sync_transfer_parameters = { 2133 HCI_OPCODE_HCI_LE_SET_DEFAULT_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS, "1221" 2134 }; 2135 2136 /** 2137 * @param 256Remote_P-256_public_key_x 2138 * @param 256Remote_P-256_public_key_y 2139 * @param key_type 2140 */ 2141 const hci_cmd_t hci_le_generate_dhkey_v2 = { 2142 HCI_OPCODE_HCI_LE_GENERATE_DHKEY_V2, "QQ1" 2143 }; 2144 2145 /** 2146 * @param action 2147 */ 2148 const hci_cmd_t hci_le_modify_sleep_clock_accuracy = { 2149 HCI_OPCODE_HCI_LE_MODIFY_SLEEP_CLOCK_ACCURACY, "1" 2150 }; 2151 2152 /** 2153 */ 2154 const hci_cmd_t hci_le_read_buffer_size_v2 = { 2155 HCI_OPCODE_HCI_LE_READ_BUFFER_SIZE_V2, "" 2156 }; 2157 2158 /** 2159 * @param connection_handle 2160 */ 2161 const hci_cmd_t hci_le_read_iso_tx_sync = { 2162 HCI_OPCODE_HCI_LE_READ_ISO_TX_SYNC, "H" 2163 }; 2164 2165 /** 2166 * @param cig_id 2167 * @param sdu_interval_m_to_s 2168 * @param sdu_interval_s_to_m 2169 * @param slaves_clock_accuracy 2170 * @param packing 2171 * @param framing 2172 * @param max_transport_latency_m_to_s 2173 * @param max_transport_latency_s_to_m 2174 * @param cis_count 2175 * @param cis_id[i] 2176 * @param max_sdu_m_to_s[i] 2177 * @param max_sdu_s_to_m[i] 2178 * @param phy_m_to_s[i] 2179 * @param phy_s_to_m[i] 2180 * @param rtn_m_to_s[i] 2181 * @param rtn_s_to_m[i] 2182 */ 2183 2184 const hci_cmd_t hci_le_set_cig_parameters = { 2185 HCI_OPCODE_HCI_LE_SET_CIG_PARAMETERS, "13311122a[1221111]" 2186 }; 2187 2188 /** 2189 * @param cig_id 2190 * @param sdu_interval_m_to_s 2191 * @param sdu_interval_s_to_m 2192 * @param ft_m_to_s 2193 * @param ft_s_to_m 2194 * @param iso_interval 2195 * @param slaves_clock_accuracy 2196 * @param packing 2197 * @param framing 2198 * @param max_transport_latency_m_to_s 2199 * @param max_transport_latency_s_to_m 2200 * @param cis_count 2201 * @param cis_id[i] 2202 * @param nse[i] 2203 * @param max_sdu_m_to_s[i] 2204 * @param max_sdu_s_to_m[i] 2205 * @param max_pdu_m_to_s[i] 2206 * @param max_pdu_s_to_m[i] 2207 * @param phy_m_to_s[i] 2208 * @param phy_s_to_m[i] 2209 * @param bn_m_to_s[i] 2210 * @param bn_s_to_m[i] 2211 */ 2212 2213 const hci_cmd_t hci_le_set_cig_parameters_test = { 2214 HCI_OPCODE_HCI_LE_SET_CIG_PARAMETERS_TEST, "133112111a[1122221111]" 2215 }; 2216 2217 /** 2218 * @param cis_count 2219 * @param cis_connection_handle[i] 2220 * @param acl_connection_handle[i] 2221 */ 2222 2223 const hci_cmd_t hci_le_create_cis = { 2224 HCI_OPCODE_HCI_LE_CREATE_CIS, "a[22]" 2225 }; 2226 2227 /** 2228 * @param cig_id 2229 */ 2230 const hci_cmd_t hci_le_remove_cig = { 2231 HCI_OPCODE_HCI_LE_REMOVE_CIG, "1" 2232 }; 2233 2234 /** 2235 * @param connection_handle 2236 */ 2237 const hci_cmd_t hci_le_accept_cis_request = { 2238 HCI_OPCODE_HCI_LE_ACCEPT_CIS_REQUEST, "H" 2239 }; 2240 2241 /** 2242 * @param connection_handle 2243 */ 2244 const hci_cmd_t hci_le_reject_cis_request = { 2245 HCI_OPCODE_HCI_LE_REJECT_CIS_REQUEST, "H1" 2246 }; 2247 2248 /** 2249 * @param big_handle 2250 * @param advertising_handle 2251 * @param num_bis 2252 * @param sdu_interval 2253 * @param max_sdu 2254 * @param max_transport_latency 2255 * @param rtn 2256 * @param phy 2257 * @param packing 2258 * @param framing 2259 * @param encryption 2260 * @param broadcast_code 2261 */ 2262 const hci_cmd_t hci_le_create_big = { 2263 HCI_OPCODE_HCI_LE_CREATE_BIG, "11132211111K" 2264 }; 2265 2266 /** 2267 * @param big_handle 2268 * @param advertising_handle 2269 * @param num_bis 2270 * @param sdu_interval 2271 * @param iso_interval 2272 * @param nse 2273 * @param max_sdu 2274 * @param max_PDU 2275 * @param phy 2276 * @param packing 2277 * @param framing 2278 * @param bn 2279 * @param irc 2280 * @param pto 2281 * @param encryption 2282 * @param broadcast_code 2283 */ 2284 const hci_cmd_t hci_le_create_big_test = { 2285 HCI_OPCODE_HCI_LE_CREATE_BIG_TEST, "111321221111111K" 2286 }; 2287 2288 /** 2289 * @param big_handle 2290 * @param reason 2291 */ 2292 const hci_cmd_t hci_le_terminate_big = { 2293 HCI_OPCODE_HCI_LE_TERMINATE_BIG, "11" 2294 }; 2295 2296 /** 2297 * @param big_handle 2298 * @param sync_handle 2299 * @param encryption 2300 * @param broadcast_code 2301 * @param mse 2302 * @param big_sync_timeout 2303 * @param num_bis 2304 * @param bis[i] 2305 */ 2306 2307 const hci_cmd_t hci_le_big_create_sync = { 2308 HCI_OPCODE_HCI_LE_BIG_CREATE_SYNC, "1H1K12a[1]" 2309 }; 2310 2311 /** 2312 * @param big_handle 2313 */ 2314 const hci_cmd_t hci_le_big_terminate_sync = { 2315 HCI_OPCODE_HCI_LE_BIG_TERMINATE_SYNC, "1" 2316 }; 2317 2318 /** 2319 * @param connection_handle 2320 */ 2321 const hci_cmd_t hci_le_request_peer_sca = { 2322 HCI_OPCODE_HCI_LE_REQUEST_PEER_SCA, "H" 2323 }; 2324 2325 /** 2326 * @param connection_handle 2327 * @param data_path_direction 2328 * @param data_path_id 2329 * @param codec_id_coding_format 2330 * @param codec_id_company_identifier (Shall be ignored if codec_id_coding_format is not 0xFF) 2331 * @param codec_id_vendor_codec_id (Shall be ignored if codec_id_coding_format is not 0xFF) 2332 * @param controller_delay 2333 * @param codec_configuration_length 2334 * @param codec_configuration 2335 */ 2336 2337 const hci_cmd_t hci_le_setup_iso_data_path = { 2338 HCI_OPCODE_HCI_LE_SETUP_ISO_DATA_PATH, "H111223JV" 2339 }; 2340 2341 /** 2342 * @param connection_handle 2343 */ 2344 const hci_cmd_t hci_le_remove_iso_data_path = { 2345 HCI_OPCODE_HCI_LE_REMOVE_ISO_DATA_PATH, "H1" 2346 }; 2347 2348 /** 2349 * @param connection_handle 2350 * @param paylaod_type 2351 */ 2352 const hci_cmd_t hci_le_iso_transmit_test = { 2353 HCI_OPCODE_HCI_LE_ISO_TRANSMIT_TEST, "H1" 2354 }; 2355 2356 /** 2357 * @param connection_handle 2358 * @param paylaod_type 2359 */ 2360 const hci_cmd_t hci_le_iso_receive_test = { 2361 HCI_OPCODE_HCI_LE_ISO_RECEIVE_TEST, "H1" 2362 }; 2363 2364 /** 2365 * @param connection_handle 2366 */ 2367 const hci_cmd_t hci_le_iso_read_test_counters = { 2368 HCI_OPCODE_HCI_LE_ISO_READ_TEST_COUNTERS, "H" 2369 }; 2370 2371 /** 2372 * @param connection_handle 2373 */ 2374 const hci_cmd_t hci_le_iso_test_end = { 2375 HCI_OPCODE_HCI_LE_ISO_TEST_END, "H" 2376 }; 2377 2378 /** 2379 * @param bit_number 2380 * @param bit_value 2381 */ 2382 const hci_cmd_t hci_le_set_host_feature = { 2383 HCI_OPCODE_HCI_LE_SET_HOST_FEATURE, "11" 2384 }; 2385 2386 /** 2387 * @param connection_handle 2388 */ 2389 const hci_cmd_t hci_le_read_iso_link_quality = { 2390 HCI_OPCODE_HCI_LE_READ_ISO_LINK_QUALITY, "H" 2391 }; 2392 2393 /** 2394 * @param connection_handle 2395 * @param phy 2396 */ 2397 const hci_cmd_t hci_le_enhanced_read_transmit_power_level = { 2398 HCI_OPCODE_HCI_LE_ENHANCED_READ_TRANSMIT_POWER_LEVEL, "H1" 2399 }; 2400 2401 /** 2402 * @param connection_handle 2403 * @param phy 2404 */ 2405 const hci_cmd_t hci_le_read_remote_transmit_power_level = { 2406 HCI_OPCODE_HCI_LE_READ_REMOTE_TRANSMIT_POWER_LEVEL, "H1" 2407 }; 2408 2409 /** 2410 * @param connection_handle 2411 * @param high_threshold 2412 * @param high_hysteresis 2413 * @param low_threshold 2414 * @param low_hysteresis 2415 * @param min_time_spent 2416 */ 2417 const hci_cmd_t hci_le_set_path_loss_reporting_parameters = { 2418 HCI_OPCODE_HCI_LE_SET_PATH_LOSS_REPORTING_PARAMETERS, "211112" 2419 }; 2420 2421 /** 2422 * @param connection_handle 2423 * @param enable 2424 */ 2425 const hci_cmd_t hci_le_set_path_loss_reporting_enable = { 2426 HCI_OPCODE_HCI_LE_SET_PATH_LOSS_REPORTING_ENABLE, "H1" 2427 }; 2428 2429 /** 2430 * @param connection_handle 2431 * @param local_enable 2432 * @param remote_enable 2433 */ 2434 const hci_cmd_t hci_le_set_transmit_power_reporting_enable = { 2435 HCI_OPCODE_HCI_LE_SET_TRANSMIT_POWER_REPORTING_ENABLE, "H11" 2436 }; 2437 2438 /** 2439 * @param tx_channel 2440 * @param test_data_length 2441 * @param packet_payload 2442 * @param phy 2443 * @param cte_length 2444 * @param cte_type 2445 * @param switching_pattern_length 2446 * @param antenna_ids[i] 2447 * @param transmit_power_level 2448 */ 2449 2450 const hci_cmd_t hci_le_transmitter_test_v4 = { 2451 HCI_OPCODE_HCI_LE_TRANSMITTER_TEST_V4, "111111a[1]1" 2452 }; 2453 2454 /** 2455 * @param advertising_handle 2456 * @param change_reason 2457 */ 2458 const hci_cmd_t hci_le_set_data_related_address_change = { 2459 HCI_OPCODE_HCI_LE_SET_DATA_RELATED_ADDRESS_CHANGES, "11" 2460 }; 2461 2462 /** 2463 * @param subrate_min 2464 * @param subrate_max 2465 * @param max_latency 2466 * @param continuation_number 2467 * @param supervision_timeout 2468 */ 2469 const hci_cmd_t hci_le_set_default_subrate = { 2470 HCI_OPCODE_HCI_LE_SET_DEFAULT_SUBRATE, "22222" 2471 }; 2472 2473 /** 2474 * @param connection_handle 2475 * @param subrate_min 2476 * @param subrate_max 2477 * @param max_latency 2478 * @param continuation_number 2479 * @param supervision_timeout 2480 */ 2481 const hci_cmd_t hci_le_subrate_request = { 2482 HCI_OPCODE_HCI_LE_SUBRATE_REQUEST, "H22222" 2483 }; 2484 2485 #endif 2486 2487 // Broadcom / Cypress specific HCI commands 2488 2489 /** 2490 * @brief Enable Wide-Band Speech / mSBC decoding for PCM 2491 * @param enable_wbs is 0 for disable, 1 for enable 2492 * @param uuid_wbs is 2 for EV2/EV3 2493 */ 2494 const hci_cmd_t hci_bcm_enable_wbs = { 2495 HCI_OPCODE_HCI_BCM_ENABLE_WBS, "12" 2496 // return: status 2497 }; 2498 2499 /** 2500 * @brief Configure PCM2, see Cypress AN214937 2501 * @param action 2502 * @param test_options 2503 * @param op_mode 2504 * @param sync_and_clock_options 2505 * @param pcm_clock_freq 2506 * @param sync_signal_width 2507 * @param slot_width 2508 * @param number_of_slots 2509 * @param bank_0_fill_mode 2510 * @param bank_0_number_of_fill_bits 2511 * @param bank_0_programmable_fill_data 2512 * @param bank_1_fill_mode 2513 * @param bank_1_number_of_fill_bits 2514 * @param bank_1_programmable_fill_data 2515 * @param data_justify_and_bit_order_options 2516 * @param ch_0_slot_number 2517 * @param ch_1_slot_number 2518 * @param ch_2_slot_number 2519 * @param ch_3_slot_number 2520 * @param ch_4_slot_number 2521 * @param ch_0_period 2522 * @param ch_1_period 2523 * @param ch_2_period 2524 * 2525 */ 2526 const hci_cmd_t hci_bcm_pcm2_setup = { 2527 HCI_OPCODE_HCI_BCM_PCM2_SETUP, "11114111111111111111111" 2528 }; 2529 2530 /** 2531 * @brief Configure SCO Routing (BCM) 2532 * @param sco_routing is 0 for PCM, 1 for Transport, 2 for Codec and 3 for I2S 2533 * @param pcm_interface_rate is 0 for 128KBps, 1 for 256 KBps, 2 for 512KBps, 3 for 1024KBps, and 4 for 2048Kbps 2534 * @param frame_type is 0 for short and 1 for long 2535 * @param sync_mode is 0 for slave and 1 for master 2536 * @param clock_mode is 0 for slabe and 1 for master 2537 */ 2538 const hci_cmd_t hci_bcm_write_sco_pcm_int = { 2539 HCI_OPCODE_HCI_BCM_WRITE_SCO_PCM_INT, "11111" 2540 // return: status 2541 }; 2542 2543 /** 2544 * @brief Configure PCM Data Format (BCM) 2545 * @param lsb_position 0x00 – LSB last/MSB first, 0x01 – LSB first/MSB last 2546 * @param fill_bits_value three bit value defines the fill bits used by the PCM interface,only if fill_data_selection == programmable 2547 * @param fill_data_selection 0x00 zeros, 0x01 ones, 0x02 sign bit, 0x03 programmable 2548 * @param number_of_fill_bits 0..3 2549 * @param right_left_justification 0x00 left justified, 0x01 right justified 2550 */ 2551 const hci_cmd_t hci_bcm_write_pcm_data_format_param = { 2552 HCI_OPCODE_HCI_BCM_WRITE_PCM_DATA_FORMAT_PARAM, "11111" 2553 // return: status 2554 }; 2555 2556 /** 2557 * @brief Configure the I2S/PCM interface (BCM) 2558 * @param i2s_enable is 0 for off, 1 for on 2559 * @param is_master is 0 for slave, is 1 for master 2560 * @param sample_rate is 0 for 8 kHz, 1 for 16 kHz, 2 for 4 kHz 2561 * @param clock_rate is 0 for 128 kz, 1 for 256 kHz, 2 for 512 khz, 3 for 1024 kHz, 4 for 2048 khz 2562 */ 2563 const hci_cmd_t hci_bcm_write_i2spcm_interface_param = { 2564 HCI_OPCODE_HCI_BCM_WRITE_I2SPCM_INTERFACE_PARAM, "1111" 2565 // return: status 2566 }; 2567 2568 2569 /** 2570 * @brief Activates selected Sleep Mode 2571 * @param sleep_mode: 0=no sleep, 1=UART, 2=UART with Messaging, 3=USB, 4=H4IBSS, USB with Host Wake, 6=SDIO, 7=UART CS-N, 8=SPI, 9=H5, 10=H4DS, 12=UART with BREAK 2572 * @param idle_threshold_host (modes 1,2,5,7) time until considered idle, unit roughly 300 ms 2573 * @param idle_threshold_controller (modes 1-7,9) time until considered idle, unit roughly 300 ms 2574 * @param bt_wake_active_mode (modes 1,2,7) 0 = BT_WAKE line is active high, 1 = BT_WAKE is active low 2575 * @param host_wake_active_mode (modes 1,2,5,7) 0 = HOST_WAKE line is active high, 1 = HOST_WAKE is active low 2576 * @param allow_host_sleep_during_sco (modes 1,2,3,5,7) 2577 * @param combine_sleep_mode_and_lpm (modes 1,2,3,5,7) 2578 * @param enable_tristate_control_of_uart_tx_line (modes 1,2,7) 2579 * @param active_connection_handling_on_suspend (modes 3,5) 2580 * @param resume_timeout (modes 3,5) 2581 * @param enable_break_to_host (mode 12) 2582 * @param pulsed_host_wake (modes 1,12) 2583 */ 2584 const hci_cmd_t hci_bcm_set_sleep_mode = { 2585 HCI_OPCODE_HCI_BCM_SET_SLEEP_MODE, "111111111111" 2586 }; 2587 2588 /** 2589 * @brief Set TX Power Table 2590 * @param is_le 0=classic, 1=LE 2591 * @param chip_max_tx_pwr_db chip level max TX power in dBM 2592 */ 2593 const hci_cmd_t hci_bcm_write_tx_power_table = { 2594 HCI_OPCODE_HCI_BCM_WRITE_TX_POWER_TABLE, "11" 2595 }; 2596 2597 const hci_cmd_t hci_bcm_set_tx_pwr = { 2598 HCI_OPCODE_HCI_BCM_SET_TX_PWR, "11H" 2599 }; 2600 2601 /** 2602 * @brief This command starts receiving packets using packet transmission parameters such as 2603 * frequency channel, packet type, and packet length. It is used for Packet RX. 2604 * @see processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_RX 2605 * @param frequency 2606 * @param ADPLL loop mode 2607 */ 2608 const hci_cmd_t hci_ti_drpb_tester_con_rx = { 2609 0xFD17, "11" 2610 }; 2611 2612 /** 2613 * 2614 * 2615 * @brief This command tests the RF transceiver in continuous transmission mode. 2616 * The transmitter is activated by configuring the transmission parameters such as pattern, 2617 * modulation, and frequency. 2618 * @see processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Con_TX.280xFD84.29 2619 * @param modulation 2620 * @param test_pattern 2621 * @param frequency 2622 * @param power_level 2623 * @param reserved1 2624 * @param reserved2 2625 */ 2626 const hci_cmd_t hci_ti_drpb_tester_con_tx = { 2627 0xFD84, "111144" 2628 }; 2629 2630 /** 2631 * @brief This command starts sending/receiving packets using packet transmission parameters such as 2632 * frequency channel, packet type, and packet length. It is used for Packet TX/RX. 2633 * @see processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Packet_TX_RX_.280xFD85.29 2634 * @param frequency_mode 2635 * @param tx_single_frequency 2636 * @param rx_single_frequency 2637 * @param acl_packet_type 2638 * @paarm acl_packet_data_pattern 2639 * @param reserved 2640 * @param power_level 2641 * @param disable_whitening 2642 * @param prbs9_initialization_value 2643 */ 2644 const hci_cmd_t hci_ti_drpb_tester_packet_tx_rx = { 2645 0xFD85, "1111112112" 2646 }; 2647 2648 2649 /** 2650 * @param best effort access percentage 2651 * @param guaranteed access percentage 2652 * @param poll period 2653 * @param slave burst after tx 2654 * @param slave master search count 2655 * @param master burst after tx enable 2656 * @param master burst after rx limit 2657 */ 2658 const hci_cmd_t hci_ti_configure_ddip = { 2659 HCI_OPCODE_HCI_TI_VS_CONFIGURE_DDIP, "1111111" 2660 }; 2661 2662 /** 2663 * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration. 2664 * @param enable 0=disable, 1=enable 2665 * @param a3dp_role (NL5500, WL128x only) 0=source,1=sink 2666 * @param code_upload (NL5500, WL128x only) 0=do not load a3dp code, 1=load a3dp code 2667 * @param reserved for future use 2668 */ 2669 const hci_cmd_t hci_ti_avrp_enable = { 2670 0xFD92, "1112" 2671 }; 2672 2673 /** 2674 * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration. 2675 * @param acl_con_handle 2676 */ 2677 const hci_cmd_t hci_ti_wbs_associate = { 2678 0xFD78, "H" 2679 }; 2680 2681 /** 2682 * @brief This command is used to disassociate Wide Band Speech configuration from any ACL handle. 2683 */ 2684 const hci_cmd_t hci_ti_wbs_disassociate = { 2685 0xFD79, "" 2686 }; 2687 2688 /** 2689 * @brief This command configures the codec interface parameters and the PCM clock rate, which is relevant when 2690 the Bluetooth core generates the clock. This command must be used by the host to use the PCM 2691 interface. 2692 * @param clock_rate in kHz 2693 * @param clock_direction 0=master/output, 1=slave/input 2694 * @param frame_sync_frequency in Hz 2695 * @param frame_sync_duty_cycle 0=50% (I2S Format), 0x0001-0xffff number of cycles of PCM clock 2696 * @param frame_sync_edge 0=driven/sampled at rising edge, 1=driven/sampled at falling edge of PCM clock 2697 * @param frame_sync_polariy 0=active high, 1=active low 2698 * @param reserved1 2699 * @param channel_1_data_out_size sample size in bits 2700 * @param channel_1_data_out_offset number of PCM clock cycles between rising of frame sync and data start 2701 * @param channel_1_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock 2702 * @param channel_1_data_in_size sample size in bits 2703 * @param channel_1_data_in_offset number of PCM clock cycles between rising of frame sync and data start 2704 * @param channel_1_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock 2705 * @param fsync_multiplier this field is only relevant to CC256XB from service pack 0.2 !!! -> use 0x00 2706 * @param channel_2_data_out_size sample size in bits 2707 * @param channel_2_data_out_offset number of PCM clock cycles between rising of frame sync and data start 2708 * @param channel_2_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock 2709 * @param channel_2_data_in_size sample size in bits 2710 * @param channel_2_data_in_offset number of PCM clock cycles between rising of frame sync and data start 2711 * @param channel_2_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock 2712 * @param reserved2 2713 * 2714 */ 2715 const hci_cmd_t hci_ti_write_codec_config = { 2716 0xFD06, "214211122122112212211" 2717 }; 2718 2719 /** 2720 * @brief This command is used only for internal testing. 2721 * @see processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_TX 2722 * @param frequency 2723 * @param ADPLL loop mode 2724 */ 2725 const hci_cmd_t hci_ti_drpb_enable_rf_calibration = { 2726 0xFD80, "141" 2727 }; 2728 2729 /** 2730 * @brief This command command is only required for the continuous TX test of modulated 2731 * (GFSK, π/4-DQPSK or 8DPSK) signal. This command should be skipped when performing continuous TX test for CW. 2732 * @see processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_RX 2733 * @param frequency 2734 * @param ADPLL loop mode 2735 */ 2736 const hci_cmd_t hci_ti_write_hardware_register = { 2737 0xFF01, "42" 2738 }; 2739 2740 /** 2741 * @brief Configure SCO routing on Realtek Controllers 2742 */ 2743 const hci_cmd_t hci_rtk_configure_sco_routing = { 2744 HCI_OPCODE_HCI_RTK_CONFIGURE_SCO_ROUTING, "111111111" 2745 }; 2746 2747 /** 2748 * @brief Read Card Information 2749 */ 2750 const hci_cmd_t hci_rtk_read_card_info = { 2751 HCI_OPCODE_HCI_RTK_READ_CARD_INFO, "11111" 2752 }; 2753 2754 2755 /** 2756 * @param voice_path 0x00 - transport, 0x01 - I2S/PCM 2757 */ 2758 const hci_cmd_t hci_nxp_set_sco_data_path = { 2759 HCI_OPCODE_HCI_NXP_SET_SCO_DATA_PATH, "1" 2760 }; 2761 2762 /** 2763 * @param settings bits 7-5: reserved, bit 4: pcm clock on, bit 3: reserved, bit 2: pcm sync source, bit 1: master/slave, bit 0: pcm direction 2764 */ 2765 const hci_cmd_t hci_nxp_write_pcm_i2s_settings = { 2766 HCI_OPCODE_HCI_NXP_WRITE_PCM_I2S_SETTINGS, "1" 2767 }; 2768 2769 /** 2770 * @param sync_settings_1 bits 7-2: reserved, bit 1: ISR, bit 0: ISR 2771 * @param sync_settings_2 bits 15-11: reserved, bit 10: 16k synchronization, bit 9: clock setting, bit 8: main clock, bits 7-5: reserved, bit 4: i2s sent in right channel, bit 3: clock alignment DIN, bit 2: clock alignment DOUT, bits 1-0: mode 2772 */ 2773 const hci_cmd_t hci_nxp_write_pcm_i2s_sync_settings = { 2774 HCI_OPCODE_HCI_NXP_WRITE_PCM_I2S_SYNC_SETTINGS, "12" 2775 }; 2776 2777 /** 2778 * @param settings bits 15-14: reserved, bit 13-10: each bit == one PCM time slot,, bits 9-2: slot relative to PCM synchronization, bits 1-0: PCM slots to be used 2779 */ 2780 const hci_cmd_t hci_nxp_write_pcm_link_settings = { 2781 HCI_OPCODE_HCI_NXP_WRITE_PCM_LINK_SETTINGS, "2" 2782 }; 2783 2784 /** 2785 * @param next_connection_wbs 0: CVSD, 1: mSBC 2786 */ 2787 const hci_cmd_t hci_nxp_set_wbs_connection = { 2788 HCI_OPCODE_HCI_NXP_SET_WBS_CONNECTION, "1" 2789 }; 2790 2791 /** 2792 * @param action 2793 * @param operation mode 2794 * @param sco_handle_1 2795 * @param sco_handle_2 2796 */ 2797 const hci_cmd_t hci_nxp_host_pcm_i2s_audio_config = { 2798 HCI_OPCODE_HCI_NXP_HOST_PCM_I2S_AUDIO_CONFIG, "11HH" 2799 }; 2800 2801 /** 2802 * @param action 2803 */ 2804 const hci_cmd_t hci_nxp_host_pcm_i2s_control_enable = { 2805 HCI_OPCODE_HCI_NXP_HOST_PCM_I2S_CONTROL_ENABLE, "1" 2806 }; 2807