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