xref: /btstack/src/hci_cmd.c (revision cf26f982bf1722b9b1da065ae371c4ccff77241b)
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 
5459c9672fSMatthias Ringwald #ifdef ENABLE_SDP
5559c9672fSMatthias Ringwald #include "classic/sdp_util.h"
5659c9672fSMatthias Ringwald #endif
5759c9672fSMatthias Ringwald 
5856042629SMatthias Ringwald // calculate combined ogf/ocf value
595efd5011SMatthias Ringwald #define OPCODE(ogf, ocf) ((ocf) | ((ogf) << 10))
6056042629SMatthias Ringwald 
6156042629SMatthias Ringwald /**
6256042629SMatthias Ringwald  * construct HCI Command based on template
6356042629SMatthias Ringwald  *
6456042629SMatthias Ringwald  * Format:
6556042629SMatthias Ringwald  *   1,2,3,4: one to four byte value
6656042629SMatthias Ringwald  *   H: HCI connection handle
6756042629SMatthias Ringwald  *   B: Bluetooth Baseband Address (BD_ADDR)
6856042629SMatthias Ringwald  *   D: 8 byte data block
6956042629SMatthias Ringwald  *   E: Extended Inquiry Result
7056042629SMatthias Ringwald  *   N: Name up to 248 chars, \0 terminated
71237daac5SMatthias Ringwald  *   P: 16 byte data block. Pairing code, Simple Pairing Hash and Randomizer
7256042629SMatthias Ringwald  *   A: 31 bytes advertising data
7356042629SMatthias Ringwald  *   S: Service Record (Data Element Sequence)
7482180fcaSMatthias Ringwald  *   Q: 32 byte data block, e.g. for X and Y coordinates of P-256 public key
7556042629SMatthias Ringwald  */
7656042629SMatthias Ringwald uint16_t hci_cmd_create_from_template(uint8_t *hci_cmd_buffer, const hci_cmd_t *cmd, va_list argptr){
7756042629SMatthias Ringwald 
784ea43905SMatthias Ringwald     hci_cmd_buffer[0] = cmd->opcode & 0xffu;
7956042629SMatthias Ringwald     hci_cmd_buffer[1] = cmd->opcode >> 8;
8056042629SMatthias Ringwald     int pos = 3;
8156042629SMatthias Ringwald 
8256042629SMatthias Ringwald     const char *format = cmd->format;
8356042629SMatthias Ringwald     uint16_t word;
8456042629SMatthias Ringwald     uint32_t longword;
8556042629SMatthias Ringwald     uint8_t * ptr;
8656042629SMatthias Ringwald     while (*format) {
8756042629SMatthias Ringwald         switch(*format) {
8856042629SMatthias Ringwald             case '1': //  8 bit value
8956042629SMatthias Ringwald             case '2': // 16 bit value
9056042629SMatthias Ringwald             case 'H': // hci_handle
9156042629SMatthias Ringwald                 word = va_arg(argptr, int);  // minimal va_arg is int: 2 bytes on 8+16 bit CPUs
924ea43905SMatthias Ringwald                 hci_cmd_buffer[pos++] = word & 0xffu;
9356042629SMatthias Ringwald                 if (*format == '2') {
9456042629SMatthias Ringwald                     hci_cmd_buffer[pos++] = word >> 8;
9556042629SMatthias Ringwald                 } else if (*format == 'H') {
9656042629SMatthias Ringwald                     // TODO implement opaque client connection handles
9756042629SMatthias Ringwald                     //      pass module handle for now
9856042629SMatthias Ringwald                     hci_cmd_buffer[pos++] = word >> 8;
9956042629SMatthias Ringwald                 }
10056042629SMatthias Ringwald                 break;
10156042629SMatthias Ringwald             case '3':
10256042629SMatthias Ringwald             case '4':
10356042629SMatthias Ringwald                 longword = va_arg(argptr, uint32_t);
10456042629SMatthias Ringwald                 // longword = va_arg(argptr, int);
10556042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword;
10656042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 8;
10756042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 16;
10856042629SMatthias Ringwald                 if (*format == '4'){
10956042629SMatthias Ringwald                     hci_cmd_buffer[pos++] = longword >> 24;
11056042629SMatthias Ringwald                 }
11156042629SMatthias Ringwald                 break;
11256042629SMatthias Ringwald             case 'B': // bt-addr
11356042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
11456042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[5];
11556042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[4];
11656042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[3];
11756042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[2];
11856042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[1];
11956042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[0];
12056042629SMatthias Ringwald                 break;
12156042629SMatthias Ringwald             case 'D': // 8 byte data block
12256042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1236535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 8);
12456042629SMatthias Ringwald                 pos += 8;
12556042629SMatthias Ringwald                 break;
12656042629SMatthias Ringwald             case 'E': // Extended Inquiry Information 240 octets
12756042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1286535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 240);
12956042629SMatthias Ringwald                 pos += 240;
13056042629SMatthias Ringwald                 break;
13156042629SMatthias Ringwald             case 'N': { // UTF-8 string, null terminated
13256042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
13356042629SMatthias Ringwald                 uint16_t len = strlen((const char*) ptr);
1344ea43905SMatthias Ringwald                 if (len > 248u) {
13556042629SMatthias Ringwald                     len = 248;
13656042629SMatthias Ringwald                 }
1376535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, len);
1384ea43905SMatthias Ringwald                 if (len < 248u) {
13956042629SMatthias Ringwald                     // fill remaining space with zeroes
1404ea43905SMatthias Ringwald                     memset(&hci_cmd_buffer[pos+len], 0u, 248u-len);
14156042629SMatthias Ringwald                 }
14256042629SMatthias Ringwald                 pos += 248;
14356042629SMatthias Ringwald                 break;
14456042629SMatthias Ringwald             }
145bb75dd7dSMatthias Ringwald             case 'P': // 16 byte PIN code or link key in little endian
14656042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1476535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 16);
14856042629SMatthias Ringwald                 pos += 16;
14956042629SMatthias Ringwald                 break;
150a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE
15156042629SMatthias Ringwald             case 'A': // 31 bytes advertising data
15256042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1536535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 31);
15456042629SMatthias Ringwald                 pos += 31;
15556042629SMatthias Ringwald                 break;
15656042629SMatthias Ringwald #endif
157a9a4c409SMatthias Ringwald #ifdef ENABLE_SDP
15856042629SMatthias Ringwald             case 'S': { // Service Record (Data Element Sequence)
15956042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
16056042629SMatthias Ringwald                 uint16_t len = de_get_len(ptr);
1616535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, len);
16256042629SMatthias Ringwald                 pos += len;
16356042629SMatthias Ringwald                 break;
16456042629SMatthias Ringwald             }
16556042629SMatthias Ringwald #endif
16682180fcaSMatthias Ringwald #ifdef ENABLE_LE_SECURE_CONNECTIONS
16782180fcaSMatthias Ringwald             case 'Q':
16882180fcaSMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
16982180fcaSMatthias Ringwald                 reverse_bytes(ptr, &hci_cmd_buffer[pos], 32);
17082180fcaSMatthias Ringwald                 pos += 32;
17182180fcaSMatthias Ringwald                 break;
17282180fcaSMatthias Ringwald #endif
173bb75dd7dSMatthias Ringwald             case 'K':   // 16 byte OOB Data or Link Key in big endian
174bb75dd7dSMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
175bb75dd7dSMatthias Ringwald                 reverse_bytes(ptr, &hci_cmd_buffer[pos], 16);
176bb75dd7dSMatthias Ringwald                 pos += 16;
177bb75dd7dSMatthias Ringwald                 break;
17856042629SMatthias Ringwald             default:
17956042629SMatthias Ringwald                 break;
18056042629SMatthias Ringwald         }
18156042629SMatthias Ringwald         format++;
18256042629SMatthias Ringwald     };
18356042629SMatthias Ringwald     hci_cmd_buffer[2] = pos - 3;
18456042629SMatthias Ringwald     return pos;
18556042629SMatthias Ringwald }
18656042629SMatthias Ringwald 
18756042629SMatthias Ringwald /**
18856042629SMatthias Ringwald  *  Link Control Commands
18956042629SMatthias Ringwald  */
19056042629SMatthias Ringwald 
19156042629SMatthias Ringwald /**
19256042629SMatthias Ringwald  * @param lap
19356042629SMatthias Ringwald  * @param inquiry_length
19456042629SMatthias Ringwald  * @param num_responses
19556042629SMatthias Ringwald  */
19656042629SMatthias Ringwald const hci_cmd_t hci_inquiry = {
197ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_INQUIRY, "311"
19856042629SMatthias Ringwald };
19956042629SMatthias Ringwald 
20056042629SMatthias Ringwald /**
20156042629SMatthias Ringwald  */
20256042629SMatthias Ringwald const hci_cmd_t hci_inquiry_cancel = {
203ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_INQUIRY_CANCEL, ""
20456042629SMatthias Ringwald };
20556042629SMatthias Ringwald 
20656042629SMatthias Ringwald /**
20756042629SMatthias Ringwald  * @param bd_addr
20856042629SMatthias Ringwald  * @param packet_type
20956042629SMatthias Ringwald  * @param page_scan_repetition_mode
21056042629SMatthias Ringwald  * @param reserved
21156042629SMatthias Ringwald  * @param clock_offset
21256042629SMatthias Ringwald  * @param allow_role_switch
21356042629SMatthias Ringwald  */
21456042629SMatthias Ringwald const hci_cmd_t hci_create_connection = {
215ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CREATE_CONNECTION, "B21121"
21656042629SMatthias Ringwald };
21756042629SMatthias Ringwald 
21856042629SMatthias Ringwald /**
21956042629SMatthias Ringwald  * @param handle
22056042629SMatthias Ringwald  * @param reason (0x05, 0x13-0x15, 0x1a, 0x29, see Errors Codes in BT Spec Part D)
22156042629SMatthias Ringwald  */
22256042629SMatthias Ringwald const hci_cmd_t hci_disconnect = {
223ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_DISCONNECT, "H1"
22456042629SMatthias Ringwald };
22556042629SMatthias Ringwald 
22656042629SMatthias Ringwald /**
22756042629SMatthias Ringwald  * @param bd_addr
22856042629SMatthias Ringwald  */
22956042629SMatthias Ringwald const hci_cmd_t hci_create_connection_cancel = {
230ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CREATE_CONNECTION_CANCEL, "B"
23156042629SMatthias Ringwald };
23256042629SMatthias Ringwald 
23356042629SMatthias Ringwald /**
23456042629SMatthias Ringwald  * @param bd_addr
23556042629SMatthias Ringwald  * @param role (become master, stay slave)
23656042629SMatthias Ringwald  */
23756042629SMatthias Ringwald const hci_cmd_t hci_accept_connection_request = {
238ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ACCEPT_CONNECTION_REQUEST, "B1"
23956042629SMatthias Ringwald };
24056042629SMatthias Ringwald 
24156042629SMatthias Ringwald /**
24256042629SMatthias Ringwald  * @param bd_addr
24356042629SMatthias Ringwald  * @param reason (e.g. CONNECTION REJECTED DUE TO LIMITED RESOURCES (0x0d))
24456042629SMatthias Ringwald  */
24556042629SMatthias Ringwald const hci_cmd_t hci_reject_connection_request = {
246ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REJECT_CONNECTION_REQUEST, "B1"
24756042629SMatthias Ringwald };
24856042629SMatthias Ringwald 
24956042629SMatthias Ringwald /**
25056042629SMatthias Ringwald  * @param bd_addr
25156042629SMatthias Ringwald  * @param link_key
25256042629SMatthias Ringwald  */
25356042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_reply = {
254ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LINK_KEY_REQUEST_REPLY, "BP"
25556042629SMatthias Ringwald };
25656042629SMatthias Ringwald 
25756042629SMatthias Ringwald /**
25856042629SMatthias Ringwald  * @param bd_addr
25956042629SMatthias Ringwald  */
26056042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_negative_reply = {
261ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY, "B"
26256042629SMatthias Ringwald };
26356042629SMatthias Ringwald 
26456042629SMatthias Ringwald /**
26556042629SMatthias Ringwald  * @param bd_addr
26656042629SMatthias Ringwald  * @param pin_length
26756042629SMatthias Ringwald  * @param pin (c-string)
26856042629SMatthias Ringwald  */
26956042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_reply = {
270ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_PIN_CODE_REQUEST_REPLY, "B1P"
27156042629SMatthias Ringwald };
27256042629SMatthias Ringwald 
27356042629SMatthias Ringwald /**
27456042629SMatthias Ringwald  * @param bd_addr
27556042629SMatthias Ringwald  */
27656042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_negative_reply = {
277ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY, "B"
27856042629SMatthias Ringwald };
27956042629SMatthias Ringwald 
28056042629SMatthias Ringwald /**
28156042629SMatthias Ringwald  * @param handle
28256042629SMatthias Ringwald  * @param packet_type
28356042629SMatthias Ringwald  */
28456042629SMatthias Ringwald const hci_cmd_t hci_change_connection_packet_type = {
285ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CHANGE_CONNECTION_PACKET_TYPE, "H2"
28656042629SMatthias Ringwald };
28756042629SMatthias Ringwald 
28856042629SMatthias Ringwald /**
28956042629SMatthias Ringwald  * @param handle
29056042629SMatthias Ringwald  */
29156042629SMatthias Ringwald const hci_cmd_t hci_authentication_requested = {
292ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_AUTHENTICATION_REQUESTED, "H"
29356042629SMatthias Ringwald };
29456042629SMatthias Ringwald 
29556042629SMatthias Ringwald /**
29656042629SMatthias Ringwald  * @param handle
29756042629SMatthias Ringwald  * @param encryption_enable
29856042629SMatthias Ringwald  */
29956042629SMatthias Ringwald const hci_cmd_t hci_set_connection_encryption = {
300ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_CONNECTION_ENCRYPTION, "H1"
30156042629SMatthias Ringwald };
30256042629SMatthias Ringwald 
30356042629SMatthias Ringwald /**
30456042629SMatthias Ringwald  * @param handle
30556042629SMatthias Ringwald  */
30656042629SMatthias Ringwald const hci_cmd_t hci_change_connection_link_key = {
307ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CHANGE_CONNECTION_LINK_KEY, "H"
30856042629SMatthias Ringwald };
30956042629SMatthias Ringwald 
31056042629SMatthias Ringwald /**
31156042629SMatthias Ringwald  * @param bd_addr
31256042629SMatthias Ringwald  * @param page_scan_repetition_mode
31356042629SMatthias Ringwald  * @param reserved
31456042629SMatthias Ringwald  * @param clock_offset
31556042629SMatthias Ringwald  */
31656042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request = {
317ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_NAME_REQUEST, "B112"
31856042629SMatthias Ringwald };
31956042629SMatthias Ringwald 
32056042629SMatthias Ringwald 
32156042629SMatthias Ringwald /**
32256042629SMatthias Ringwald  * @param bd_addr
32356042629SMatthias Ringwald  */
32456042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request_cancel = {
325ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_NAME_REQUEST_CANCEL, "B"
32656042629SMatthias Ringwald };
32756042629SMatthias Ringwald 
32856042629SMatthias Ringwald  /**
32956042629SMatthias Ringwald  * @param handle
33056042629SMatthias Ringwald  */
33156042629SMatthias Ringwald const hci_cmd_t hci_read_remote_supported_features_command = {
332ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND, "H"
3338b22c04dSMatthias Ringwald };
3348b22c04dSMatthias Ringwald 
3358b22c04dSMatthias Ringwald /**
336d5057706SMatthias Ringwald * @param handle
337d5057706SMatthias Ringwald */
338d5057706SMatthias Ringwald const hci_cmd_t hci_read_remote_extended_features_command = {
339ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND, "H1"
340d5057706SMatthias Ringwald };
341d5057706SMatthias Ringwald 
342d5057706SMatthias Ringwald /**
3438b22c04dSMatthias Ringwald  * @param handle
3448b22c04dSMatthias Ringwald  */
3458b22c04dSMatthias Ringwald const hci_cmd_t hci_read_remote_version_information = {
346ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_VERSION_INFORMATION, "H"
34756042629SMatthias Ringwald };
34856042629SMatthias Ringwald 
34956042629SMatthias Ringwald /**
35056042629SMatthias Ringwald  * @param handle
35156042629SMatthias Ringwald  * @param transmit_bandwidth 8000(64kbps)
35256042629SMatthias Ringwald  * @param receive_bandwidth  8000(64kbps)
35356042629SMatthias Ringwald  * @param max_latency        >= 7ms for eSCO, 0xFFFF do not care
35456042629SMatthias Ringwald  * @param voice_settings     e.g. CVSD, Input Coding: Linear, Input Data Format: 2’s complement, data 16bit: 00011000000 == 0x60
35556042629SMatthias Ringwald  * @param retransmission_effort  e.g. 0xFF do not care
35656042629SMatthias Ringwald  * @param packet_type        at least EV3 for eSCO
35756042629SMatthias Ringwald  */
35856042629SMatthias Ringwald const hci_cmd_t hci_setup_synchronous_connection = {
359ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SETUP_SYNCHRONOUS_CONNECTION, "H442212"
36056042629SMatthias Ringwald };
36156042629SMatthias Ringwald 
36256042629SMatthias Ringwald /**
36356042629SMatthias Ringwald  * @param bd_addr
36456042629SMatthias Ringwald  * @param transmit_bandwidth
36556042629SMatthias Ringwald  * @param receive_bandwidth
36656042629SMatthias Ringwald  * @param max_latency
36756042629SMatthias Ringwald  * @param voice_settings
36856042629SMatthias Ringwald  * @param retransmission_effort
36956042629SMatthias Ringwald  * @param packet_type
37056042629SMatthias Ringwald  */
37156042629SMatthias Ringwald const hci_cmd_t hci_accept_synchronous_connection = {
372ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ACCEPT_SYNCHRONOUS_CONNECTION, "B442212"
37356042629SMatthias Ringwald };
37456042629SMatthias Ringwald 
37556042629SMatthias Ringwald /**
37656042629SMatthias Ringwald  * @param bd_addr
37756042629SMatthias Ringwald  * @param IO_capability
37856042629SMatthias Ringwald  * @param OOB_data_present
37956042629SMatthias Ringwald  * @param authentication_requirements
38056042629SMatthias Ringwald  */
38156042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_reply = {
382ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_REPLY, "B111"
38356042629SMatthias Ringwald };
38456042629SMatthias Ringwald 
38556042629SMatthias Ringwald /**
38656042629SMatthias Ringwald  * @param bd_addr
38756042629SMatthias Ringwald  */
38856042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_reply = {
389ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_REPLY, "B"
39056042629SMatthias Ringwald };
39156042629SMatthias Ringwald 
39256042629SMatthias Ringwald /**
39356042629SMatthias Ringwald  * @param bd_addr
39456042629SMatthias Ringwald  */
39556042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_negative_reply = {
396ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY, "B"
39756042629SMatthias Ringwald };
39856042629SMatthias Ringwald 
39956042629SMatthias Ringwald /**
40056042629SMatthias Ringwald  * @param bd_addr
40156042629SMatthias Ringwald  * @param numeric_value
40256042629SMatthias Ringwald  */
40356042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_reply = {
404ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_REPLY, "B4"
40556042629SMatthias Ringwald };
40656042629SMatthias Ringwald 
40756042629SMatthias Ringwald /**
40856042629SMatthias Ringwald  * @param bd_addr
40956042629SMatthias Ringwald  */
41056042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_negative_reply = {
411ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY, "B"
41256042629SMatthias Ringwald };
41356042629SMatthias Ringwald 
41456042629SMatthias Ringwald /**
41556042629SMatthias Ringwald  * @param bd_addr
416237daac5SMatthias Ringwald  * @param c Simple Pairing Hash C
417237daac5SMatthias Ringwald  * @param r Simple Pairing Randomizer R
418237daac5SMatthias Ringwald  */
419237daac5SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_reply = {
420bb75dd7dSMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_REPLY, "BKK"
421237daac5SMatthias Ringwald };
422237daac5SMatthias Ringwald 
423237daac5SMatthias Ringwald /**
424237daac5SMatthias Ringwald  * @param bd_addr
42556042629SMatthias Ringwald  */
42656042629SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_negative_reply = {
427ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY, "B"
42856042629SMatthias Ringwald };
42956042629SMatthias Ringwald 
43056042629SMatthias Ringwald /**
43156042629SMatthias Ringwald  * @param bd_addr
43256042629SMatthias Ringwald  * @param reason (Part D, Error codes)
43356042629SMatthias Ringwald  */
43456042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_negative_reply = {
435ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY, "B1"
43656042629SMatthias Ringwald };
43756042629SMatthias Ringwald 
43856042629SMatthias Ringwald /**
43956042629SMatthias Ringwald  * @param handle
44056042629SMatthias Ringwald  * @param transmit_bandwidth
44156042629SMatthias Ringwald  * @param receive_bandwidth
44256042629SMatthias Ringwald  * @param transmit_coding_format_type
44356042629SMatthias Ringwald  * @param transmit_coding_format_company
44456042629SMatthias Ringwald  * @param transmit_coding_format_codec
44556042629SMatthias Ringwald  * @param receive_coding_format_type
44656042629SMatthias Ringwald  * @param receive_coding_format_company
44756042629SMatthias Ringwald  * @param receive_coding_format_codec
44856042629SMatthias Ringwald  * @param transmit_coding_frame_size
44956042629SMatthias Ringwald  * @param receive_coding_frame_size
45056042629SMatthias Ringwald  * @param input_bandwidth
45156042629SMatthias Ringwald  * @param output_bandwidth
45256042629SMatthias Ringwald  * @param input_coding_format_type
45356042629SMatthias Ringwald  * @param input_coding_format_company
45456042629SMatthias Ringwald  * @param input_coding_format_codec
45556042629SMatthias Ringwald  * @param output_coding_format_type
45656042629SMatthias Ringwald  * @param output_coding_format_company
45756042629SMatthias Ringwald  * @param output_coding_format_codec
45856042629SMatthias Ringwald  * @param input_coded_data_size
45956042629SMatthias Ringwald  * @param outupt_coded_data_size
46056042629SMatthias Ringwald  * @param input_pcm_data_format
46156042629SMatthias Ringwald  * @param output_pcm_data_format
46256042629SMatthias Ringwald  * @param input_pcm_sample_payload_msb_position
46356042629SMatthias Ringwald  * @param output_pcm_sample_payload_msb_position
46456042629SMatthias Ringwald  * @param input_data_path
46556042629SMatthias Ringwald  * @param output_data_path
46656042629SMatthias Ringwald  * @param input_transport_unit_size
46756042629SMatthias Ringwald  * @param output_transport_unit_size
46856042629SMatthias Ringwald  * @param max_latency
46956042629SMatthias Ringwald  * @param packet_type
47056042629SMatthias Ringwald  * @param retransmission_effort
47156042629SMatthias Ringwald  */
47256042629SMatthias Ringwald const hci_cmd_t hci_enhanced_setup_synchronous_connection = {
473ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION, "H4412212222441221222211111111221"
47456042629SMatthias Ringwald };
47556042629SMatthias Ringwald 
47656042629SMatthias Ringwald /**
47756042629SMatthias Ringwald  * @param bd_addr
47856042629SMatthias Ringwald  * @param transmit_bandwidth
47956042629SMatthias Ringwald  * @param receive_bandwidth
48056042629SMatthias Ringwald  * @param transmit_coding_format_type
48156042629SMatthias Ringwald  * @param transmit_coding_format_company
48256042629SMatthias Ringwald  * @param transmit_coding_format_codec
48356042629SMatthias Ringwald  * @param receive_coding_format_type
48456042629SMatthias Ringwald  * @param receive_coding_format_company
48556042629SMatthias Ringwald  * @param receive_coding_format_codec
48656042629SMatthias Ringwald  * @param transmit_coding_frame_size
48756042629SMatthias Ringwald  * @param receive_coding_frame_size
48856042629SMatthias Ringwald  * @param input_bandwidth
48956042629SMatthias Ringwald  * @param output_bandwidth
49056042629SMatthias Ringwald  * @param input_coding_format_type
49156042629SMatthias Ringwald  * @param input_coding_format_company
49256042629SMatthias Ringwald  * @param input_coding_format_codec
49356042629SMatthias Ringwald  * @param output_coding_format_type
49456042629SMatthias Ringwald  * @param output_coding_format_company
49556042629SMatthias Ringwald  * @param output_coding_format_codec
49656042629SMatthias Ringwald  * @param input_coded_data_size
49756042629SMatthias Ringwald  * @param outupt_coded_data_size
49856042629SMatthias Ringwald  * @param input_pcm_data_format
49956042629SMatthias Ringwald  * @param output_pcm_data_format
50056042629SMatthias Ringwald  * @param input_pcm_sample_payload_msb_position
50156042629SMatthias Ringwald  * @param output_pcm_sample_payload_msb_position
50256042629SMatthias Ringwald  * @param input_data_path
50356042629SMatthias Ringwald  * @param output_data_path
50456042629SMatthias Ringwald  * @param input_transport_unit_size
50556042629SMatthias Ringwald  * @param output_transport_unit_size
50656042629SMatthias Ringwald  * @param max_latency
50756042629SMatthias Ringwald  * @param packet_type
50856042629SMatthias Ringwald  * @param retransmission_effort
50956042629SMatthias Ringwald  */
51056042629SMatthias Ringwald const hci_cmd_t hci_enhanced_accept_synchronous_connection = {
511ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION, "B4412212222441221222211111111221"
51256042629SMatthias Ringwald };
51356042629SMatthias Ringwald 
51456042629SMatthias Ringwald /**
515bb75dd7dSMatthias Ringwald  * @param bd_addr
516bb75dd7dSMatthias Ringwald  * @param c_192 Simple Pairing Hash C derived from P-192 public key
517bb75dd7dSMatthias Ringwald  * @param r_192 Simple Pairing Randomizer derived from P-192 public key
518bb75dd7dSMatthias Ringwald  * @param c_256 Simple Pairing Hash C derived from P-256 public key
519bb75dd7dSMatthias Ringwald  * @param r_256 Simple Pairing Randomizer derived from P-256 public key
520bb75dd7dSMatthias Ringwald  */
521bb75dd7dSMatthias Ringwald const hci_cmd_t hci_remote_oob_extended_data_request_reply = {
522bb75dd7dSMatthias Ringwald         HCI_OPCODE_HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY, "BKKKK"
523bb75dd7dSMatthias Ringwald };
524bb75dd7dSMatthias Ringwald 
525bb75dd7dSMatthias Ringwald /**
52656042629SMatthias Ringwald  *  Link Policy Commands
52756042629SMatthias Ringwald  */
52856042629SMatthias Ringwald 
52956042629SMatthias Ringwald /**
53056042629SMatthias Ringwald  * @param handle
53156042629SMatthias Ringwald  * @param sniff_max_interval
53256042629SMatthias Ringwald  * @param sniff_min_interval
53356042629SMatthias Ringwald  * @param sniff_attempt
53456042629SMatthias Ringwald  * @param sniff_timeout
53556042629SMatthias Ringwald  */
53656042629SMatthias Ringwald const hci_cmd_t hci_sniff_mode = {
537ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SNIFF_MODE, "H2222"
53856042629SMatthias Ringwald };
53956042629SMatthias Ringwald 
54056042629SMatthias Ringwald /**
54156042629SMatthias Ringwald  * @param handle
5427cd21895SMatthias Ringwald  */
5437cd21895SMatthias Ringwald const hci_cmd_t hci_exit_sniff_mode = {
544ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_EXIT_SNIFF_MODE, "H"
5457cd21895SMatthias Ringwald };
5467cd21895SMatthias Ringwald 
5477cd21895SMatthias Ringwald /**
5487cd21895SMatthias Ringwald  * @param handle
54956042629SMatthias Ringwald  * @param flags
55056042629SMatthias Ringwald  * @param service_type
55156042629SMatthias Ringwald  * @param token_rate (bytes/s)
55256042629SMatthias Ringwald  * @param peak_bandwith (bytes/s)
55356042629SMatthias Ringwald  * @param latency (us)
55456042629SMatthias Ringwald  * @param delay_variation (us)
55556042629SMatthias Ringwald  */
55656042629SMatthias Ringwald const hci_cmd_t hci_qos_setup = {
557ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_QOS_SETUP, "H114444"
55856042629SMatthias Ringwald };
55956042629SMatthias Ringwald 
56056042629SMatthias Ringwald /**
56156042629SMatthias Ringwald  * @param handle
56256042629SMatthias Ringwald  */
56356042629SMatthias Ringwald const hci_cmd_t hci_role_discovery = {
564ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ROLE_DISCOVERY, "H"
56556042629SMatthias Ringwald };
56656042629SMatthias Ringwald 
56756042629SMatthias Ringwald /**
56856042629SMatthias Ringwald  * @param bd_addr
56956042629SMatthias Ringwald  * @param role (0=master,1=slave)
57056042629SMatthias Ringwald  */
57156042629SMatthias Ringwald const hci_cmd_t hci_switch_role_command= {
572ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SWITCH_ROLE_COMMAND, "B1"
57356042629SMatthias Ringwald };
57456042629SMatthias Ringwald 
57556042629SMatthias Ringwald /**
57656042629SMatthias Ringwald  * @param handle
57756042629SMatthias Ringwald  */
57856042629SMatthias Ringwald const hci_cmd_t hci_read_link_policy_settings = {
579ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LINK_POLICY_SETTINGS, "H"
58056042629SMatthias Ringwald };
58156042629SMatthias Ringwald 
58256042629SMatthias Ringwald /**
58356042629SMatthias Ringwald  * @param handle
58456042629SMatthias Ringwald  * @param settings
58556042629SMatthias Ringwald  */
58656042629SMatthias Ringwald const hci_cmd_t hci_write_link_policy_settings = {
587ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LINK_POLICY_SETTINGS, "H2"
58856042629SMatthias Ringwald };
58956042629SMatthias Ringwald 
590c4c88f1bSJakob Krantz /**
59132e2f27fSMatthias Ringwald  * @param handle
59232e2f27fSMatthias Ringwald  * @param max_latency
59332e2f27fSMatthias Ringwald  * @param min_remote_timeout
59432e2f27fSMatthias Ringwald  * @param min_local_timeout
59532e2f27fSMatthias Ringwald  */
59632e2f27fSMatthias Ringwald const hci_cmd_t hci_sniff_subrating = {
59750fe3a99SMilanka Ringwald         HCI_OPCODE_HCI_SNIFF_SUBRATING, "H222"
59832e2f27fSMatthias Ringwald };
59932e2f27fSMatthias Ringwald 
60032e2f27fSMatthias Ringwald /**
601c4c88f1bSJakob Krantz  * @param policy
602c4c88f1bSJakob Krantz  */
60353138e7aSMatthias Ringwald const hci_cmd_t hci_write_default_link_policy_setting = {
604ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_DEFAULT_LINK_POLICY_SETTING, "2"
605c4c88f1bSJakob Krantz };
606c4c88f1bSJakob Krantz 
607733a7793SMatthias Ringwald /**
608733a7793SMatthias Ringwald  * @param handle
609733a7793SMatthias Ringwald  * @param unused
610733a7793SMatthias Ringwald  * @param flow_direction
611733a7793SMatthias Ringwald  * @param service_type
612733a7793SMatthias Ringwald  * @param token_rate
613733a7793SMatthias Ringwald  * @param token_bucket_size
614733a7793SMatthias Ringwald  * @param peak_bandwidth
615733a7793SMatthias Ringwald  * @param access_latency
616733a7793SMatthias Ringwald  */
617733a7793SMatthias Ringwald const hci_cmd_t hci_flow_specification = {
618733a7793SMatthias Ringwald         HCI_OPCODE_HCI_FLOW_SPECIFICATION, "H1114444"
619733a7793SMatthias Ringwald };
620733a7793SMatthias Ringwald 
62156042629SMatthias Ringwald 
62256042629SMatthias Ringwald /**
62356042629SMatthias Ringwald  *  Controller & Baseband Commands
62456042629SMatthias Ringwald  */
62556042629SMatthias Ringwald 
6269119d792SMilanka Ringwald 
62756042629SMatthias Ringwald /**
62856042629SMatthias Ringwald  * @param event_mask_lover_octets
62956042629SMatthias Ringwald  * @param event_mask_higher_octets
63056042629SMatthias Ringwald  */
63156042629SMatthias Ringwald const hci_cmd_t hci_set_event_mask = {
632ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_EVENT_MASK, "44"
63356042629SMatthias Ringwald };
63456042629SMatthias Ringwald 
63556042629SMatthias Ringwald /**
63656042629SMatthias Ringwald  */
63756042629SMatthias Ringwald const hci_cmd_t hci_reset = {
638ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_RESET, ""
63956042629SMatthias Ringwald };
64056042629SMatthias Ringwald 
64156042629SMatthias Ringwald /**
642e49d496aSMatthias Ringwald  * @param handle
643e49d496aSMatthias Ringwald  */
644e49d496aSMatthias Ringwald const hci_cmd_t hci_flush = {
645ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_FLUSH, "H"
6469af39d9fSMatthias Ringwald };
6479af39d9fSMatthias Ringwald 
6489af39d9fSMatthias Ringwald /**
6499af39d9fSMatthias Ringwald  * @param handle
6509af39d9fSMatthias Ringwald  */
6519af39d9fSMatthias Ringwald const hci_cmd_t hci_read_pin_type = {
652ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PIN_TYPE, ""
6539af39d9fSMatthias Ringwald };
6549af39d9fSMatthias Ringwald 
6559af39d9fSMatthias Ringwald /**
6569af39d9fSMatthias Ringwald  * @param handle
6579af39d9fSMatthias Ringwald  */
6589af39d9fSMatthias Ringwald const hci_cmd_t hci_write_pin_type = {
659ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PIN_TYPE, "1"
660e49d496aSMatthias Ringwald };
661e49d496aSMatthias Ringwald 
662e49d496aSMatthias Ringwald /**
66356042629SMatthias Ringwald  * @param bd_addr
66456042629SMatthias Ringwald  * @param delete_all_flags
66556042629SMatthias Ringwald  */
66656042629SMatthias Ringwald const hci_cmd_t hci_delete_stored_link_key = {
667ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_DELETE_STORED_LINK_KEY, "B1"
66856042629SMatthias Ringwald };
66956042629SMatthias Ringwald 
670f9f2075cSMatthias Ringwald #ifdef ENABLE_CLASSIC
67156042629SMatthias Ringwald /**
67256042629SMatthias Ringwald  * @param local_name (UTF-8, Null Terminated, max 248 octets)
67356042629SMatthias Ringwald  */
67456042629SMatthias Ringwald const hci_cmd_t hci_write_local_name = {
675ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LOCAL_NAME, "N"
67656042629SMatthias Ringwald };
677f9f2075cSMatthias Ringwald #endif
67856042629SMatthias Ringwald 
67956042629SMatthias Ringwald /**
680e90bae01SMatthias Ringwald  */
681e90bae01SMatthias Ringwald const hci_cmd_t hci_read_local_name = {
682ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_NAME, ""
683e90bae01SMatthias Ringwald };
684e90bae01SMatthias Ringwald 
685e90bae01SMatthias Ringwald /**
686195e82f3Sskoperst  */
687195e82f3Sskoperst const hci_cmd_t hci_read_page_timeout = {
688ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PAGE_TIMEOUT, ""
689195e82f3Sskoperst };
690195e82f3Sskoperst 
691195e82f3Sskoperst /**
69256042629SMatthias Ringwald  * @param page_timeout (* 0.625 ms)
69356042629SMatthias Ringwald  */
69456042629SMatthias Ringwald const hci_cmd_t hci_write_page_timeout = {
695ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_TIMEOUT, "2"
69656042629SMatthias Ringwald };
69756042629SMatthias Ringwald 
69856042629SMatthias Ringwald /**
6994eac2391SMatthias Ringwald  * @param scan_enable (no, inq, page, inq+page)
7004eac2391SMatthias Ringwald  */
7014eac2391SMatthias Ringwald const hci_cmd_t hci_write_scan_enable = {
702ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SCAN_ENABLE, "1"
7034eac2391SMatthias Ringwald };
7044eac2391SMatthias Ringwald 
7054eac2391SMatthias Ringwald /**
706195e82f3Sskoperst  */
707195e82f3Sskoperst const hci_cmd_t hci_read_page_scan_activity = {
708ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PAGE_SCAN_ACTIVITY, ""
709195e82f3Sskoperst };
710195e82f3Sskoperst 
711195e82f3Sskoperst /**
712195e82f3Sskoperst  * @param page_scan_interval (* 0.625 ms)
713195e82f3Sskoperst  * @param page_scan_window (* 0.625 ms, must be <= page_scan_interval)
714195e82f3Sskoperst  */
715195e82f3Sskoperst const hci_cmd_t hci_write_page_scan_activity = {
716ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_SCAN_ACTIVITY, "22"
717195e82f3Sskoperst };
718195e82f3Sskoperst 
719195e82f3Sskoperst /**
72056042629SMatthias Ringwald  */
7214eac2391SMatthias Ringwald const hci_cmd_t hci_read_inquiry_scan_activity = {
722ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_INQUIRY_SCAN_ACTIVITY, ""
7234eac2391SMatthias Ringwald };
7244eac2391SMatthias Ringwald 
7254eac2391SMatthias Ringwald /**
7264eac2391SMatthias Ringwald  * @param inquiry_scan_interval (* 0.625 ms)
7274eac2391SMatthias Ringwald  * @param inquiry_scan_window (* 0.625 ms, must be <= inquiry_scan_interval)
7284eac2391SMatthias Ringwald  */
7294eac2391SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_activity = {
730ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_ACTIVITY, "22"
73156042629SMatthias Ringwald };
73256042629SMatthias Ringwald 
73356042629SMatthias Ringwald /**
73456042629SMatthias Ringwald  * @param authentication_enable
73556042629SMatthias Ringwald  */
73656042629SMatthias Ringwald const hci_cmd_t hci_write_authentication_enable = {
737ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_AUTHENTICATION_ENABLE, "1"
73856042629SMatthias Ringwald };
73956042629SMatthias Ringwald 
74056042629SMatthias Ringwald /**
74156042629SMatthias Ringwald  * @param class_of_device
74256042629SMatthias Ringwald  */
74356042629SMatthias Ringwald const hci_cmd_t hci_write_class_of_device = {
744ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_CLASS_OF_DEVICE, "3"
74556042629SMatthias Ringwald };
74656042629SMatthias Ringwald 
74756042629SMatthias Ringwald /**
74856042629SMatthias Ringwald  */
74956042629SMatthias Ringwald const hci_cmd_t hci_read_num_broadcast_retransmissions = {
750ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS, ""
75156042629SMatthias Ringwald };
75256042629SMatthias Ringwald 
75356042629SMatthias Ringwald /**
75456042629SMatthias Ringwald  * @param num_broadcast_retransmissions (e.g. 0 for a single broadcast)
75556042629SMatthias Ringwald  */
75656042629SMatthias Ringwald const hci_cmd_t hci_write_num_broadcast_retransmissions = {
757ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS, "1"
75856042629SMatthias Ringwald };
75956042629SMatthias Ringwald 
76056042629SMatthias Ringwald /**
76144751e25SMatthias Ringwald  * @param connection_handle
76244751e25SMatthias Ringwald  * @param type 0 = current transmit level, 1 = max transmit level
76344751e25SMatthias Ringwald  */
76444751e25SMatthias Ringwald const hci_cmd_t hci_read_transmit_power_level = {
765ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_TRANSMIT_POWER_LEVEL, "11"
76644751e25SMatthias Ringwald };
76744751e25SMatthias Ringwald 
76844751e25SMatthias Ringwald /**
76956042629SMatthias Ringwald  * @param synchronous_flow_control_enable - if yes, num completed packet everts are sent for SCO packets
77056042629SMatthias Ringwald  */
77156042629SMatthias Ringwald const hci_cmd_t hci_write_synchronous_flow_control_enable = {
772ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE, "1"
77356042629SMatthias Ringwald };
77456042629SMatthias Ringwald 
7752b838201SMatthias Ringwald #ifdef ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL
7762b838201SMatthias Ringwald 
7772b838201SMatthias Ringwald /**
7782b838201SMatthias Ringwald  * @param flow_control_enable - 0: off, 1: ACL only, 2: SCO only, 3: ACL + SCO
7792b838201SMatthias Ringwald  */
7802b838201SMatthias Ringwald const hci_cmd_t hci_set_controller_to_host_flow_control = {
781ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL, "1"
7822b838201SMatthias Ringwald };
7832b838201SMatthias Ringwald 
78456042629SMatthias Ringwald /**
78556042629SMatthias Ringwald  * @param host_acl_data_packet_length
78656042629SMatthias Ringwald  * @param host_synchronous_data_packet_length
78756042629SMatthias Ringwald  * @param host_total_num_acl_data_packets
78856042629SMatthias Ringwald  * @param host_total_num_synchronous_data_packets
78956042629SMatthias Ringwald  */
79056042629SMatthias Ringwald const hci_cmd_t hci_host_buffer_size = {
791ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_HOST_BUFFER_SIZE, "2122"
79256042629SMatthias Ringwald };
79356042629SMatthias Ringwald 
7949119d792SMilanka Ringwald 
7952b838201SMatthias Ringwald #if 0
7962b838201SMatthias Ringwald //
7972b838201SMatthias Ringwald // command sent manually sent by hci_host_num_completed_packets
7982b838201SMatthias Ringwald //
7992b838201SMatthias Ringwald /**
8002b838201SMatthias Ringwald  * @note only single handle supported by BTstack command generator
8012b838201SMatthias Ringwald  * @param number_of_handles must be 1
8022b838201SMatthias Ringwald  * @param connection_handle
8032b838201SMatthias Ringwald  * @param host_num_of_completed_packets for the given connection handle
8042b838201SMatthias Ringwald  */
8052b838201SMatthias Ringwald const hci_cmd_t hci_host_number_of_completed_packets = {
806ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS, "1H2"
8072b838201SMatthias Ringwald };
8082b838201SMatthias Ringwald #endif
8092b838201SMatthias Ringwald 
8102b838201SMatthias Ringwald #endif
8112b838201SMatthias Ringwald 
81256042629SMatthias Ringwald /**
81356042629SMatthias Ringwald  * @param handle
81456042629SMatthias Ringwald  */
81556042629SMatthias Ringwald const hci_cmd_t hci_read_link_supervision_timeout = {
816ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LINK_SUPERVISION_TIMEOUT, "H"
81756042629SMatthias Ringwald };
81856042629SMatthias Ringwald 
81956042629SMatthias Ringwald /**
82056042629SMatthias Ringwald  * @param handle
82156042629SMatthias Ringwald  * @param timeout (0x0001 - 0xFFFF Time -> Range: 0.625ms - 40.9 sec)
82256042629SMatthias Ringwald  */
82356042629SMatthias Ringwald const hci_cmd_t hci_write_link_supervision_timeout = {
824ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LINK_SUPERVISION_TIMEOUT, "H2"
82556042629SMatthias Ringwald };
82656042629SMatthias Ringwald 
82756042629SMatthias Ringwald /**
8289119d792SMilanka Ringwald  * @param num_current_iac must be 2
8299119d792SMilanka Ringwald  * @param iac_lap1
8309119d792SMilanka Ringwald  * @param iac_lap2
8319119d792SMilanka Ringwald  */
8329119d792SMilanka Ringwald const hci_cmd_t hci_write_current_iac_lap_two_iacs = {
833ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_CURRENT_IAC_LAP_TWO_IACS, "133"
8349119d792SMilanka Ringwald };
8359119d792SMilanka Ringwald 
8369119d792SMilanka Ringwald /**
8375769fd77SMatthias Ringwald  * @param inquiry_scan_type (0x00 = standard, 0x01 = interlaced)
8385769fd77SMatthias Ringwald  */
8395769fd77SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_type = {
8405769fd77SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_TYPE,  "1"
8415769fd77SMatthias Ringwald };
8425769fd77SMatthias Ringwald 
8435769fd77SMatthias Ringwald /**
84456042629SMatthias Ringwald  * @param inquiry_mode (0x00 = standard, 0x01 = with RSSI, 0x02 = extended)
84556042629SMatthias Ringwald  */
84656042629SMatthias Ringwald const hci_cmd_t hci_write_inquiry_mode = {
847ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_MODE, "1"
84856042629SMatthias Ringwald };
84956042629SMatthias Ringwald 
85056042629SMatthias Ringwald /**
8515769fd77SMatthias Ringwald  * @param page_scan_type (0x00 = standard, 0x01 = interlaced)
8525769fd77SMatthias Ringwald  */
8535769fd77SMatthias Ringwald const hci_cmd_t hci_write_page_scan_type = {
8545769fd77SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_SCAN_TYPE, "1"
8555769fd77SMatthias Ringwald };
8565769fd77SMatthias Ringwald 
8575769fd77SMatthias Ringwald /**
85856042629SMatthias Ringwald  * @param fec_required
85956042629SMatthias Ringwald  * @param exstended_inquiry_response
86056042629SMatthias Ringwald  */
86156042629SMatthias Ringwald const hci_cmd_t hci_write_extended_inquiry_response = {
862ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_EXTENDED_INQUIRY_RESPONSE, "1E"
86356042629SMatthias Ringwald };
86456042629SMatthias Ringwald 
86556042629SMatthias Ringwald /**
86656042629SMatthias Ringwald  * @param mode (0 = off, 1 = on)
86756042629SMatthias Ringwald  */
86856042629SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_mode = {
869ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_MODE, "1"
87056042629SMatthias Ringwald };
87156042629SMatthias Ringwald 
872237daac5SMatthias Ringwald /**
873237daac5SMatthias Ringwald  */
874237daac5SMatthias Ringwald const hci_cmd_t hci_read_local_oob_data = {
875ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_OOB_DATA, ""
876237daac5SMatthias Ringwald     // return status, C, R
877237daac5SMatthias Ringwald };
878483c5078SMatthias Ringwald 
879483c5078SMatthias Ringwald /**
880483c5078SMatthias Ringwald  * @param mode (0 = off, 1 = on)
881483c5078SMatthias Ringwald  */
882483c5078SMatthias Ringwald const hci_cmd_t hci_write_default_erroneous_data_reporting = {
883ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING, "1"
884483c5078SMatthias Ringwald };
885483c5078SMatthias Ringwald 
88656042629SMatthias Ringwald /**
88756042629SMatthias Ringwald  */
88856042629SMatthias Ringwald const hci_cmd_t hci_read_le_host_supported = {
889ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LE_HOST_SUPPORTED, ""
89056042629SMatthias Ringwald     // return: status, le supported host, simultaneous le host
89156042629SMatthias Ringwald };
89256042629SMatthias Ringwald 
89356042629SMatthias Ringwald /**
89456042629SMatthias Ringwald  * @param le_supported_host
89556042629SMatthias Ringwald  * @param simultaneous_le_host
89656042629SMatthias Ringwald  */
89756042629SMatthias Ringwald const hci_cmd_t hci_write_le_host_supported = {
898ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LE_HOST_SUPPORTED, "11"
89956042629SMatthias Ringwald     // return: status
90056042629SMatthias Ringwald };
90156042629SMatthias Ringwald 
90256042629SMatthias Ringwald /**
903b002ae8cSMatthias Ringwald  * @param secure_connections_host_support
904b002ae8cSMatthias Ringwald  */
905b002ae8cSMatthias Ringwald const hci_cmd_t hci_write_secure_connections_host_support = {
906ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT, "1"
907b002ae8cSMatthias Ringwald     // return: status
908b002ae8cSMatthias Ringwald };
909b002ae8cSMatthias Ringwald 
910b002ae8cSMatthias Ringwald /**
911237daac5SMatthias Ringwald  */
912bb75dd7dSMatthias Ringwald const hci_cmd_t hci_read_local_extended_oob_data = {
9131849becdSMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_EXTENDED_OOB_DATA, ""
914237daac5SMatthias Ringwald     // return status, C_192, R_192, R_256, C_256
915237daac5SMatthias Ringwald };
916237daac5SMatthias Ringwald 
917237daac5SMatthias Ringwald 
918237daac5SMatthias Ringwald /**
91956042629SMatthias Ringwald  * Testing Commands
92056042629SMatthias Ringwald  */
92156042629SMatthias Ringwald 
92256042629SMatthias Ringwald 
92356042629SMatthias Ringwald /**
92456042629SMatthias Ringwald  */
92556042629SMatthias Ringwald const hci_cmd_t hci_read_loopback_mode = {
926ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOOPBACK_MODE, ""
92756042629SMatthias Ringwald     // return: status, loopback mode (0 = off, 1 = local loopback, 2 = remote loopback)
92856042629SMatthias Ringwald };
92956042629SMatthias Ringwald 
93056042629SMatthias Ringwald /**
93156042629SMatthias Ringwald  * @param loopback_mode
93256042629SMatthias Ringwald  */
93356042629SMatthias Ringwald const hci_cmd_t hci_write_loopback_mode = {
934ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LOOPBACK_MODE, "1"
93556042629SMatthias Ringwald     // return: status
93656042629SMatthias Ringwald };
93756042629SMatthias Ringwald 
93884ca9bd8SMatthias Ringwald /**
93984ca9bd8SMatthias Ringwald  */
94084ca9bd8SMatthias Ringwald const hci_cmd_t hci_enable_device_under_test_mode = {
941ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENABLE_DEVICE_UNDER_TEST_MODE, ""
94284ca9bd8SMatthias Ringwald     // return: status
94384ca9bd8SMatthias Ringwald };
94484ca9bd8SMatthias Ringwald 
94584ca9bd8SMatthias Ringwald /**
94684ca9bd8SMatthias Ringwald  * @param simple_pairing_debug_mode
94784ca9bd8SMatthias Ringwald  */
94884ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_debug_mode = {
949ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE, "1"
95084ca9bd8SMatthias Ringwald     // return: status
95184ca9bd8SMatthias Ringwald };
95284ca9bd8SMatthias Ringwald 
95384ca9bd8SMatthias Ringwald /**
95484ca9bd8SMatthias Ringwald  * @param handle
95584ca9bd8SMatthias Ringwald  * @param dm1_acl_u_mode
95684ca9bd8SMatthias Ringwald  * @param esco_loopback_mode
95784ca9bd8SMatthias Ringwald  */
95884ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_secure_connections_test_mode = {
959ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE, "H11"
96084ca9bd8SMatthias Ringwald     // return: status
96184ca9bd8SMatthias Ringwald };
96284ca9bd8SMatthias Ringwald 
96356042629SMatthias Ringwald 
96456042629SMatthias Ringwald /**
96556042629SMatthias Ringwald  * Informational Parameters
96656042629SMatthias Ringwald  */
96756042629SMatthias Ringwald 
96856042629SMatthias Ringwald const hci_cmd_t hci_read_local_version_information = {
969ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_VERSION_INFORMATION, ""
97056042629SMatthias Ringwald };
97156042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_commands = {
972ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_COMMANDS, ""
97356042629SMatthias Ringwald };
97456042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_features = {
975ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_FEATURES, ""
97656042629SMatthias Ringwald };
97756042629SMatthias Ringwald const hci_cmd_t hci_read_buffer_size = {
978ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_BUFFER_SIZE, ""
97956042629SMatthias Ringwald };
98056042629SMatthias Ringwald const hci_cmd_t hci_read_bd_addr = {
981ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_BD_ADDR, ""
98256042629SMatthias Ringwald };
98356042629SMatthias Ringwald 
98456042629SMatthias Ringwald /**
98556042629SMatthias Ringwald  * Status Paramters
98656042629SMatthias Ringwald  */
98756042629SMatthias Ringwald 
98856042629SMatthias Ringwald /**
98956042629SMatthias Ringwald  * @param handle
99056042629SMatthias Ringwald  */
99156042629SMatthias Ringwald const hci_cmd_t hci_read_rssi = {
992ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_RSSI, "H"
99356042629SMatthias Ringwald };
99456042629SMatthias Ringwald 
99597abfa24SMatthias Ringwald /**
99697abfa24SMatthias Ringwald  * @param handle
99797abfa24SMatthias Ringwald  */
99897abfa24SMatthias Ringwald const hci_cmd_t hci_read_encryption_key_size = {
999ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_ENCRYPTION_KEY_SIZE, "H"
100097abfa24SMatthias Ringwald };
100156042629SMatthias Ringwald 
100256042629SMatthias Ringwald 
1003a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE
100456042629SMatthias Ringwald /**
100556042629SMatthias Ringwald  * Low Energy Commands
100656042629SMatthias Ringwald  */
100756042629SMatthias Ringwald 
100856042629SMatthias Ringwald /**
100956042629SMatthias Ringwald  * @param event_mask_lower_octets
101056042629SMatthias Ringwald  * @param event_mask_higher_octets
101156042629SMatthias Ringwald  */
101256042629SMatthias Ringwald const hci_cmd_t hci_le_set_event_mask = {
1013ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_EVENT_MASK, "44"
101456042629SMatthias Ringwald     // return: status
101556042629SMatthias Ringwald };
101656042629SMatthias Ringwald 
101756042629SMatthias Ringwald const hci_cmd_t hci_le_read_buffer_size = {
1018ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_BUFFER_SIZE, ""
101956042629SMatthias Ringwald     // return: status, le acl data packet len (16), total num le acl data packets(8)
102056042629SMatthias Ringwald };
102156042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_features = {
1022ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUPPORTED_FEATURES, ""
102356042629SMatthias Ringwald     // return: LE_Features See [Vol 6] Part B, Section 4.6
102456042629SMatthias Ringwald };
102556042629SMatthias Ringwald 
102656042629SMatthias Ringwald /**
102756042629SMatthias Ringwald  * @param random_bd_addr
102856042629SMatthias Ringwald  */
102956042629SMatthias Ringwald const hci_cmd_t hci_le_set_random_address = {
1030ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_RANDOM_ADDRESS, "B"
103156042629SMatthias Ringwald     // return: status
103256042629SMatthias Ringwald };
103356042629SMatthias Ringwald 
103456042629SMatthias Ringwald /**
103556042629SMatthias Ringwald  * @param advertising_interval_min ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec)
103656042629SMatthias Ringwald  * @param advertising_interval_max ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec)
103756042629SMatthias Ringwald  * @param advertising_type (enum from 0: ADV_IND, ADC_DIRECT_IND, ADV_SCAN_IND, ADV_NONCONN_IND)
103856042629SMatthias Ringwald  * @param own_address_type (enum from 0: public device address, random device address)
103956042629SMatthias Ringwald  * @param direct_address_type ()
104056042629SMatthias Ringwald  * @param direct_address (public or random address of device to be connecteed)
104156042629SMatthias Ringwald  * @param advertising_channel_map (flags: chan_37(1), chan_38(2), chan_39(4))
104256042629SMatthias Ringwald  * @param advertising_filter_policy (enum from 0: scan any conn any, scan whitelist, con any, scan any conn whitelist, scan whitelist, con whitelist)
104356042629SMatthias Ringwald  */
104456042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_parameters = {
1045ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISING_PARAMETERS, "22111B11"
104656042629SMatthias Ringwald     // return: status
104756042629SMatthias Ringwald };
104856042629SMatthias Ringwald 
104956042629SMatthias Ringwald const hci_cmd_t hci_le_read_advertising_channel_tx_power = {
1050ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER, ""
105156042629SMatthias Ringwald     // return: status, level [-20,10] signed int (8), units dBm
105256042629SMatthias Ringwald };
105356042629SMatthias Ringwald 
105456042629SMatthias Ringwald /**
105556042629SMatthias Ringwald  * @param advertising_data_length
105656042629SMatthias Ringwald  * @param advertising_data (31 bytes)
105756042629SMatthias Ringwald  */
105856042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_data= {
1059ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISING_DATA, "1A"
106056042629SMatthias Ringwald     // return: status
106156042629SMatthias Ringwald };
106256042629SMatthias Ringwald 
106356042629SMatthias Ringwald /**
106456042629SMatthias Ringwald  * @param scan_response_data_length
106556042629SMatthias Ringwald  * @param scan_response_data (31 bytes)
106656042629SMatthias Ringwald  */
106756042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_response_data= {
1068ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_RESPONSE_DATA, "1A"
106956042629SMatthias Ringwald     // return: status
107056042629SMatthias Ringwald };
107156042629SMatthias Ringwald 
107256042629SMatthias Ringwald /**
107356042629SMatthias Ringwald  * @param advertise_enable (off: 0, on: 1)
107456042629SMatthias Ringwald  */
107556042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertise_enable = {
1076ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISE_ENABLE, "1"
107756042629SMatthias Ringwald     // return: status
107856042629SMatthias Ringwald };
107956042629SMatthias Ringwald 
108056042629SMatthias Ringwald /**
108156042629SMatthias Ringwald  * @param le_scan_type (passive (0), active (1))
108256042629SMatthias Ringwald  * @param le_scan_interval ([0x0004,0x4000], unit: 0.625 msec)
108356042629SMatthias Ringwald  * @param le_scan_window   ([0x0004,0x4000], unit: 0.625 msec)
108456042629SMatthias Ringwald  * @param own_address_type (public (0), random (1))
108556042629SMatthias Ringwald  * @param scanning_filter_policy (any (0), only whitelist (1))
108656042629SMatthias Ringwald  */
108756042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_parameters = {
1088ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_PARAMETERS, "12211"
108956042629SMatthias Ringwald     // return: status
109056042629SMatthias Ringwald };
109156042629SMatthias Ringwald 
109256042629SMatthias Ringwald /**
109356042629SMatthias Ringwald  * @param le_scan_enable  (disabled (0), enabled (1))
109456042629SMatthias Ringwald  * @param filter_duplices (disabled (0), enabled (1))
109556042629SMatthias Ringwald  */
109656042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_enable = {
1097ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_ENABLE, "11"
109856042629SMatthias Ringwald     // return: status
109956042629SMatthias Ringwald };
110056042629SMatthias Ringwald 
110156042629SMatthias Ringwald /**
110256042629SMatthias Ringwald  * @param le_scan_interval ([0x0004, 0x4000], unit: 0.625 msec)
110356042629SMatthias Ringwald  * @param le_scan_window ([0x0004, 0x4000], unit: 0.625 msec)
110456042629SMatthias Ringwald  * @param initiator_filter_policy (peer address type + peer address (0), whitelist (1))
110556042629SMatthias Ringwald  * @param peer_address_type (public (0), random (1))
110656042629SMatthias Ringwald  * @param peer_address
110756042629SMatthias Ringwald  * @param own_address_type (public (0), random (1))
110856042629SMatthias Ringwald  * @param conn_interval_min ([0x0006, 0x0c80], unit: 1.25 msec)
110956042629SMatthias Ringwald  * @param conn_interval_max ([0x0006, 0x0c80], unit: 1.25 msec)
111056042629SMatthias Ringwald  * @param conn_latency (number of connection events [0x0000, 0x01f4])
111156042629SMatthias Ringwald  * @param supervision_timeout ([0x000a, 0x0c80], unit: 10 msec)
111256042629SMatthias Ringwald  * @param minimum_CE_length ([0x0000, 0xffff], unit: 0.625 msec)
111356042629SMatthias Ringwald  * @param maximum_CE_length ([0x0000, 0xffff], unit: 0.625 msec)
111456042629SMatthias Ringwald  */
111556042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection= {
1116ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CREATE_CONNECTION, "2211B1222222"
111756042629SMatthias Ringwald     // return: none -> le create connection complete event
111856042629SMatthias Ringwald };
111956042629SMatthias Ringwald 
112056042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection_cancel = {
1121ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CREATE_CONNECTION_CANCEL, ""
112256042629SMatthias Ringwald     // return: status
112356042629SMatthias Ringwald };
112456042629SMatthias Ringwald 
112556042629SMatthias Ringwald const hci_cmd_t hci_le_read_white_list_size = {
1126ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_WHITE_LIST_SIZE, ""
112756042629SMatthias Ringwald     // return: status, number of entries in controller whitelist
112856042629SMatthias Ringwald };
112956042629SMatthias Ringwald 
113056042629SMatthias Ringwald const hci_cmd_t hci_le_clear_white_list = {
1131ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CLEAR_WHITE_LIST, ""
113256042629SMatthias Ringwald     // return: status
113356042629SMatthias Ringwald };
113456042629SMatthias Ringwald 
113556042629SMatthias Ringwald /**
113656042629SMatthias Ringwald  * @param address_type (public (0), random (1))
113756042629SMatthias Ringwald  * @param bd_addr
113856042629SMatthias Ringwald  */
113956042629SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_white_list = {
1140ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_WHITE_LIST, "1B"
114156042629SMatthias Ringwald     // return: status
114256042629SMatthias Ringwald };
114356042629SMatthias Ringwald 
114456042629SMatthias Ringwald /**
114556042629SMatthias Ringwald  * @param address_type (public (0), random (1))
114656042629SMatthias Ringwald  * @param bd_addr
114756042629SMatthias Ringwald  */
114856042629SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_white_list = {
1149ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST, "1B"
115056042629SMatthias Ringwald     // return: status
115156042629SMatthias Ringwald };
115256042629SMatthias Ringwald 
115356042629SMatthias Ringwald /**
115456042629SMatthias Ringwald  * @param conn_handle
115556042629SMatthias Ringwald  * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec)
115656042629SMatthias Ringwald  * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec)
115756042629SMatthias Ringwald  * @param conn_latency ([0x0000,0x03e8], number of connection events)
115856042629SMatthias Ringwald  * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec)
115956042629SMatthias Ringwald  * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
116056042629SMatthias Ringwald  * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
116156042629SMatthias Ringwald  */
116256042629SMatthias Ringwald const hci_cmd_t hci_le_connection_update = {
1163ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CONNECTION_UPDATE, "H222222"
116456042629SMatthias Ringwald     // return: none -> le connection update complete event
116556042629SMatthias Ringwald };
116656042629SMatthias Ringwald 
116756042629SMatthias Ringwald /**
116856042629SMatthias Ringwald  * @param channel_map_lower_32bits
116956042629SMatthias Ringwald  * @param channel_map_higher_5bits
117056042629SMatthias Ringwald  */
117156042629SMatthias Ringwald const hci_cmd_t hci_le_set_host_channel_classification = {
1172ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION, "41"
117356042629SMatthias Ringwald     // return: status
117456042629SMatthias Ringwald };
117556042629SMatthias Ringwald 
117656042629SMatthias Ringwald /**
117756042629SMatthias Ringwald  * @param conn_handle
117856042629SMatthias Ringwald  */
117956042629SMatthias Ringwald const hci_cmd_t hci_le_read_channel_map = {
1180ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_CHANNEL_MAP, "H"
118156042629SMatthias Ringwald     // return: status, connection handle, channel map (5 bytes, 37 used)
118256042629SMatthias Ringwald };
118356042629SMatthias Ringwald 
118456042629SMatthias Ringwald /**
118556042629SMatthias Ringwald  * @param conn_handle
118656042629SMatthias Ringwald  */
118756042629SMatthias Ringwald const hci_cmd_t hci_le_read_remote_used_features = {
1188ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_REMOTE_USED_FEATURES, "H"
118956042629SMatthias Ringwald     // return: none -> le read remote used features complete event
119056042629SMatthias Ringwald };
119156042629SMatthias Ringwald 
119256042629SMatthias Ringwald /**
119356042629SMatthias Ringwald  * @param key ((128) for AES-128)
119456042629SMatthias Ringwald  * @param plain_text (128)
119556042629SMatthias Ringwald  */
119656042629SMatthias Ringwald const hci_cmd_t hci_le_encrypt = {
1197ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_ENCRYPT, "PP"
119856042629SMatthias Ringwald     // return: status, encrypted data (128)
119956042629SMatthias Ringwald };
120056042629SMatthias Ringwald 
120156042629SMatthias Ringwald const hci_cmd_t hci_le_rand = {
1202ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_RAND, ""
120356042629SMatthias Ringwald     // return: status, random number (64)
120456042629SMatthias Ringwald };
120556042629SMatthias Ringwald 
120656042629SMatthias Ringwald /**
120756042629SMatthias Ringwald  * @param conn_handle
120856042629SMatthias Ringwald  * @param random_number_lower_32bits
120956042629SMatthias Ringwald  * @param random_number_higher_32bits
121056042629SMatthias Ringwald  * @param encryption_diversifier (16)
121156042629SMatthias Ringwald  * @param long_term_key (128)
121256042629SMatthias Ringwald  */
121356042629SMatthias Ringwald const hci_cmd_t hci_le_start_encryption = {
1214ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_START_ENCRYPTION, "H442P"
121556042629SMatthias Ringwald     // return: none -> encryption changed or encryption key refresh complete event
121656042629SMatthias Ringwald };
121756042629SMatthias Ringwald 
121856042629SMatthias Ringwald /**
121956042629SMatthias Ringwald  * @param connection_handle
122056042629SMatthias Ringwald  * @param long_term_key (128)
122156042629SMatthias Ringwald  */
122256042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_request_reply = {
1223ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_LONG_TERM_KEY_REQUEST_REPLY, "HP"
122456042629SMatthias Ringwald     // return: status, connection handle
122556042629SMatthias Ringwald };
122656042629SMatthias Ringwald 
122756042629SMatthias Ringwald /**
122856042629SMatthias Ringwald  * @param conn_handle
122956042629SMatthias Ringwald  */
123056042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_negative_reply = {
1231ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_LONG_TERM_KEY_NEGATIVE_REPLY, "H"
123256042629SMatthias Ringwald     // return: status, connection handle
123356042629SMatthias Ringwald };
123456042629SMatthias Ringwald 
123556042629SMatthias Ringwald /**
123656042629SMatthias Ringwald  * @param conn_handle
123756042629SMatthias Ringwald  */
123856042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_states = {
1239ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUPPORTED_STATES, "H"
124056042629SMatthias Ringwald     // return: status, LE states (64)
124156042629SMatthias Ringwald };
124256042629SMatthias Ringwald 
124356042629SMatthias Ringwald /**
124456042629SMatthias Ringwald  * @param rx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2)
124556042629SMatthias Ringwald  */
124656042629SMatthias Ringwald const hci_cmd_t hci_le_receiver_test = {
1247ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_RECEIVER_TEST, "1"
124856042629SMatthias Ringwald     // return: status
124956042629SMatthias Ringwald };
125056042629SMatthias Ringwald 
125156042629SMatthias Ringwald /**
125256042629SMatthias Ringwald  * @param tx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2)
125356042629SMatthias Ringwald  * @param test_payload_lengh ([0x00,0x25])
125456042629SMatthias Ringwald  * @param packet_payload ([0,7] different patterns)
125556042629SMatthias Ringwald  */
125656042629SMatthias Ringwald const hci_cmd_t hci_le_transmitter_test = {
1257ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_TRANSMITTER_TEST, "111"
125856042629SMatthias Ringwald     // return: status
125956042629SMatthias Ringwald };
126056042629SMatthias Ringwald 
126156042629SMatthias Ringwald /**
126256042629SMatthias Ringwald  * @param end_test_cmd
126356042629SMatthias Ringwald  */
126456042629SMatthias Ringwald const hci_cmd_t hci_le_test_end = {
1265ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_TEST_END, "1"
126656042629SMatthias Ringwald     // return: status, number of packets (8)
126756042629SMatthias Ringwald };
126882180fcaSMatthias Ringwald 
126982180fcaSMatthias Ringwald /**
1270fe704c95SMatthias Ringwald  * @param conn_handle
1271fe704c95SMatthias Ringwald  * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec)
1272fe704c95SMatthias Ringwald  * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec)
1273fe704c95SMatthias Ringwald  * @param conn_latency ([0x0000,0x03e8], number of connection events)
1274fe704c95SMatthias Ringwald  * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec)
1275fe704c95SMatthias Ringwald  * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
1276fe704c95SMatthias Ringwald  * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
1277fe704c95SMatthias Ringwald  */
1278fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_reply = {
1279ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY, "H222222"
1280fe704c95SMatthias Ringwald     // return: status, connection handle
1281fe704c95SMatthias Ringwald };
1282fe704c95SMatthias Ringwald 
1283fe704c95SMatthias Ringwald /**
1284fe704c95SMatthias Ringwald  * @param con_handle
1285fe704c95SMatthias Ringwald  * @param reason
1286fe704c95SMatthias Ringwald  */
1287fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_negative_reply = {
1288ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY, "H1"
1289fe704c95SMatthias Ringwald     // return: status, connection handle
1290fe704c95SMatthias Ringwald };
1291fe704c95SMatthias Ringwald 
1292fe704c95SMatthias Ringwald /**
12930ea2847fSMatthias Ringwald  * @param con_handle
12940ea2847fSMatthias Ringwald  * @param tx_octets
12950ea2847fSMatthias Ringwald  * @param tx_time
12960ea2847fSMatthias Ringwald  */
12970ea2847fSMatthias Ringwald const hci_cmd_t hci_le_set_data_length = {
1298ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_DATA_LENGTH, "H22"
12990ea2847fSMatthias Ringwald     // return: status, connection handle
13000ea2847fSMatthias Ringwald };
13010ea2847fSMatthias Ringwald 
13020ea2847fSMatthias Ringwald /**
13030ea2847fSMatthias Ringwald  */
13040ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_suggested_default_data_length = {
1305ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH, ""
13060ea2847fSMatthias Ringwald     // return: status, suggested max tx octets, suggested max tx time
13070ea2847fSMatthias Ringwald };
13080ea2847fSMatthias Ringwald 
13090ea2847fSMatthias Ringwald /**
13100ea2847fSMatthias Ringwald  * @param suggested_max_tx_octets
13110ea2847fSMatthias Ringwald  * @param suggested_max_tx_time
13120ea2847fSMatthias Ringwald  */
13130ea2847fSMatthias Ringwald const hci_cmd_t hci_le_write_suggested_default_data_length = {
1314ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH, "22"
13150ea2847fSMatthias Ringwald     // return: status
13160ea2847fSMatthias Ringwald };
13170ea2847fSMatthias Ringwald 
13180ea2847fSMatthias Ringwald /**
131982180fcaSMatthias Ringwald  */
132082180fcaSMatthias Ringwald const hci_cmd_t hci_le_read_local_p256_public_key = {
1321ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_LOCAL_P256_PUBLIC_KEY, ""
132282180fcaSMatthias Ringwald //  LE Read Local P-256 Public Key Complete is generated on completion
132382180fcaSMatthias Ringwald };
132482180fcaSMatthias Ringwald 
132582180fcaSMatthias Ringwald /**
1326fcae305fSMatthias Ringwald  * @param public key
1327fcae305fSMatthias Ringwald  * @param private key
132882180fcaSMatthias Ringwald  */
132982180fcaSMatthias Ringwald const hci_cmd_t hci_le_generate_dhkey = {
1330ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_GENERATE_DHKEY, "QQ"
133182180fcaSMatthias Ringwald // LE Generate DHKey Complete is generated on completion
133282180fcaSMatthias Ringwald };
133382180fcaSMatthias Ringwald 
13340ea2847fSMatthias Ringwald /**
1335173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1336173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1337173ed1a3SMatthias Ringwald  * @param Peer_IRK
1338173ed1a3SMatthias Ringwald  * @param Local_IRK
1339173ed1a3SMatthias Ringwald  */
1340173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_resolving_list = {
1341173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST, "1BPP"
1342173ed1a3SMatthias Ringwald };
1343173ed1a3SMatthias Ringwald 
1344173ed1a3SMatthias Ringwald /**
1345173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1346173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1347173ed1a3SMatthias Ringwald  */
1348173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_resolving_list = {
1349173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST, "1B"
1350173ed1a3SMatthias Ringwald };
1351173ed1a3SMatthias Ringwald 
1352173ed1a3SMatthias Ringwald /**
1353173ed1a3SMatthias Ringwald  */
1354173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_clear_resolving_list = {
1355173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_CLEAR_RESOLVING_LIST, ""
1356173ed1a3SMatthias Ringwald };
1357173ed1a3SMatthias Ringwald 
1358173ed1a3SMatthias Ringwald /**
1359173ed1a3SMatthias Ringwald  */
1360173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_resolving_list_size = {
1361173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_RESOLVING_LIST_SIZE, ""
1362173ed1a3SMatthias Ringwald };
1363173ed1a3SMatthias Ringwald 
1364173ed1a3SMatthias Ringwald /**
1365173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1366173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1367173ed1a3SMatthias Ringwald  */
1368173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_peer_resolvable_address = {
1369173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_PEER_RESOLVABLE_ADDRESS, ""
1370173ed1a3SMatthias Ringwald };
1371173ed1a3SMatthias Ringwald 
1372173ed1a3SMatthias Ringwald /**
1373173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1374173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1375173ed1a3SMatthias Ringwald  */
1376173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_local_resolvable_address = {
1377173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS, ""
1378173ed1a3SMatthias Ringwald };
1379173ed1a3SMatthias Ringwald 
1380173ed1a3SMatthias Ringwald /**
1381173ed1a3SMatthias Ringwald  * @param Address_Resolution_Enable
1382173ed1a3SMatthias Ringwald  */
1383173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_address_resolution_enabled= {
1384173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_SET_ADDRESS_RESOLUTION_ENABLED, "1"
1385173ed1a3SMatthias Ringwald };
1386173ed1a3SMatthias Ringwald 
1387173ed1a3SMatthias Ringwald /**
1388173ed1a3SMatthias Ringwald  * @param RPA_Timeout in seconds, range 0x0001 to 0x0E10, default: 900 s
1389173ed1a3SMatthias Ringwald  */
1390173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_resolvable_private_address_timeout= {
1391173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT, "2"
1392173ed1a3SMatthias Ringwald };
1393173ed1a3SMatthias Ringwald 
1394173ed1a3SMatthias Ringwald /**
13950ea2847fSMatthias Ringwald  */
13960ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_maximum_data_length = {
1397ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_MAXIMUM_DATA_LENGTH, ""
13980ea2847fSMatthias Ringwald     // return: status, supported max tx octets, supported max tx time, supported max rx octets, supported max rx time
13990ea2847fSMatthias Ringwald };
14000ea2847fSMatthias Ringwald 
1401ca13daefSMatthias Ringwald /**
1402ca13daefSMatthias Ringwald  * @param con_handle
1403ca13daefSMatthias Ringwald  */
1404ca13daefSMatthias Ringwald const hci_cmd_t hci_le_read_phy = {
1405ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_PHY, "H"
1406ca13daefSMatthias Ringwald     // return: status, connection handler, tx phy, rx phy
1407ca13daefSMatthias Ringwald };
1408ca13daefSMatthias Ringwald 
1409ca13daefSMatthias Ringwald /**
1410ca13daefSMatthias Ringwald  * @param all_phys
1411ca13daefSMatthias Ringwald  * @param tx_phys
1412ca13daefSMatthias Ringwald  * @param rx_phys
1413ca13daefSMatthias Ringwald  */
1414ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_default_phy = {
1415ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_DEFAULT_PHY, "111"
1416ca13daefSMatthias Ringwald     // return: status
1417ca13daefSMatthias Ringwald };
1418ca13daefSMatthias Ringwald 
1419ca13daefSMatthias Ringwald /**
1420ca13daefSMatthias Ringwald  * @param con_handle
1421ca13daefSMatthias Ringwald  * @param all_phys
1422ca13daefSMatthias Ringwald  * @param tx_phys
1423ca13daefSMatthias Ringwald  * @param rx_phys
1424ca13daefSMatthias Ringwald  * @param phy_options
1425ca13daefSMatthias Ringwald  */
1426ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_phy = {
1427ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_PHY, "H1111"
1428ca13daefSMatthias Ringwald // LE PHY Update Complete is generated on completion
1429ca13daefSMatthias Ringwald };
1430ca13daefSMatthias Ringwald 
1431ca13daefSMatthias Ringwald 
143256042629SMatthias Ringwald #endif
1433a42798c3SMatthias Ringwald 
1434a42798c3SMatthias Ringwald // Broadcom / Cypress specific HCI commands
1435a42798c3SMatthias Ringwald 
1436a42798c3SMatthias Ringwald /**
1437067ecc36SMatthias Ringwald  * @brief Enable Wide-Band Speech / mSBC decoding for PCM
1438067ecc36SMatthias Ringwald  * @param enable_wbs is 0 for disable, 1 for enable
1439067ecc36SMatthias Ringwald  * @param uuid_wbs is 2 for EV2/EV3
1440067ecc36SMatthias Ringwald  */
1441067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_enable_wbs = {
1442067ecc36SMatthias Ringwald         HCI_OPCODE_HCI_BCM_ENABLE_WBS, "12"
1443067ecc36SMatthias Ringwald         // return: status
1444067ecc36SMatthias Ringwald };
1445067ecc36SMatthias Ringwald 
1446067ecc36SMatthias Ringwald /**
1447a42798c3SMatthias Ringwald  * @brief Configure SCO Routing (BCM)
1448a42798c3SMatthias Ringwald  * @param sco_routing is 0 for PCM, 1 for Transport, 2 for Codec and 3 for I2S
1449a42798c3SMatthias Ringwald  * @param pcm_interface_rate is 0 for 128KBps, 1 for 256 KBps, 2 for 512KBps, 3 for 1024KBps, and 4 for 2048Kbps
1450a42798c3SMatthias Ringwald  * @param frame_type is 0 for short and 1 for long
1451a42798c3SMatthias Ringwald  * @param sync_mode is 0 for slave and 1 for master
1452a42798c3SMatthias Ringwald  * @param clock_mode is 0 for slabe and 1 for master
1453a42798c3SMatthias Ringwald  */
1454a42798c3SMatthias Ringwald const hci_cmd_t hci_bcm_write_sco_pcm_int = {
1455ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_WRITE_SCO_PCM_INT, "11111"
1456a42798c3SMatthias Ringwald     // return: status
1457a42798c3SMatthias Ringwald };
1458eab6959fSMatthias Ringwald 
1459eab6959fSMatthias Ringwald /**
1460067ecc36SMatthias Ringwald  * @brief Configure the I2S/PCM interface (BCM)
1461067ecc36SMatthias Ringwald  * @param i2s_enable is 0 for off, 1 for on
1462067ecc36SMatthias Ringwald  * @param is_master is 0 for slave, is 1 for master
1463067ecc36SMatthias Ringwald  * @param sample_rate is 0 for 8 kHz, 1 for 16 kHz, 2 for 4 kHz
1464067ecc36SMatthias 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
1465067ecc36SMatthias Ringwald  * @param clock_mode is 0 for slabe and 1 for master
1466067ecc36SMatthias Ringwald  */
1467067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_write_i2spcm_interface_param = {
1468067ecc36SMatthias Ringwald         HCI_OPCODE_HCI_BCM_WRITE_I2SPCM_INTERFACE_PARAM, "1111"
1469067ecc36SMatthias Ringwald         // return: status
1470067ecc36SMatthias Ringwald };
1471067ecc36SMatthias Ringwald 
1472067ecc36SMatthias Ringwald 
1473067ecc36SMatthias Ringwald /**
1474eab6959fSMatthias Ringwald  * @brief Activates selected Sleep Mode
1475eab6959fSMatthias 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
1476eab6959fSMatthias Ringwald  * @param idle_threshold_host (modes 1,2,5,7) time until considered idle, unit roughly 300 ms
1477eab6959fSMatthias Ringwald  * @param idle_threshold_controller (modes 1-7,9) time until considered idle, unit roughly 300 ms
1478eab6959fSMatthias Ringwald  * @param bt_wake_active_mode (modes 1,2,7) 0 = BT_WAKE line is active high, 1 = BT_WAKE is active low
1479eab6959fSMatthias Ringwald  * @param host_wake_active_mode (modes 1,2,5,7) 0 = HOST_WAKE line is active high, 1 = HOST_WAKE is active low
1480eab6959fSMatthias Ringwald  * @param allow_host_sleep_during_sco (modes 1,2,3,5,7)
1481eab6959fSMatthias Ringwald  * @param combine_sleep_mode_and_lpm  (modes 1,2,3,5,7)
1482eab6959fSMatthias Ringwald  * @param enable_tristate_control_of_uart_tx_line (modes 1,2,7)
1483eab6959fSMatthias Ringwald  * @param active_connection_handling_on_suspend (modes 3,5)
1484eab6959fSMatthias Ringwald  * @param resume_timeout (modes 3,5)
1485eab6959fSMatthias Ringwald  * @param enable_break_to_host (mode 12)
1486eab6959fSMatthias Ringwald  * @param pulsed_host_wake (modes 1,12)
1487eab6959fSMatthias Ringwald  */
1488eab6959fSMatthias Ringwald const hci_cmd_t hci_bcm_set_sleep_mode = {
1489ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_SET_SLEEP_MODE, "111111111111"
1490eab6959fSMatthias Ringwald };
14915cdaddfaSMatthias Ringwald 
14925cdaddfaSMatthias Ringwald /**
14935cdaddfaSMatthias Ringwald  * @brief Set TX Power Table
14945cdaddfaSMatthias Ringwald  * @param is_le 0=classic, 1=LE
14955cdaddfaSMatthias Ringwald  * @param chip_max_tx_pwr_db chip level max TX power in dBM
14965cdaddfaSMatthias Ringwald  */
14975cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_write_tx_power_table = {
1498ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_WRITE_TX_POWER_TABLE, "11"
14995cdaddfaSMatthias Ringwald };
15005cdaddfaSMatthias Ringwald 
15015cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_set_tx_pwr = {
1502ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_SET_TX_PWR, "11H"
15035cdaddfaSMatthias Ringwald };
1504ba39ed56SMatthias Ringwald 
1505ba39ed56SMatthias Ringwald /**
1506ba39ed56SMatthias Ringwald  *
1507ba39ed56SMatthias Ringwald  *
1508ba39ed56SMatthias Ringwald  * @brief This command tests the RF transceiver in continuous transmission mode.
1509ba39ed56SMatthias Ringwald  *        The transmitter is activated by configuring the transmission parameters such as pattern,
1510ba39ed56SMatthias Ringwald  *        modulation, and frequency.
1511ba39ed56SMatthias Ringwald  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Con_TX.280xFD84.29
1512ba39ed56SMatthias Ringwald  * @param modulation
1513ba39ed56SMatthias Ringwald  * @param test_patern
1514ba39ed56SMatthias Ringwald  * @param frequency
1515ba39ed56SMatthias Ringwald  * @param power_level
1516ba39ed56SMatthias Ringwald  * @param reserved1
1517ba39ed56SMatthias Ringwald  * @param reserved2
1518ba39ed56SMatthias Ringwald  */
1519ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_con_tx = {
1520ba39ed56SMatthias Ringwald     0xFD84, "111144"
1521ba39ed56SMatthias Ringwald };
1522ba39ed56SMatthias Ringwald 
1523ba39ed56SMatthias Ringwald /**
1524ba39ed56SMatthias Ringwald  * @brief This command starts sending/receiving packets using packet transmission parameters such as
1525ba39ed56SMatthias Ringwald  *        frequency channel, packet type, and packet length. It is used for Packet TX/RX.
1526ba39ed56SMatthias Ringwald  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Packet_TX_RX_.280xFD85.29
1527ba39ed56SMatthias Ringwald  * @param frequency_mode
1528ba39ed56SMatthias Ringwald  * @param tx_single_frequency
1529ba39ed56SMatthias Ringwald  * @param rx_single_frequency
1530ba39ed56SMatthias Ringwald  * @param acl_packet_type
1531ba39ed56SMatthias Ringwald  * @paarm acl_packet_data_pattern
1532ba39ed56SMatthias Ringwald  * @param reserved
1533ba39ed56SMatthias Ringwald  * @param power_level
1534ba39ed56SMatthias Ringwald  * @param disable_whitening
1535ba39ed56SMatthias Ringwald  * @param prbs9_initialization_value
1536ba39ed56SMatthias Ringwald  */
1537ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_packet_tx_rx = {
1538ba39ed56SMatthias Ringwald     0xFD85, "1111112112"
1539ba39ed56SMatthias Ringwald };
1540365a7dd1SMatthias Ringwald 
1541733a7793SMatthias Ringwald 
1542733a7793SMatthias Ringwald /**
1543733a7793SMatthias Ringwald  * @param best effort access percentage
1544733a7793SMatthias Ringwald  * @param guaranteed access percentage
1545733a7793SMatthias Ringwald  * @param poll period
1546733a7793SMatthias Ringwald  * @param slave burst after tx
1547733a7793SMatthias Ringwald  * @param slave master search count
1548733a7793SMatthias Ringwald  * @param master burst after tx enable
1549733a7793SMatthias Ringwald  * @param master burst after rx limit
1550733a7793SMatthias Ringwald  */
1551*cf26f982SMatthias Ringwald const hci_cmd_t hci_ti_configure_ddip = {
1552733a7793SMatthias Ringwald         HCI_OPCODE_HCI_TI_VS_CONFIGURE_DDIP, "1111111"
1553733a7793SMatthias Ringwald };
1554733a7793SMatthias Ringwald 
1555365a7dd1SMatthias Ringwald /**
1556365a7dd1SMatthias Ringwald  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
1557365a7dd1SMatthias Ringwald  * @param enable 0=disable, 1=enable
1558365a7dd1SMatthias Ringwald  * @param a3dp_role (NL5500, WL128x only) 0=source,1=sink
1559365a7dd1SMatthias Ringwald  * @param code_upload (NL5500, WL128x only) 0=do not load a3dp code, 1=load a3dp code
1560365a7dd1SMatthias Ringwald  * @param reserved for future use
1561365a7dd1SMatthias Ringwald  */
1562365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_avrp_enable = {
1563365a7dd1SMatthias Ringwald         0xFD92, "1112"
1564365a7dd1SMatthias Ringwald };
1565365a7dd1SMatthias Ringwald 
1566365a7dd1SMatthias Ringwald /**
1567365a7dd1SMatthias Ringwald  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
1568365a7dd1SMatthias Ringwald  * @param acl_con_handle
1569365a7dd1SMatthias Ringwald  */
1570365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_associate = {
1571365a7dd1SMatthias Ringwald         0xFD78, "H"
1572365a7dd1SMatthias Ringwald };
1573365a7dd1SMatthias Ringwald 
1574365a7dd1SMatthias Ringwald /**
1575365a7dd1SMatthias Ringwald  * @brief This command is used to disassociate Wide Band Speech configuration from any ACL handle.
1576365a7dd1SMatthias Ringwald  */
1577365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_disassociate = {
1578365a7dd1SMatthias Ringwald         0xFD79, ""
1579365a7dd1SMatthias Ringwald };
1580365a7dd1SMatthias Ringwald 
1581365a7dd1SMatthias Ringwald /**
1582365a7dd1SMatthias Ringwald  * @brief This command configures the codec interface parameters and the PCM clock rate, which is relevant when
1583365a7dd1SMatthias Ringwald           the Bluetooth core generates the clock. This command must be used by the host to use the PCM
1584365a7dd1SMatthias Ringwald           interface.
1585365a7dd1SMatthias Ringwald  * @param clock_rate in kHz
1586365a7dd1SMatthias Ringwald  * @param clock_direction 0=master/output, 1=slave/input
1587365a7dd1SMatthias Ringwald  * @param frame_sync_frequency in Hz
1588365a7dd1SMatthias Ringwald  * @param frame_sync_duty_cycle 0=50% (I2S Format), 0x0001-0xffff number of cycles of PCM clock
1589365a7dd1SMatthias Ringwald  * @param frame_sync_edge 0=driven/sampled at rising edge, 1=driven/sampled at falling edge of PCM clock
1590365a7dd1SMatthias Ringwald  * @param frame_sync_polariy 0=active high, 1=active low
1591365a7dd1SMatthias Ringwald  * @param reserved1
1592365a7dd1SMatthias Ringwald  * @param channel_1_data_out_size sample size in bits
1593365a7dd1SMatthias Ringwald  * @param channel_1_data_out_offset number of PCM clock cycles between rising of frame sync and data start
1594365a7dd1SMatthias Ringwald  * @param channel_1_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
1595365a7dd1SMatthias Ringwald  * @param channel_1_data_in_size sample size in bits
1596365a7dd1SMatthias Ringwald  * @param channel_1_data_in_offset number of PCM clock cycles between rising of frame sync and data start
1597365a7dd1SMatthias Ringwald  * @param channel_1_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
1598365a7dd1SMatthias Ringwald  * @param fsync_multiplier this field is only relevant to CC256XB from service pack 0.2 !!! -> use 0x00
1599365a7dd1SMatthias Ringwald  * @param channel_2_data_out_size sample size in bits
1600365a7dd1SMatthias Ringwald  * @param channel_2_data_out_offset number of PCM clock cycles between rising of frame sync and data start
1601365a7dd1SMatthias Ringwald  * @param channel_2_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
1602365a7dd1SMatthias Ringwald  * @param channel_2_data_in_size sample size in bits
1603365a7dd1SMatthias Ringwald  * @param channel_2_data_in_offset number of PCM clock cycles between rising of frame sync and data start
1604365a7dd1SMatthias Ringwald  * @param channel_2_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
1605365a7dd1SMatthias Ringwald  * @param reserved2
1606365a7dd1SMatthias Ringwald  *
1607365a7dd1SMatthias Ringwald  */
1608365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_write_codec_config = {
1609365a7dd1SMatthias Ringwald         0xFD06, "214211122122112212211"
1610365a7dd1SMatthias Ringwald };
1611