xref: /btstack/src/hci_cmd.c (revision ced70f9bfeafe291ec597a3a9cc862e39e0da3ce)
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 #endif
2455 
2456 // Broadcom / Cypress specific HCI commands
2457 
2458 /**
2459  * @brief Enable Wide-Band Speech / mSBC decoding for PCM
2460  * @param enable_wbs is 0 for disable, 1 for enable
2461  * @param uuid_wbs is 2 for EV2/EV3
2462  */
2463 const hci_cmd_t hci_bcm_enable_wbs = {
2464     HCI_OPCODE_HCI_BCM_ENABLE_WBS, "12"
2465         // return: status
2466 };
2467 
2468 /**
2469  * @brief Configure PCM2, see Cypress AN214937
2470  * @param action
2471  * @param test_options
2472  * @param op_mode
2473  * @param sync_and_clock_options
2474  * @param pcm_clock_freq
2475  * @param sync_signal_width
2476  * @param slot_width
2477  * @param number_of_slots
2478  * @param bank_0_fill_mode
2479  * @param bank_0_number_of_fill_bits
2480  * @param bank_0_programmable_fill_data
2481  * @param bank_1_fill_mode
2482  * @param bank_1_number_of_fill_bits
2483  * @param bank_1_programmable_fill_data
2484  * @param data_justify_and_bit_order_options
2485  * @param ch_0_slot_number
2486  * @param ch_1_slot_number
2487  * @param ch_2_slot_number
2488  * @param ch_3_slot_number
2489  * @param ch_4_slot_number
2490  * @param ch_0_period
2491  * @param ch_1_period
2492  * @param ch_2_period
2493 *
2494  */
2495 const hci_cmd_t hci_bcm_pcm2_setup = {
2496         HCI_OPCODE_HCI_BCM_PCM2_SETUP, "11114111111111111111111"
2497 };
2498 
2499 /**
2500  * @brief Configure SCO Routing (BCM)
2501  * @param sco_routing is 0 for PCM, 1 for Transport, 2 for Codec and 3 for I2S
2502  * @param pcm_interface_rate is 0 for 128KBps, 1 for 256 KBps, 2 for 512KBps, 3 for 1024KBps, and 4 for 2048Kbps
2503  * @param frame_type is 0 for short and 1 for long
2504  * @param sync_mode is 0 for slave and 1 for master
2505  * @param clock_mode is 0 for slabe and 1 for master
2506  */
2507 const hci_cmd_t hci_bcm_write_sco_pcm_int = {
2508     HCI_OPCODE_HCI_BCM_WRITE_SCO_PCM_INT, "11111"
2509     // return: status
2510 };
2511 
2512 /**
2513  * @brief Configure PCM Data Format (BCM)
2514  * @param lsb_position 0x00 – LSB last/MSB first, 0x01 – LSB first/MSB last
2515  * @param fill_bits_value three bit value defines the fill bits used by the PCM interface,only if fill_data_selection == programmable
2516  * @param fill_data_selection 0x00 zeros, 0x01 ones, 0x02 sign bit, 0x03 programmable
2517  * @param number_of_fill_bits 0..3
2518  * @param right_left_justification 0x00 left justified, 0x01 right justified
2519  */
2520 const hci_cmd_t hci_bcm_write_pcm_data_format_param = {
2521         HCI_OPCODE_HCI_BCM_WRITE_PCM_DATA_FORMAT_PARAM, "11111"
2522         // return: status
2523 };
2524 
2525 /**
2526  * @brief Configure the I2S/PCM interface (BCM)
2527  * @param i2s_enable is 0 for off, 1 for on
2528  * @param is_master is 0 for slave, is 1 for master
2529  * @param sample_rate is 0 for 8 kHz, 1 for 16 kHz, 2 for 4 kHz
2530  * @param clock_rate is 0 for 128 kz, 1 for 256 kHz, 2 for 512 khz, 3 for 1024 kHz, 4 for 2048 khz
2531  */
2532 const hci_cmd_t hci_bcm_write_i2spcm_interface_param = {
2533     HCI_OPCODE_HCI_BCM_WRITE_I2SPCM_INTERFACE_PARAM, "1111"
2534         // return: status
2535 };
2536 
2537 
2538 /**
2539  * @brief Activates selected Sleep Mode
2540  * @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
2541  * @param idle_threshold_host (modes 1,2,5,7) time until considered idle, unit roughly 300 ms
2542  * @param idle_threshold_controller (modes 1-7,9) time until considered idle, unit roughly 300 ms
2543  * @param bt_wake_active_mode (modes 1,2,7) 0 = BT_WAKE line is active high, 1 = BT_WAKE is active low
2544  * @param host_wake_active_mode (modes 1,2,5,7) 0 = HOST_WAKE line is active high, 1 = HOST_WAKE is active low
2545  * @param allow_host_sleep_during_sco (modes 1,2,3,5,7)
2546  * @param combine_sleep_mode_and_lpm  (modes 1,2,3,5,7)
2547  * @param enable_tristate_control_of_uart_tx_line (modes 1,2,7)
2548  * @param active_connection_handling_on_suspend (modes 3,5)
2549  * @param resume_timeout (modes 3,5)
2550  * @param enable_break_to_host (mode 12)
2551  * @param pulsed_host_wake (modes 1,12)
2552  */
2553 const hci_cmd_t hci_bcm_set_sleep_mode = {
2554     HCI_OPCODE_HCI_BCM_SET_SLEEP_MODE, "111111111111"
2555 };
2556 
2557 /**
2558  * @brief Set TX Power Table
2559  * @param is_le 0=classic, 1=LE
2560  * @param chip_max_tx_pwr_db chip level max TX power in dBM
2561  */
2562 const hci_cmd_t hci_bcm_write_tx_power_table = {
2563     HCI_OPCODE_HCI_BCM_WRITE_TX_POWER_TABLE, "11"
2564 };
2565 
2566 const hci_cmd_t hci_bcm_set_tx_pwr = {
2567     HCI_OPCODE_HCI_BCM_SET_TX_PWR, "11H"
2568 };
2569 
2570 /**
2571  * @brief This command starts receiving packets using packet transmission parameters such as
2572  *        frequency channel, packet type, and packet length. It is used for Packet RX.
2573  * @see   processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_RX
2574  * @param frequency
2575  * @param ADPLL loop mode
2576  */
2577 const hci_cmd_t hci_ti_drpb_tester_con_rx = {
2578         0xFD17, "11"
2579 };
2580 
2581 /**
2582  *
2583  *
2584  * @brief This command tests the RF transceiver in continuous transmission mode.
2585  *        The transmitter is activated by configuring the transmission parameters such as pattern,
2586  *        modulation, and frequency.
2587  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Con_TX.280xFD84.29
2588  * @param modulation
2589  * @param test_pattern
2590  * @param frequency
2591  * @param power_level
2592  * @param reserved1
2593  * @param reserved2
2594  */
2595 const hci_cmd_t hci_ti_drpb_tester_con_tx = {
2596     0xFD84, "111144"
2597 };
2598 
2599 /**
2600  * @brief This command starts sending/receiving packets using packet transmission parameters such as
2601  *        frequency channel, packet type, and packet length. It is used for Packet TX/RX.
2602  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Packet_TX_RX_.280xFD85.29
2603  * @param frequency_mode
2604  * @param tx_single_frequency
2605  * @param rx_single_frequency
2606  * @param acl_packet_type
2607  * @paarm acl_packet_data_pattern
2608  * @param reserved
2609  * @param power_level
2610  * @param disable_whitening
2611  * @param prbs9_initialization_value
2612  */
2613 const hci_cmd_t hci_ti_drpb_tester_packet_tx_rx = {
2614     0xFD85, "1111112112"
2615 };
2616 
2617 
2618 /**
2619  * @param best effort access percentage
2620  * @param guaranteed access percentage
2621  * @param poll period
2622  * @param slave burst after tx
2623  * @param slave master search count
2624  * @param master burst after tx enable
2625  * @param master burst after rx limit
2626  */
2627 const hci_cmd_t hci_ti_configure_ddip = {
2628     HCI_OPCODE_HCI_TI_VS_CONFIGURE_DDIP, "1111111"
2629 };
2630 
2631 /**
2632  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
2633  * @param enable 0=disable, 1=enable
2634  * @param a3dp_role (NL5500, WL128x only) 0=source,1=sink
2635  * @param code_upload (NL5500, WL128x only) 0=do not load a3dp code, 1=load a3dp code
2636  * @param reserved for future use
2637  */
2638 const hci_cmd_t hci_ti_avrp_enable = {
2639         0xFD92, "1112"
2640 };
2641 
2642 /**
2643  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
2644  * @param acl_con_handle
2645  */
2646 const hci_cmd_t hci_ti_wbs_associate = {
2647         0xFD78, "H"
2648 };
2649 
2650 /**
2651  * @brief This command is used to disassociate Wide Band Speech configuration from any ACL handle.
2652  */
2653 const hci_cmd_t hci_ti_wbs_disassociate = {
2654         0xFD79, ""
2655 };
2656 
2657 /**
2658  * @brief This command configures the codec interface parameters and the PCM clock rate, which is relevant when
2659           the Bluetooth core generates the clock. This command must be used by the host to use the PCM
2660           interface.
2661  * @param clock_rate in kHz
2662  * @param clock_direction 0=master/output, 1=slave/input
2663  * @param frame_sync_frequency in Hz
2664  * @param frame_sync_duty_cycle 0=50% (I2S Format), 0x0001-0xffff number of cycles of PCM clock
2665  * @param frame_sync_edge 0=driven/sampled at rising edge, 1=driven/sampled at falling edge of PCM clock
2666  * @param frame_sync_polariy 0=active high, 1=active low
2667  * @param reserved1
2668  * @param channel_1_data_out_size sample size in bits
2669  * @param channel_1_data_out_offset number of PCM clock cycles between rising of frame sync and data start
2670  * @param channel_1_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
2671  * @param channel_1_data_in_size sample size in bits
2672  * @param channel_1_data_in_offset number of PCM clock cycles between rising of frame sync and data start
2673  * @param channel_1_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
2674  * @param fsync_multiplier this field is only relevant to CC256XB from service pack 0.2 !!! -> use 0x00
2675  * @param channel_2_data_out_size sample size in bits
2676  * @param channel_2_data_out_offset number of PCM clock cycles between rising of frame sync and data start
2677  * @param channel_2_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
2678  * @param channel_2_data_in_size sample size in bits
2679  * @param channel_2_data_in_offset number of PCM clock cycles between rising of frame sync and data start
2680  * @param channel_2_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
2681  * @param reserved2
2682  *
2683  */
2684 const hci_cmd_t hci_ti_write_codec_config = {
2685         0xFD06, "214211122122112212211"
2686 };
2687 
2688 /**
2689  * @brief This command is used only for internal testing.
2690  * @see   processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_TX
2691  * @param frequency
2692  * @param ADPLL loop mode
2693  */
2694 const hci_cmd_t hci_ti_drpb_enable_rf_calibration = {
2695         0xFD80, "141"
2696 };
2697 
2698 /**
2699  * @brief This command command is only required for the continuous TX test of modulated
2700  * (GFSK, π/4-DQPSK or 8DPSK) signal. This command should be skipped when performing continuous TX test for CW.
2701  * @see   processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_RX
2702  * @param frequency
2703  * @param ADPLL loop mode
2704  */
2705 const hci_cmd_t hci_ti_write_hardware_register = {
2706         0xFF01, "42"
2707 };
2708 
2709 /**
2710  * @brief Configure SCO routing on Realtek Controllers
2711  */
2712 const hci_cmd_t hci_rtk_configure_sco_routing = {
2713     HCI_OPCODE_HCI_RTK_CONFIGURE_SCO_ROUTING, "111111111"
2714 };
2715 
2716 /**
2717 * @brief Read Card Information
2718 */
2719 const hci_cmd_t hci_rtk_read_card_info = {
2720     HCI_OPCODE_HCI_RTK_READ_CARD_INFO, "11111"
2721 };
2722 
2723 
2724 /**
2725  * @param voice_path 0x00 - transport, 0x01 - I2S/PCM
2726  */
2727 const hci_cmd_t hci_nxp_set_sco_data_path = {
2728         HCI_OPCODE_HCI_NXP_SET_SCO_DATA_PATH, "1"
2729 };
2730 
2731 /**
2732  * @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
2733  */
2734 const hci_cmd_t hci_nxp_write_pcm_i2s_settings = {
2735         HCI_OPCODE_HCI_NXP_WRITE_PCM_I2S_SETTINGS, "1"
2736 };
2737 
2738 /**
2739  * @param sync_settings_1 bits 7-2: reserved, bit 1: ISR, bit 0: ISR
2740  * @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
2741  */
2742 const hci_cmd_t hci_nxp_write_pcm_i2s_sync_settings = {
2743         HCI_OPCODE_HCI_NXP_WRITE_PCM_I2S_SYNC_SETTINGS, "12"
2744 };
2745 
2746 /**
2747  * @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
2748  */
2749 const hci_cmd_t hci_nxp_write_pcm_link_settings = {
2750         HCI_OPCODE_HCI_NXP_WRITE_PCM_LINK_SETTINGS, "2"
2751 };
2752 
2753 /**
2754  * @param next_connection_wbs 0: CVSD, 1: mSBC
2755  */
2756 const hci_cmd_t hci_nxp_set_wbs_connection = {
2757         HCI_OPCODE_HCI_NXP_SET_WBS_CONNECTION, "1"
2758 };
2759 
2760 /**
2761  * @param action
2762  * @param operation mode
2763  * @param sco_handle_1
2764  * @param sco_handle_2
2765  */
2766 const hci_cmd_t hci_nxp_host_pcm_i2s_audio_config = {
2767         HCI_OPCODE_HCI_NXP_HOST_PCM_I2S_AUDIO_CONFIG, "11HH"
2768 };
2769 
2770 /**
2771  * @param action
2772  */
2773 const hci_cmd_t hci_nxp_host_pcm_i2s_control_enable = {
2774         HCI_OPCODE_HCI_NXP_HOST_PCM_I2S_CONTROL_ENABLE, "1"
2775 };
2776