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