xref: /btstack/src/hci_cmd.c (revision 50fe3a99b5e1a677476696ecf28f296797c344ca)
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 "classic/sdp_util.h"
4956042629SMatthias Ringwald #include "hci.h"
5056042629SMatthias Ringwald #include "hci_cmd.h"
51f9f2075cSMatthias Ringwald #include "btstack_debug.h"
5256042629SMatthias Ringwald 
5356042629SMatthias Ringwald #include <string.h>
5456042629SMatthias Ringwald 
5556042629SMatthias Ringwald // calculate combined ogf/ocf value
565efd5011SMatthias Ringwald #define OPCODE(ogf, ocf) ((ocf) | ((ogf) << 10))
5756042629SMatthias Ringwald 
5856042629SMatthias Ringwald /**
5956042629SMatthias Ringwald  * construct HCI Command based on template
6056042629SMatthias Ringwald  *
6156042629SMatthias Ringwald  * Format:
6256042629SMatthias Ringwald  *   1,2,3,4: one to four byte value
6356042629SMatthias Ringwald  *   H: HCI connection handle
6456042629SMatthias Ringwald  *   B: Bluetooth Baseband Address (BD_ADDR)
6556042629SMatthias Ringwald  *   D: 8 byte data block
6656042629SMatthias Ringwald  *   E: Extended Inquiry Result
6756042629SMatthias Ringwald  *   N: Name up to 248 chars, \0 terminated
68237daac5SMatthias Ringwald  *   P: 16 byte data block. Pairing code, Simple Pairing Hash and Randomizer
6956042629SMatthias Ringwald  *   A: 31 bytes advertising data
7056042629SMatthias Ringwald  *   S: Service Record (Data Element Sequence)
7182180fcaSMatthias Ringwald  *   Q: 32 byte data block, e.g. for X and Y coordinates of P-256 public key
7256042629SMatthias Ringwald  */
7356042629SMatthias Ringwald uint16_t hci_cmd_create_from_template(uint8_t *hci_cmd_buffer, const hci_cmd_t *cmd, va_list argptr){
7456042629SMatthias Ringwald 
754ea43905SMatthias Ringwald     hci_cmd_buffer[0] = cmd->opcode & 0xffu;
7656042629SMatthias Ringwald     hci_cmd_buffer[1] = cmd->opcode >> 8;
7756042629SMatthias Ringwald     int pos = 3;
7856042629SMatthias Ringwald 
7956042629SMatthias Ringwald     const char *format = cmd->format;
8056042629SMatthias Ringwald     uint16_t word;
8156042629SMatthias Ringwald     uint32_t longword;
8256042629SMatthias Ringwald     uint8_t * ptr;
8356042629SMatthias Ringwald     while (*format) {
8456042629SMatthias Ringwald         switch(*format) {
8556042629SMatthias Ringwald             case '1': //  8 bit value
8656042629SMatthias Ringwald             case '2': // 16 bit value
8756042629SMatthias Ringwald             case 'H': // hci_handle
8856042629SMatthias Ringwald                 word = va_arg(argptr, int);  // minimal va_arg is int: 2 bytes on 8+16 bit CPUs
894ea43905SMatthias Ringwald                 hci_cmd_buffer[pos++] = word & 0xffu;
9056042629SMatthias Ringwald                 if (*format == '2') {
9156042629SMatthias Ringwald                     hci_cmd_buffer[pos++] = word >> 8;
9256042629SMatthias Ringwald                 } else if (*format == 'H') {
9356042629SMatthias Ringwald                     // TODO implement opaque client connection handles
9456042629SMatthias Ringwald                     //      pass module handle for now
9556042629SMatthias Ringwald                     hci_cmd_buffer[pos++] = word >> 8;
9656042629SMatthias Ringwald                 }
9756042629SMatthias Ringwald                 break;
9856042629SMatthias Ringwald             case '3':
9956042629SMatthias Ringwald             case '4':
10056042629SMatthias Ringwald                 longword = va_arg(argptr, uint32_t);
10156042629SMatthias Ringwald                 // longword = va_arg(argptr, int);
10256042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword;
10356042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 8;
10456042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 16;
10556042629SMatthias Ringwald                 if (*format == '4'){
10656042629SMatthias Ringwald                     hci_cmd_buffer[pos++] = longword >> 24;
10756042629SMatthias Ringwald                 }
10856042629SMatthias Ringwald                 break;
10956042629SMatthias Ringwald             case 'B': // bt-addr
11056042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
11156042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[5];
11256042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[4];
11356042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[3];
11456042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[2];
11556042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[1];
11656042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[0];
11756042629SMatthias Ringwald                 break;
11856042629SMatthias Ringwald             case 'D': // 8 byte data block
11956042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1206535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 8);
12156042629SMatthias Ringwald                 pos += 8;
12256042629SMatthias Ringwald                 break;
12356042629SMatthias Ringwald             case 'E': // Extended Inquiry Information 240 octets
12456042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1256535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 240);
12656042629SMatthias Ringwald                 pos += 240;
12756042629SMatthias Ringwald                 break;
12856042629SMatthias Ringwald             case 'N': { // UTF-8 string, null terminated
12956042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
13056042629SMatthias Ringwald                 uint16_t len = strlen((const char*) ptr);
1314ea43905SMatthias Ringwald                 if (len > 248u) {
13256042629SMatthias Ringwald                     len = 248;
13356042629SMatthias Ringwald                 }
1346535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, len);
1354ea43905SMatthias Ringwald                 if (len < 248u) {
13656042629SMatthias Ringwald                     // fill remaining space with zeroes
1374ea43905SMatthias Ringwald                     memset(&hci_cmd_buffer[pos+len], 0u, 248u-len);
13856042629SMatthias Ringwald                 }
13956042629SMatthias Ringwald                 pos += 248;
14056042629SMatthias Ringwald                 break;
14156042629SMatthias Ringwald             }
142bb75dd7dSMatthias Ringwald             case 'P': // 16 byte PIN code or link key in little endian
14356042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1446535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 16);
14556042629SMatthias Ringwald                 pos += 16;
14656042629SMatthias Ringwald                 break;
147a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE
14856042629SMatthias Ringwald             case 'A': // 31 bytes advertising data
14956042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1506535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 31);
15156042629SMatthias Ringwald                 pos += 31;
15256042629SMatthias Ringwald                 break;
15356042629SMatthias Ringwald #endif
154a9a4c409SMatthias Ringwald #ifdef ENABLE_SDP
15556042629SMatthias Ringwald             case 'S': { // Service Record (Data Element Sequence)
15656042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
15756042629SMatthias Ringwald                 uint16_t len = de_get_len(ptr);
1586535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, len);
15956042629SMatthias Ringwald                 pos += len;
16056042629SMatthias Ringwald                 break;
16156042629SMatthias Ringwald             }
16256042629SMatthias Ringwald #endif
16382180fcaSMatthias Ringwald #ifdef ENABLE_LE_SECURE_CONNECTIONS
16482180fcaSMatthias Ringwald             case 'Q':
16582180fcaSMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
16682180fcaSMatthias Ringwald                 reverse_bytes(ptr, &hci_cmd_buffer[pos], 32);
16782180fcaSMatthias Ringwald                 pos += 32;
16882180fcaSMatthias Ringwald                 break;
16982180fcaSMatthias Ringwald #endif
170bb75dd7dSMatthias Ringwald             case 'K':   // 16 byte OOB Data or Link Key in big endian
171bb75dd7dSMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
172bb75dd7dSMatthias Ringwald                 reverse_bytes(ptr, &hci_cmd_buffer[pos], 16);
173bb75dd7dSMatthias Ringwald                 pos += 16;
174bb75dd7dSMatthias Ringwald                 break;
17556042629SMatthias Ringwald             default:
17656042629SMatthias Ringwald                 break;
17756042629SMatthias Ringwald         }
17856042629SMatthias Ringwald         format++;
17956042629SMatthias Ringwald     };
18056042629SMatthias Ringwald     hci_cmd_buffer[2] = pos - 3;
18156042629SMatthias Ringwald     return pos;
18256042629SMatthias Ringwald }
18356042629SMatthias Ringwald 
18456042629SMatthias Ringwald /**
18556042629SMatthias Ringwald  *  Link Control Commands
18656042629SMatthias Ringwald  */
18756042629SMatthias Ringwald 
18856042629SMatthias Ringwald /**
18956042629SMatthias Ringwald  * @param lap
19056042629SMatthias Ringwald  * @param inquiry_length
19156042629SMatthias Ringwald  * @param num_responses
19256042629SMatthias Ringwald  */
19356042629SMatthias Ringwald const hci_cmd_t hci_inquiry = {
194ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_INQUIRY, "311"
19556042629SMatthias Ringwald };
19656042629SMatthias Ringwald 
19756042629SMatthias Ringwald /**
19856042629SMatthias Ringwald  */
19956042629SMatthias Ringwald const hci_cmd_t hci_inquiry_cancel = {
200ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_INQUIRY_CANCEL, ""
20156042629SMatthias Ringwald };
20256042629SMatthias Ringwald 
20356042629SMatthias Ringwald /**
20456042629SMatthias Ringwald  * @param bd_addr
20556042629SMatthias Ringwald  * @param packet_type
20656042629SMatthias Ringwald  * @param page_scan_repetition_mode
20756042629SMatthias Ringwald  * @param reserved
20856042629SMatthias Ringwald  * @param clock_offset
20956042629SMatthias Ringwald  * @param allow_role_switch
21056042629SMatthias Ringwald  */
21156042629SMatthias Ringwald const hci_cmd_t hci_create_connection = {
212ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CREATE_CONNECTION, "B21121"
21356042629SMatthias Ringwald };
21456042629SMatthias Ringwald 
21556042629SMatthias Ringwald /**
21656042629SMatthias Ringwald  * @param handle
21756042629SMatthias Ringwald  * @param reason (0x05, 0x13-0x15, 0x1a, 0x29, see Errors Codes in BT Spec Part D)
21856042629SMatthias Ringwald  */
21956042629SMatthias Ringwald const hci_cmd_t hci_disconnect = {
220ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_DISCONNECT, "H1"
22156042629SMatthias Ringwald };
22256042629SMatthias Ringwald 
22356042629SMatthias Ringwald /**
22456042629SMatthias Ringwald  * @param bd_addr
22556042629SMatthias Ringwald  */
22656042629SMatthias Ringwald const hci_cmd_t hci_create_connection_cancel = {
227ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CREATE_CONNECTION_CANCEL, "B"
22856042629SMatthias Ringwald };
22956042629SMatthias Ringwald 
23056042629SMatthias Ringwald /**
23156042629SMatthias Ringwald  * @param bd_addr
23256042629SMatthias Ringwald  * @param role (become master, stay slave)
23356042629SMatthias Ringwald  */
23456042629SMatthias Ringwald const hci_cmd_t hci_accept_connection_request = {
235ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ACCEPT_CONNECTION_REQUEST, "B1"
23656042629SMatthias Ringwald };
23756042629SMatthias Ringwald 
23856042629SMatthias Ringwald /**
23956042629SMatthias Ringwald  * @param bd_addr
24056042629SMatthias Ringwald  * @param reason (e.g. CONNECTION REJECTED DUE TO LIMITED RESOURCES (0x0d))
24156042629SMatthias Ringwald  */
24256042629SMatthias Ringwald const hci_cmd_t hci_reject_connection_request = {
243ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REJECT_CONNECTION_REQUEST, "B1"
24456042629SMatthias Ringwald };
24556042629SMatthias Ringwald 
24656042629SMatthias Ringwald /**
24756042629SMatthias Ringwald  * @param bd_addr
24856042629SMatthias Ringwald  * @param link_key
24956042629SMatthias Ringwald  */
25056042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_reply = {
251ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LINK_KEY_REQUEST_REPLY, "BP"
25256042629SMatthias Ringwald };
25356042629SMatthias Ringwald 
25456042629SMatthias Ringwald /**
25556042629SMatthias Ringwald  * @param bd_addr
25656042629SMatthias Ringwald  */
25756042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_negative_reply = {
258ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY, "B"
25956042629SMatthias Ringwald };
26056042629SMatthias Ringwald 
26156042629SMatthias Ringwald /**
26256042629SMatthias Ringwald  * @param bd_addr
26356042629SMatthias Ringwald  * @param pin_length
26456042629SMatthias Ringwald  * @param pin (c-string)
26556042629SMatthias Ringwald  */
26656042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_reply = {
267ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_PIN_CODE_REQUEST_REPLY, "B1P"
26856042629SMatthias Ringwald };
26956042629SMatthias Ringwald 
27056042629SMatthias Ringwald /**
27156042629SMatthias Ringwald  * @param bd_addr
27256042629SMatthias Ringwald  */
27356042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_negative_reply = {
274ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY, "B"
27556042629SMatthias Ringwald };
27656042629SMatthias Ringwald 
27756042629SMatthias Ringwald /**
27856042629SMatthias Ringwald  * @param handle
27956042629SMatthias Ringwald  * @param packet_type
28056042629SMatthias Ringwald  */
28156042629SMatthias Ringwald const hci_cmd_t hci_change_connection_packet_type = {
282ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CHANGE_CONNECTION_PACKET_TYPE, "H2"
28356042629SMatthias Ringwald };
28456042629SMatthias Ringwald 
28556042629SMatthias Ringwald /**
28656042629SMatthias Ringwald  * @param handle
28756042629SMatthias Ringwald  */
28856042629SMatthias Ringwald const hci_cmd_t hci_authentication_requested = {
289ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_AUTHENTICATION_REQUESTED, "H"
29056042629SMatthias Ringwald };
29156042629SMatthias Ringwald 
29256042629SMatthias Ringwald /**
29356042629SMatthias Ringwald  * @param handle
29456042629SMatthias Ringwald  * @param encryption_enable
29556042629SMatthias Ringwald  */
29656042629SMatthias Ringwald const hci_cmd_t hci_set_connection_encryption = {
297ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_CONNECTION_ENCRYPTION, "H1"
29856042629SMatthias Ringwald };
29956042629SMatthias Ringwald 
30056042629SMatthias Ringwald /**
30156042629SMatthias Ringwald  * @param handle
30256042629SMatthias Ringwald  */
30356042629SMatthias Ringwald const hci_cmd_t hci_change_connection_link_key = {
304ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CHANGE_CONNECTION_LINK_KEY, "H"
30556042629SMatthias Ringwald };
30656042629SMatthias Ringwald 
30756042629SMatthias Ringwald /**
30856042629SMatthias Ringwald  * @param bd_addr
30956042629SMatthias Ringwald  * @param page_scan_repetition_mode
31056042629SMatthias Ringwald  * @param reserved
31156042629SMatthias Ringwald  * @param clock_offset
31256042629SMatthias Ringwald  */
31356042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request = {
314ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_NAME_REQUEST, "B112"
31556042629SMatthias Ringwald };
31656042629SMatthias Ringwald 
31756042629SMatthias Ringwald 
31856042629SMatthias Ringwald /**
31956042629SMatthias Ringwald  * @param bd_addr
32056042629SMatthias Ringwald  */
32156042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request_cancel = {
322ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_NAME_REQUEST_CANCEL, "B"
32356042629SMatthias Ringwald };
32456042629SMatthias Ringwald 
32556042629SMatthias Ringwald  /**
32656042629SMatthias Ringwald  * @param handle
32756042629SMatthias Ringwald  */
32856042629SMatthias Ringwald const hci_cmd_t hci_read_remote_supported_features_command = {
329ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND, "H"
3308b22c04dSMatthias Ringwald };
3318b22c04dSMatthias Ringwald 
3328b22c04dSMatthias Ringwald /**
333d5057706SMatthias Ringwald * @param handle
334d5057706SMatthias Ringwald */
335d5057706SMatthias Ringwald const hci_cmd_t hci_read_remote_extended_features_command = {
336ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND, "H1"
337d5057706SMatthias Ringwald };
338d5057706SMatthias Ringwald 
339d5057706SMatthias Ringwald /**
3408b22c04dSMatthias Ringwald  * @param handle
3418b22c04dSMatthias Ringwald  */
3428b22c04dSMatthias Ringwald const hci_cmd_t hci_read_remote_version_information = {
343ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_VERSION_INFORMATION, "H"
34456042629SMatthias Ringwald };
34556042629SMatthias Ringwald 
34656042629SMatthias Ringwald /**
34756042629SMatthias Ringwald  * @param handle
34856042629SMatthias Ringwald  * @param transmit_bandwidth 8000(64kbps)
34956042629SMatthias Ringwald  * @param receive_bandwidth  8000(64kbps)
35056042629SMatthias Ringwald  * @param max_latency        >= 7ms for eSCO, 0xFFFF do not care
35156042629SMatthias Ringwald  * @param voice_settings     e.g. CVSD, Input Coding: Linear, Input Data Format: 2’s complement, data 16bit: 00011000000 == 0x60
35256042629SMatthias Ringwald  * @param retransmission_effort  e.g. 0xFF do not care
35356042629SMatthias Ringwald  * @param packet_type        at least EV3 for eSCO
35456042629SMatthias Ringwald  */
35556042629SMatthias Ringwald const hci_cmd_t hci_setup_synchronous_connection = {
356ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SETUP_SYNCHRONOUS_CONNECTION, "H442212"
35756042629SMatthias Ringwald };
35856042629SMatthias Ringwald 
35956042629SMatthias Ringwald /**
36056042629SMatthias Ringwald  * @param bd_addr
36156042629SMatthias Ringwald  * @param transmit_bandwidth
36256042629SMatthias Ringwald  * @param receive_bandwidth
36356042629SMatthias Ringwald  * @param max_latency
36456042629SMatthias Ringwald  * @param voice_settings
36556042629SMatthias Ringwald  * @param retransmission_effort
36656042629SMatthias Ringwald  * @param packet_type
36756042629SMatthias Ringwald  */
36856042629SMatthias Ringwald const hci_cmd_t hci_accept_synchronous_connection = {
369ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ACCEPT_SYNCHRONOUS_CONNECTION, "B442212"
37056042629SMatthias Ringwald };
37156042629SMatthias Ringwald 
37256042629SMatthias Ringwald /**
37356042629SMatthias Ringwald  * @param bd_addr
37456042629SMatthias Ringwald  * @param IO_capability
37556042629SMatthias Ringwald  * @param OOB_data_present
37656042629SMatthias Ringwald  * @param authentication_requirements
37756042629SMatthias Ringwald  */
37856042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_reply = {
379ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_REPLY, "B111"
38056042629SMatthias Ringwald };
38156042629SMatthias Ringwald 
38256042629SMatthias Ringwald /**
38356042629SMatthias Ringwald  * @param bd_addr
38456042629SMatthias Ringwald  */
38556042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_reply = {
386ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_REPLY, "B"
38756042629SMatthias Ringwald };
38856042629SMatthias Ringwald 
38956042629SMatthias Ringwald /**
39056042629SMatthias Ringwald  * @param bd_addr
39156042629SMatthias Ringwald  */
39256042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_negative_reply = {
393ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY, "B"
39456042629SMatthias Ringwald };
39556042629SMatthias Ringwald 
39656042629SMatthias Ringwald /**
39756042629SMatthias Ringwald  * @param bd_addr
39856042629SMatthias Ringwald  * @param numeric_value
39956042629SMatthias Ringwald  */
40056042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_reply = {
401ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_REPLY, "B4"
40256042629SMatthias Ringwald };
40356042629SMatthias Ringwald 
40456042629SMatthias Ringwald /**
40556042629SMatthias Ringwald  * @param bd_addr
40656042629SMatthias Ringwald  */
40756042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_negative_reply = {
408ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY, "B"
40956042629SMatthias Ringwald };
41056042629SMatthias Ringwald 
41156042629SMatthias Ringwald /**
41256042629SMatthias Ringwald  * @param bd_addr
413237daac5SMatthias Ringwald  * @param c Simple Pairing Hash C
414237daac5SMatthias Ringwald  * @param r Simple Pairing Randomizer R
415237daac5SMatthias Ringwald  */
416237daac5SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_reply = {
417bb75dd7dSMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_REPLY, "BKK"
418237daac5SMatthias Ringwald };
419237daac5SMatthias Ringwald 
420237daac5SMatthias Ringwald /**
421237daac5SMatthias Ringwald  * @param bd_addr
42256042629SMatthias Ringwald  */
42356042629SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_negative_reply = {
424ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY, "B"
42556042629SMatthias Ringwald };
42656042629SMatthias Ringwald 
42756042629SMatthias Ringwald /**
42856042629SMatthias Ringwald  * @param bd_addr
42956042629SMatthias Ringwald  * @param reason (Part D, Error codes)
43056042629SMatthias Ringwald  */
43156042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_negative_reply = {
432ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY, "B1"
43356042629SMatthias Ringwald };
43456042629SMatthias Ringwald 
43556042629SMatthias Ringwald /**
43656042629SMatthias Ringwald  * @param handle
43756042629SMatthias Ringwald  * @param transmit_bandwidth
43856042629SMatthias Ringwald  * @param receive_bandwidth
43956042629SMatthias Ringwald  * @param transmit_coding_format_type
44056042629SMatthias Ringwald  * @param transmit_coding_format_company
44156042629SMatthias Ringwald  * @param transmit_coding_format_codec
44256042629SMatthias Ringwald  * @param receive_coding_format_type
44356042629SMatthias Ringwald  * @param receive_coding_format_company
44456042629SMatthias Ringwald  * @param receive_coding_format_codec
44556042629SMatthias Ringwald  * @param transmit_coding_frame_size
44656042629SMatthias Ringwald  * @param receive_coding_frame_size
44756042629SMatthias Ringwald  * @param input_bandwidth
44856042629SMatthias Ringwald  * @param output_bandwidth
44956042629SMatthias Ringwald  * @param input_coding_format_type
45056042629SMatthias Ringwald  * @param input_coding_format_company
45156042629SMatthias Ringwald  * @param input_coding_format_codec
45256042629SMatthias Ringwald  * @param output_coding_format_type
45356042629SMatthias Ringwald  * @param output_coding_format_company
45456042629SMatthias Ringwald  * @param output_coding_format_codec
45556042629SMatthias Ringwald  * @param input_coded_data_size
45656042629SMatthias Ringwald  * @param outupt_coded_data_size
45756042629SMatthias Ringwald  * @param input_pcm_data_format
45856042629SMatthias Ringwald  * @param output_pcm_data_format
45956042629SMatthias Ringwald  * @param input_pcm_sample_payload_msb_position
46056042629SMatthias Ringwald  * @param output_pcm_sample_payload_msb_position
46156042629SMatthias Ringwald  * @param input_data_path
46256042629SMatthias Ringwald  * @param output_data_path
46356042629SMatthias Ringwald  * @param input_transport_unit_size
46456042629SMatthias Ringwald  * @param output_transport_unit_size
46556042629SMatthias Ringwald  * @param max_latency
46656042629SMatthias Ringwald  * @param packet_type
46756042629SMatthias Ringwald  * @param retransmission_effort
46856042629SMatthias Ringwald  */
46956042629SMatthias Ringwald const hci_cmd_t hci_enhanced_setup_synchronous_connection = {
470ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION, "H4412212222441221222211111111221"
47156042629SMatthias Ringwald };
47256042629SMatthias Ringwald 
47356042629SMatthias Ringwald /**
47456042629SMatthias Ringwald  * @param bd_addr
47556042629SMatthias Ringwald  * @param transmit_bandwidth
47656042629SMatthias Ringwald  * @param receive_bandwidth
47756042629SMatthias Ringwald  * @param transmit_coding_format_type
47856042629SMatthias Ringwald  * @param transmit_coding_format_company
47956042629SMatthias Ringwald  * @param transmit_coding_format_codec
48056042629SMatthias Ringwald  * @param receive_coding_format_type
48156042629SMatthias Ringwald  * @param receive_coding_format_company
48256042629SMatthias Ringwald  * @param receive_coding_format_codec
48356042629SMatthias Ringwald  * @param transmit_coding_frame_size
48456042629SMatthias Ringwald  * @param receive_coding_frame_size
48556042629SMatthias Ringwald  * @param input_bandwidth
48656042629SMatthias Ringwald  * @param output_bandwidth
48756042629SMatthias Ringwald  * @param input_coding_format_type
48856042629SMatthias Ringwald  * @param input_coding_format_company
48956042629SMatthias Ringwald  * @param input_coding_format_codec
49056042629SMatthias Ringwald  * @param output_coding_format_type
49156042629SMatthias Ringwald  * @param output_coding_format_company
49256042629SMatthias Ringwald  * @param output_coding_format_codec
49356042629SMatthias Ringwald  * @param input_coded_data_size
49456042629SMatthias Ringwald  * @param outupt_coded_data_size
49556042629SMatthias Ringwald  * @param input_pcm_data_format
49656042629SMatthias Ringwald  * @param output_pcm_data_format
49756042629SMatthias Ringwald  * @param input_pcm_sample_payload_msb_position
49856042629SMatthias Ringwald  * @param output_pcm_sample_payload_msb_position
49956042629SMatthias Ringwald  * @param input_data_path
50056042629SMatthias Ringwald  * @param output_data_path
50156042629SMatthias Ringwald  * @param input_transport_unit_size
50256042629SMatthias Ringwald  * @param output_transport_unit_size
50356042629SMatthias Ringwald  * @param max_latency
50456042629SMatthias Ringwald  * @param packet_type
50556042629SMatthias Ringwald  * @param retransmission_effort
50656042629SMatthias Ringwald  */
50756042629SMatthias Ringwald const hci_cmd_t hci_enhanced_accept_synchronous_connection = {
508ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION, "B4412212222441221222211111111221"
50956042629SMatthias Ringwald };
51056042629SMatthias Ringwald 
51156042629SMatthias Ringwald /**
512bb75dd7dSMatthias Ringwald  * @param bd_addr
513bb75dd7dSMatthias Ringwald  * @param c_192 Simple Pairing Hash C derived from P-192 public key
514bb75dd7dSMatthias Ringwald  * @param r_192 Simple Pairing Randomizer derived from P-192 public key
515bb75dd7dSMatthias Ringwald  * @param c_256 Simple Pairing Hash C derived from P-256 public key
516bb75dd7dSMatthias Ringwald  * @param r_256 Simple Pairing Randomizer derived from P-256 public key
517bb75dd7dSMatthias Ringwald  */
518bb75dd7dSMatthias Ringwald const hci_cmd_t hci_remote_oob_extended_data_request_reply = {
519bb75dd7dSMatthias Ringwald         HCI_OPCODE_HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY, "BKKKK"
520bb75dd7dSMatthias Ringwald };
521bb75dd7dSMatthias Ringwald 
522bb75dd7dSMatthias Ringwald /**
52356042629SMatthias Ringwald  *  Link Policy Commands
52456042629SMatthias Ringwald  */
52556042629SMatthias Ringwald 
52656042629SMatthias Ringwald /**
52756042629SMatthias Ringwald  * @param handle
52856042629SMatthias Ringwald  * @param sniff_max_interval
52956042629SMatthias Ringwald  * @param sniff_min_interval
53056042629SMatthias Ringwald  * @param sniff_attempt
53156042629SMatthias Ringwald  * @param sniff_timeout
53256042629SMatthias Ringwald  */
53356042629SMatthias Ringwald const hci_cmd_t hci_sniff_mode = {
534ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SNIFF_MODE, "H2222"
53556042629SMatthias Ringwald };
53656042629SMatthias Ringwald 
53756042629SMatthias Ringwald /**
53856042629SMatthias Ringwald  * @param handle
5397cd21895SMatthias Ringwald  */
5407cd21895SMatthias Ringwald const hci_cmd_t hci_exit_sniff_mode = {
541ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_EXIT_SNIFF_MODE, "H"
5427cd21895SMatthias Ringwald };
5437cd21895SMatthias Ringwald 
5447cd21895SMatthias Ringwald /**
5457cd21895SMatthias Ringwald  * @param handle
54656042629SMatthias Ringwald  * @param flags
54756042629SMatthias Ringwald  * @param service_type
54856042629SMatthias Ringwald  * @param token_rate (bytes/s)
54956042629SMatthias Ringwald  * @param peak_bandwith (bytes/s)
55056042629SMatthias Ringwald  * @param latency (us)
55156042629SMatthias Ringwald  * @param delay_variation (us)
55256042629SMatthias Ringwald  */
55356042629SMatthias Ringwald const hci_cmd_t hci_qos_setup = {
554ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_QOS_SETUP, "H114444"
55556042629SMatthias Ringwald };
55656042629SMatthias Ringwald 
55756042629SMatthias Ringwald /**
55856042629SMatthias Ringwald  * @param handle
55956042629SMatthias Ringwald  */
56056042629SMatthias Ringwald const hci_cmd_t hci_role_discovery = {
561ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ROLE_DISCOVERY, "H"
56256042629SMatthias Ringwald };
56356042629SMatthias Ringwald 
56456042629SMatthias Ringwald /**
56556042629SMatthias Ringwald  * @param bd_addr
56656042629SMatthias Ringwald  * @param role (0=master,1=slave)
56756042629SMatthias Ringwald  */
56856042629SMatthias Ringwald const hci_cmd_t hci_switch_role_command= {
569ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SWITCH_ROLE_COMMAND, "B1"
57056042629SMatthias Ringwald };
57156042629SMatthias Ringwald 
57256042629SMatthias Ringwald /**
57356042629SMatthias Ringwald  * @param handle
57456042629SMatthias Ringwald  */
57556042629SMatthias Ringwald const hci_cmd_t hci_read_link_policy_settings = {
576ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LINK_POLICY_SETTINGS, "H"
57756042629SMatthias Ringwald };
57856042629SMatthias Ringwald 
57956042629SMatthias Ringwald /**
58056042629SMatthias Ringwald  * @param handle
58156042629SMatthias Ringwald  * @param settings
58256042629SMatthias Ringwald  */
58356042629SMatthias Ringwald const hci_cmd_t hci_write_link_policy_settings = {
584ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LINK_POLICY_SETTINGS, "H2"
58556042629SMatthias Ringwald };
58656042629SMatthias Ringwald 
587c4c88f1bSJakob Krantz /**
58832e2f27fSMatthias Ringwald  * @param handle
58932e2f27fSMatthias Ringwald  * @param max_latency
59032e2f27fSMatthias Ringwald  * @param min_remote_timeout
59132e2f27fSMatthias Ringwald  * @param min_local_timeout
59232e2f27fSMatthias Ringwald  */
59332e2f27fSMatthias Ringwald const hci_cmd_t hci_sniff_subrating = {
594*50fe3a99SMilanka Ringwald         HCI_OPCODE_HCI_SNIFF_SUBRATING, "H222"
59532e2f27fSMatthias Ringwald };
59632e2f27fSMatthias Ringwald 
59732e2f27fSMatthias Ringwald /**
598c4c88f1bSJakob Krantz  * @param policy
599c4c88f1bSJakob Krantz  */
60053138e7aSMatthias Ringwald const hci_cmd_t hci_write_default_link_policy_setting = {
601ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_DEFAULT_LINK_POLICY_SETTING, "2"
602c4c88f1bSJakob Krantz };
603c4c88f1bSJakob Krantz 
60456042629SMatthias Ringwald 
60556042629SMatthias Ringwald /**
60656042629SMatthias Ringwald  *  Controller & Baseband Commands
60756042629SMatthias Ringwald  */
60856042629SMatthias Ringwald 
6099119d792SMilanka Ringwald 
61056042629SMatthias Ringwald /**
61156042629SMatthias Ringwald  * @param event_mask_lover_octets
61256042629SMatthias Ringwald  * @param event_mask_higher_octets
61356042629SMatthias Ringwald  */
61456042629SMatthias Ringwald const hci_cmd_t hci_set_event_mask = {
615ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_EVENT_MASK, "44"
61656042629SMatthias Ringwald };
61756042629SMatthias Ringwald 
61856042629SMatthias Ringwald /**
61956042629SMatthias Ringwald  */
62056042629SMatthias Ringwald const hci_cmd_t hci_reset = {
621ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_RESET, ""
62256042629SMatthias Ringwald };
62356042629SMatthias Ringwald 
62456042629SMatthias Ringwald /**
625e49d496aSMatthias Ringwald  * @param handle
626e49d496aSMatthias Ringwald  */
627e49d496aSMatthias Ringwald const hci_cmd_t hci_flush = {
628ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_FLUSH, "H"
6299af39d9fSMatthias Ringwald };
6309af39d9fSMatthias Ringwald 
6319af39d9fSMatthias Ringwald /**
6329af39d9fSMatthias Ringwald  * @param handle
6339af39d9fSMatthias Ringwald  */
6349af39d9fSMatthias Ringwald const hci_cmd_t hci_read_pin_type = {
635ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PIN_TYPE, ""
6369af39d9fSMatthias Ringwald };
6379af39d9fSMatthias Ringwald 
6389af39d9fSMatthias Ringwald /**
6399af39d9fSMatthias Ringwald  * @param handle
6409af39d9fSMatthias Ringwald  */
6419af39d9fSMatthias Ringwald const hci_cmd_t hci_write_pin_type = {
642ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PIN_TYPE, "1"
643e49d496aSMatthias Ringwald };
644e49d496aSMatthias Ringwald 
645e49d496aSMatthias Ringwald /**
64656042629SMatthias Ringwald  * @param bd_addr
64756042629SMatthias Ringwald  * @param delete_all_flags
64856042629SMatthias Ringwald  */
64956042629SMatthias Ringwald const hci_cmd_t hci_delete_stored_link_key = {
650ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_DELETE_STORED_LINK_KEY, "B1"
65156042629SMatthias Ringwald };
65256042629SMatthias Ringwald 
653f9f2075cSMatthias Ringwald #ifdef ENABLE_CLASSIC
65456042629SMatthias Ringwald /**
65556042629SMatthias Ringwald  * @param local_name (UTF-8, Null Terminated, max 248 octets)
65656042629SMatthias Ringwald  */
65756042629SMatthias Ringwald const hci_cmd_t hci_write_local_name = {
658ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LOCAL_NAME, "N"
65956042629SMatthias Ringwald };
660f9f2075cSMatthias Ringwald #endif
66156042629SMatthias Ringwald 
66256042629SMatthias Ringwald /**
663e90bae01SMatthias Ringwald  */
664e90bae01SMatthias Ringwald const hci_cmd_t hci_read_local_name = {
665ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_NAME, ""
666e90bae01SMatthias Ringwald };
667e90bae01SMatthias Ringwald 
668e90bae01SMatthias Ringwald /**
669195e82f3Sskoperst  */
670195e82f3Sskoperst const hci_cmd_t hci_read_page_timeout = {
671ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PAGE_TIMEOUT, ""
672195e82f3Sskoperst };
673195e82f3Sskoperst 
674195e82f3Sskoperst /**
67556042629SMatthias Ringwald  * @param page_timeout (* 0.625 ms)
67656042629SMatthias Ringwald  */
67756042629SMatthias Ringwald const hci_cmd_t hci_write_page_timeout = {
678ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_TIMEOUT, "2"
67956042629SMatthias Ringwald };
68056042629SMatthias Ringwald 
68156042629SMatthias Ringwald /**
6824eac2391SMatthias Ringwald  * @param scan_enable (no, inq, page, inq+page)
6834eac2391SMatthias Ringwald  */
6844eac2391SMatthias Ringwald const hci_cmd_t hci_write_scan_enable = {
685ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SCAN_ENABLE, "1"
6864eac2391SMatthias Ringwald };
6874eac2391SMatthias Ringwald 
6884eac2391SMatthias Ringwald /**
689195e82f3Sskoperst  */
690195e82f3Sskoperst const hci_cmd_t hci_read_page_scan_activity = {
691ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PAGE_SCAN_ACTIVITY, ""
692195e82f3Sskoperst };
693195e82f3Sskoperst 
694195e82f3Sskoperst /**
695195e82f3Sskoperst  * @param page_scan_interval (* 0.625 ms)
696195e82f3Sskoperst  * @param page_scan_window (* 0.625 ms, must be <= page_scan_interval)
697195e82f3Sskoperst  */
698195e82f3Sskoperst const hci_cmd_t hci_write_page_scan_activity = {
699ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_SCAN_ACTIVITY, "22"
700195e82f3Sskoperst };
701195e82f3Sskoperst 
702195e82f3Sskoperst /**
70356042629SMatthias Ringwald  */
7044eac2391SMatthias Ringwald const hci_cmd_t hci_read_inquiry_scan_activity = {
705ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_INQUIRY_SCAN_ACTIVITY, ""
7064eac2391SMatthias Ringwald };
7074eac2391SMatthias Ringwald 
7084eac2391SMatthias Ringwald /**
7094eac2391SMatthias Ringwald  * @param inquiry_scan_interval (* 0.625 ms)
7104eac2391SMatthias Ringwald  * @param inquiry_scan_window (* 0.625 ms, must be <= inquiry_scan_interval)
7114eac2391SMatthias Ringwald  */
7124eac2391SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_activity = {
713ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_ACTIVITY, "22"
71456042629SMatthias Ringwald };
71556042629SMatthias Ringwald 
71656042629SMatthias Ringwald /**
71756042629SMatthias Ringwald  * @param authentication_enable
71856042629SMatthias Ringwald  */
71956042629SMatthias Ringwald const hci_cmd_t hci_write_authentication_enable = {
720ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_AUTHENTICATION_ENABLE, "1"
72156042629SMatthias Ringwald };
72256042629SMatthias Ringwald 
72356042629SMatthias Ringwald /**
72456042629SMatthias Ringwald  * @param class_of_device
72556042629SMatthias Ringwald  */
72656042629SMatthias Ringwald const hci_cmd_t hci_write_class_of_device = {
727ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_CLASS_OF_DEVICE, "3"
72856042629SMatthias Ringwald };
72956042629SMatthias Ringwald 
73056042629SMatthias Ringwald /**
73156042629SMatthias Ringwald  */
73256042629SMatthias Ringwald const hci_cmd_t hci_read_num_broadcast_retransmissions = {
733ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS, ""
73456042629SMatthias Ringwald };
73556042629SMatthias Ringwald 
73656042629SMatthias Ringwald /**
73756042629SMatthias Ringwald  * @param num_broadcast_retransmissions (e.g. 0 for a single broadcast)
73856042629SMatthias Ringwald  */
73956042629SMatthias Ringwald const hci_cmd_t hci_write_num_broadcast_retransmissions = {
740ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS, "1"
74156042629SMatthias Ringwald };
74256042629SMatthias Ringwald 
74356042629SMatthias Ringwald /**
74444751e25SMatthias Ringwald  * @param connection_handle
74544751e25SMatthias Ringwald  * @param type 0 = current transmit level, 1 = max transmit level
74644751e25SMatthias Ringwald  */
74744751e25SMatthias Ringwald const hci_cmd_t hci_read_transmit_power_level = {
748ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_TRANSMIT_POWER_LEVEL, "11"
74944751e25SMatthias Ringwald };
75044751e25SMatthias Ringwald 
75144751e25SMatthias Ringwald /**
75256042629SMatthias Ringwald  * @param synchronous_flow_control_enable - if yes, num completed packet everts are sent for SCO packets
75356042629SMatthias Ringwald  */
75456042629SMatthias Ringwald const hci_cmd_t hci_write_synchronous_flow_control_enable = {
755ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE, "1"
75656042629SMatthias Ringwald };
75756042629SMatthias Ringwald 
7582b838201SMatthias Ringwald #ifdef ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL
7592b838201SMatthias Ringwald 
7602b838201SMatthias Ringwald /**
7612b838201SMatthias Ringwald  * @param flow_control_enable - 0: off, 1: ACL only, 2: SCO only, 3: ACL + SCO
7622b838201SMatthias Ringwald  */
7632b838201SMatthias Ringwald const hci_cmd_t hci_set_controller_to_host_flow_control = {
764ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL, "1"
7652b838201SMatthias Ringwald };
7662b838201SMatthias Ringwald 
76756042629SMatthias Ringwald /**
76856042629SMatthias Ringwald  * @param host_acl_data_packet_length
76956042629SMatthias Ringwald  * @param host_synchronous_data_packet_length
77056042629SMatthias Ringwald  * @param host_total_num_acl_data_packets
77156042629SMatthias Ringwald  * @param host_total_num_synchronous_data_packets
77256042629SMatthias Ringwald  */
77356042629SMatthias Ringwald const hci_cmd_t hci_host_buffer_size = {
774ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_HOST_BUFFER_SIZE, "2122"
77556042629SMatthias Ringwald };
77656042629SMatthias Ringwald 
7779119d792SMilanka Ringwald 
7782b838201SMatthias Ringwald #if 0
7792b838201SMatthias Ringwald //
7802b838201SMatthias Ringwald // command sent manually sent by hci_host_num_completed_packets
7812b838201SMatthias Ringwald //
7822b838201SMatthias Ringwald /**
7832b838201SMatthias Ringwald  * @note only single handle supported by BTstack command generator
7842b838201SMatthias Ringwald  * @param number_of_handles must be 1
7852b838201SMatthias Ringwald  * @param connection_handle
7862b838201SMatthias Ringwald  * @param host_num_of_completed_packets for the given connection handle
7872b838201SMatthias Ringwald  */
7882b838201SMatthias Ringwald const hci_cmd_t hci_host_number_of_completed_packets = {
789ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS, "1H2"
7902b838201SMatthias Ringwald };
7912b838201SMatthias Ringwald #endif
7922b838201SMatthias Ringwald 
7932b838201SMatthias Ringwald #endif
7942b838201SMatthias Ringwald 
79556042629SMatthias Ringwald /**
79656042629SMatthias Ringwald  * @param handle
79756042629SMatthias Ringwald  */
79856042629SMatthias Ringwald const hci_cmd_t hci_read_link_supervision_timeout = {
799ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LINK_SUPERVISION_TIMEOUT, "H"
80056042629SMatthias Ringwald };
80156042629SMatthias Ringwald 
80256042629SMatthias Ringwald /**
80356042629SMatthias Ringwald  * @param handle
80456042629SMatthias Ringwald  * @param timeout (0x0001 - 0xFFFF Time -> Range: 0.625ms - 40.9 sec)
80556042629SMatthias Ringwald  */
80656042629SMatthias Ringwald const hci_cmd_t hci_write_link_supervision_timeout = {
807ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LINK_SUPERVISION_TIMEOUT, "H2"
80856042629SMatthias Ringwald };
80956042629SMatthias Ringwald 
81056042629SMatthias Ringwald /**
8119119d792SMilanka Ringwald  * @param num_current_iac must be 2
8129119d792SMilanka Ringwald  * @param iac_lap1
8139119d792SMilanka Ringwald  * @param iac_lap2
8149119d792SMilanka Ringwald  */
8159119d792SMilanka Ringwald const hci_cmd_t hci_write_current_iac_lap_two_iacs = {
816ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_CURRENT_IAC_LAP_TWO_IACS, "133"
8179119d792SMilanka Ringwald };
8189119d792SMilanka Ringwald 
8199119d792SMilanka Ringwald /**
8205769fd77SMatthias Ringwald  * @param inquiry_scan_type (0x00 = standard, 0x01 = interlaced)
8215769fd77SMatthias Ringwald  */
8225769fd77SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_type = {
8235769fd77SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_TYPE,  "1"
8245769fd77SMatthias Ringwald };
8255769fd77SMatthias Ringwald 
8265769fd77SMatthias Ringwald /**
82756042629SMatthias Ringwald  * @param inquiry_mode (0x00 = standard, 0x01 = with RSSI, 0x02 = extended)
82856042629SMatthias Ringwald  */
82956042629SMatthias Ringwald const hci_cmd_t hci_write_inquiry_mode = {
830ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_MODE, "1"
83156042629SMatthias Ringwald };
83256042629SMatthias Ringwald 
83356042629SMatthias Ringwald /**
8345769fd77SMatthias Ringwald  * @param page_scan_type (0x00 = standard, 0x01 = interlaced)
8355769fd77SMatthias Ringwald  */
8365769fd77SMatthias Ringwald const hci_cmd_t hci_write_page_scan_type = {
8375769fd77SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_SCAN_TYPE, "1"
8385769fd77SMatthias Ringwald };
8395769fd77SMatthias Ringwald 
8405769fd77SMatthias Ringwald /**
84156042629SMatthias Ringwald  * @param fec_required
84256042629SMatthias Ringwald  * @param exstended_inquiry_response
84356042629SMatthias Ringwald  */
84456042629SMatthias Ringwald const hci_cmd_t hci_write_extended_inquiry_response = {
845ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_EXTENDED_INQUIRY_RESPONSE, "1E"
84656042629SMatthias Ringwald };
84756042629SMatthias Ringwald 
84856042629SMatthias Ringwald /**
84956042629SMatthias Ringwald  * @param mode (0 = off, 1 = on)
85056042629SMatthias Ringwald  */
85156042629SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_mode = {
852ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_MODE, "1"
85356042629SMatthias Ringwald };
85456042629SMatthias Ringwald 
855237daac5SMatthias Ringwald /**
856237daac5SMatthias Ringwald  */
857237daac5SMatthias Ringwald const hci_cmd_t hci_read_local_oob_data = {
858ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_OOB_DATA, ""
859237daac5SMatthias Ringwald     // return status, C, R
860237daac5SMatthias Ringwald };
861483c5078SMatthias Ringwald 
862483c5078SMatthias Ringwald /**
863483c5078SMatthias Ringwald  * @param mode (0 = off, 1 = on)
864483c5078SMatthias Ringwald  */
865483c5078SMatthias Ringwald const hci_cmd_t hci_write_default_erroneous_data_reporting = {
866ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING, "1"
867483c5078SMatthias Ringwald };
868483c5078SMatthias Ringwald 
86956042629SMatthias Ringwald /**
87056042629SMatthias Ringwald  */
87156042629SMatthias Ringwald const hci_cmd_t hci_read_le_host_supported = {
872ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LE_HOST_SUPPORTED, ""
87356042629SMatthias Ringwald     // return: status, le supported host, simultaneous le host
87456042629SMatthias Ringwald };
87556042629SMatthias Ringwald 
87656042629SMatthias Ringwald /**
87756042629SMatthias Ringwald  * @param le_supported_host
87856042629SMatthias Ringwald  * @param simultaneous_le_host
87956042629SMatthias Ringwald  */
88056042629SMatthias Ringwald const hci_cmd_t hci_write_le_host_supported = {
881ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LE_HOST_SUPPORTED, "11"
88256042629SMatthias Ringwald     // return: status
88356042629SMatthias Ringwald };
88456042629SMatthias Ringwald 
88556042629SMatthias Ringwald /**
886b002ae8cSMatthias Ringwald  * @param secure_connections_host_support
887b002ae8cSMatthias Ringwald  */
888b002ae8cSMatthias Ringwald const hci_cmd_t hci_write_secure_connections_host_support = {
889ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT, "1"
890b002ae8cSMatthias Ringwald     // return: status
891b002ae8cSMatthias Ringwald };
892b002ae8cSMatthias Ringwald 
893b002ae8cSMatthias Ringwald /**
894237daac5SMatthias Ringwald  */
895bb75dd7dSMatthias Ringwald const hci_cmd_t hci_read_local_extended_oob_data = {
8961849becdSMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_EXTENDED_OOB_DATA, ""
897237daac5SMatthias Ringwald     // return status, C_192, R_192, R_256, C_256
898237daac5SMatthias Ringwald };
899237daac5SMatthias Ringwald 
900237daac5SMatthias Ringwald 
901237daac5SMatthias Ringwald /**
90256042629SMatthias Ringwald  * Testing Commands
90356042629SMatthias Ringwald  */
90456042629SMatthias Ringwald 
90556042629SMatthias Ringwald 
90656042629SMatthias Ringwald /**
90756042629SMatthias Ringwald  */
90856042629SMatthias Ringwald const hci_cmd_t hci_read_loopback_mode = {
909ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOOPBACK_MODE, ""
91056042629SMatthias Ringwald     // return: status, loopback mode (0 = off, 1 = local loopback, 2 = remote loopback)
91156042629SMatthias Ringwald };
91256042629SMatthias Ringwald 
91356042629SMatthias Ringwald /**
91456042629SMatthias Ringwald  * @param loopback_mode
91556042629SMatthias Ringwald  */
91656042629SMatthias Ringwald const hci_cmd_t hci_write_loopback_mode = {
917ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LOOPBACK_MODE, "1"
91856042629SMatthias Ringwald     // return: status
91956042629SMatthias Ringwald };
92056042629SMatthias Ringwald 
92184ca9bd8SMatthias Ringwald /**
92284ca9bd8SMatthias Ringwald  */
92384ca9bd8SMatthias Ringwald const hci_cmd_t hci_enable_device_under_test_mode = {
924ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENABLE_DEVICE_UNDER_TEST_MODE, ""
92584ca9bd8SMatthias Ringwald     // return: status
92684ca9bd8SMatthias Ringwald };
92784ca9bd8SMatthias Ringwald 
92884ca9bd8SMatthias Ringwald /**
92984ca9bd8SMatthias Ringwald  * @param simple_pairing_debug_mode
93084ca9bd8SMatthias Ringwald  */
93184ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_debug_mode = {
932ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE, "1"
93384ca9bd8SMatthias Ringwald     // return: status
93484ca9bd8SMatthias Ringwald };
93584ca9bd8SMatthias Ringwald 
93684ca9bd8SMatthias Ringwald /**
93784ca9bd8SMatthias Ringwald  * @param handle
93884ca9bd8SMatthias Ringwald  * @param dm1_acl_u_mode
93984ca9bd8SMatthias Ringwald  * @param esco_loopback_mode
94084ca9bd8SMatthias Ringwald  */
94184ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_secure_connections_test_mode = {
942ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE, "H11"
94384ca9bd8SMatthias Ringwald     // return: status
94484ca9bd8SMatthias Ringwald };
94584ca9bd8SMatthias Ringwald 
94656042629SMatthias Ringwald 
94756042629SMatthias Ringwald /**
94856042629SMatthias Ringwald  * Informational Parameters
94956042629SMatthias Ringwald  */
95056042629SMatthias Ringwald 
95156042629SMatthias Ringwald const hci_cmd_t hci_read_local_version_information = {
952ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_VERSION_INFORMATION, ""
95356042629SMatthias Ringwald };
95456042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_commands = {
955ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_COMMANDS, ""
95656042629SMatthias Ringwald };
95756042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_features = {
958ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_FEATURES, ""
95956042629SMatthias Ringwald };
96056042629SMatthias Ringwald const hci_cmd_t hci_read_buffer_size = {
961ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_BUFFER_SIZE, ""
96256042629SMatthias Ringwald };
96356042629SMatthias Ringwald const hci_cmd_t hci_read_bd_addr = {
964ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_BD_ADDR, ""
96556042629SMatthias Ringwald };
96656042629SMatthias Ringwald 
96756042629SMatthias Ringwald /**
96856042629SMatthias Ringwald  * Status Paramters
96956042629SMatthias Ringwald  */
97056042629SMatthias Ringwald 
97156042629SMatthias Ringwald /**
97256042629SMatthias Ringwald  * @param handle
97356042629SMatthias Ringwald  */
97456042629SMatthias Ringwald const hci_cmd_t hci_read_rssi = {
975ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_RSSI, "H"
97656042629SMatthias Ringwald };
97756042629SMatthias Ringwald 
97897abfa24SMatthias Ringwald /**
97997abfa24SMatthias Ringwald  * @param handle
98097abfa24SMatthias Ringwald  */
98197abfa24SMatthias Ringwald const hci_cmd_t hci_read_encryption_key_size = {
982ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_ENCRYPTION_KEY_SIZE, "H"
98397abfa24SMatthias Ringwald };
98456042629SMatthias Ringwald 
98556042629SMatthias Ringwald 
986a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE
98756042629SMatthias Ringwald /**
98856042629SMatthias Ringwald  * Low Energy Commands
98956042629SMatthias Ringwald  */
99056042629SMatthias Ringwald 
99156042629SMatthias Ringwald /**
99256042629SMatthias Ringwald  * @param event_mask_lower_octets
99356042629SMatthias Ringwald  * @param event_mask_higher_octets
99456042629SMatthias Ringwald  */
99556042629SMatthias Ringwald const hci_cmd_t hci_le_set_event_mask = {
996ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_EVENT_MASK, "44"
99756042629SMatthias Ringwald     // return: status
99856042629SMatthias Ringwald };
99956042629SMatthias Ringwald 
100056042629SMatthias Ringwald const hci_cmd_t hci_le_read_buffer_size = {
1001ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_BUFFER_SIZE, ""
100256042629SMatthias Ringwald     // return: status, le acl data packet len (16), total num le acl data packets(8)
100356042629SMatthias Ringwald };
100456042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_features = {
1005ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUPPORTED_FEATURES, ""
100656042629SMatthias Ringwald     // return: LE_Features See [Vol 6] Part B, Section 4.6
100756042629SMatthias Ringwald };
100856042629SMatthias Ringwald 
100956042629SMatthias Ringwald /**
101056042629SMatthias Ringwald  * @param random_bd_addr
101156042629SMatthias Ringwald  */
101256042629SMatthias Ringwald const hci_cmd_t hci_le_set_random_address = {
1013ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_RANDOM_ADDRESS, "B"
101456042629SMatthias Ringwald     // return: status
101556042629SMatthias Ringwald };
101656042629SMatthias Ringwald 
101756042629SMatthias Ringwald /**
101856042629SMatthias Ringwald  * @param advertising_interval_min ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec)
101956042629SMatthias Ringwald  * @param advertising_interval_max ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec)
102056042629SMatthias Ringwald  * @param advertising_type (enum from 0: ADV_IND, ADC_DIRECT_IND, ADV_SCAN_IND, ADV_NONCONN_IND)
102156042629SMatthias Ringwald  * @param own_address_type (enum from 0: public device address, random device address)
102256042629SMatthias Ringwald  * @param direct_address_type ()
102356042629SMatthias Ringwald  * @param direct_address (public or random address of device to be connecteed)
102456042629SMatthias Ringwald  * @param advertising_channel_map (flags: chan_37(1), chan_38(2), chan_39(4))
102556042629SMatthias Ringwald  * @param advertising_filter_policy (enum from 0: scan any conn any, scan whitelist, con any, scan any conn whitelist, scan whitelist, con whitelist)
102656042629SMatthias Ringwald  */
102756042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_parameters = {
1028ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISING_PARAMETERS, "22111B11"
102956042629SMatthias Ringwald     // return: status
103056042629SMatthias Ringwald };
103156042629SMatthias Ringwald 
103256042629SMatthias Ringwald const hci_cmd_t hci_le_read_advertising_channel_tx_power = {
1033ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER, ""
103456042629SMatthias Ringwald     // return: status, level [-20,10] signed int (8), units dBm
103556042629SMatthias Ringwald };
103656042629SMatthias Ringwald 
103756042629SMatthias Ringwald /**
103856042629SMatthias Ringwald  * @param advertising_data_length
103956042629SMatthias Ringwald  * @param advertising_data (31 bytes)
104056042629SMatthias Ringwald  */
104156042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_data= {
1042ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISING_DATA, "1A"
104356042629SMatthias Ringwald     // return: status
104456042629SMatthias Ringwald };
104556042629SMatthias Ringwald 
104656042629SMatthias Ringwald /**
104756042629SMatthias Ringwald  * @param scan_response_data_length
104856042629SMatthias Ringwald  * @param scan_response_data (31 bytes)
104956042629SMatthias Ringwald  */
105056042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_response_data= {
1051ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_RESPONSE_DATA, "1A"
105256042629SMatthias Ringwald     // return: status
105356042629SMatthias Ringwald };
105456042629SMatthias Ringwald 
105556042629SMatthias Ringwald /**
105656042629SMatthias Ringwald  * @param advertise_enable (off: 0, on: 1)
105756042629SMatthias Ringwald  */
105856042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertise_enable = {
1059ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISE_ENABLE, "1"
106056042629SMatthias Ringwald     // return: status
106156042629SMatthias Ringwald };
106256042629SMatthias Ringwald 
106356042629SMatthias Ringwald /**
106456042629SMatthias Ringwald  * @param le_scan_type (passive (0), active (1))
106556042629SMatthias Ringwald  * @param le_scan_interval ([0x0004,0x4000], unit: 0.625 msec)
106656042629SMatthias Ringwald  * @param le_scan_window   ([0x0004,0x4000], unit: 0.625 msec)
106756042629SMatthias Ringwald  * @param own_address_type (public (0), random (1))
106856042629SMatthias Ringwald  * @param scanning_filter_policy (any (0), only whitelist (1))
106956042629SMatthias Ringwald  */
107056042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_parameters = {
1071ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_PARAMETERS, "12211"
107256042629SMatthias Ringwald     // return: status
107356042629SMatthias Ringwald };
107456042629SMatthias Ringwald 
107556042629SMatthias Ringwald /**
107656042629SMatthias Ringwald  * @param le_scan_enable  (disabled (0), enabled (1))
107756042629SMatthias Ringwald  * @param filter_duplices (disabled (0), enabled (1))
107856042629SMatthias Ringwald  */
107956042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_enable = {
1080ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_ENABLE, "11"
108156042629SMatthias Ringwald     // return: status
108256042629SMatthias Ringwald };
108356042629SMatthias Ringwald 
108456042629SMatthias Ringwald /**
108556042629SMatthias Ringwald  * @param le_scan_interval ([0x0004, 0x4000], unit: 0.625 msec)
108656042629SMatthias Ringwald  * @param le_scan_window ([0x0004, 0x4000], unit: 0.625 msec)
108756042629SMatthias Ringwald  * @param initiator_filter_policy (peer address type + peer address (0), whitelist (1))
108856042629SMatthias Ringwald  * @param peer_address_type (public (0), random (1))
108956042629SMatthias Ringwald  * @param peer_address
109056042629SMatthias Ringwald  * @param own_address_type (public (0), random (1))
109156042629SMatthias Ringwald  * @param conn_interval_min ([0x0006, 0x0c80], unit: 1.25 msec)
109256042629SMatthias Ringwald  * @param conn_interval_max ([0x0006, 0x0c80], unit: 1.25 msec)
109356042629SMatthias Ringwald  * @param conn_latency (number of connection events [0x0000, 0x01f4])
109456042629SMatthias Ringwald  * @param supervision_timeout ([0x000a, 0x0c80], unit: 10 msec)
109556042629SMatthias Ringwald  * @param minimum_CE_length ([0x0000, 0xffff], unit: 0.625 msec)
109656042629SMatthias Ringwald  * @param maximum_CE_length ([0x0000, 0xffff], unit: 0.625 msec)
109756042629SMatthias Ringwald  */
109856042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection= {
1099ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CREATE_CONNECTION, "2211B1222222"
110056042629SMatthias Ringwald     // return: none -> le create connection complete event
110156042629SMatthias Ringwald };
110256042629SMatthias Ringwald 
110356042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection_cancel = {
1104ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CREATE_CONNECTION_CANCEL, ""
110556042629SMatthias Ringwald     // return: status
110656042629SMatthias Ringwald };
110756042629SMatthias Ringwald 
110856042629SMatthias Ringwald const hci_cmd_t hci_le_read_white_list_size = {
1109ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_WHITE_LIST_SIZE, ""
111056042629SMatthias Ringwald     // return: status, number of entries in controller whitelist
111156042629SMatthias Ringwald };
111256042629SMatthias Ringwald 
111356042629SMatthias Ringwald const hci_cmd_t hci_le_clear_white_list = {
1114ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CLEAR_WHITE_LIST, ""
111556042629SMatthias Ringwald     // return: status
111656042629SMatthias Ringwald };
111756042629SMatthias Ringwald 
111856042629SMatthias Ringwald /**
111956042629SMatthias Ringwald  * @param address_type (public (0), random (1))
112056042629SMatthias Ringwald  * @param bd_addr
112156042629SMatthias Ringwald  */
112256042629SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_white_list = {
1123ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_WHITE_LIST, "1B"
112456042629SMatthias Ringwald     // return: status
112556042629SMatthias Ringwald };
112656042629SMatthias Ringwald 
112756042629SMatthias Ringwald /**
112856042629SMatthias Ringwald  * @param address_type (public (0), random (1))
112956042629SMatthias Ringwald  * @param bd_addr
113056042629SMatthias Ringwald  */
113156042629SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_white_list = {
1132ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST, "1B"
113356042629SMatthias Ringwald     // return: status
113456042629SMatthias Ringwald };
113556042629SMatthias Ringwald 
113656042629SMatthias Ringwald /**
113756042629SMatthias Ringwald  * @param conn_handle
113856042629SMatthias Ringwald  * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec)
113956042629SMatthias Ringwald  * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec)
114056042629SMatthias Ringwald  * @param conn_latency ([0x0000,0x03e8], number of connection events)
114156042629SMatthias Ringwald  * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec)
114256042629SMatthias Ringwald  * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
114356042629SMatthias Ringwald  * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
114456042629SMatthias Ringwald  */
114556042629SMatthias Ringwald const hci_cmd_t hci_le_connection_update = {
1146ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CONNECTION_UPDATE, "H222222"
114756042629SMatthias Ringwald     // return: none -> le connection update complete event
114856042629SMatthias Ringwald };
114956042629SMatthias Ringwald 
115056042629SMatthias Ringwald /**
115156042629SMatthias Ringwald  * @param channel_map_lower_32bits
115256042629SMatthias Ringwald  * @param channel_map_higher_5bits
115356042629SMatthias Ringwald  */
115456042629SMatthias Ringwald const hci_cmd_t hci_le_set_host_channel_classification = {
1155ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION, "41"
115656042629SMatthias Ringwald     // return: status
115756042629SMatthias Ringwald };
115856042629SMatthias Ringwald 
115956042629SMatthias Ringwald /**
116056042629SMatthias Ringwald  * @param conn_handle
116156042629SMatthias Ringwald  */
116256042629SMatthias Ringwald const hci_cmd_t hci_le_read_channel_map = {
1163ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_CHANNEL_MAP, "H"
116456042629SMatthias Ringwald     // return: status, connection handle, channel map (5 bytes, 37 used)
116556042629SMatthias Ringwald };
116656042629SMatthias Ringwald 
116756042629SMatthias Ringwald /**
116856042629SMatthias Ringwald  * @param conn_handle
116956042629SMatthias Ringwald  */
117056042629SMatthias Ringwald const hci_cmd_t hci_le_read_remote_used_features = {
1171ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_REMOTE_USED_FEATURES, "H"
117256042629SMatthias Ringwald     // return: none -> le read remote used features complete event
117356042629SMatthias Ringwald };
117456042629SMatthias Ringwald 
117556042629SMatthias Ringwald /**
117656042629SMatthias Ringwald  * @param key ((128) for AES-128)
117756042629SMatthias Ringwald  * @param plain_text (128)
117856042629SMatthias Ringwald  */
117956042629SMatthias Ringwald const hci_cmd_t hci_le_encrypt = {
1180ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_ENCRYPT, "PP"
118156042629SMatthias Ringwald     // return: status, encrypted data (128)
118256042629SMatthias Ringwald };
118356042629SMatthias Ringwald 
118456042629SMatthias Ringwald const hci_cmd_t hci_le_rand = {
1185ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_RAND, ""
118656042629SMatthias Ringwald     // return: status, random number (64)
118756042629SMatthias Ringwald };
118856042629SMatthias Ringwald 
118956042629SMatthias Ringwald /**
119056042629SMatthias Ringwald  * @param conn_handle
119156042629SMatthias Ringwald  * @param random_number_lower_32bits
119256042629SMatthias Ringwald  * @param random_number_higher_32bits
119356042629SMatthias Ringwald  * @param encryption_diversifier (16)
119456042629SMatthias Ringwald  * @param long_term_key (128)
119556042629SMatthias Ringwald  */
119656042629SMatthias Ringwald const hci_cmd_t hci_le_start_encryption = {
1197ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_START_ENCRYPTION, "H442P"
119856042629SMatthias Ringwald     // return: none -> encryption changed or encryption key refresh complete event
119956042629SMatthias Ringwald };
120056042629SMatthias Ringwald 
120156042629SMatthias Ringwald /**
120256042629SMatthias Ringwald  * @param connection_handle
120356042629SMatthias Ringwald  * @param long_term_key (128)
120456042629SMatthias Ringwald  */
120556042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_request_reply = {
1206ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_LONG_TERM_KEY_REQUEST_REPLY, "HP"
120756042629SMatthias Ringwald     // return: status, connection handle
120856042629SMatthias Ringwald };
120956042629SMatthias Ringwald 
121056042629SMatthias Ringwald /**
121156042629SMatthias Ringwald  * @param conn_handle
121256042629SMatthias Ringwald  */
121356042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_negative_reply = {
1214ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_LONG_TERM_KEY_NEGATIVE_REPLY, "H"
121556042629SMatthias Ringwald     // return: status, connection handle
121656042629SMatthias Ringwald };
121756042629SMatthias Ringwald 
121856042629SMatthias Ringwald /**
121956042629SMatthias Ringwald  * @param conn_handle
122056042629SMatthias Ringwald  */
122156042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_states = {
1222ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUPPORTED_STATES, "H"
122356042629SMatthias Ringwald     // return: status, LE states (64)
122456042629SMatthias Ringwald };
122556042629SMatthias Ringwald 
122656042629SMatthias Ringwald /**
122756042629SMatthias Ringwald  * @param rx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2)
122856042629SMatthias Ringwald  */
122956042629SMatthias Ringwald const hci_cmd_t hci_le_receiver_test = {
1230ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_RECEIVER_TEST, "1"
123156042629SMatthias Ringwald     // return: status
123256042629SMatthias Ringwald };
123356042629SMatthias Ringwald 
123456042629SMatthias Ringwald /**
123556042629SMatthias Ringwald  * @param tx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2)
123656042629SMatthias Ringwald  * @param test_payload_lengh ([0x00,0x25])
123756042629SMatthias Ringwald  * @param packet_payload ([0,7] different patterns)
123856042629SMatthias Ringwald  */
123956042629SMatthias Ringwald const hci_cmd_t hci_le_transmitter_test = {
1240ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_TRANSMITTER_TEST, "111"
124156042629SMatthias Ringwald     // return: status
124256042629SMatthias Ringwald };
124356042629SMatthias Ringwald 
124456042629SMatthias Ringwald /**
124556042629SMatthias Ringwald  * @param end_test_cmd
124656042629SMatthias Ringwald  */
124756042629SMatthias Ringwald const hci_cmd_t hci_le_test_end = {
1248ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_TEST_END, "1"
124956042629SMatthias Ringwald     // return: status, number of packets (8)
125056042629SMatthias Ringwald };
125182180fcaSMatthias Ringwald 
125282180fcaSMatthias Ringwald /**
1253fe704c95SMatthias Ringwald  * @param conn_handle
1254fe704c95SMatthias Ringwald  * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec)
1255fe704c95SMatthias Ringwald  * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec)
1256fe704c95SMatthias Ringwald  * @param conn_latency ([0x0000,0x03e8], number of connection events)
1257fe704c95SMatthias Ringwald  * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec)
1258fe704c95SMatthias Ringwald  * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
1259fe704c95SMatthias Ringwald  * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
1260fe704c95SMatthias Ringwald  */
1261fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_reply = {
1262ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY, "H222222"
1263fe704c95SMatthias Ringwald     // return: status, connection handle
1264fe704c95SMatthias Ringwald };
1265fe704c95SMatthias Ringwald 
1266fe704c95SMatthias Ringwald /**
1267fe704c95SMatthias Ringwald  * @param con_handle
1268fe704c95SMatthias Ringwald  * @param reason
1269fe704c95SMatthias Ringwald  */
1270fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_negative_reply = {
1271ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY, "H1"
1272fe704c95SMatthias Ringwald     // return: status, connection handle
1273fe704c95SMatthias Ringwald };
1274fe704c95SMatthias Ringwald 
1275fe704c95SMatthias Ringwald /**
12760ea2847fSMatthias Ringwald  * @param con_handle
12770ea2847fSMatthias Ringwald  * @param tx_octets
12780ea2847fSMatthias Ringwald  * @param tx_time
12790ea2847fSMatthias Ringwald  */
12800ea2847fSMatthias Ringwald const hci_cmd_t hci_le_set_data_length = {
1281ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_DATA_LENGTH, "H22"
12820ea2847fSMatthias Ringwald     // return: status, connection handle
12830ea2847fSMatthias Ringwald };
12840ea2847fSMatthias Ringwald 
12850ea2847fSMatthias Ringwald /**
12860ea2847fSMatthias Ringwald  */
12870ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_suggested_default_data_length = {
1288ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH, ""
12890ea2847fSMatthias Ringwald     // return: status, suggested max tx octets, suggested max tx time
12900ea2847fSMatthias Ringwald };
12910ea2847fSMatthias Ringwald 
12920ea2847fSMatthias Ringwald /**
12930ea2847fSMatthias Ringwald  * @param suggested_max_tx_octets
12940ea2847fSMatthias Ringwald  * @param suggested_max_tx_time
12950ea2847fSMatthias Ringwald  */
12960ea2847fSMatthias Ringwald const hci_cmd_t hci_le_write_suggested_default_data_length = {
1297ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH, "22"
12980ea2847fSMatthias Ringwald     // return: status
12990ea2847fSMatthias Ringwald };
13000ea2847fSMatthias Ringwald 
13010ea2847fSMatthias Ringwald /**
130282180fcaSMatthias Ringwald  */
130382180fcaSMatthias Ringwald const hci_cmd_t hci_le_read_local_p256_public_key = {
1304ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_LOCAL_P256_PUBLIC_KEY, ""
130582180fcaSMatthias Ringwald //  LE Read Local P-256 Public Key Complete is generated on completion
130682180fcaSMatthias Ringwald };
130782180fcaSMatthias Ringwald 
130882180fcaSMatthias Ringwald /**
1309fcae305fSMatthias Ringwald  * @param public key
1310fcae305fSMatthias Ringwald  * @param private key
131182180fcaSMatthias Ringwald  */
131282180fcaSMatthias Ringwald const hci_cmd_t hci_le_generate_dhkey = {
1313ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_GENERATE_DHKEY, "QQ"
131482180fcaSMatthias Ringwald // LE Generate DHKey Complete is generated on completion
131582180fcaSMatthias Ringwald };
131682180fcaSMatthias Ringwald 
13170ea2847fSMatthias Ringwald /**
1318173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1319173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1320173ed1a3SMatthias Ringwald  * @param Peer_IRK
1321173ed1a3SMatthias Ringwald  * @param Local_IRK
1322173ed1a3SMatthias Ringwald  */
1323173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_resolving_list = {
1324173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST, "1BPP"
1325173ed1a3SMatthias Ringwald };
1326173ed1a3SMatthias Ringwald 
1327173ed1a3SMatthias Ringwald /**
1328173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1329173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1330173ed1a3SMatthias Ringwald  */
1331173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_resolving_list = {
1332173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST, "1B"
1333173ed1a3SMatthias Ringwald };
1334173ed1a3SMatthias Ringwald 
1335173ed1a3SMatthias Ringwald /**
1336173ed1a3SMatthias Ringwald  */
1337173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_clear_resolving_list = {
1338173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_CLEAR_RESOLVING_LIST, ""
1339173ed1a3SMatthias Ringwald };
1340173ed1a3SMatthias Ringwald 
1341173ed1a3SMatthias Ringwald /**
1342173ed1a3SMatthias Ringwald  */
1343173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_resolving_list_size = {
1344173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_RESOLVING_LIST_SIZE, ""
1345173ed1a3SMatthias Ringwald };
1346173ed1a3SMatthias Ringwald 
1347173ed1a3SMatthias Ringwald /**
1348173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1349173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1350173ed1a3SMatthias Ringwald  */
1351173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_peer_resolvable_address = {
1352173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_PEER_RESOLVABLE_ADDRESS, ""
1353173ed1a3SMatthias Ringwald };
1354173ed1a3SMatthias Ringwald 
1355173ed1a3SMatthias Ringwald /**
1356173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1357173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1358173ed1a3SMatthias Ringwald  */
1359173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_local_resolvable_address = {
1360173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS, ""
1361173ed1a3SMatthias Ringwald };
1362173ed1a3SMatthias Ringwald 
1363173ed1a3SMatthias Ringwald /**
1364173ed1a3SMatthias Ringwald  * @param Address_Resolution_Enable
1365173ed1a3SMatthias Ringwald  */
1366173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_address_resolution_enabled= {
1367173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_SET_ADDRESS_RESOLUTION_ENABLED, "1"
1368173ed1a3SMatthias Ringwald };
1369173ed1a3SMatthias Ringwald 
1370173ed1a3SMatthias Ringwald /**
1371173ed1a3SMatthias Ringwald  * @param RPA_Timeout in seconds, range 0x0001 to 0x0E10, default: 900 s
1372173ed1a3SMatthias Ringwald  */
1373173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_resolvable_private_address_timeout= {
1374173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT, "2"
1375173ed1a3SMatthias Ringwald };
1376173ed1a3SMatthias Ringwald 
1377173ed1a3SMatthias Ringwald /**
13780ea2847fSMatthias Ringwald  */
13790ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_maximum_data_length = {
1380ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_MAXIMUM_DATA_LENGTH, ""
13810ea2847fSMatthias Ringwald     // return: status, supported max tx octets, supported max tx time, supported max rx octets, supported max rx time
13820ea2847fSMatthias Ringwald };
13830ea2847fSMatthias Ringwald 
1384ca13daefSMatthias Ringwald /**
1385ca13daefSMatthias Ringwald  * @param con_handle
1386ca13daefSMatthias Ringwald  */
1387ca13daefSMatthias Ringwald const hci_cmd_t hci_le_read_phy = {
1388ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_PHY, "H"
1389ca13daefSMatthias Ringwald     // return: status, connection handler, tx phy, rx phy
1390ca13daefSMatthias Ringwald };
1391ca13daefSMatthias Ringwald 
1392ca13daefSMatthias Ringwald /**
1393ca13daefSMatthias Ringwald  * @param all_phys
1394ca13daefSMatthias Ringwald  * @param tx_phys
1395ca13daefSMatthias Ringwald  * @param rx_phys
1396ca13daefSMatthias Ringwald  */
1397ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_default_phy = {
1398ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_DEFAULT_PHY, "111"
1399ca13daefSMatthias Ringwald     // return: status
1400ca13daefSMatthias Ringwald };
1401ca13daefSMatthias Ringwald 
1402ca13daefSMatthias Ringwald /**
1403ca13daefSMatthias Ringwald  * @param con_handle
1404ca13daefSMatthias Ringwald  * @param all_phys
1405ca13daefSMatthias Ringwald  * @param tx_phys
1406ca13daefSMatthias Ringwald  * @param rx_phys
1407ca13daefSMatthias Ringwald  * @param phy_options
1408ca13daefSMatthias Ringwald  */
1409ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_phy = {
1410ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_PHY, "H1111"
1411ca13daefSMatthias Ringwald // LE PHY Update Complete is generated on completion
1412ca13daefSMatthias Ringwald };
1413ca13daefSMatthias Ringwald 
1414ca13daefSMatthias Ringwald 
141556042629SMatthias Ringwald #endif
1416a42798c3SMatthias Ringwald 
1417a42798c3SMatthias Ringwald // Broadcom / Cypress specific HCI commands
1418a42798c3SMatthias Ringwald 
1419a42798c3SMatthias Ringwald /**
1420067ecc36SMatthias Ringwald  * @brief Enable Wide-Band Speech / mSBC decoding for PCM
1421067ecc36SMatthias Ringwald  * @param enable_wbs is 0 for disable, 1 for enable
1422067ecc36SMatthias Ringwald  * @param uuid_wbs is 2 for EV2/EV3
1423067ecc36SMatthias Ringwald  */
1424067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_enable_wbs = {
1425067ecc36SMatthias Ringwald         HCI_OPCODE_HCI_BCM_ENABLE_WBS, "12"
1426067ecc36SMatthias Ringwald         // return: status
1427067ecc36SMatthias Ringwald };
1428067ecc36SMatthias Ringwald 
1429067ecc36SMatthias Ringwald /**
1430a42798c3SMatthias Ringwald  * @brief Configure SCO Routing (BCM)
1431a42798c3SMatthias Ringwald  * @param sco_routing is 0 for PCM, 1 for Transport, 2 for Codec and 3 for I2S
1432a42798c3SMatthias Ringwald  * @param pcm_interface_rate is 0 for 128KBps, 1 for 256 KBps, 2 for 512KBps, 3 for 1024KBps, and 4 for 2048Kbps
1433a42798c3SMatthias Ringwald  * @param frame_type is 0 for short and 1 for long
1434a42798c3SMatthias Ringwald  * @param sync_mode is 0 for slave and 1 for master
1435a42798c3SMatthias Ringwald  * @param clock_mode is 0 for slabe and 1 for master
1436a42798c3SMatthias Ringwald  */
1437a42798c3SMatthias Ringwald const hci_cmd_t hci_bcm_write_sco_pcm_int = {
1438ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_WRITE_SCO_PCM_INT, "11111"
1439a42798c3SMatthias Ringwald     // return: status
1440a42798c3SMatthias Ringwald };
1441eab6959fSMatthias Ringwald 
1442eab6959fSMatthias Ringwald /**
1443067ecc36SMatthias Ringwald  * @brief Configure the I2S/PCM interface (BCM)
1444067ecc36SMatthias Ringwald  * @param i2s_enable is 0 for off, 1 for on
1445067ecc36SMatthias Ringwald  * @param is_master is 0 for slave, is 1 for master
1446067ecc36SMatthias Ringwald  * @param sample_rate is 0 for 8 kHz, 1 for 16 kHz, 2 for 4 kHz
1447067ecc36SMatthias 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
1448067ecc36SMatthias Ringwald  * @param clock_mode is 0 for slabe and 1 for master
1449067ecc36SMatthias Ringwald  */
1450067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_write_i2spcm_interface_param = {
1451067ecc36SMatthias Ringwald         HCI_OPCODE_HCI_BCM_WRITE_I2SPCM_INTERFACE_PARAM, "1111"
1452067ecc36SMatthias Ringwald         // return: status
1453067ecc36SMatthias Ringwald };
1454067ecc36SMatthias Ringwald 
1455067ecc36SMatthias Ringwald 
1456067ecc36SMatthias Ringwald /**
1457eab6959fSMatthias Ringwald  * @brief Activates selected Sleep Mode
1458eab6959fSMatthias 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
1459eab6959fSMatthias Ringwald  * @param idle_threshold_host (modes 1,2,5,7) time until considered idle, unit roughly 300 ms
1460eab6959fSMatthias Ringwald  * @param idle_threshold_controller (modes 1-7,9) time until considered idle, unit roughly 300 ms
1461eab6959fSMatthias Ringwald  * @param bt_wake_active_mode (modes 1,2,7) 0 = BT_WAKE line is active high, 1 = BT_WAKE is active low
1462eab6959fSMatthias Ringwald  * @param host_wake_active_mode (modes 1,2,5,7) 0 = HOST_WAKE line is active high, 1 = HOST_WAKE is active low
1463eab6959fSMatthias Ringwald  * @param allow_host_sleep_during_sco (modes 1,2,3,5,7)
1464eab6959fSMatthias Ringwald  * @param combine_sleep_mode_and_lpm  (modes 1,2,3,5,7)
1465eab6959fSMatthias Ringwald  * @param enable_tristate_control_of_uart_tx_line (modes 1,2,7)
1466eab6959fSMatthias Ringwald  * @param active_connection_handling_on_suspend (modes 3,5)
1467eab6959fSMatthias Ringwald  * @param resume_timeout (modes 3,5)
1468eab6959fSMatthias Ringwald  * @param enable_break_to_host (mode 12)
1469eab6959fSMatthias Ringwald  * @param pulsed_host_wake (modes 1,12)
1470eab6959fSMatthias Ringwald  */
1471eab6959fSMatthias Ringwald const hci_cmd_t hci_bcm_set_sleep_mode = {
1472ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_SET_SLEEP_MODE, "111111111111"
1473eab6959fSMatthias Ringwald };
14745cdaddfaSMatthias Ringwald 
14755cdaddfaSMatthias Ringwald /**
14765cdaddfaSMatthias Ringwald  * @brief Set TX Power Table
14775cdaddfaSMatthias Ringwald  * @param is_le 0=classic, 1=LE
14785cdaddfaSMatthias Ringwald  * @param chip_max_tx_pwr_db chip level max TX power in dBM
14795cdaddfaSMatthias Ringwald  */
14805cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_write_tx_power_table = {
1481ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_WRITE_TX_POWER_TABLE, "11"
14825cdaddfaSMatthias Ringwald };
14835cdaddfaSMatthias Ringwald 
14845cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_set_tx_pwr = {
1485ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_SET_TX_PWR, "11H"
14865cdaddfaSMatthias Ringwald };
1487ba39ed56SMatthias Ringwald 
1488ba39ed56SMatthias Ringwald /**
1489ba39ed56SMatthias Ringwald  *
1490ba39ed56SMatthias Ringwald  *
1491ba39ed56SMatthias Ringwald  * @brief This command tests the RF transceiver in continuous transmission mode.
1492ba39ed56SMatthias Ringwald  *        The transmitter is activated by configuring the transmission parameters such as pattern,
1493ba39ed56SMatthias Ringwald  *        modulation, and frequency.
1494ba39ed56SMatthias Ringwald  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Con_TX.280xFD84.29
1495ba39ed56SMatthias Ringwald  * @param modulation
1496ba39ed56SMatthias Ringwald  * @param test_patern
1497ba39ed56SMatthias Ringwald  * @param frequency
1498ba39ed56SMatthias Ringwald  * @param power_level
1499ba39ed56SMatthias Ringwald  * @param reserved1
1500ba39ed56SMatthias Ringwald  * @param reserved2
1501ba39ed56SMatthias Ringwald  */
1502ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_con_tx = {
1503ba39ed56SMatthias Ringwald     0xFD84, "111144"
1504ba39ed56SMatthias Ringwald };
1505ba39ed56SMatthias Ringwald 
1506ba39ed56SMatthias Ringwald /**
1507ba39ed56SMatthias Ringwald  * @brief This command starts sending/receiving packets using packet transmission parameters such as
1508ba39ed56SMatthias Ringwald  *        frequency channel, packet type, and packet length. It is used for Packet TX/RX.
1509ba39ed56SMatthias Ringwald  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Packet_TX_RX_.280xFD85.29
1510ba39ed56SMatthias Ringwald  * @param frequency_mode
1511ba39ed56SMatthias Ringwald  * @param tx_single_frequency
1512ba39ed56SMatthias Ringwald  * @param rx_single_frequency
1513ba39ed56SMatthias Ringwald  * @param acl_packet_type
1514ba39ed56SMatthias Ringwald  * @paarm acl_packet_data_pattern
1515ba39ed56SMatthias Ringwald  * @param reserved
1516ba39ed56SMatthias Ringwald  * @param power_level
1517ba39ed56SMatthias Ringwald  * @param disable_whitening
1518ba39ed56SMatthias Ringwald  * @param prbs9_initialization_value
1519ba39ed56SMatthias Ringwald  */
1520ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_packet_tx_rx = {
1521ba39ed56SMatthias Ringwald     0xFD85, "1111112112"
1522ba39ed56SMatthias Ringwald };
1523365a7dd1SMatthias Ringwald 
1524365a7dd1SMatthias Ringwald /**
1525365a7dd1SMatthias Ringwald  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
1526365a7dd1SMatthias Ringwald  * @param enable 0=disable, 1=enable
1527365a7dd1SMatthias Ringwald  * @param a3dp_role (NL5500, WL128x only) 0=source,1=sink
1528365a7dd1SMatthias Ringwald  * @param code_upload (NL5500, WL128x only) 0=do not load a3dp code, 1=load a3dp code
1529365a7dd1SMatthias Ringwald  * @param reserved for future use
1530365a7dd1SMatthias Ringwald  */
1531365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_avrp_enable = {
1532365a7dd1SMatthias Ringwald         0xFD92, "1112"
1533365a7dd1SMatthias Ringwald };
1534365a7dd1SMatthias Ringwald 
1535365a7dd1SMatthias Ringwald /**
1536365a7dd1SMatthias Ringwald  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
1537365a7dd1SMatthias Ringwald  * @param acl_con_handle
1538365a7dd1SMatthias Ringwald  */
1539365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_associate = {
1540365a7dd1SMatthias Ringwald         0xFD78, "H"
1541365a7dd1SMatthias Ringwald };
1542365a7dd1SMatthias Ringwald 
1543365a7dd1SMatthias Ringwald /**
1544365a7dd1SMatthias Ringwald  * @brief This command is used to disassociate Wide Band Speech configuration from any ACL handle.
1545365a7dd1SMatthias Ringwald  */
1546365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_disassociate = {
1547365a7dd1SMatthias Ringwald         0xFD79, ""
1548365a7dd1SMatthias Ringwald };
1549365a7dd1SMatthias Ringwald 
1550365a7dd1SMatthias Ringwald /**
1551365a7dd1SMatthias Ringwald  * @brief This command configures the codec interface parameters and the PCM clock rate, which is relevant when
1552365a7dd1SMatthias Ringwald           the Bluetooth core generates the clock. This command must be used by the host to use the PCM
1553365a7dd1SMatthias Ringwald           interface.
1554365a7dd1SMatthias Ringwald  * @param clock_rate in kHz
1555365a7dd1SMatthias Ringwald  * @param clock_direction 0=master/output, 1=slave/input
1556365a7dd1SMatthias Ringwald  * @param frame_sync_frequency in Hz
1557365a7dd1SMatthias Ringwald  * @param frame_sync_duty_cycle 0=50% (I2S Format), 0x0001-0xffff number of cycles of PCM clock
1558365a7dd1SMatthias Ringwald  * @param frame_sync_edge 0=driven/sampled at rising edge, 1=driven/sampled at falling edge of PCM clock
1559365a7dd1SMatthias Ringwald  * @param frame_sync_polariy 0=active high, 1=active low
1560365a7dd1SMatthias Ringwald  * @param reserved1
1561365a7dd1SMatthias Ringwald  * @param channel_1_data_out_size sample size in bits
1562365a7dd1SMatthias Ringwald  * @param channel_1_data_out_offset number of PCM clock cycles between rising of frame sync and data start
1563365a7dd1SMatthias Ringwald  * @param channel_1_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
1564365a7dd1SMatthias Ringwald  * @param channel_1_data_in_size sample size in bits
1565365a7dd1SMatthias Ringwald  * @param channel_1_data_in_offset number of PCM clock cycles between rising of frame sync and data start
1566365a7dd1SMatthias Ringwald  * @param channel_1_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
1567365a7dd1SMatthias Ringwald  * @param fsync_multiplier this field is only relevant to CC256XB from service pack 0.2 !!! -> use 0x00
1568365a7dd1SMatthias Ringwald  * @param channel_2_data_out_size sample size in bits
1569365a7dd1SMatthias Ringwald  * @param channel_2_data_out_offset number of PCM clock cycles between rising of frame sync and data start
1570365a7dd1SMatthias Ringwald  * @param channel_2_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
1571365a7dd1SMatthias Ringwald  * @param channel_2_data_in_size sample size in bits
1572365a7dd1SMatthias Ringwald  * @param channel_2_data_in_offset number of PCM clock cycles between rising of frame sync and data start
1573365a7dd1SMatthias Ringwald  * @param channel_2_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
1574365a7dd1SMatthias Ringwald  * @param reserved2
1575365a7dd1SMatthias Ringwald  *
1576365a7dd1SMatthias Ringwald  */
1577365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_write_codec_config = {
1578365a7dd1SMatthias Ringwald         0xFD06, "214211122122112212211"
1579365a7dd1SMatthias Ringwald };
1580