xref: /btstack/src/hci_cmd.c (revision 931b436ed5c293079c9dab64f723aba88c2b0f63)
156042629SMatthias Ringwald /*
256042629SMatthias Ringwald  * Copyright (C) 2014 BlueKitchen GmbH
356042629SMatthias Ringwald  *
456042629SMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
556042629SMatthias Ringwald  * modification, are permitted provided that the following conditions
656042629SMatthias Ringwald  * are met:
756042629SMatthias Ringwald  *
856042629SMatthias Ringwald  * 1. Redistributions of source code must retain the above copyright
956042629SMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
1056042629SMatthias Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
1156042629SMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
1256042629SMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
1356042629SMatthias Ringwald  * 3. Neither the name of the copyright holders nor the names of
1456042629SMatthias Ringwald  *    contributors may be used to endorse or promote products derived
1556042629SMatthias Ringwald  *    from this software without specific prior written permission.
1656042629SMatthias Ringwald  * 4. Any redistribution, use, or modification is done solely for
1756042629SMatthias Ringwald  *    personal benefit and not for any commercial purpose or for
1856042629SMatthias Ringwald  *    monetary gain.
1956042629SMatthias Ringwald  *
2056042629SMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
2156042629SMatthias Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2256042629SMatthias Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
2356042629SMatthias Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
2456042629SMatthias Ringwald  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2556042629SMatthias Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
2656042629SMatthias Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
2756042629SMatthias Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
2856042629SMatthias Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
2956042629SMatthias Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
3056042629SMatthias Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3156042629SMatthias Ringwald  * SUCH DAMAGE.
3256042629SMatthias Ringwald  *
3356042629SMatthias Ringwald  * Please inquire about commercial licensing options at
3456042629SMatthias Ringwald  * [email protected]
3556042629SMatthias Ringwald  *
3656042629SMatthias Ringwald  */
3756042629SMatthias Ringwald 
38e501bae0SMatthias Ringwald #define BTSTACK_FILE__ "hci_cmd.c"
39ab2c6ae4SMatthias Ringwald 
4056042629SMatthias Ringwald /*
4156042629SMatthias Ringwald  *  hci_cmd.c
4256042629SMatthias Ringwald  *
4356042629SMatthias Ringwald  *  Created by Matthias Ringwald on 7/23/09.
4456042629SMatthias Ringwald  */
4556042629SMatthias Ringwald 
467907f069SMatthias Ringwald #include "btstack_config.h"
4756042629SMatthias Ringwald 
4856042629SMatthias Ringwald #include "hci.h"
4956042629SMatthias Ringwald #include "hci_cmd.h"
50f9f2075cSMatthias Ringwald #include "btstack_debug.h"
5156042629SMatthias Ringwald 
5256042629SMatthias Ringwald #include <string.h>
5356042629SMatthias Ringwald 
54c56de76bSMilanka Ringwald 
5559c9672fSMatthias Ringwald #ifdef ENABLE_SDP
5659c9672fSMatthias Ringwald #include "classic/sdp_util.h"
5759c9672fSMatthias Ringwald #endif
5859c9672fSMatthias Ringwald 
5956042629SMatthias Ringwald // calculate combined ogf/ocf value
605efd5011SMatthias Ringwald #define OPCODE(ogf, ocf) ((ocf) | ((ogf) << 10))
6156042629SMatthias Ringwald 
627f67490cSMatthias Ringwald #define INVALID_VAR_LEN 0xffffu
63*931b436eSMatthias Ringwald // hci_le_set_cig_parameters_test has 10 arrayed parameters
64*931b436eSMatthias Ringwald #define MAX_NR_ARRAY_FIELDS 10
65*931b436eSMatthias Ringwald #define INVALID_ARRAY_LEN 0xff
667f67490cSMatthias Ringwald 
6756042629SMatthias Ringwald /**
6856042629SMatthias Ringwald  * construct HCI Command based on template
6956042629SMatthias Ringwald  *
7056042629SMatthias Ringwald  * Format:
7156042629SMatthias Ringwald  *   1,2,3,4: one to four byte value
7256042629SMatthias Ringwald  *   H: HCI connection handle
7356042629SMatthias Ringwald  *   B: Bluetooth Baseband Address (BD_ADDR)
7456042629SMatthias Ringwald  *   D: 8 byte data block
7556042629SMatthias Ringwald  *   E: Extended Inquiry Result
7656042629SMatthias Ringwald  *   N: Name up to 248 chars, \0 terminated
77237daac5SMatthias Ringwald  *   P: 16 byte data block. Pairing code, Simple Pairing Hash and Randomizer
7856042629SMatthias Ringwald  *   A: 31 bytes advertising data
7956042629SMatthias Ringwald  *   S: Service Record (Data Element Sequence)
8082180fcaSMatthias Ringwald  *   Q: 32 byte data block, e.g. for X and Y coordinates of P-256 public key
817f67490cSMatthias Ringwald  *   J: 8-bit length of variable size element
827f67490cSMatthias Ringwald  *   V: variable size element, len was given with param 'J'
83*931b436eSMatthias Ringwald  *   a: number of elements in following arrayed parameters(s), specified as '[...]'
84*931b436eSMatthias Ringwald  *   b: bit field indicating number of arrayed parameters(s), specified as '[...]'
85*931b436eSMatthias Ringwald  *   [: start of arrayed param sequence
86*931b436eSMatthias Ringwald  *   ]: end of arrayed param sequence
8756042629SMatthias Ringwald  */
8856042629SMatthias Ringwald uint16_t hci_cmd_create_from_template(uint8_t *hci_cmd_buffer, const hci_cmd_t *cmd, va_list argptr){
8956042629SMatthias Ringwald 
904ea43905SMatthias Ringwald     hci_cmd_buffer[0] = cmd->opcode & 0xffu;
9156042629SMatthias Ringwald     hci_cmd_buffer[1] = cmd->opcode >> 8;
92*931b436eSMatthias Ringwald     uint16_t pos = 3;
9356042629SMatthias Ringwald 
9456042629SMatthias Ringwald     const char *format = cmd->format;
9556042629SMatthias Ringwald     uint16_t word;
9656042629SMatthias Ringwald     uint32_t longword;
9756042629SMatthias Ringwald     uint8_t * ptr;
987f67490cSMatthias Ringwald     uint16_t var_len = INVALID_VAR_LEN;
997f67490cSMatthias Ringwald 
100*931b436eSMatthias Ringwald     const char * array_format = NULL;
101*931b436eSMatthias Ringwald     void *  array_data[MAX_NR_ARRAY_FIELDS];
102*931b436eSMatthias Ringwald     uint8_t array_num_elements = INVALID_ARRAY_LEN;
103*931b436eSMatthias Ringwald     uint8_t array_num_fields;
104*931b436eSMatthias Ringwald     uint8_t array_element_index;
105*931b436eSMatthias Ringwald 
106*931b436eSMatthias Ringwald     bool done_format = false;
107*931b436eSMatthias Ringwald     while (!done_format) {
108*931b436eSMatthias Ringwald         bool done_array;
10956042629SMatthias Ringwald         switch(*format) {
110*931b436eSMatthias Ringwald             case 0:
111*931b436eSMatthias Ringwald                 done_format = true;
112*931b436eSMatthias Ringwald                 break;
11356042629SMatthias Ringwald             case '1': //  8 bit value
114c56de76bSMilanka Ringwald                 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE
1154ea43905SMatthias Ringwald                 hci_cmd_buffer[pos++] = word & 0xffu;
116c56de76bSMilanka Ringwald                 break;
117c56de76bSMilanka Ringwald             case '2': // 16 bit value
118c56de76bSMilanka Ringwald                 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE
119c56de76bSMilanka Ringwald                 hci_cmd_buffer[pos++] = word & 0xffu;
12056042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = word >> 8;
121c56de76bSMilanka Ringwald                 break;
122c56de76bSMilanka Ringwald             case 'H': // hci_handle
123c56de76bSMilanka Ringwald                 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE
124c56de76bSMilanka Ringwald                 hci_cmd_buffer[pos++] = word & 0xffu;
12556042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = word >> 8;
12656042629SMatthias Ringwald                 break;
12756042629SMatthias Ringwald             case '3':
128c56de76bSMilanka Ringwald                 longword = va_arg(argptr, uint32_t); // LCOV_EXCL_BR_LINE
12956042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword;
13056042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 8;
13156042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 16;
132c56de76bSMilanka Ringwald                 break;
133c56de76bSMilanka Ringwald             case '4':
134c56de76bSMilanka Ringwald                 longword = va_arg(argptr, uint32_t); // LCOV_EXCL_BR_LINE
135c56de76bSMilanka Ringwald                 hci_cmd_buffer[pos++] = longword;
136c56de76bSMilanka Ringwald                 hci_cmd_buffer[pos++] = longword >> 8;
137c56de76bSMilanka Ringwald                 hci_cmd_buffer[pos++] = longword >> 16;
13856042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 24;
13956042629SMatthias Ringwald                 break;
14056042629SMatthias Ringwald             case 'B': // bt-addr
141c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
14256042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[5];
14356042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[4];
14456042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[3];
14556042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[2];
14656042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[1];
14756042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[0];
14856042629SMatthias Ringwald                 break;
14956042629SMatthias Ringwald             case 'D': // 8 byte data block
150c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
1516535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 8);
15256042629SMatthias Ringwald                 pos += 8;
15356042629SMatthias Ringwald                 break;
15456042629SMatthias Ringwald             case 'E': // Extended Inquiry Information 240 octets
155c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
1566535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 240);
15756042629SMatthias Ringwald                 pos += 240;
15856042629SMatthias Ringwald                 break;
15956042629SMatthias Ringwald             case 'N': { // UTF-8 string, null terminated
160c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
16156042629SMatthias Ringwald                 uint16_t len = strlen((const char*) ptr);
1624ea43905SMatthias Ringwald                 if (len > 248u) {
16356042629SMatthias Ringwald                     len = 248;
16456042629SMatthias Ringwald                 }
1656535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, len);
1664ea43905SMatthias Ringwald                 if (len < 248u) {
16756042629SMatthias Ringwald                     // fill remaining space with zeroes
1684ea43905SMatthias Ringwald                     memset(&hci_cmd_buffer[pos+len], 0u, 248u-len);
16956042629SMatthias Ringwald                 }
17056042629SMatthias Ringwald                 pos += 248;
17156042629SMatthias Ringwald                 break;
17256042629SMatthias Ringwald             }
173bb75dd7dSMatthias Ringwald             case 'P': // 16 byte PIN code or link key in little endian
174c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
1756535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 16);
17656042629SMatthias Ringwald                 pos += 16;
17756042629SMatthias Ringwald                 break;
178*931b436eSMatthias Ringwald             case 'K':   // 16 byte OOB Data or Link Key in big endian
179*931b436eSMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
180*931b436eSMatthias Ringwald                 reverse_bytes(ptr, &hci_cmd_buffer[pos], 16);
181*931b436eSMatthias Ringwald                 pos += 16;
182*931b436eSMatthias Ringwald                 break;
183a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE
18456042629SMatthias Ringwald             case 'A': // 31 bytes advertising data
185c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
1866535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 31);
18756042629SMatthias Ringwald                 pos += 31;
18856042629SMatthias Ringwald                 break;
189*931b436eSMatthias Ringwald             case 'J': //  8 bit variable length indicator for 'V'
190*931b436eSMatthias Ringwald                 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE
191*931b436eSMatthias Ringwald                 var_len = word & 0xffu;
192*931b436eSMatthias Ringwald                 hci_cmd_buffer[pos++] = var_len;
193bb75dd7dSMatthias Ringwald                 break;
1947f67490cSMatthias Ringwald             case 'V':
1957f67490cSMatthias Ringwald                 btstack_assert(var_len != INVALID_VAR_LEN);
1967f67490cSMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
1977f67490cSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, var_len);
1987f67490cSMatthias Ringwald                 pos += var_len;
1997f67490cSMatthias Ringwald                 var_len = INVALID_VAR_LEN;
2007f67490cSMatthias Ringwald                 break;
201*931b436eSMatthias Ringwald             case 'a':
202*931b436eSMatthias Ringwald                 btstack_assert(array_num_elements == INVALID_ARRAY_LEN);
203*931b436eSMatthias Ringwald                 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE
204*931b436eSMatthias Ringwald                 hci_cmd_buffer[pos++] = word & 0xff;
205*931b436eSMatthias Ringwald                 array_num_elements = word & 0xffu;
206*931b436eSMatthias Ringwald                 break;
207*931b436eSMatthias Ringwald             case 'b':
208*931b436eSMatthias Ringwald                 btstack_assert(array_num_elements == INVALID_ARRAY_LEN);
209*931b436eSMatthias Ringwald                 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE
210*931b436eSMatthias Ringwald                 hci_cmd_buffer[pos++] = word & 0xff;
211*931b436eSMatthias Ringwald                 array_num_elements = count_set_bits_uint32(word & 0xffu);
212*931b436eSMatthias Ringwald                 break;
213*931b436eSMatthias Ringwald             case '[':
214*931b436eSMatthias Ringwald                 btstack_assert(array_num_elements != INVALID_ARRAY_LEN);
215*931b436eSMatthias Ringwald                 // process array
216*931b436eSMatthias Ringwald                 format++;
217*931b436eSMatthias Ringwald                 array_format = format;
218*931b436eSMatthias Ringwald                 array_num_fields = 0;
219*931b436eSMatthias Ringwald                 done_array = false;
220*931b436eSMatthias Ringwald                 while (!done_array){
221*931b436eSMatthias Ringwald                     switch (*format){
222*931b436eSMatthias Ringwald                         case 0:
223*931b436eSMatthias Ringwald                             done_array = true;
224*931b436eSMatthias Ringwald                             done_format = true;
225*931b436eSMatthias Ringwald                             break;
226*931b436eSMatthias Ringwald                         case ']':
227*931b436eSMatthias Ringwald                             done_array = true;
228*931b436eSMatthias Ringwald                             break;
229*931b436eSMatthias Ringwald                         case '1':
230*931b436eSMatthias Ringwald                         case '2':
231*931b436eSMatthias Ringwald                             // all arrayed parameters are passed in as arrays
232*931b436eSMatthias Ringwald                             ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
233*931b436eSMatthias Ringwald                             array_data[array_num_fields++] = ptr;
234*931b436eSMatthias Ringwald                             format++;
235*931b436eSMatthias Ringwald                             break;
236*931b436eSMatthias Ringwald                         default:
237*931b436eSMatthias Ringwald                             btstack_unreachable();
238*931b436eSMatthias Ringwald                             break;
239*931b436eSMatthias Ringwald                     }
240*931b436eSMatthias Ringwald                 }
241*931b436eSMatthias Ringwald                 for (array_element_index = 0; array_element_index < array_num_elements ; array_element_index++){
242*931b436eSMatthias Ringwald                     uint8_t array_field_index;
243*931b436eSMatthias Ringwald                     for (array_field_index = 0; array_field_index < array_num_fields ; array_field_index++){
244*931b436eSMatthias Ringwald                         switch (array_format[array_field_index]){
245*931b436eSMatthias Ringwald                             case '1':
246*931b436eSMatthias Ringwald                                 hci_cmd_buffer[pos++] = ((const uint8_t *) array_data[array_field_index])[array_element_index];
247*931b436eSMatthias Ringwald                                 break;
248*931b436eSMatthias Ringwald                             case '2':
249*931b436eSMatthias Ringwald                                 little_endian_store_16(hci_cmd_buffer, pos, ((const uint16_t *) array_data[array_field_index])[array_element_index]);
250*931b436eSMatthias Ringwald                                 pos += 2;
251*931b436eSMatthias Ringwald                                 break;
252*931b436eSMatthias Ringwald                             default:
253*931b436eSMatthias Ringwald                                 btstack_unreachable();
254*931b436eSMatthias Ringwald                                 break;
255*931b436eSMatthias Ringwald                         }
256*931b436eSMatthias Ringwald                     }
257*931b436eSMatthias Ringwald                 }
258*931b436eSMatthias Ringwald                 break;
259*931b436eSMatthias Ringwald #endif
260*931b436eSMatthias Ringwald #ifdef ENABLE_LE_SECURE_CONNECTIONS
261*931b436eSMatthias Ringwald             case 'Q':
262*931b436eSMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
263*931b436eSMatthias Ringwald                 reverse_bytes(ptr, &hci_cmd_buffer[pos], 32);
264*931b436eSMatthias Ringwald                 pos += 32;
265*931b436eSMatthias Ringwald                 break;
266*931b436eSMatthias Ringwald #endif
267*931b436eSMatthias Ringwald #ifdef ENABLE_SDP
268*931b436eSMatthias Ringwald             // used by daemon
269*931b436eSMatthias Ringwald             case 'S': { // Service Record (Data Element Sequence)
270*931b436eSMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
271*931b436eSMatthias Ringwald                 uint16_t len = de_get_len(ptr);
272*931b436eSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, len);
273*931b436eSMatthias Ringwald                 pos += len;
274*931b436eSMatthias Ringwald                 break;
275*931b436eSMatthias Ringwald             }
276*931b436eSMatthias Ringwald #endif
27756042629SMatthias Ringwald             default:
2787f67490cSMatthias Ringwald                 btstack_unreachable();
27956042629SMatthias Ringwald                 break;
28056042629SMatthias Ringwald         }
28156042629SMatthias Ringwald         format++;
28256042629SMatthias Ringwald     };
28356042629SMatthias Ringwald     hci_cmd_buffer[2] = pos - 3;
28456042629SMatthias Ringwald     return pos;
28556042629SMatthias Ringwald }
28656042629SMatthias Ringwald 
28756042629SMatthias Ringwald /**
28856042629SMatthias Ringwald  *  Link Control Commands
28956042629SMatthias Ringwald  */
29056042629SMatthias Ringwald 
29156042629SMatthias Ringwald /**
29256042629SMatthias Ringwald  * @param lap
29356042629SMatthias Ringwald  * @param inquiry_length
29456042629SMatthias Ringwald  * @param num_responses
29556042629SMatthias Ringwald  */
29656042629SMatthias Ringwald const hci_cmd_t hci_inquiry = {
297ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_INQUIRY, "311"
29856042629SMatthias Ringwald };
29956042629SMatthias Ringwald 
30056042629SMatthias Ringwald /**
30156042629SMatthias Ringwald  */
30256042629SMatthias Ringwald const hci_cmd_t hci_inquiry_cancel = {
303ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_INQUIRY_CANCEL, ""
30456042629SMatthias Ringwald };
30556042629SMatthias Ringwald 
30656042629SMatthias Ringwald /**
30756042629SMatthias Ringwald  * @param bd_addr
30856042629SMatthias Ringwald  * @param packet_type
30956042629SMatthias Ringwald  * @param page_scan_repetition_mode
31056042629SMatthias Ringwald  * @param reserved
31156042629SMatthias Ringwald  * @param clock_offset
31256042629SMatthias Ringwald  * @param allow_role_switch
31356042629SMatthias Ringwald  */
31456042629SMatthias Ringwald const hci_cmd_t hci_create_connection = {
315ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CREATE_CONNECTION, "B21121"
31656042629SMatthias Ringwald };
31756042629SMatthias Ringwald 
31856042629SMatthias Ringwald /**
31956042629SMatthias Ringwald  * @param handle
32056042629SMatthias Ringwald  * @param reason (0x05, 0x13-0x15, 0x1a, 0x29, see Errors Codes in BT Spec Part D)
32156042629SMatthias Ringwald  */
32256042629SMatthias Ringwald const hci_cmd_t hci_disconnect = {
323ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_DISCONNECT, "H1"
32456042629SMatthias Ringwald };
32556042629SMatthias Ringwald 
32656042629SMatthias Ringwald /**
32756042629SMatthias Ringwald  * @param bd_addr
32856042629SMatthias Ringwald  */
32956042629SMatthias Ringwald const hci_cmd_t hci_create_connection_cancel = {
330ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CREATE_CONNECTION_CANCEL, "B"
33156042629SMatthias Ringwald };
33256042629SMatthias Ringwald 
33356042629SMatthias Ringwald /**
33456042629SMatthias Ringwald  * @param bd_addr
33556042629SMatthias Ringwald  * @param role (become master, stay slave)
33656042629SMatthias Ringwald  */
33756042629SMatthias Ringwald const hci_cmd_t hci_accept_connection_request = {
338ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ACCEPT_CONNECTION_REQUEST, "B1"
33956042629SMatthias Ringwald };
34056042629SMatthias Ringwald 
34156042629SMatthias Ringwald /**
34256042629SMatthias Ringwald  * @param bd_addr
34356042629SMatthias Ringwald  * @param reason (e.g. CONNECTION REJECTED DUE TO LIMITED RESOURCES (0x0d))
34456042629SMatthias Ringwald  */
34556042629SMatthias Ringwald const hci_cmd_t hci_reject_connection_request = {
346ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REJECT_CONNECTION_REQUEST, "B1"
34756042629SMatthias Ringwald };
34856042629SMatthias Ringwald 
34956042629SMatthias Ringwald /**
35056042629SMatthias Ringwald  * @param bd_addr
35156042629SMatthias Ringwald  * @param link_key
35256042629SMatthias Ringwald  */
35356042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_reply = {
354ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LINK_KEY_REQUEST_REPLY, "BP"
35556042629SMatthias Ringwald };
35656042629SMatthias Ringwald 
35756042629SMatthias Ringwald /**
35856042629SMatthias Ringwald  * @param bd_addr
35956042629SMatthias Ringwald  */
36056042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_negative_reply = {
361ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY, "B"
36256042629SMatthias Ringwald };
36356042629SMatthias Ringwald 
36456042629SMatthias Ringwald /**
36556042629SMatthias Ringwald  * @param bd_addr
36656042629SMatthias Ringwald  * @param pin_length
36756042629SMatthias Ringwald  * @param pin (c-string)
36856042629SMatthias Ringwald  */
36956042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_reply = {
370ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_PIN_CODE_REQUEST_REPLY, "B1P"
37156042629SMatthias Ringwald };
37256042629SMatthias Ringwald 
37356042629SMatthias Ringwald /**
37456042629SMatthias Ringwald  * @param bd_addr
37556042629SMatthias Ringwald  */
37656042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_negative_reply = {
377ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY, "B"
37856042629SMatthias Ringwald };
37956042629SMatthias Ringwald 
38056042629SMatthias Ringwald /**
38156042629SMatthias Ringwald  * @param handle
38256042629SMatthias Ringwald  * @param packet_type
38356042629SMatthias Ringwald  */
38456042629SMatthias Ringwald const hci_cmd_t hci_change_connection_packet_type = {
385ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CHANGE_CONNECTION_PACKET_TYPE, "H2"
38656042629SMatthias Ringwald };
38756042629SMatthias Ringwald 
38856042629SMatthias Ringwald /**
38956042629SMatthias Ringwald  * @param handle
39056042629SMatthias Ringwald  */
39156042629SMatthias Ringwald const hci_cmd_t hci_authentication_requested = {
392ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_AUTHENTICATION_REQUESTED, "H"
39356042629SMatthias Ringwald };
39456042629SMatthias Ringwald 
39556042629SMatthias Ringwald /**
39656042629SMatthias Ringwald  * @param handle
39756042629SMatthias Ringwald  * @param encryption_enable
39856042629SMatthias Ringwald  */
39956042629SMatthias Ringwald const hci_cmd_t hci_set_connection_encryption = {
400ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_CONNECTION_ENCRYPTION, "H1"
40156042629SMatthias Ringwald };
40256042629SMatthias Ringwald 
40356042629SMatthias Ringwald /**
40456042629SMatthias Ringwald  * @param handle
40556042629SMatthias Ringwald  */
40656042629SMatthias Ringwald const hci_cmd_t hci_change_connection_link_key = {
407ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CHANGE_CONNECTION_LINK_KEY, "H"
40856042629SMatthias Ringwald };
40956042629SMatthias Ringwald 
41056042629SMatthias Ringwald /**
41156042629SMatthias Ringwald  * @param bd_addr
41256042629SMatthias Ringwald  * @param page_scan_repetition_mode
41356042629SMatthias Ringwald  * @param reserved
41456042629SMatthias Ringwald  * @param clock_offset
41556042629SMatthias Ringwald  */
41656042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request = {
417ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_NAME_REQUEST, "B112"
41856042629SMatthias Ringwald };
41956042629SMatthias Ringwald 
42056042629SMatthias Ringwald 
42156042629SMatthias Ringwald /**
42256042629SMatthias Ringwald  * @param bd_addr
42356042629SMatthias Ringwald  */
42456042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request_cancel = {
425ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_NAME_REQUEST_CANCEL, "B"
42656042629SMatthias Ringwald };
42756042629SMatthias Ringwald 
42856042629SMatthias Ringwald  /**
42956042629SMatthias Ringwald  * @param handle
43056042629SMatthias Ringwald  */
43156042629SMatthias Ringwald const hci_cmd_t hci_read_remote_supported_features_command = {
432ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND, "H"
4338b22c04dSMatthias Ringwald };
4348b22c04dSMatthias Ringwald 
4358b22c04dSMatthias Ringwald /**
436d5057706SMatthias Ringwald * @param handle
437d5057706SMatthias Ringwald */
438d5057706SMatthias Ringwald const hci_cmd_t hci_read_remote_extended_features_command = {
439ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND, "H1"
440d5057706SMatthias Ringwald };
441d5057706SMatthias Ringwald 
442d5057706SMatthias Ringwald /**
4438b22c04dSMatthias Ringwald  * @param handle
4448b22c04dSMatthias Ringwald  */
4458b22c04dSMatthias Ringwald const hci_cmd_t hci_read_remote_version_information = {
446ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_VERSION_INFORMATION, "H"
44756042629SMatthias Ringwald };
44856042629SMatthias Ringwald 
44956042629SMatthias Ringwald /**
45056042629SMatthias Ringwald  * @param handle
45156042629SMatthias Ringwald  * @param transmit_bandwidth 8000(64kbps)
45256042629SMatthias Ringwald  * @param receive_bandwidth  8000(64kbps)
45356042629SMatthias Ringwald  * @param max_latency        >= 7ms for eSCO, 0xFFFF do not care
45456042629SMatthias Ringwald  * @param voice_settings     e.g. CVSD, Input Coding: Linear, Input Data Format: 2’s complement, data 16bit: 00011000000 == 0x60
45556042629SMatthias Ringwald  * @param retransmission_effort  e.g. 0xFF do not care
45656042629SMatthias Ringwald  * @param packet_type        at least EV3 for eSCO
45756042629SMatthias Ringwald  */
45856042629SMatthias Ringwald const hci_cmd_t hci_setup_synchronous_connection = {
459ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SETUP_SYNCHRONOUS_CONNECTION, "H442212"
46056042629SMatthias Ringwald };
46156042629SMatthias Ringwald 
46256042629SMatthias Ringwald /**
46356042629SMatthias Ringwald  * @param bd_addr
46456042629SMatthias Ringwald  * @param transmit_bandwidth
46556042629SMatthias Ringwald  * @param receive_bandwidth
46656042629SMatthias Ringwald  * @param max_latency
46756042629SMatthias Ringwald  * @param voice_settings
46856042629SMatthias Ringwald  * @param retransmission_effort
46956042629SMatthias Ringwald  * @param packet_type
47056042629SMatthias Ringwald  */
47156042629SMatthias Ringwald const hci_cmd_t hci_accept_synchronous_connection = {
472ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ACCEPT_SYNCHRONOUS_CONNECTION, "B442212"
47356042629SMatthias Ringwald };
47456042629SMatthias Ringwald 
47556042629SMatthias Ringwald /**
47656042629SMatthias Ringwald  * @param bd_addr
47756042629SMatthias Ringwald  * @param IO_capability
47856042629SMatthias Ringwald  * @param OOB_data_present
47956042629SMatthias Ringwald  * @param authentication_requirements
48056042629SMatthias Ringwald  */
48156042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_reply = {
482ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_REPLY, "B111"
48356042629SMatthias Ringwald };
48456042629SMatthias Ringwald 
48556042629SMatthias Ringwald /**
48656042629SMatthias Ringwald  * @param bd_addr
48756042629SMatthias Ringwald  */
48856042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_reply = {
489ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_REPLY, "B"
49056042629SMatthias Ringwald };
49156042629SMatthias Ringwald 
49256042629SMatthias Ringwald /**
49356042629SMatthias Ringwald  * @param bd_addr
49456042629SMatthias Ringwald  */
49556042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_negative_reply = {
496ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY, "B"
49756042629SMatthias Ringwald };
49856042629SMatthias Ringwald 
49956042629SMatthias Ringwald /**
50056042629SMatthias Ringwald  * @param bd_addr
50156042629SMatthias Ringwald  * @param numeric_value
50256042629SMatthias Ringwald  */
50356042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_reply = {
504ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_REPLY, "B4"
50556042629SMatthias Ringwald };
50656042629SMatthias Ringwald 
50756042629SMatthias Ringwald /**
50856042629SMatthias Ringwald  * @param bd_addr
50956042629SMatthias Ringwald  */
51056042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_negative_reply = {
511ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY, "B"
51256042629SMatthias Ringwald };
51356042629SMatthias Ringwald 
51456042629SMatthias Ringwald /**
51556042629SMatthias Ringwald  * @param bd_addr
516237daac5SMatthias Ringwald  * @param c Simple Pairing Hash C
517237daac5SMatthias Ringwald  * @param r Simple Pairing Randomizer R
518237daac5SMatthias Ringwald  */
519237daac5SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_reply = {
520bb75dd7dSMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_REPLY, "BKK"
521237daac5SMatthias Ringwald };
522237daac5SMatthias Ringwald 
523237daac5SMatthias Ringwald /**
524237daac5SMatthias Ringwald  * @param bd_addr
52556042629SMatthias Ringwald  */
52656042629SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_negative_reply = {
527ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY, "B"
52856042629SMatthias Ringwald };
52956042629SMatthias Ringwald 
53056042629SMatthias Ringwald /**
53156042629SMatthias Ringwald  * @param bd_addr
53256042629SMatthias Ringwald  * @param reason (Part D, Error codes)
53356042629SMatthias Ringwald  */
53456042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_negative_reply = {
535ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY, "B1"
53656042629SMatthias Ringwald };
53756042629SMatthias Ringwald 
53856042629SMatthias Ringwald /**
53956042629SMatthias Ringwald  * @param handle
54056042629SMatthias Ringwald  * @param transmit_bandwidth
54156042629SMatthias Ringwald  * @param receive_bandwidth
54256042629SMatthias Ringwald  * @param transmit_coding_format_type
54356042629SMatthias Ringwald  * @param transmit_coding_format_company
54456042629SMatthias Ringwald  * @param transmit_coding_format_codec
54556042629SMatthias Ringwald  * @param receive_coding_format_type
54656042629SMatthias Ringwald  * @param receive_coding_format_company
54756042629SMatthias Ringwald  * @param receive_coding_format_codec
54856042629SMatthias Ringwald  * @param transmit_coding_frame_size
54956042629SMatthias Ringwald  * @param receive_coding_frame_size
55056042629SMatthias Ringwald  * @param input_bandwidth
55156042629SMatthias Ringwald  * @param output_bandwidth
55256042629SMatthias Ringwald  * @param input_coding_format_type
55356042629SMatthias Ringwald  * @param input_coding_format_company
55456042629SMatthias Ringwald  * @param input_coding_format_codec
55556042629SMatthias Ringwald  * @param output_coding_format_type
55656042629SMatthias Ringwald  * @param output_coding_format_company
55756042629SMatthias Ringwald  * @param output_coding_format_codec
55856042629SMatthias Ringwald  * @param input_coded_data_size
55956042629SMatthias Ringwald  * @param outupt_coded_data_size
56056042629SMatthias Ringwald  * @param input_pcm_data_format
56156042629SMatthias Ringwald  * @param output_pcm_data_format
56256042629SMatthias Ringwald  * @param input_pcm_sample_payload_msb_position
56356042629SMatthias Ringwald  * @param output_pcm_sample_payload_msb_position
56456042629SMatthias Ringwald  * @param input_data_path
56556042629SMatthias Ringwald  * @param output_data_path
56656042629SMatthias Ringwald  * @param input_transport_unit_size
56756042629SMatthias Ringwald  * @param output_transport_unit_size
56856042629SMatthias Ringwald  * @param max_latency
56956042629SMatthias Ringwald  * @param packet_type
57056042629SMatthias Ringwald  * @param retransmission_effort
57156042629SMatthias Ringwald  */
57256042629SMatthias Ringwald const hci_cmd_t hci_enhanced_setup_synchronous_connection = {
573ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION, "H4412212222441221222211111111221"
57456042629SMatthias Ringwald };
57556042629SMatthias Ringwald 
57656042629SMatthias Ringwald /**
57756042629SMatthias Ringwald  * @param bd_addr
57856042629SMatthias Ringwald  * @param transmit_bandwidth
57956042629SMatthias Ringwald  * @param receive_bandwidth
58056042629SMatthias Ringwald  * @param transmit_coding_format_type
58156042629SMatthias Ringwald  * @param transmit_coding_format_company
58256042629SMatthias Ringwald  * @param transmit_coding_format_codec
58356042629SMatthias Ringwald  * @param receive_coding_format_type
58456042629SMatthias Ringwald  * @param receive_coding_format_company
58556042629SMatthias Ringwald  * @param receive_coding_format_codec
58656042629SMatthias Ringwald  * @param transmit_coding_frame_size
58756042629SMatthias Ringwald  * @param receive_coding_frame_size
58856042629SMatthias Ringwald  * @param input_bandwidth
58956042629SMatthias Ringwald  * @param output_bandwidth
59056042629SMatthias Ringwald  * @param input_coding_format_type
59156042629SMatthias Ringwald  * @param input_coding_format_company
59256042629SMatthias Ringwald  * @param input_coding_format_codec
59356042629SMatthias Ringwald  * @param output_coding_format_type
59456042629SMatthias Ringwald  * @param output_coding_format_company
59556042629SMatthias Ringwald  * @param output_coding_format_codec
59656042629SMatthias Ringwald  * @param input_coded_data_size
59756042629SMatthias Ringwald  * @param outupt_coded_data_size
59856042629SMatthias Ringwald  * @param input_pcm_data_format
59956042629SMatthias Ringwald  * @param output_pcm_data_format
60056042629SMatthias Ringwald  * @param input_pcm_sample_payload_msb_position
60156042629SMatthias Ringwald  * @param output_pcm_sample_payload_msb_position
60256042629SMatthias Ringwald  * @param input_data_path
60356042629SMatthias Ringwald  * @param output_data_path
60456042629SMatthias Ringwald  * @param input_transport_unit_size
60556042629SMatthias Ringwald  * @param output_transport_unit_size
60656042629SMatthias Ringwald  * @param max_latency
60756042629SMatthias Ringwald  * @param packet_type
60856042629SMatthias Ringwald  * @param retransmission_effort
60956042629SMatthias Ringwald  */
61056042629SMatthias Ringwald const hci_cmd_t hci_enhanced_accept_synchronous_connection = {
611ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION, "B4412212222441221222211111111221"
61256042629SMatthias Ringwald };
61356042629SMatthias Ringwald 
61456042629SMatthias Ringwald /**
615bb75dd7dSMatthias Ringwald  * @param bd_addr
616bb75dd7dSMatthias Ringwald  * @param c_192 Simple Pairing Hash C derived from P-192 public key
617bb75dd7dSMatthias Ringwald  * @param r_192 Simple Pairing Randomizer derived from P-192 public key
618bb75dd7dSMatthias Ringwald  * @param c_256 Simple Pairing Hash C derived from P-256 public key
619bb75dd7dSMatthias Ringwald  * @param r_256 Simple Pairing Randomizer derived from P-256 public key
620bb75dd7dSMatthias Ringwald  */
621bb75dd7dSMatthias Ringwald const hci_cmd_t hci_remote_oob_extended_data_request_reply = {
622bb75dd7dSMatthias Ringwald         HCI_OPCODE_HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY, "BKKKK"
623bb75dd7dSMatthias Ringwald };
624bb75dd7dSMatthias Ringwald 
625bb75dd7dSMatthias Ringwald /**
62656042629SMatthias Ringwald  *  Link Policy Commands
62756042629SMatthias Ringwald  */
62856042629SMatthias Ringwald 
62956042629SMatthias Ringwald /**
63056042629SMatthias Ringwald  * @param handle
63156042629SMatthias Ringwald  * @param sniff_max_interval
63256042629SMatthias Ringwald  * @param sniff_min_interval
63356042629SMatthias Ringwald  * @param sniff_attempt
63456042629SMatthias Ringwald  * @param sniff_timeout
63556042629SMatthias Ringwald  */
63656042629SMatthias Ringwald const hci_cmd_t hci_sniff_mode = {
637ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SNIFF_MODE, "H2222"
63856042629SMatthias Ringwald };
63956042629SMatthias Ringwald 
64056042629SMatthias Ringwald /**
64156042629SMatthias Ringwald  * @param handle
6427cd21895SMatthias Ringwald  */
6437cd21895SMatthias Ringwald const hci_cmd_t hci_exit_sniff_mode = {
644ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_EXIT_SNIFF_MODE, "H"
6457cd21895SMatthias Ringwald };
6467cd21895SMatthias Ringwald 
6477cd21895SMatthias Ringwald /**
6487cd21895SMatthias Ringwald  * @param handle
64956042629SMatthias Ringwald  * @param flags
65056042629SMatthias Ringwald  * @param service_type
65156042629SMatthias Ringwald  * @param token_rate (bytes/s)
65256042629SMatthias Ringwald  * @param peak_bandwith (bytes/s)
65356042629SMatthias Ringwald  * @param latency (us)
65456042629SMatthias Ringwald  * @param delay_variation (us)
65556042629SMatthias Ringwald  */
65656042629SMatthias Ringwald const hci_cmd_t hci_qos_setup = {
657ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_QOS_SETUP, "H114444"
65856042629SMatthias Ringwald };
65956042629SMatthias Ringwald 
66056042629SMatthias Ringwald /**
66156042629SMatthias Ringwald  * @param handle
66256042629SMatthias Ringwald  */
66356042629SMatthias Ringwald const hci_cmd_t hci_role_discovery = {
664ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ROLE_DISCOVERY, "H"
66556042629SMatthias Ringwald };
66656042629SMatthias Ringwald 
66756042629SMatthias Ringwald /**
66856042629SMatthias Ringwald  * @param bd_addr
66956042629SMatthias Ringwald  * @param role (0=master,1=slave)
67056042629SMatthias Ringwald  */
67156042629SMatthias Ringwald const hci_cmd_t hci_switch_role_command= {
672ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SWITCH_ROLE_COMMAND, "B1"
67356042629SMatthias Ringwald };
67456042629SMatthias Ringwald 
67556042629SMatthias Ringwald /**
67656042629SMatthias Ringwald  * @param handle
67756042629SMatthias Ringwald  */
67856042629SMatthias Ringwald const hci_cmd_t hci_read_link_policy_settings = {
679ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LINK_POLICY_SETTINGS, "H"
68056042629SMatthias Ringwald };
68156042629SMatthias Ringwald 
68256042629SMatthias Ringwald /**
68356042629SMatthias Ringwald  * @param handle
68456042629SMatthias Ringwald  * @param settings
68556042629SMatthias Ringwald  */
68656042629SMatthias Ringwald const hci_cmd_t hci_write_link_policy_settings = {
687ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LINK_POLICY_SETTINGS, "H2"
68856042629SMatthias Ringwald };
68956042629SMatthias Ringwald 
690c4c88f1bSJakob Krantz /**
69132e2f27fSMatthias Ringwald  * @param handle
69232e2f27fSMatthias Ringwald  * @param max_latency
69332e2f27fSMatthias Ringwald  * @param min_remote_timeout
69432e2f27fSMatthias Ringwald  * @param min_local_timeout
69532e2f27fSMatthias Ringwald  */
69632e2f27fSMatthias Ringwald const hci_cmd_t hci_sniff_subrating = {
69750fe3a99SMilanka Ringwald         HCI_OPCODE_HCI_SNIFF_SUBRATING, "H222"
69832e2f27fSMatthias Ringwald };
69932e2f27fSMatthias Ringwald 
70032e2f27fSMatthias Ringwald /**
701c4c88f1bSJakob Krantz  * @param policy
702c4c88f1bSJakob Krantz  */
70353138e7aSMatthias Ringwald const hci_cmd_t hci_write_default_link_policy_setting = {
704ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_DEFAULT_LINK_POLICY_SETTING, "2"
705c4c88f1bSJakob Krantz };
706c4c88f1bSJakob Krantz 
707733a7793SMatthias Ringwald /**
708733a7793SMatthias Ringwald  * @param handle
709733a7793SMatthias Ringwald  * @param unused
710733a7793SMatthias Ringwald  * @param flow_direction
711733a7793SMatthias Ringwald  * @param service_type
712733a7793SMatthias Ringwald  * @param token_rate
713733a7793SMatthias Ringwald  * @param token_bucket_size
714733a7793SMatthias Ringwald  * @param peak_bandwidth
715733a7793SMatthias Ringwald  * @param access_latency
716733a7793SMatthias Ringwald  */
717733a7793SMatthias Ringwald const hci_cmd_t hci_flow_specification = {
718733a7793SMatthias Ringwald         HCI_OPCODE_HCI_FLOW_SPECIFICATION, "H1114444"
719733a7793SMatthias Ringwald };
720733a7793SMatthias Ringwald 
72156042629SMatthias Ringwald 
72256042629SMatthias Ringwald /**
72356042629SMatthias Ringwald  *  Controller & Baseband Commands
72456042629SMatthias Ringwald  */
72556042629SMatthias Ringwald 
7269119d792SMilanka Ringwald 
72756042629SMatthias Ringwald /**
72856042629SMatthias Ringwald  * @param event_mask_lover_octets
72956042629SMatthias Ringwald  * @param event_mask_higher_octets
73056042629SMatthias Ringwald  */
73156042629SMatthias Ringwald const hci_cmd_t hci_set_event_mask = {
732ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_EVENT_MASK, "44"
73356042629SMatthias Ringwald };
73456042629SMatthias Ringwald 
73556042629SMatthias Ringwald /**
73656042629SMatthias Ringwald  */
73756042629SMatthias Ringwald const hci_cmd_t hci_reset = {
738ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_RESET, ""
73956042629SMatthias Ringwald };
74056042629SMatthias Ringwald 
74156042629SMatthias Ringwald /**
742e49d496aSMatthias Ringwald  * @param handle
743e49d496aSMatthias Ringwald  */
744e49d496aSMatthias Ringwald const hci_cmd_t hci_flush = {
745ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_FLUSH, "H"
7469af39d9fSMatthias Ringwald };
7479af39d9fSMatthias Ringwald 
7489af39d9fSMatthias Ringwald /**
7499af39d9fSMatthias Ringwald  * @param handle
7509af39d9fSMatthias Ringwald  */
7519af39d9fSMatthias Ringwald const hci_cmd_t hci_read_pin_type = {
752ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PIN_TYPE, ""
7539af39d9fSMatthias Ringwald };
7549af39d9fSMatthias Ringwald 
7559af39d9fSMatthias Ringwald /**
7569af39d9fSMatthias Ringwald  * @param handle
7579af39d9fSMatthias Ringwald  */
7589af39d9fSMatthias Ringwald const hci_cmd_t hci_write_pin_type = {
759ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PIN_TYPE, "1"
760e49d496aSMatthias Ringwald };
761e49d496aSMatthias Ringwald 
762e49d496aSMatthias Ringwald /**
76356042629SMatthias Ringwald  * @param bd_addr
76456042629SMatthias Ringwald  * @param delete_all_flags
76556042629SMatthias Ringwald  */
76656042629SMatthias Ringwald const hci_cmd_t hci_delete_stored_link_key = {
767ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_DELETE_STORED_LINK_KEY, "B1"
76856042629SMatthias Ringwald };
76956042629SMatthias Ringwald 
770f9f2075cSMatthias Ringwald #ifdef ENABLE_CLASSIC
77156042629SMatthias Ringwald /**
77256042629SMatthias Ringwald  * @param local_name (UTF-8, Null Terminated, max 248 octets)
77356042629SMatthias Ringwald  */
77456042629SMatthias Ringwald const hci_cmd_t hci_write_local_name = {
775ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LOCAL_NAME, "N"
77656042629SMatthias Ringwald };
777f9f2075cSMatthias Ringwald #endif
77856042629SMatthias Ringwald 
77956042629SMatthias Ringwald /**
780e90bae01SMatthias Ringwald  */
781e90bae01SMatthias Ringwald const hci_cmd_t hci_read_local_name = {
782ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_NAME, ""
783e90bae01SMatthias Ringwald };
784e90bae01SMatthias Ringwald 
785e90bae01SMatthias Ringwald /**
786195e82f3Sskoperst  */
787195e82f3Sskoperst const hci_cmd_t hci_read_page_timeout = {
788ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PAGE_TIMEOUT, ""
789195e82f3Sskoperst };
790195e82f3Sskoperst 
791195e82f3Sskoperst /**
79256042629SMatthias Ringwald  * @param page_timeout (* 0.625 ms)
79356042629SMatthias Ringwald  */
79456042629SMatthias Ringwald const hci_cmd_t hci_write_page_timeout = {
795ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_TIMEOUT, "2"
79656042629SMatthias Ringwald };
79756042629SMatthias Ringwald 
79856042629SMatthias Ringwald /**
7994eac2391SMatthias Ringwald  * @param scan_enable (no, inq, page, inq+page)
8004eac2391SMatthias Ringwald  */
8014eac2391SMatthias Ringwald const hci_cmd_t hci_write_scan_enable = {
802ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SCAN_ENABLE, "1"
8034eac2391SMatthias Ringwald };
8044eac2391SMatthias Ringwald 
8054eac2391SMatthias Ringwald /**
806195e82f3Sskoperst  */
807195e82f3Sskoperst const hci_cmd_t hci_read_page_scan_activity = {
808ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PAGE_SCAN_ACTIVITY, ""
809195e82f3Sskoperst };
810195e82f3Sskoperst 
811195e82f3Sskoperst /**
812195e82f3Sskoperst  * @param page_scan_interval (* 0.625 ms)
813195e82f3Sskoperst  * @param page_scan_window (* 0.625 ms, must be <= page_scan_interval)
814195e82f3Sskoperst  */
815195e82f3Sskoperst const hci_cmd_t hci_write_page_scan_activity = {
816ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_SCAN_ACTIVITY, "22"
817195e82f3Sskoperst };
818195e82f3Sskoperst 
819195e82f3Sskoperst /**
82056042629SMatthias Ringwald  */
8214eac2391SMatthias Ringwald const hci_cmd_t hci_read_inquiry_scan_activity = {
822ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_INQUIRY_SCAN_ACTIVITY, ""
8234eac2391SMatthias Ringwald };
8244eac2391SMatthias Ringwald 
8254eac2391SMatthias Ringwald /**
8264eac2391SMatthias Ringwald  * @param inquiry_scan_interval (* 0.625 ms)
8274eac2391SMatthias Ringwald  * @param inquiry_scan_window (* 0.625 ms, must be <= inquiry_scan_interval)
8284eac2391SMatthias Ringwald  */
8294eac2391SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_activity = {
830ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_ACTIVITY, "22"
83156042629SMatthias Ringwald };
83256042629SMatthias Ringwald 
83356042629SMatthias Ringwald /**
83456042629SMatthias Ringwald  * @param authentication_enable
83556042629SMatthias Ringwald  */
83656042629SMatthias Ringwald const hci_cmd_t hci_write_authentication_enable = {
837ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_AUTHENTICATION_ENABLE, "1"
83856042629SMatthias Ringwald };
83956042629SMatthias Ringwald 
84056042629SMatthias Ringwald /**
84156042629SMatthias Ringwald  * @param class_of_device
84256042629SMatthias Ringwald  */
84356042629SMatthias Ringwald const hci_cmd_t hci_write_class_of_device = {
844ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_CLASS_OF_DEVICE, "3"
84556042629SMatthias Ringwald };
84656042629SMatthias Ringwald 
84756042629SMatthias Ringwald /**
84856042629SMatthias Ringwald  */
84956042629SMatthias Ringwald const hci_cmd_t hci_read_num_broadcast_retransmissions = {
850ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS, ""
85156042629SMatthias Ringwald };
85256042629SMatthias Ringwald 
85356042629SMatthias Ringwald /**
85456042629SMatthias Ringwald  * @param num_broadcast_retransmissions (e.g. 0 for a single broadcast)
85556042629SMatthias Ringwald  */
85656042629SMatthias Ringwald const hci_cmd_t hci_write_num_broadcast_retransmissions = {
857ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS, "1"
85856042629SMatthias Ringwald };
85956042629SMatthias Ringwald 
86056042629SMatthias Ringwald /**
86144751e25SMatthias Ringwald  * @param connection_handle
86244751e25SMatthias Ringwald  * @param type 0 = current transmit level, 1 = max transmit level
86344751e25SMatthias Ringwald  */
86444751e25SMatthias Ringwald const hci_cmd_t hci_read_transmit_power_level = {
865ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_TRANSMIT_POWER_LEVEL, "11"
86644751e25SMatthias Ringwald };
86744751e25SMatthias Ringwald 
86844751e25SMatthias Ringwald /**
86956042629SMatthias Ringwald  * @param synchronous_flow_control_enable - if yes, num completed packet everts are sent for SCO packets
87056042629SMatthias Ringwald  */
87156042629SMatthias Ringwald const hci_cmd_t hci_write_synchronous_flow_control_enable = {
872ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE, "1"
87356042629SMatthias Ringwald };
87456042629SMatthias Ringwald 
8752b838201SMatthias Ringwald #ifdef ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL
8762b838201SMatthias Ringwald 
8772b838201SMatthias Ringwald /**
8782b838201SMatthias Ringwald  * @param flow_control_enable - 0: off, 1: ACL only, 2: SCO only, 3: ACL + SCO
8792b838201SMatthias Ringwald  */
8802b838201SMatthias Ringwald const hci_cmd_t hci_set_controller_to_host_flow_control = {
881ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL, "1"
8822b838201SMatthias Ringwald };
8832b838201SMatthias Ringwald 
88456042629SMatthias Ringwald /**
88556042629SMatthias Ringwald  * @param host_acl_data_packet_length
88656042629SMatthias Ringwald  * @param host_synchronous_data_packet_length
88756042629SMatthias Ringwald  * @param host_total_num_acl_data_packets
88856042629SMatthias Ringwald  * @param host_total_num_synchronous_data_packets
88956042629SMatthias Ringwald  */
89056042629SMatthias Ringwald const hci_cmd_t hci_host_buffer_size = {
891ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_HOST_BUFFER_SIZE, "2122"
89256042629SMatthias Ringwald };
89356042629SMatthias Ringwald 
8949119d792SMilanka Ringwald 
8952b838201SMatthias Ringwald #if 0
8962b838201SMatthias Ringwald //
8972b838201SMatthias Ringwald // command sent manually sent by hci_host_num_completed_packets
8982b838201SMatthias Ringwald //
8992b838201SMatthias Ringwald /**
9002b838201SMatthias Ringwald  * @note only single handle supported by BTstack command generator
9012b838201SMatthias Ringwald  * @param number_of_handles must be 1
9022b838201SMatthias Ringwald  * @param connection_handle
9032b838201SMatthias Ringwald  * @param host_num_of_completed_packets for the given connection handle
9042b838201SMatthias Ringwald  */
9052b838201SMatthias Ringwald const hci_cmd_t hci_host_number_of_completed_packets = {
906ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS, "1H2"
9072b838201SMatthias Ringwald };
9082b838201SMatthias Ringwald #endif
9092b838201SMatthias Ringwald 
9102b838201SMatthias Ringwald #endif
9112b838201SMatthias Ringwald 
91256042629SMatthias Ringwald /**
91356042629SMatthias Ringwald  * @param handle
91456042629SMatthias Ringwald  */
91556042629SMatthias Ringwald const hci_cmd_t hci_read_link_supervision_timeout = {
916ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LINK_SUPERVISION_TIMEOUT, "H"
91756042629SMatthias Ringwald };
91856042629SMatthias Ringwald 
91956042629SMatthias Ringwald /**
92056042629SMatthias Ringwald  * @param handle
92156042629SMatthias Ringwald  * @param timeout (0x0001 - 0xFFFF Time -> Range: 0.625ms - 40.9 sec)
92256042629SMatthias Ringwald  */
92356042629SMatthias Ringwald const hci_cmd_t hci_write_link_supervision_timeout = {
924ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LINK_SUPERVISION_TIMEOUT, "H2"
92556042629SMatthias Ringwald };
92656042629SMatthias Ringwald 
92756042629SMatthias Ringwald /**
9289119d792SMilanka Ringwald  * @param num_current_iac must be 2
9299119d792SMilanka Ringwald  * @param iac_lap1
9309119d792SMilanka Ringwald  * @param iac_lap2
9319119d792SMilanka Ringwald  */
9329119d792SMilanka Ringwald const hci_cmd_t hci_write_current_iac_lap_two_iacs = {
933ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_CURRENT_IAC_LAP_TWO_IACS, "133"
9349119d792SMilanka Ringwald };
9359119d792SMilanka Ringwald 
9369119d792SMilanka Ringwald /**
9375769fd77SMatthias Ringwald  * @param inquiry_scan_type (0x00 = standard, 0x01 = interlaced)
9385769fd77SMatthias Ringwald  */
9395769fd77SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_type = {
9405769fd77SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_TYPE,  "1"
9415769fd77SMatthias Ringwald };
9425769fd77SMatthias Ringwald 
9435769fd77SMatthias Ringwald /**
94456042629SMatthias Ringwald  * @param inquiry_mode (0x00 = standard, 0x01 = with RSSI, 0x02 = extended)
94556042629SMatthias Ringwald  */
94656042629SMatthias Ringwald const hci_cmd_t hci_write_inquiry_mode = {
947ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_MODE, "1"
94856042629SMatthias Ringwald };
94956042629SMatthias Ringwald 
95056042629SMatthias Ringwald /**
9515769fd77SMatthias Ringwald  * @param page_scan_type (0x00 = standard, 0x01 = interlaced)
9525769fd77SMatthias Ringwald  */
9535769fd77SMatthias Ringwald const hci_cmd_t hci_write_page_scan_type = {
9545769fd77SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_SCAN_TYPE, "1"
9555769fd77SMatthias Ringwald };
9565769fd77SMatthias Ringwald 
9575769fd77SMatthias Ringwald /**
95856042629SMatthias Ringwald  * @param fec_required
95956042629SMatthias Ringwald  * @param exstended_inquiry_response
96056042629SMatthias Ringwald  */
96156042629SMatthias Ringwald const hci_cmd_t hci_write_extended_inquiry_response = {
962ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_EXTENDED_INQUIRY_RESPONSE, "1E"
96356042629SMatthias Ringwald };
96456042629SMatthias Ringwald 
96556042629SMatthias Ringwald /**
96656042629SMatthias Ringwald  * @param mode (0 = off, 1 = on)
96756042629SMatthias Ringwald  */
96856042629SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_mode = {
969ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_MODE, "1"
97056042629SMatthias Ringwald };
97156042629SMatthias Ringwald 
972237daac5SMatthias Ringwald /**
973237daac5SMatthias Ringwald  */
974237daac5SMatthias Ringwald const hci_cmd_t hci_read_local_oob_data = {
975ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_OOB_DATA, ""
976237daac5SMatthias Ringwald     // return status, C, R
977237daac5SMatthias Ringwald };
978483c5078SMatthias Ringwald 
979483c5078SMatthias Ringwald /**
980483c5078SMatthias Ringwald  * @param mode (0 = off, 1 = on)
981483c5078SMatthias Ringwald  */
982483c5078SMatthias Ringwald const hci_cmd_t hci_write_default_erroneous_data_reporting = {
983ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING, "1"
984483c5078SMatthias Ringwald };
985483c5078SMatthias Ringwald 
98656042629SMatthias Ringwald /**
98756042629SMatthias Ringwald  */
98856042629SMatthias Ringwald const hci_cmd_t hci_read_le_host_supported = {
989ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LE_HOST_SUPPORTED, ""
99056042629SMatthias Ringwald     // return: status, le supported host, simultaneous le host
99156042629SMatthias Ringwald };
99256042629SMatthias Ringwald 
99356042629SMatthias Ringwald /**
99456042629SMatthias Ringwald  * @param le_supported_host
99556042629SMatthias Ringwald  * @param simultaneous_le_host
99656042629SMatthias Ringwald  */
99756042629SMatthias Ringwald const hci_cmd_t hci_write_le_host_supported = {
998ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LE_HOST_SUPPORTED, "11"
99956042629SMatthias Ringwald     // return: status
100056042629SMatthias Ringwald };
100156042629SMatthias Ringwald 
100256042629SMatthias Ringwald /**
1003b002ae8cSMatthias Ringwald  * @param secure_connections_host_support
1004b002ae8cSMatthias Ringwald  */
1005b002ae8cSMatthias Ringwald const hci_cmd_t hci_write_secure_connections_host_support = {
1006ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT, "1"
1007b002ae8cSMatthias Ringwald     // return: status
1008b002ae8cSMatthias Ringwald };
1009b002ae8cSMatthias Ringwald 
1010b002ae8cSMatthias Ringwald /**
1011237daac5SMatthias Ringwald  */
1012bb75dd7dSMatthias Ringwald const hci_cmd_t hci_read_local_extended_oob_data = {
10131849becdSMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_EXTENDED_OOB_DATA, ""
1014237daac5SMatthias Ringwald     // return status, C_192, R_192, R_256, C_256
1015237daac5SMatthias Ringwald };
1016237daac5SMatthias Ringwald 
1017237daac5SMatthias Ringwald 
1018237daac5SMatthias Ringwald /**
101956042629SMatthias Ringwald  * Testing Commands
102056042629SMatthias Ringwald  */
102156042629SMatthias Ringwald 
102256042629SMatthias Ringwald 
102356042629SMatthias Ringwald /**
102456042629SMatthias Ringwald  */
102556042629SMatthias Ringwald const hci_cmd_t hci_read_loopback_mode = {
1026ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOOPBACK_MODE, ""
102756042629SMatthias Ringwald     // return: status, loopback mode (0 = off, 1 = local loopback, 2 = remote loopback)
102856042629SMatthias Ringwald };
102956042629SMatthias Ringwald 
103056042629SMatthias Ringwald /**
103156042629SMatthias Ringwald  * @param loopback_mode
103256042629SMatthias Ringwald  */
103356042629SMatthias Ringwald const hci_cmd_t hci_write_loopback_mode = {
1034ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LOOPBACK_MODE, "1"
103556042629SMatthias Ringwald     // return: status
103656042629SMatthias Ringwald };
103756042629SMatthias Ringwald 
103884ca9bd8SMatthias Ringwald /**
103984ca9bd8SMatthias Ringwald  */
104084ca9bd8SMatthias Ringwald const hci_cmd_t hci_enable_device_under_test_mode = {
1041ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENABLE_DEVICE_UNDER_TEST_MODE, ""
104284ca9bd8SMatthias Ringwald     // return: status
104384ca9bd8SMatthias Ringwald };
104484ca9bd8SMatthias Ringwald 
104584ca9bd8SMatthias Ringwald /**
104684ca9bd8SMatthias Ringwald  * @param simple_pairing_debug_mode
104784ca9bd8SMatthias Ringwald  */
104884ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_debug_mode = {
1049ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE, "1"
105084ca9bd8SMatthias Ringwald     // return: status
105184ca9bd8SMatthias Ringwald };
105284ca9bd8SMatthias Ringwald 
105384ca9bd8SMatthias Ringwald /**
105484ca9bd8SMatthias Ringwald  * @param handle
105584ca9bd8SMatthias Ringwald  * @param dm1_acl_u_mode
105684ca9bd8SMatthias Ringwald  * @param esco_loopback_mode
105784ca9bd8SMatthias Ringwald  */
105884ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_secure_connections_test_mode = {
1059ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE, "H11"
106084ca9bd8SMatthias Ringwald     // return: status
106184ca9bd8SMatthias Ringwald };
106284ca9bd8SMatthias Ringwald 
106356042629SMatthias Ringwald 
106456042629SMatthias Ringwald /**
106556042629SMatthias Ringwald  * Informational Parameters
106656042629SMatthias Ringwald  */
106756042629SMatthias Ringwald 
106856042629SMatthias Ringwald const hci_cmd_t hci_read_local_version_information = {
1069ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_VERSION_INFORMATION, ""
107056042629SMatthias Ringwald };
107156042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_commands = {
1072ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_COMMANDS, ""
107356042629SMatthias Ringwald };
107456042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_features = {
1075ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_FEATURES, ""
107656042629SMatthias Ringwald };
107756042629SMatthias Ringwald const hci_cmd_t hci_read_buffer_size = {
1078ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_BUFFER_SIZE, ""
107956042629SMatthias Ringwald };
108056042629SMatthias Ringwald const hci_cmd_t hci_read_bd_addr = {
1081ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_BD_ADDR, ""
108256042629SMatthias Ringwald };
108356042629SMatthias Ringwald 
108456042629SMatthias Ringwald /**
108556042629SMatthias Ringwald  * Status Paramters
108656042629SMatthias Ringwald  */
108756042629SMatthias Ringwald 
108856042629SMatthias Ringwald /**
108956042629SMatthias Ringwald  * @param handle
109056042629SMatthias Ringwald  */
109156042629SMatthias Ringwald const hci_cmd_t hci_read_rssi = {
1092ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_RSSI, "H"
109356042629SMatthias Ringwald };
109456042629SMatthias Ringwald 
109597abfa24SMatthias Ringwald /**
109697abfa24SMatthias Ringwald  * @param handle
109797abfa24SMatthias Ringwald  */
109897abfa24SMatthias Ringwald const hci_cmd_t hci_read_encryption_key_size = {
1099ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_ENCRYPTION_KEY_SIZE, "H"
110097abfa24SMatthias Ringwald };
110156042629SMatthias Ringwald 
110256042629SMatthias Ringwald 
1103a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE
110456042629SMatthias Ringwald /**
110556042629SMatthias Ringwald  * Low Energy Commands
110656042629SMatthias Ringwald  */
110756042629SMatthias Ringwald 
110856042629SMatthias Ringwald /**
110956042629SMatthias Ringwald  * @param event_mask_lower_octets
111056042629SMatthias Ringwald  * @param event_mask_higher_octets
111156042629SMatthias Ringwald  */
111256042629SMatthias Ringwald const hci_cmd_t hci_le_set_event_mask = {
1113ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_EVENT_MASK, "44"
111456042629SMatthias Ringwald     // return: status
111556042629SMatthias Ringwald };
111656042629SMatthias Ringwald 
111756042629SMatthias Ringwald const hci_cmd_t hci_le_read_buffer_size = {
1118ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_BUFFER_SIZE, ""
111956042629SMatthias Ringwald     // return: status, le acl data packet len (16), total num le acl data packets(8)
112056042629SMatthias Ringwald };
112156042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_features = {
1122ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUPPORTED_FEATURES, ""
112356042629SMatthias Ringwald     // return: LE_Features See [Vol 6] Part B, Section 4.6
112456042629SMatthias Ringwald };
112556042629SMatthias Ringwald 
112656042629SMatthias Ringwald /**
112756042629SMatthias Ringwald  * @param random_bd_addr
112856042629SMatthias Ringwald  */
112956042629SMatthias Ringwald const hci_cmd_t hci_le_set_random_address = {
1130ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_RANDOM_ADDRESS, "B"
113156042629SMatthias Ringwald     // return: status
113256042629SMatthias Ringwald };
113356042629SMatthias Ringwald 
113456042629SMatthias Ringwald /**
113556042629SMatthias Ringwald  * @param advertising_interval_min ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec)
113656042629SMatthias Ringwald  * @param advertising_interval_max ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec)
113756042629SMatthias Ringwald  * @param advertising_type (enum from 0: ADV_IND, ADC_DIRECT_IND, ADV_SCAN_IND, ADV_NONCONN_IND)
113856042629SMatthias Ringwald  * @param own_address_type (enum from 0: public device address, random device address)
113956042629SMatthias Ringwald  * @param direct_address_type ()
114056042629SMatthias Ringwald  * @param direct_address (public or random address of device to be connecteed)
114156042629SMatthias Ringwald  * @param advertising_channel_map (flags: chan_37(1), chan_38(2), chan_39(4))
114256042629SMatthias Ringwald  * @param advertising_filter_policy (enum from 0: scan any conn any, scan whitelist, con any, scan any conn whitelist, scan whitelist, con whitelist)
114356042629SMatthias Ringwald  */
114456042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_parameters = {
1145ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISING_PARAMETERS, "22111B11"
114656042629SMatthias Ringwald     // return: status
114756042629SMatthias Ringwald };
114856042629SMatthias Ringwald 
114956042629SMatthias Ringwald const hci_cmd_t hci_le_read_advertising_channel_tx_power = {
1150ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER, ""
115156042629SMatthias Ringwald     // return: status, level [-20,10] signed int (8), units dBm
115256042629SMatthias Ringwald };
115356042629SMatthias Ringwald 
115456042629SMatthias Ringwald /**
115556042629SMatthias Ringwald  * @param advertising_data_length
115656042629SMatthias Ringwald  * @param advertising_data (31 bytes)
115756042629SMatthias Ringwald  */
115856042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_data= {
1159ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISING_DATA, "1A"
116056042629SMatthias Ringwald     // return: status
116156042629SMatthias Ringwald };
116256042629SMatthias Ringwald 
116356042629SMatthias Ringwald /**
116456042629SMatthias Ringwald  * @param scan_response_data_length
116556042629SMatthias Ringwald  * @param scan_response_data (31 bytes)
116656042629SMatthias Ringwald  */
116756042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_response_data= {
1168ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_RESPONSE_DATA, "1A"
116956042629SMatthias Ringwald     // return: status
117056042629SMatthias Ringwald };
117156042629SMatthias Ringwald 
117256042629SMatthias Ringwald /**
117356042629SMatthias Ringwald  * @param advertise_enable (off: 0, on: 1)
117456042629SMatthias Ringwald  */
117556042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertise_enable = {
1176ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISE_ENABLE, "1"
117756042629SMatthias Ringwald     // return: status
117856042629SMatthias Ringwald };
117956042629SMatthias Ringwald 
118056042629SMatthias Ringwald /**
118156042629SMatthias Ringwald  * @param le_scan_type (passive (0), active (1))
118256042629SMatthias Ringwald  * @param le_scan_interval ([0x0004,0x4000], unit: 0.625 msec)
118356042629SMatthias Ringwald  * @param le_scan_window   ([0x0004,0x4000], unit: 0.625 msec)
118456042629SMatthias Ringwald  * @param own_address_type (public (0), random (1))
118556042629SMatthias Ringwald  * @param scanning_filter_policy (any (0), only whitelist (1))
118656042629SMatthias Ringwald  */
118756042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_parameters = {
1188ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_PARAMETERS, "12211"
118956042629SMatthias Ringwald     // return: status
119056042629SMatthias Ringwald };
119156042629SMatthias Ringwald 
119256042629SMatthias Ringwald /**
119356042629SMatthias Ringwald  * @param le_scan_enable  (disabled (0), enabled (1))
119456042629SMatthias Ringwald  * @param filter_duplices (disabled (0), enabled (1))
119556042629SMatthias Ringwald  */
119656042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_enable = {
1197ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_ENABLE, "11"
119856042629SMatthias Ringwald     // return: status
119956042629SMatthias Ringwald };
120056042629SMatthias Ringwald 
120156042629SMatthias Ringwald /**
120256042629SMatthias Ringwald  * @param le_scan_interval ([0x0004, 0x4000], unit: 0.625 msec)
120356042629SMatthias Ringwald  * @param le_scan_window ([0x0004, 0x4000], unit: 0.625 msec)
120456042629SMatthias Ringwald  * @param initiator_filter_policy (peer address type + peer address (0), whitelist (1))
120556042629SMatthias Ringwald  * @param peer_address_type (public (0), random (1))
120656042629SMatthias Ringwald  * @param peer_address
120756042629SMatthias Ringwald  * @param own_address_type (public (0), random (1))
120856042629SMatthias Ringwald  * @param conn_interval_min ([0x0006, 0x0c80], unit: 1.25 msec)
120956042629SMatthias Ringwald  * @param conn_interval_max ([0x0006, 0x0c80], unit: 1.25 msec)
121056042629SMatthias Ringwald  * @param conn_latency (number of connection events [0x0000, 0x01f4])
121156042629SMatthias Ringwald  * @param supervision_timeout ([0x000a, 0x0c80], unit: 10 msec)
121256042629SMatthias Ringwald  * @param minimum_CE_length ([0x0000, 0xffff], unit: 0.625 msec)
121356042629SMatthias Ringwald  * @param maximum_CE_length ([0x0000, 0xffff], unit: 0.625 msec)
121456042629SMatthias Ringwald  */
121556042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection= {
1216ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CREATE_CONNECTION, "2211B1222222"
121756042629SMatthias Ringwald     // return: none -> le create connection complete event
121856042629SMatthias Ringwald };
121956042629SMatthias Ringwald 
122056042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection_cancel = {
1221ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CREATE_CONNECTION_CANCEL, ""
122256042629SMatthias Ringwald     // return: status
122356042629SMatthias Ringwald };
122456042629SMatthias Ringwald 
122556042629SMatthias Ringwald const hci_cmd_t hci_le_read_white_list_size = {
1226ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_WHITE_LIST_SIZE, ""
122756042629SMatthias Ringwald     // return: status, number of entries in controller whitelist
122856042629SMatthias Ringwald };
122956042629SMatthias Ringwald 
123056042629SMatthias Ringwald const hci_cmd_t hci_le_clear_white_list = {
1231ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CLEAR_WHITE_LIST, ""
123256042629SMatthias Ringwald     // return: status
123356042629SMatthias Ringwald };
123456042629SMatthias Ringwald 
123556042629SMatthias Ringwald /**
123656042629SMatthias Ringwald  * @param address_type (public (0), random (1))
123756042629SMatthias Ringwald  * @param bd_addr
123856042629SMatthias Ringwald  */
123956042629SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_white_list = {
1240ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_WHITE_LIST, "1B"
124156042629SMatthias Ringwald     // return: status
124256042629SMatthias Ringwald };
124356042629SMatthias Ringwald 
124456042629SMatthias Ringwald /**
124556042629SMatthias Ringwald  * @param address_type (public (0), random (1))
124656042629SMatthias Ringwald  * @param bd_addr
124756042629SMatthias Ringwald  */
124856042629SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_white_list = {
1249ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST, "1B"
125056042629SMatthias Ringwald     // return: status
125156042629SMatthias Ringwald };
125256042629SMatthias Ringwald 
125356042629SMatthias Ringwald /**
125456042629SMatthias Ringwald  * @param conn_handle
125556042629SMatthias Ringwald  * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec)
125656042629SMatthias Ringwald  * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec)
125756042629SMatthias Ringwald  * @param conn_latency ([0x0000,0x03e8], number of connection events)
125856042629SMatthias Ringwald  * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec)
125956042629SMatthias Ringwald  * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
126056042629SMatthias Ringwald  * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
126156042629SMatthias Ringwald  */
126256042629SMatthias Ringwald const hci_cmd_t hci_le_connection_update = {
1263ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CONNECTION_UPDATE, "H222222"
126456042629SMatthias Ringwald     // return: none -> le connection update complete event
126556042629SMatthias Ringwald };
126656042629SMatthias Ringwald 
126756042629SMatthias Ringwald /**
126856042629SMatthias Ringwald  * @param channel_map_lower_32bits
126956042629SMatthias Ringwald  * @param channel_map_higher_5bits
127056042629SMatthias Ringwald  */
127156042629SMatthias Ringwald const hci_cmd_t hci_le_set_host_channel_classification = {
1272ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION, "41"
127356042629SMatthias Ringwald     // return: status
127456042629SMatthias Ringwald };
127556042629SMatthias Ringwald 
127656042629SMatthias Ringwald /**
127756042629SMatthias Ringwald  * @param conn_handle
127856042629SMatthias Ringwald  */
127956042629SMatthias Ringwald const hci_cmd_t hci_le_read_channel_map = {
1280ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_CHANNEL_MAP, "H"
128156042629SMatthias Ringwald     // return: status, connection handle, channel map (5 bytes, 37 used)
128256042629SMatthias Ringwald };
128356042629SMatthias Ringwald 
128456042629SMatthias Ringwald /**
128556042629SMatthias Ringwald  * @param conn_handle
128656042629SMatthias Ringwald  */
128756042629SMatthias Ringwald const hci_cmd_t hci_le_read_remote_used_features = {
1288ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_REMOTE_USED_FEATURES, "H"
128956042629SMatthias Ringwald     // return: none -> le read remote used features complete event
129056042629SMatthias Ringwald };
129156042629SMatthias Ringwald 
129256042629SMatthias Ringwald /**
129356042629SMatthias Ringwald  * @param key ((128) for AES-128)
129456042629SMatthias Ringwald  * @param plain_text (128)
129556042629SMatthias Ringwald  */
129656042629SMatthias Ringwald const hci_cmd_t hci_le_encrypt = {
1297ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_ENCRYPT, "PP"
129856042629SMatthias Ringwald     // return: status, encrypted data (128)
129956042629SMatthias Ringwald };
130056042629SMatthias Ringwald 
130156042629SMatthias Ringwald const hci_cmd_t hci_le_rand = {
1302ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_RAND, ""
130356042629SMatthias Ringwald     // return: status, random number (64)
130456042629SMatthias Ringwald };
130556042629SMatthias Ringwald 
130656042629SMatthias Ringwald /**
130756042629SMatthias Ringwald  * @param conn_handle
130856042629SMatthias Ringwald  * @param random_number_lower_32bits
130956042629SMatthias Ringwald  * @param random_number_higher_32bits
131056042629SMatthias Ringwald  * @param encryption_diversifier (16)
131156042629SMatthias Ringwald  * @param long_term_key (128)
131256042629SMatthias Ringwald  */
131356042629SMatthias Ringwald const hci_cmd_t hci_le_start_encryption = {
1314ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_START_ENCRYPTION, "H442P"
131556042629SMatthias Ringwald     // return: none -> encryption changed or encryption key refresh complete event
131656042629SMatthias Ringwald };
131756042629SMatthias Ringwald 
131856042629SMatthias Ringwald /**
131956042629SMatthias Ringwald  * @param connection_handle
132056042629SMatthias Ringwald  * @param long_term_key (128)
132156042629SMatthias Ringwald  */
132256042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_request_reply = {
1323ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_LONG_TERM_KEY_REQUEST_REPLY, "HP"
132456042629SMatthias Ringwald     // return: status, connection handle
132556042629SMatthias Ringwald };
132656042629SMatthias Ringwald 
132756042629SMatthias Ringwald /**
132856042629SMatthias Ringwald  * @param conn_handle
132956042629SMatthias Ringwald  */
133056042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_negative_reply = {
1331ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_LONG_TERM_KEY_NEGATIVE_REPLY, "H"
133256042629SMatthias Ringwald     // return: status, connection handle
133356042629SMatthias Ringwald };
133456042629SMatthias Ringwald 
133556042629SMatthias Ringwald /**
133656042629SMatthias Ringwald  * @param conn_handle
133756042629SMatthias Ringwald  */
133856042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_states = {
1339ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUPPORTED_STATES, "H"
134056042629SMatthias Ringwald     // return: status, LE states (64)
134156042629SMatthias Ringwald };
134256042629SMatthias Ringwald 
134356042629SMatthias Ringwald /**
134456042629SMatthias Ringwald  * @param rx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2)
134556042629SMatthias Ringwald  */
134656042629SMatthias Ringwald const hci_cmd_t hci_le_receiver_test = {
1347ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_RECEIVER_TEST, "1"
134856042629SMatthias Ringwald     // return: status
134956042629SMatthias Ringwald };
135056042629SMatthias Ringwald 
135156042629SMatthias Ringwald /**
135256042629SMatthias Ringwald  * @param tx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2)
135356042629SMatthias Ringwald  * @param test_payload_lengh ([0x00,0x25])
135456042629SMatthias Ringwald  * @param packet_payload ([0,7] different patterns)
135556042629SMatthias Ringwald  */
135656042629SMatthias Ringwald const hci_cmd_t hci_le_transmitter_test = {
1357ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_TRANSMITTER_TEST, "111"
135856042629SMatthias Ringwald     // return: status
135956042629SMatthias Ringwald };
136056042629SMatthias Ringwald 
136156042629SMatthias Ringwald /**
136256042629SMatthias Ringwald  * @param end_test_cmd
136356042629SMatthias Ringwald  */
136456042629SMatthias Ringwald const hci_cmd_t hci_le_test_end = {
1365ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_TEST_END, "1"
136656042629SMatthias Ringwald     // return: status, number of packets (8)
136756042629SMatthias Ringwald };
136882180fcaSMatthias Ringwald 
136982180fcaSMatthias Ringwald /**
1370fe704c95SMatthias Ringwald  * @param conn_handle
1371fe704c95SMatthias Ringwald  * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec)
1372fe704c95SMatthias Ringwald  * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec)
1373fe704c95SMatthias Ringwald  * @param conn_latency ([0x0000,0x03e8], number of connection events)
1374fe704c95SMatthias Ringwald  * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec)
1375fe704c95SMatthias Ringwald  * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
1376fe704c95SMatthias Ringwald  * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
1377fe704c95SMatthias Ringwald  */
1378fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_reply = {
1379ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY, "H222222"
1380fe704c95SMatthias Ringwald     // return: status, connection handle
1381fe704c95SMatthias Ringwald };
1382fe704c95SMatthias Ringwald 
1383fe704c95SMatthias Ringwald /**
1384fe704c95SMatthias Ringwald  * @param con_handle
1385fe704c95SMatthias Ringwald  * @param reason
1386fe704c95SMatthias Ringwald  */
1387fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_negative_reply = {
1388ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY, "H1"
1389fe704c95SMatthias Ringwald     // return: status, connection handle
1390fe704c95SMatthias Ringwald };
1391fe704c95SMatthias Ringwald 
1392fe704c95SMatthias Ringwald /**
13930ea2847fSMatthias Ringwald  * @param con_handle
13940ea2847fSMatthias Ringwald  * @param tx_octets
13950ea2847fSMatthias Ringwald  * @param tx_time
13960ea2847fSMatthias Ringwald  */
13970ea2847fSMatthias Ringwald const hci_cmd_t hci_le_set_data_length = {
1398ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_DATA_LENGTH, "H22"
13990ea2847fSMatthias Ringwald     // return: status, connection handle
14000ea2847fSMatthias Ringwald };
14010ea2847fSMatthias Ringwald 
14020ea2847fSMatthias Ringwald /**
14030ea2847fSMatthias Ringwald  */
14040ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_suggested_default_data_length = {
1405ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH, ""
14060ea2847fSMatthias Ringwald     // return: status, suggested max tx octets, suggested max tx time
14070ea2847fSMatthias Ringwald };
14080ea2847fSMatthias Ringwald 
14090ea2847fSMatthias Ringwald /**
14100ea2847fSMatthias Ringwald  * @param suggested_max_tx_octets
14110ea2847fSMatthias Ringwald  * @param suggested_max_tx_time
14120ea2847fSMatthias Ringwald  */
14130ea2847fSMatthias Ringwald const hci_cmd_t hci_le_write_suggested_default_data_length = {
1414ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH, "22"
14150ea2847fSMatthias Ringwald     // return: status
14160ea2847fSMatthias Ringwald };
14170ea2847fSMatthias Ringwald 
14180ea2847fSMatthias Ringwald /**
141982180fcaSMatthias Ringwald  */
142082180fcaSMatthias Ringwald const hci_cmd_t hci_le_read_local_p256_public_key = {
1421ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_LOCAL_P256_PUBLIC_KEY, ""
142282180fcaSMatthias Ringwald //  LE Read Local P-256 Public Key Complete is generated on completion
142382180fcaSMatthias Ringwald };
142482180fcaSMatthias Ringwald 
142582180fcaSMatthias Ringwald /**
1426fcae305fSMatthias Ringwald  * @param public key
1427fcae305fSMatthias Ringwald  * @param private key
142882180fcaSMatthias Ringwald  */
142982180fcaSMatthias Ringwald const hci_cmd_t hci_le_generate_dhkey = {
1430ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_GENERATE_DHKEY, "QQ"
143182180fcaSMatthias Ringwald // LE Generate DHKey Complete is generated on completion
143282180fcaSMatthias Ringwald };
143382180fcaSMatthias Ringwald 
14340ea2847fSMatthias Ringwald /**
1435173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1436173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1437173ed1a3SMatthias Ringwald  * @param Peer_IRK
1438173ed1a3SMatthias Ringwald  * @param Local_IRK
1439173ed1a3SMatthias Ringwald  */
1440173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_resolving_list = {
1441173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST, "1BPP"
1442173ed1a3SMatthias Ringwald };
1443173ed1a3SMatthias Ringwald 
1444173ed1a3SMatthias Ringwald /**
1445173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1446173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1447173ed1a3SMatthias Ringwald  */
1448173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_resolving_list = {
1449173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST, "1B"
1450173ed1a3SMatthias Ringwald };
1451173ed1a3SMatthias Ringwald 
1452173ed1a3SMatthias Ringwald /**
1453173ed1a3SMatthias Ringwald  */
1454173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_clear_resolving_list = {
1455173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_CLEAR_RESOLVING_LIST, ""
1456173ed1a3SMatthias Ringwald };
1457173ed1a3SMatthias Ringwald 
1458173ed1a3SMatthias Ringwald /**
1459173ed1a3SMatthias Ringwald  */
1460173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_resolving_list_size = {
1461173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_RESOLVING_LIST_SIZE, ""
1462173ed1a3SMatthias Ringwald };
1463173ed1a3SMatthias Ringwald 
1464173ed1a3SMatthias Ringwald /**
1465173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1466173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1467173ed1a3SMatthias Ringwald  */
1468173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_peer_resolvable_address = {
1469173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_PEER_RESOLVABLE_ADDRESS, ""
1470173ed1a3SMatthias Ringwald };
1471173ed1a3SMatthias Ringwald 
1472173ed1a3SMatthias Ringwald /**
1473173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1474173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1475173ed1a3SMatthias Ringwald  */
1476173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_local_resolvable_address = {
1477173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS, ""
1478173ed1a3SMatthias Ringwald };
1479173ed1a3SMatthias Ringwald 
1480173ed1a3SMatthias Ringwald /**
1481173ed1a3SMatthias Ringwald  * @param Address_Resolution_Enable
1482173ed1a3SMatthias Ringwald  */
1483173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_address_resolution_enabled= {
1484173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_SET_ADDRESS_RESOLUTION_ENABLED, "1"
1485173ed1a3SMatthias Ringwald };
1486173ed1a3SMatthias Ringwald 
1487173ed1a3SMatthias Ringwald /**
1488173ed1a3SMatthias Ringwald  * @param RPA_Timeout in seconds, range 0x0001 to 0x0E10, default: 900 s
1489173ed1a3SMatthias Ringwald  */
1490173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_resolvable_private_address_timeout= {
1491173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT, "2"
1492173ed1a3SMatthias Ringwald };
1493173ed1a3SMatthias Ringwald 
1494173ed1a3SMatthias Ringwald /**
14950ea2847fSMatthias Ringwald  */
14960ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_maximum_data_length = {
1497ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_MAXIMUM_DATA_LENGTH, ""
14980ea2847fSMatthias Ringwald     // return: status, supported max tx octets, supported max tx time, supported max rx octets, supported max rx time
14990ea2847fSMatthias Ringwald };
15000ea2847fSMatthias Ringwald 
1501ca13daefSMatthias Ringwald /**
1502ca13daefSMatthias Ringwald  * @param con_handle
1503ca13daefSMatthias Ringwald  */
1504ca13daefSMatthias Ringwald const hci_cmd_t hci_le_read_phy = {
1505ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_PHY, "H"
1506ca13daefSMatthias Ringwald     // return: status, connection handler, tx phy, rx phy
1507ca13daefSMatthias Ringwald };
1508ca13daefSMatthias Ringwald 
1509ca13daefSMatthias Ringwald /**
1510ca13daefSMatthias Ringwald  * @param all_phys
1511ca13daefSMatthias Ringwald  * @param tx_phys
1512ca13daefSMatthias Ringwald  * @param rx_phys
1513ca13daefSMatthias Ringwald  */
1514ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_default_phy = {
1515ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_DEFAULT_PHY, "111"
1516ca13daefSMatthias Ringwald     // return: status
1517ca13daefSMatthias Ringwald };
1518ca13daefSMatthias Ringwald 
1519ca13daefSMatthias Ringwald /**
1520ca13daefSMatthias Ringwald  * @param con_handle
1521ca13daefSMatthias Ringwald  * @param all_phys
1522ca13daefSMatthias Ringwald  * @param tx_phys
1523ca13daefSMatthias Ringwald  * @param rx_phys
1524ca13daefSMatthias Ringwald  * @param phy_options
1525ca13daefSMatthias Ringwald  */
1526ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_phy = {
1527ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_PHY, "H1111"
1528ca13daefSMatthias Ringwald // LE PHY Update Complete is generated on completion
1529ca13daefSMatthias Ringwald };
1530ca13daefSMatthias Ringwald 
1531ca13daefSMatthias Ringwald 
153256042629SMatthias Ringwald #endif
1533a42798c3SMatthias Ringwald 
1534a42798c3SMatthias Ringwald // Broadcom / Cypress specific HCI commands
1535a42798c3SMatthias Ringwald 
1536a42798c3SMatthias Ringwald /**
1537067ecc36SMatthias Ringwald  * @brief Enable Wide-Band Speech / mSBC decoding for PCM
1538067ecc36SMatthias Ringwald  * @param enable_wbs is 0 for disable, 1 for enable
1539067ecc36SMatthias Ringwald  * @param uuid_wbs is 2 for EV2/EV3
1540067ecc36SMatthias Ringwald  */
1541067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_enable_wbs = {
1542067ecc36SMatthias Ringwald         HCI_OPCODE_HCI_BCM_ENABLE_WBS, "12"
1543067ecc36SMatthias Ringwald         // return: status
1544067ecc36SMatthias Ringwald };
1545067ecc36SMatthias Ringwald 
1546067ecc36SMatthias Ringwald /**
1547a42798c3SMatthias Ringwald  * @brief Configure SCO Routing (BCM)
1548a42798c3SMatthias Ringwald  * @param sco_routing is 0 for PCM, 1 for Transport, 2 for Codec and 3 for I2S
1549a42798c3SMatthias Ringwald  * @param pcm_interface_rate is 0 for 128KBps, 1 for 256 KBps, 2 for 512KBps, 3 for 1024KBps, and 4 for 2048Kbps
1550a42798c3SMatthias Ringwald  * @param frame_type is 0 for short and 1 for long
1551a42798c3SMatthias Ringwald  * @param sync_mode is 0 for slave and 1 for master
1552a42798c3SMatthias Ringwald  * @param clock_mode is 0 for slabe and 1 for master
1553a42798c3SMatthias Ringwald  */
1554a42798c3SMatthias Ringwald const hci_cmd_t hci_bcm_write_sco_pcm_int = {
1555ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_WRITE_SCO_PCM_INT, "11111"
1556a42798c3SMatthias Ringwald     // return: status
1557a42798c3SMatthias Ringwald };
1558eab6959fSMatthias Ringwald 
1559eab6959fSMatthias Ringwald /**
1560067ecc36SMatthias Ringwald  * @brief Configure the I2S/PCM interface (BCM)
1561067ecc36SMatthias Ringwald  * @param i2s_enable is 0 for off, 1 for on
1562067ecc36SMatthias Ringwald  * @param is_master is 0 for slave, is 1 for master
1563067ecc36SMatthias Ringwald  * @param sample_rate is 0 for 8 kHz, 1 for 16 kHz, 2 for 4 kHz
1564067ecc36SMatthias Ringwald  * @param clock_rate is 0 for 128 kz, 1 for 256 kHz, 2 for 512 khz, 3 for 1024 kHz, 4 for 2048 khz
1565067ecc36SMatthias Ringwald  * @param clock_mode is 0 for slabe and 1 for master
1566067ecc36SMatthias Ringwald  */
1567067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_write_i2spcm_interface_param = {
1568067ecc36SMatthias Ringwald         HCI_OPCODE_HCI_BCM_WRITE_I2SPCM_INTERFACE_PARAM, "1111"
1569067ecc36SMatthias Ringwald         // return: status
1570067ecc36SMatthias Ringwald };
1571067ecc36SMatthias Ringwald 
1572067ecc36SMatthias Ringwald 
1573067ecc36SMatthias Ringwald /**
1574eab6959fSMatthias Ringwald  * @brief Activates selected Sleep Mode
1575eab6959fSMatthias Ringwald  * @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
1576eab6959fSMatthias Ringwald  * @param idle_threshold_host (modes 1,2,5,7) time until considered idle, unit roughly 300 ms
1577eab6959fSMatthias Ringwald  * @param idle_threshold_controller (modes 1-7,9) time until considered idle, unit roughly 300 ms
1578eab6959fSMatthias Ringwald  * @param bt_wake_active_mode (modes 1,2,7) 0 = BT_WAKE line is active high, 1 = BT_WAKE is active low
1579eab6959fSMatthias Ringwald  * @param host_wake_active_mode (modes 1,2,5,7) 0 = HOST_WAKE line is active high, 1 = HOST_WAKE is active low
1580eab6959fSMatthias Ringwald  * @param allow_host_sleep_during_sco (modes 1,2,3,5,7)
1581eab6959fSMatthias Ringwald  * @param combine_sleep_mode_and_lpm  (modes 1,2,3,5,7)
1582eab6959fSMatthias Ringwald  * @param enable_tristate_control_of_uart_tx_line (modes 1,2,7)
1583eab6959fSMatthias Ringwald  * @param active_connection_handling_on_suspend (modes 3,5)
1584eab6959fSMatthias Ringwald  * @param resume_timeout (modes 3,5)
1585eab6959fSMatthias Ringwald  * @param enable_break_to_host (mode 12)
1586eab6959fSMatthias Ringwald  * @param pulsed_host_wake (modes 1,12)
1587eab6959fSMatthias Ringwald  */
1588eab6959fSMatthias Ringwald const hci_cmd_t hci_bcm_set_sleep_mode = {
1589ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_SET_SLEEP_MODE, "111111111111"
1590eab6959fSMatthias Ringwald };
15915cdaddfaSMatthias Ringwald 
15925cdaddfaSMatthias Ringwald /**
15935cdaddfaSMatthias Ringwald  * @brief Set TX Power Table
15945cdaddfaSMatthias Ringwald  * @param is_le 0=classic, 1=LE
15955cdaddfaSMatthias Ringwald  * @param chip_max_tx_pwr_db chip level max TX power in dBM
15965cdaddfaSMatthias Ringwald  */
15975cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_write_tx_power_table = {
1598ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_WRITE_TX_POWER_TABLE, "11"
15995cdaddfaSMatthias Ringwald };
16005cdaddfaSMatthias Ringwald 
16015cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_set_tx_pwr = {
1602ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_SET_TX_PWR, "11H"
16035cdaddfaSMatthias Ringwald };
1604ba39ed56SMatthias Ringwald 
1605ba39ed56SMatthias Ringwald /**
160615fca961SMatthias Ringwald  * @brief This command starts receiving packets using packet transmission parameters such as
160715fca961SMatthias Ringwald  *        frequency channel, packet type, and packet length. It is used for Packet RX.
160815fca961SMatthias Ringwald  * @see   https://processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_RX
160915fca961SMatthias Ringwald  * @param frequency
161015fca961SMatthias Ringwald  * @param ADPLL loop mode
161115fca961SMatthias Ringwald  */
161215fca961SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_con_rx = {
161315fca961SMatthias Ringwald         0xFD17, "11"
161415fca961SMatthias Ringwald };
161515fca961SMatthias Ringwald 
161615fca961SMatthias Ringwald /**
1617ba39ed56SMatthias Ringwald  *
1618ba39ed56SMatthias Ringwald  *
1619ba39ed56SMatthias Ringwald  * @brief This command tests the RF transceiver in continuous transmission mode.
1620ba39ed56SMatthias Ringwald  *        The transmitter is activated by configuring the transmission parameters such as pattern,
1621ba39ed56SMatthias Ringwald  *        modulation, and frequency.
1622ba39ed56SMatthias Ringwald  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Con_TX.280xFD84.29
1623ba39ed56SMatthias Ringwald  * @param modulation
162415fca961SMatthias Ringwald  * @param test_pattern
1625ba39ed56SMatthias Ringwald  * @param frequency
1626ba39ed56SMatthias Ringwald  * @param power_level
1627ba39ed56SMatthias Ringwald  * @param reserved1
1628ba39ed56SMatthias Ringwald  * @param reserved2
1629ba39ed56SMatthias Ringwald  */
1630ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_con_tx = {
1631ba39ed56SMatthias Ringwald     0xFD84, "111144"
1632ba39ed56SMatthias Ringwald };
1633ba39ed56SMatthias Ringwald 
1634ba39ed56SMatthias Ringwald /**
1635ba39ed56SMatthias Ringwald  * @brief This command starts sending/receiving packets using packet transmission parameters such as
1636ba39ed56SMatthias Ringwald  *        frequency channel, packet type, and packet length. It is used for Packet TX/RX.
1637ba39ed56SMatthias Ringwald  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Packet_TX_RX_.280xFD85.29
1638ba39ed56SMatthias Ringwald  * @param frequency_mode
1639ba39ed56SMatthias Ringwald  * @param tx_single_frequency
1640ba39ed56SMatthias Ringwald  * @param rx_single_frequency
1641ba39ed56SMatthias Ringwald  * @param acl_packet_type
1642ba39ed56SMatthias Ringwald  * @paarm acl_packet_data_pattern
1643ba39ed56SMatthias Ringwald  * @param reserved
1644ba39ed56SMatthias Ringwald  * @param power_level
1645ba39ed56SMatthias Ringwald  * @param disable_whitening
1646ba39ed56SMatthias Ringwald  * @param prbs9_initialization_value
1647ba39ed56SMatthias Ringwald  */
1648ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_packet_tx_rx = {
1649ba39ed56SMatthias Ringwald     0xFD85, "1111112112"
1650ba39ed56SMatthias Ringwald };
1651365a7dd1SMatthias Ringwald 
1652733a7793SMatthias Ringwald 
1653733a7793SMatthias Ringwald /**
1654733a7793SMatthias Ringwald  * @param best effort access percentage
1655733a7793SMatthias Ringwald  * @param guaranteed access percentage
1656733a7793SMatthias Ringwald  * @param poll period
1657733a7793SMatthias Ringwald  * @param slave burst after tx
1658733a7793SMatthias Ringwald  * @param slave master search count
1659733a7793SMatthias Ringwald  * @param master burst after tx enable
1660733a7793SMatthias Ringwald  * @param master burst after rx limit
1661733a7793SMatthias Ringwald  */
1662cf26f982SMatthias Ringwald const hci_cmd_t hci_ti_configure_ddip = {
1663733a7793SMatthias Ringwald         HCI_OPCODE_HCI_TI_VS_CONFIGURE_DDIP, "1111111"
1664733a7793SMatthias Ringwald };
1665733a7793SMatthias Ringwald 
1666365a7dd1SMatthias Ringwald /**
1667365a7dd1SMatthias Ringwald  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
1668365a7dd1SMatthias Ringwald  * @param enable 0=disable, 1=enable
1669365a7dd1SMatthias Ringwald  * @param a3dp_role (NL5500, WL128x only) 0=source,1=sink
1670365a7dd1SMatthias Ringwald  * @param code_upload (NL5500, WL128x only) 0=do not load a3dp code, 1=load a3dp code
1671365a7dd1SMatthias Ringwald  * @param reserved for future use
1672365a7dd1SMatthias Ringwald  */
1673365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_avrp_enable = {
1674365a7dd1SMatthias Ringwald         0xFD92, "1112"
1675365a7dd1SMatthias Ringwald };
1676365a7dd1SMatthias Ringwald 
1677365a7dd1SMatthias Ringwald /**
1678365a7dd1SMatthias Ringwald  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
1679365a7dd1SMatthias Ringwald  * @param acl_con_handle
1680365a7dd1SMatthias Ringwald  */
1681365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_associate = {
1682365a7dd1SMatthias Ringwald         0xFD78, "H"
1683365a7dd1SMatthias Ringwald };
1684365a7dd1SMatthias Ringwald 
1685365a7dd1SMatthias Ringwald /**
1686365a7dd1SMatthias Ringwald  * @brief This command is used to disassociate Wide Band Speech configuration from any ACL handle.
1687365a7dd1SMatthias Ringwald  */
1688365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_disassociate = {
1689365a7dd1SMatthias Ringwald         0xFD79, ""
1690365a7dd1SMatthias Ringwald };
1691365a7dd1SMatthias Ringwald 
1692365a7dd1SMatthias Ringwald /**
1693365a7dd1SMatthias Ringwald  * @brief This command configures the codec interface parameters and the PCM clock rate, which is relevant when
1694365a7dd1SMatthias Ringwald           the Bluetooth core generates the clock. This command must be used by the host to use the PCM
1695365a7dd1SMatthias Ringwald           interface.
1696365a7dd1SMatthias Ringwald  * @param clock_rate in kHz
1697365a7dd1SMatthias Ringwald  * @param clock_direction 0=master/output, 1=slave/input
1698365a7dd1SMatthias Ringwald  * @param frame_sync_frequency in Hz
1699365a7dd1SMatthias Ringwald  * @param frame_sync_duty_cycle 0=50% (I2S Format), 0x0001-0xffff number of cycles of PCM clock
1700365a7dd1SMatthias Ringwald  * @param frame_sync_edge 0=driven/sampled at rising edge, 1=driven/sampled at falling edge of PCM clock
1701365a7dd1SMatthias Ringwald  * @param frame_sync_polariy 0=active high, 1=active low
1702365a7dd1SMatthias Ringwald  * @param reserved1
1703365a7dd1SMatthias Ringwald  * @param channel_1_data_out_size sample size in bits
1704365a7dd1SMatthias Ringwald  * @param channel_1_data_out_offset number of PCM clock cycles between rising of frame sync and data start
1705365a7dd1SMatthias Ringwald  * @param channel_1_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
1706365a7dd1SMatthias Ringwald  * @param channel_1_data_in_size sample size in bits
1707365a7dd1SMatthias Ringwald  * @param channel_1_data_in_offset number of PCM clock cycles between rising of frame sync and data start
1708365a7dd1SMatthias Ringwald  * @param channel_1_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
1709365a7dd1SMatthias Ringwald  * @param fsync_multiplier this field is only relevant to CC256XB from service pack 0.2 !!! -> use 0x00
1710365a7dd1SMatthias Ringwald  * @param channel_2_data_out_size sample size in bits
1711365a7dd1SMatthias Ringwald  * @param channel_2_data_out_offset number of PCM clock cycles between rising of frame sync and data start
1712365a7dd1SMatthias Ringwald  * @param channel_2_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
1713365a7dd1SMatthias Ringwald  * @param channel_2_data_in_size sample size in bits
1714365a7dd1SMatthias Ringwald  * @param channel_2_data_in_offset number of PCM clock cycles between rising of frame sync and data start
1715365a7dd1SMatthias Ringwald  * @param channel_2_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
1716365a7dd1SMatthias Ringwald  * @param reserved2
1717365a7dd1SMatthias Ringwald  *
1718365a7dd1SMatthias Ringwald  */
1719365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_write_codec_config = {
1720365a7dd1SMatthias Ringwald         0xFD06, "214211122122112212211"
1721365a7dd1SMatthias Ringwald };
172215fca961SMatthias Ringwald 
172315fca961SMatthias Ringwald /**
172415fca961SMatthias Ringwald  * @brief This command is used only for internal testing.
172515fca961SMatthias Ringwald  * @see   https://processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_TX
172615fca961SMatthias Ringwald  * @param frequency
172715fca961SMatthias Ringwald  * @param ADPLL loop mode
172815fca961SMatthias Ringwald  */
172915fca961SMatthias Ringwald const hci_cmd_t hci_ti_drpb_enable_rf_calibration = {
173015fca961SMatthias Ringwald         0xFD80, "141"
173115fca961SMatthias Ringwald };
173215fca961SMatthias Ringwald 
173315fca961SMatthias Ringwald /**
173415fca961SMatthias Ringwald  * @brief This command command is only required for the continuous TX test of modulated
173515fca961SMatthias Ringwald  * (GFSK, π/4-DQPSK or 8DPSK) signal. This command should be skipped when performing continuous TX test for CW.
173615fca961SMatthias Ringwald  * @see   https://processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_RX
173715fca961SMatthias Ringwald  * @param frequency
173815fca961SMatthias Ringwald  * @param ADPLL loop mode
173915fca961SMatthias Ringwald  */
174015fca961SMatthias Ringwald const hci_cmd_t hci_ti_write_hardware_register = {
174115fca961SMatthias Ringwald         0xFF01, "42"
174215fca961SMatthias Ringwald };
1743