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