xref: /btstack/src/hci_cmd.c (revision c56de76b135c6c6effc45c2650744bf4a33662b9)
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 
54*c56de76bSMilanka Ringwald 
5559c9672fSMatthias Ringwald #ifdef ENABLE_SDP
5659c9672fSMatthias Ringwald #include "classic/sdp_util.h"
5759c9672fSMatthias Ringwald #endif
5859c9672fSMatthias Ringwald 
5956042629SMatthias Ringwald // calculate combined ogf/ocf value
605efd5011SMatthias Ringwald #define OPCODE(ogf, ocf) ((ocf) | ((ogf) << 10))
6156042629SMatthias Ringwald 
6256042629SMatthias Ringwald /**
6356042629SMatthias Ringwald  * construct HCI Command based on template
6456042629SMatthias Ringwald  *
6556042629SMatthias Ringwald  * Format:
6656042629SMatthias Ringwald  *   1,2,3,4: one to four byte value
6756042629SMatthias Ringwald  *   H: HCI connection handle
6856042629SMatthias Ringwald  *   B: Bluetooth Baseband Address (BD_ADDR)
6956042629SMatthias Ringwald  *   D: 8 byte data block
7056042629SMatthias Ringwald  *   E: Extended Inquiry Result
7156042629SMatthias Ringwald  *   N: Name up to 248 chars, \0 terminated
72237daac5SMatthias Ringwald  *   P: 16 byte data block. Pairing code, Simple Pairing Hash and Randomizer
7356042629SMatthias Ringwald  *   A: 31 bytes advertising data
7456042629SMatthias Ringwald  *   S: Service Record (Data Element Sequence)
7582180fcaSMatthias Ringwald  *   Q: 32 byte data block, e.g. for X and Y coordinates of P-256 public key
7656042629SMatthias Ringwald  */
7756042629SMatthias Ringwald uint16_t hci_cmd_create_from_template(uint8_t *hci_cmd_buffer, const hci_cmd_t *cmd, va_list argptr){
7856042629SMatthias Ringwald 
794ea43905SMatthias Ringwald     hci_cmd_buffer[0] = cmd->opcode & 0xffu;
8056042629SMatthias Ringwald     hci_cmd_buffer[1] = cmd->opcode >> 8;
8156042629SMatthias Ringwald     int pos = 3;
8256042629SMatthias Ringwald 
8356042629SMatthias Ringwald     const char *format = cmd->format;
8456042629SMatthias Ringwald     uint16_t word;
8556042629SMatthias Ringwald     uint32_t longword;
8656042629SMatthias Ringwald     uint8_t * ptr;
8756042629SMatthias Ringwald     while (*format) {
8856042629SMatthias Ringwald         switch(*format) {
8956042629SMatthias Ringwald             case '1': //  8 bit value
90*c56de76bSMilanka Ringwald                 // minimal va_arg is int: 2 bytes on 8+16 bit CPUs
91*c56de76bSMilanka Ringwald                 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE
924ea43905SMatthias Ringwald                 hci_cmd_buffer[pos++] = word & 0xffu;
93*c56de76bSMilanka Ringwald                 break;
94*c56de76bSMilanka Ringwald             case '2': // 16 bit value
95*c56de76bSMilanka Ringwald                 // minimal va_arg is int: 2 bytes on 8+16 bit CPUs
96*c56de76bSMilanka Ringwald                 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE
97*c56de76bSMilanka Ringwald                 hci_cmd_buffer[pos++] = word & 0xffu;
9856042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = word >> 8;
99*c56de76bSMilanka Ringwald                 break;
100*c56de76bSMilanka Ringwald             case 'H': // hci_handle
101*c56de76bSMilanka Ringwald                 // minimal va_arg is int: 2 bytes on 8+16 bit CPUs
102*c56de76bSMilanka Ringwald                 word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE
103*c56de76bSMilanka Ringwald                 hci_cmd_buffer[pos++] = word & 0xffu;
10456042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = word >> 8;
10556042629SMatthias Ringwald                 break;
10656042629SMatthias Ringwald             case '3':
107*c56de76bSMilanka Ringwald                 longword = va_arg(argptr, uint32_t); // LCOV_EXCL_BR_LINE
10856042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword;
10956042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 8;
11056042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 16;
111*c56de76bSMilanka Ringwald                 break;
112*c56de76bSMilanka Ringwald             case '4':
113*c56de76bSMilanka Ringwald                 longword = va_arg(argptr, uint32_t); // LCOV_EXCL_BR_LINE
114*c56de76bSMilanka Ringwald                 hci_cmd_buffer[pos++] = longword;
115*c56de76bSMilanka Ringwald                 hci_cmd_buffer[pos++] = longword >> 8;
116*c56de76bSMilanka Ringwald                 hci_cmd_buffer[pos++] = longword >> 16;
11756042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 24;
11856042629SMatthias Ringwald                 break;
11956042629SMatthias Ringwald             case 'B': // bt-addr
120*c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
12156042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[5];
12256042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[4];
12356042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[3];
12456042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[2];
12556042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[1];
12656042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[0];
12756042629SMatthias Ringwald                 break;
12856042629SMatthias Ringwald             case 'D': // 8 byte data block
129*c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
1306535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 8);
13156042629SMatthias Ringwald                 pos += 8;
13256042629SMatthias Ringwald                 break;
13356042629SMatthias Ringwald             case 'E': // Extended Inquiry Information 240 octets
134*c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
1356535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 240);
13656042629SMatthias Ringwald                 pos += 240;
13756042629SMatthias Ringwald                 break;
13856042629SMatthias Ringwald             case 'N': { // UTF-8 string, null terminated
139*c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
14056042629SMatthias Ringwald                 uint16_t len = strlen((const char*) ptr);
1414ea43905SMatthias Ringwald                 if (len > 248u) {
14256042629SMatthias Ringwald                     len = 248;
14356042629SMatthias Ringwald                 }
1446535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, len);
1454ea43905SMatthias Ringwald                 if (len < 248u) {
14656042629SMatthias Ringwald                     // fill remaining space with zeroes
1474ea43905SMatthias Ringwald                     memset(&hci_cmd_buffer[pos+len], 0u, 248u-len);
14856042629SMatthias Ringwald                 }
14956042629SMatthias Ringwald                 pos += 248;
15056042629SMatthias Ringwald                 break;
15156042629SMatthias Ringwald             }
152bb75dd7dSMatthias Ringwald             case 'P': // 16 byte PIN code or link key in little endian
153*c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
1546535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 16);
15556042629SMatthias Ringwald                 pos += 16;
15656042629SMatthias Ringwald                 break;
157a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE
15856042629SMatthias Ringwald             case 'A': // 31 bytes advertising data
159*c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
1606535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 31);
16156042629SMatthias Ringwald                 pos += 31;
16256042629SMatthias Ringwald                 break;
16356042629SMatthias Ringwald #endif
164a9a4c409SMatthias Ringwald #ifdef ENABLE_SDP
16556042629SMatthias Ringwald             case 'S': { // Service Record (Data Element Sequence)
166*c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
16756042629SMatthias Ringwald                 uint16_t len = de_get_len(ptr);
1686535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, len);
16956042629SMatthias Ringwald                 pos += len;
17056042629SMatthias Ringwald                 break;
17156042629SMatthias Ringwald             }
17256042629SMatthias Ringwald #endif
17382180fcaSMatthias Ringwald #ifdef ENABLE_LE_SECURE_CONNECTIONS
17482180fcaSMatthias Ringwald             case 'Q':
175*c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
17682180fcaSMatthias Ringwald                 reverse_bytes(ptr, &hci_cmd_buffer[pos], 32);
17782180fcaSMatthias Ringwald                 pos += 32;
17882180fcaSMatthias Ringwald                 break;
17982180fcaSMatthias Ringwald #endif
180bb75dd7dSMatthias Ringwald             case 'K':   // 16 byte OOB Data or Link Key in big endian
181*c56de76bSMilanka Ringwald                 ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE
182bb75dd7dSMatthias Ringwald                 reverse_bytes(ptr, &hci_cmd_buffer[pos], 16);
183bb75dd7dSMatthias Ringwald                 pos += 16;
184bb75dd7dSMatthias Ringwald                 break;
18556042629SMatthias Ringwald             default:
18656042629SMatthias Ringwald                 break;
18756042629SMatthias Ringwald         }
18856042629SMatthias Ringwald         format++;
18956042629SMatthias Ringwald     };
19056042629SMatthias Ringwald     hci_cmd_buffer[2] = pos - 3;
19156042629SMatthias Ringwald     return pos;
19256042629SMatthias Ringwald }
19356042629SMatthias Ringwald 
19456042629SMatthias Ringwald /**
19556042629SMatthias Ringwald  *  Link Control Commands
19656042629SMatthias Ringwald  */
19756042629SMatthias Ringwald 
19856042629SMatthias Ringwald /**
19956042629SMatthias Ringwald  * @param lap
20056042629SMatthias Ringwald  * @param inquiry_length
20156042629SMatthias Ringwald  * @param num_responses
20256042629SMatthias Ringwald  */
20356042629SMatthias Ringwald const hci_cmd_t hci_inquiry = {
204ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_INQUIRY, "311"
20556042629SMatthias Ringwald };
20656042629SMatthias Ringwald 
20756042629SMatthias Ringwald /**
20856042629SMatthias Ringwald  */
20956042629SMatthias Ringwald const hci_cmd_t hci_inquiry_cancel = {
210ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_INQUIRY_CANCEL, ""
21156042629SMatthias Ringwald };
21256042629SMatthias Ringwald 
21356042629SMatthias Ringwald /**
21456042629SMatthias Ringwald  * @param bd_addr
21556042629SMatthias Ringwald  * @param packet_type
21656042629SMatthias Ringwald  * @param page_scan_repetition_mode
21756042629SMatthias Ringwald  * @param reserved
21856042629SMatthias Ringwald  * @param clock_offset
21956042629SMatthias Ringwald  * @param allow_role_switch
22056042629SMatthias Ringwald  */
22156042629SMatthias Ringwald const hci_cmd_t hci_create_connection = {
222ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CREATE_CONNECTION, "B21121"
22356042629SMatthias Ringwald };
22456042629SMatthias Ringwald 
22556042629SMatthias Ringwald /**
22656042629SMatthias Ringwald  * @param handle
22756042629SMatthias Ringwald  * @param reason (0x05, 0x13-0x15, 0x1a, 0x29, see Errors Codes in BT Spec Part D)
22856042629SMatthias Ringwald  */
22956042629SMatthias Ringwald const hci_cmd_t hci_disconnect = {
230ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_DISCONNECT, "H1"
23156042629SMatthias Ringwald };
23256042629SMatthias Ringwald 
23356042629SMatthias Ringwald /**
23456042629SMatthias Ringwald  * @param bd_addr
23556042629SMatthias Ringwald  */
23656042629SMatthias Ringwald const hci_cmd_t hci_create_connection_cancel = {
237ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CREATE_CONNECTION_CANCEL, "B"
23856042629SMatthias Ringwald };
23956042629SMatthias Ringwald 
24056042629SMatthias Ringwald /**
24156042629SMatthias Ringwald  * @param bd_addr
24256042629SMatthias Ringwald  * @param role (become master, stay slave)
24356042629SMatthias Ringwald  */
24456042629SMatthias Ringwald const hci_cmd_t hci_accept_connection_request = {
245ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ACCEPT_CONNECTION_REQUEST, "B1"
24656042629SMatthias Ringwald };
24756042629SMatthias Ringwald 
24856042629SMatthias Ringwald /**
24956042629SMatthias Ringwald  * @param bd_addr
25056042629SMatthias Ringwald  * @param reason (e.g. CONNECTION REJECTED DUE TO LIMITED RESOURCES (0x0d))
25156042629SMatthias Ringwald  */
25256042629SMatthias Ringwald const hci_cmd_t hci_reject_connection_request = {
253ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REJECT_CONNECTION_REQUEST, "B1"
25456042629SMatthias Ringwald };
25556042629SMatthias Ringwald 
25656042629SMatthias Ringwald /**
25756042629SMatthias Ringwald  * @param bd_addr
25856042629SMatthias Ringwald  * @param link_key
25956042629SMatthias Ringwald  */
26056042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_reply = {
261ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LINK_KEY_REQUEST_REPLY, "BP"
26256042629SMatthias Ringwald };
26356042629SMatthias Ringwald 
26456042629SMatthias Ringwald /**
26556042629SMatthias Ringwald  * @param bd_addr
26656042629SMatthias Ringwald  */
26756042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_negative_reply = {
268ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY, "B"
26956042629SMatthias Ringwald };
27056042629SMatthias Ringwald 
27156042629SMatthias Ringwald /**
27256042629SMatthias Ringwald  * @param bd_addr
27356042629SMatthias Ringwald  * @param pin_length
27456042629SMatthias Ringwald  * @param pin (c-string)
27556042629SMatthias Ringwald  */
27656042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_reply = {
277ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_PIN_CODE_REQUEST_REPLY, "B1P"
27856042629SMatthias Ringwald };
27956042629SMatthias Ringwald 
28056042629SMatthias Ringwald /**
28156042629SMatthias Ringwald  * @param bd_addr
28256042629SMatthias Ringwald  */
28356042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_negative_reply = {
284ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY, "B"
28556042629SMatthias Ringwald };
28656042629SMatthias Ringwald 
28756042629SMatthias Ringwald /**
28856042629SMatthias Ringwald  * @param handle
28956042629SMatthias Ringwald  * @param packet_type
29056042629SMatthias Ringwald  */
29156042629SMatthias Ringwald const hci_cmd_t hci_change_connection_packet_type = {
292ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CHANGE_CONNECTION_PACKET_TYPE, "H2"
29356042629SMatthias Ringwald };
29456042629SMatthias Ringwald 
29556042629SMatthias Ringwald /**
29656042629SMatthias Ringwald  * @param handle
29756042629SMatthias Ringwald  */
29856042629SMatthias Ringwald const hci_cmd_t hci_authentication_requested = {
299ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_AUTHENTICATION_REQUESTED, "H"
30056042629SMatthias Ringwald };
30156042629SMatthias Ringwald 
30256042629SMatthias Ringwald /**
30356042629SMatthias Ringwald  * @param handle
30456042629SMatthias Ringwald  * @param encryption_enable
30556042629SMatthias Ringwald  */
30656042629SMatthias Ringwald const hci_cmd_t hci_set_connection_encryption = {
307ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_CONNECTION_ENCRYPTION, "H1"
30856042629SMatthias Ringwald };
30956042629SMatthias Ringwald 
31056042629SMatthias Ringwald /**
31156042629SMatthias Ringwald  * @param handle
31256042629SMatthias Ringwald  */
31356042629SMatthias Ringwald const hci_cmd_t hci_change_connection_link_key = {
314ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CHANGE_CONNECTION_LINK_KEY, "H"
31556042629SMatthias Ringwald };
31656042629SMatthias Ringwald 
31756042629SMatthias Ringwald /**
31856042629SMatthias Ringwald  * @param bd_addr
31956042629SMatthias Ringwald  * @param page_scan_repetition_mode
32056042629SMatthias Ringwald  * @param reserved
32156042629SMatthias Ringwald  * @param clock_offset
32256042629SMatthias Ringwald  */
32356042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request = {
324ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_NAME_REQUEST, "B112"
32556042629SMatthias Ringwald };
32656042629SMatthias Ringwald 
32756042629SMatthias Ringwald 
32856042629SMatthias Ringwald /**
32956042629SMatthias Ringwald  * @param bd_addr
33056042629SMatthias Ringwald  */
33156042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request_cancel = {
332ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_NAME_REQUEST_CANCEL, "B"
33356042629SMatthias Ringwald };
33456042629SMatthias Ringwald 
33556042629SMatthias Ringwald  /**
33656042629SMatthias Ringwald  * @param handle
33756042629SMatthias Ringwald  */
33856042629SMatthias Ringwald const hci_cmd_t hci_read_remote_supported_features_command = {
339ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND, "H"
3408b22c04dSMatthias Ringwald };
3418b22c04dSMatthias Ringwald 
3428b22c04dSMatthias Ringwald /**
343d5057706SMatthias Ringwald * @param handle
344d5057706SMatthias Ringwald */
345d5057706SMatthias Ringwald const hci_cmd_t hci_read_remote_extended_features_command = {
346ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND, "H1"
347d5057706SMatthias Ringwald };
348d5057706SMatthias Ringwald 
349d5057706SMatthias Ringwald /**
3508b22c04dSMatthias Ringwald  * @param handle
3518b22c04dSMatthias Ringwald  */
3528b22c04dSMatthias Ringwald const hci_cmd_t hci_read_remote_version_information = {
353ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_VERSION_INFORMATION, "H"
35456042629SMatthias Ringwald };
35556042629SMatthias Ringwald 
35656042629SMatthias Ringwald /**
35756042629SMatthias Ringwald  * @param handle
35856042629SMatthias Ringwald  * @param transmit_bandwidth 8000(64kbps)
35956042629SMatthias Ringwald  * @param receive_bandwidth  8000(64kbps)
36056042629SMatthias Ringwald  * @param max_latency        >= 7ms for eSCO, 0xFFFF do not care
36156042629SMatthias Ringwald  * @param voice_settings     e.g. CVSD, Input Coding: Linear, Input Data Format: 2’s complement, data 16bit: 00011000000 == 0x60
36256042629SMatthias Ringwald  * @param retransmission_effort  e.g. 0xFF do not care
36356042629SMatthias Ringwald  * @param packet_type        at least EV3 for eSCO
36456042629SMatthias Ringwald  */
36556042629SMatthias Ringwald const hci_cmd_t hci_setup_synchronous_connection = {
366ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SETUP_SYNCHRONOUS_CONNECTION, "H442212"
36756042629SMatthias Ringwald };
36856042629SMatthias Ringwald 
36956042629SMatthias Ringwald /**
37056042629SMatthias Ringwald  * @param bd_addr
37156042629SMatthias Ringwald  * @param transmit_bandwidth
37256042629SMatthias Ringwald  * @param receive_bandwidth
37356042629SMatthias Ringwald  * @param max_latency
37456042629SMatthias Ringwald  * @param voice_settings
37556042629SMatthias Ringwald  * @param retransmission_effort
37656042629SMatthias Ringwald  * @param packet_type
37756042629SMatthias Ringwald  */
37856042629SMatthias Ringwald const hci_cmd_t hci_accept_synchronous_connection = {
379ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ACCEPT_SYNCHRONOUS_CONNECTION, "B442212"
38056042629SMatthias Ringwald };
38156042629SMatthias Ringwald 
38256042629SMatthias Ringwald /**
38356042629SMatthias Ringwald  * @param bd_addr
38456042629SMatthias Ringwald  * @param IO_capability
38556042629SMatthias Ringwald  * @param OOB_data_present
38656042629SMatthias Ringwald  * @param authentication_requirements
38756042629SMatthias Ringwald  */
38856042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_reply = {
389ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_REPLY, "B111"
39056042629SMatthias Ringwald };
39156042629SMatthias Ringwald 
39256042629SMatthias Ringwald /**
39356042629SMatthias Ringwald  * @param bd_addr
39456042629SMatthias Ringwald  */
39556042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_reply = {
396ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_REPLY, "B"
39756042629SMatthias Ringwald };
39856042629SMatthias Ringwald 
39956042629SMatthias Ringwald /**
40056042629SMatthias Ringwald  * @param bd_addr
40156042629SMatthias Ringwald  */
40256042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_negative_reply = {
403ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY, "B"
40456042629SMatthias Ringwald };
40556042629SMatthias Ringwald 
40656042629SMatthias Ringwald /**
40756042629SMatthias Ringwald  * @param bd_addr
40856042629SMatthias Ringwald  * @param numeric_value
40956042629SMatthias Ringwald  */
41056042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_reply = {
411ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_REPLY, "B4"
41256042629SMatthias Ringwald };
41356042629SMatthias Ringwald 
41456042629SMatthias Ringwald /**
41556042629SMatthias Ringwald  * @param bd_addr
41656042629SMatthias Ringwald  */
41756042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_negative_reply = {
418ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY, "B"
41956042629SMatthias Ringwald };
42056042629SMatthias Ringwald 
42156042629SMatthias Ringwald /**
42256042629SMatthias Ringwald  * @param bd_addr
423237daac5SMatthias Ringwald  * @param c Simple Pairing Hash C
424237daac5SMatthias Ringwald  * @param r Simple Pairing Randomizer R
425237daac5SMatthias Ringwald  */
426237daac5SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_reply = {
427bb75dd7dSMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_REPLY, "BKK"
428237daac5SMatthias Ringwald };
429237daac5SMatthias Ringwald 
430237daac5SMatthias Ringwald /**
431237daac5SMatthias Ringwald  * @param bd_addr
43256042629SMatthias Ringwald  */
43356042629SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_negative_reply = {
434ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY, "B"
43556042629SMatthias Ringwald };
43656042629SMatthias Ringwald 
43756042629SMatthias Ringwald /**
43856042629SMatthias Ringwald  * @param bd_addr
43956042629SMatthias Ringwald  * @param reason (Part D, Error codes)
44056042629SMatthias Ringwald  */
44156042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_negative_reply = {
442ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY, "B1"
44356042629SMatthias Ringwald };
44456042629SMatthias Ringwald 
44556042629SMatthias Ringwald /**
44656042629SMatthias Ringwald  * @param handle
44756042629SMatthias Ringwald  * @param transmit_bandwidth
44856042629SMatthias Ringwald  * @param receive_bandwidth
44956042629SMatthias Ringwald  * @param transmit_coding_format_type
45056042629SMatthias Ringwald  * @param transmit_coding_format_company
45156042629SMatthias Ringwald  * @param transmit_coding_format_codec
45256042629SMatthias Ringwald  * @param receive_coding_format_type
45356042629SMatthias Ringwald  * @param receive_coding_format_company
45456042629SMatthias Ringwald  * @param receive_coding_format_codec
45556042629SMatthias Ringwald  * @param transmit_coding_frame_size
45656042629SMatthias Ringwald  * @param receive_coding_frame_size
45756042629SMatthias Ringwald  * @param input_bandwidth
45856042629SMatthias Ringwald  * @param output_bandwidth
45956042629SMatthias Ringwald  * @param input_coding_format_type
46056042629SMatthias Ringwald  * @param input_coding_format_company
46156042629SMatthias Ringwald  * @param input_coding_format_codec
46256042629SMatthias Ringwald  * @param output_coding_format_type
46356042629SMatthias Ringwald  * @param output_coding_format_company
46456042629SMatthias Ringwald  * @param output_coding_format_codec
46556042629SMatthias Ringwald  * @param input_coded_data_size
46656042629SMatthias Ringwald  * @param outupt_coded_data_size
46756042629SMatthias Ringwald  * @param input_pcm_data_format
46856042629SMatthias Ringwald  * @param output_pcm_data_format
46956042629SMatthias Ringwald  * @param input_pcm_sample_payload_msb_position
47056042629SMatthias Ringwald  * @param output_pcm_sample_payload_msb_position
47156042629SMatthias Ringwald  * @param input_data_path
47256042629SMatthias Ringwald  * @param output_data_path
47356042629SMatthias Ringwald  * @param input_transport_unit_size
47456042629SMatthias Ringwald  * @param output_transport_unit_size
47556042629SMatthias Ringwald  * @param max_latency
47656042629SMatthias Ringwald  * @param packet_type
47756042629SMatthias Ringwald  * @param retransmission_effort
47856042629SMatthias Ringwald  */
47956042629SMatthias Ringwald const hci_cmd_t hci_enhanced_setup_synchronous_connection = {
480ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION, "H4412212222441221222211111111221"
48156042629SMatthias Ringwald };
48256042629SMatthias Ringwald 
48356042629SMatthias Ringwald /**
48456042629SMatthias Ringwald  * @param bd_addr
48556042629SMatthias Ringwald  * @param transmit_bandwidth
48656042629SMatthias Ringwald  * @param receive_bandwidth
48756042629SMatthias Ringwald  * @param transmit_coding_format_type
48856042629SMatthias Ringwald  * @param transmit_coding_format_company
48956042629SMatthias Ringwald  * @param transmit_coding_format_codec
49056042629SMatthias Ringwald  * @param receive_coding_format_type
49156042629SMatthias Ringwald  * @param receive_coding_format_company
49256042629SMatthias Ringwald  * @param receive_coding_format_codec
49356042629SMatthias Ringwald  * @param transmit_coding_frame_size
49456042629SMatthias Ringwald  * @param receive_coding_frame_size
49556042629SMatthias Ringwald  * @param input_bandwidth
49656042629SMatthias Ringwald  * @param output_bandwidth
49756042629SMatthias Ringwald  * @param input_coding_format_type
49856042629SMatthias Ringwald  * @param input_coding_format_company
49956042629SMatthias Ringwald  * @param input_coding_format_codec
50056042629SMatthias Ringwald  * @param output_coding_format_type
50156042629SMatthias Ringwald  * @param output_coding_format_company
50256042629SMatthias Ringwald  * @param output_coding_format_codec
50356042629SMatthias Ringwald  * @param input_coded_data_size
50456042629SMatthias Ringwald  * @param outupt_coded_data_size
50556042629SMatthias Ringwald  * @param input_pcm_data_format
50656042629SMatthias Ringwald  * @param output_pcm_data_format
50756042629SMatthias Ringwald  * @param input_pcm_sample_payload_msb_position
50856042629SMatthias Ringwald  * @param output_pcm_sample_payload_msb_position
50956042629SMatthias Ringwald  * @param input_data_path
51056042629SMatthias Ringwald  * @param output_data_path
51156042629SMatthias Ringwald  * @param input_transport_unit_size
51256042629SMatthias Ringwald  * @param output_transport_unit_size
51356042629SMatthias Ringwald  * @param max_latency
51456042629SMatthias Ringwald  * @param packet_type
51556042629SMatthias Ringwald  * @param retransmission_effort
51656042629SMatthias Ringwald  */
51756042629SMatthias Ringwald const hci_cmd_t hci_enhanced_accept_synchronous_connection = {
518ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION, "B4412212222441221222211111111221"
51956042629SMatthias Ringwald };
52056042629SMatthias Ringwald 
52156042629SMatthias Ringwald /**
522bb75dd7dSMatthias Ringwald  * @param bd_addr
523bb75dd7dSMatthias Ringwald  * @param c_192 Simple Pairing Hash C derived from P-192 public key
524bb75dd7dSMatthias Ringwald  * @param r_192 Simple Pairing Randomizer derived from P-192 public key
525bb75dd7dSMatthias Ringwald  * @param c_256 Simple Pairing Hash C derived from P-256 public key
526bb75dd7dSMatthias Ringwald  * @param r_256 Simple Pairing Randomizer derived from P-256 public key
527bb75dd7dSMatthias Ringwald  */
528bb75dd7dSMatthias Ringwald const hci_cmd_t hci_remote_oob_extended_data_request_reply = {
529bb75dd7dSMatthias Ringwald         HCI_OPCODE_HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY, "BKKKK"
530bb75dd7dSMatthias Ringwald };
531bb75dd7dSMatthias Ringwald 
532bb75dd7dSMatthias Ringwald /**
53356042629SMatthias Ringwald  *  Link Policy Commands
53456042629SMatthias Ringwald  */
53556042629SMatthias Ringwald 
53656042629SMatthias Ringwald /**
53756042629SMatthias Ringwald  * @param handle
53856042629SMatthias Ringwald  * @param sniff_max_interval
53956042629SMatthias Ringwald  * @param sniff_min_interval
54056042629SMatthias Ringwald  * @param sniff_attempt
54156042629SMatthias Ringwald  * @param sniff_timeout
54256042629SMatthias Ringwald  */
54356042629SMatthias Ringwald const hci_cmd_t hci_sniff_mode = {
544ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SNIFF_MODE, "H2222"
54556042629SMatthias Ringwald };
54656042629SMatthias Ringwald 
54756042629SMatthias Ringwald /**
54856042629SMatthias Ringwald  * @param handle
5497cd21895SMatthias Ringwald  */
5507cd21895SMatthias Ringwald const hci_cmd_t hci_exit_sniff_mode = {
551ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_EXIT_SNIFF_MODE, "H"
5527cd21895SMatthias Ringwald };
5537cd21895SMatthias Ringwald 
5547cd21895SMatthias Ringwald /**
5557cd21895SMatthias Ringwald  * @param handle
55656042629SMatthias Ringwald  * @param flags
55756042629SMatthias Ringwald  * @param service_type
55856042629SMatthias Ringwald  * @param token_rate (bytes/s)
55956042629SMatthias Ringwald  * @param peak_bandwith (bytes/s)
56056042629SMatthias Ringwald  * @param latency (us)
56156042629SMatthias Ringwald  * @param delay_variation (us)
56256042629SMatthias Ringwald  */
56356042629SMatthias Ringwald const hci_cmd_t hci_qos_setup = {
564ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_QOS_SETUP, "H114444"
56556042629SMatthias Ringwald };
56656042629SMatthias Ringwald 
56756042629SMatthias Ringwald /**
56856042629SMatthias Ringwald  * @param handle
56956042629SMatthias Ringwald  */
57056042629SMatthias Ringwald const hci_cmd_t hci_role_discovery = {
571ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ROLE_DISCOVERY, "H"
57256042629SMatthias Ringwald };
57356042629SMatthias Ringwald 
57456042629SMatthias Ringwald /**
57556042629SMatthias Ringwald  * @param bd_addr
57656042629SMatthias Ringwald  * @param role (0=master,1=slave)
57756042629SMatthias Ringwald  */
57856042629SMatthias Ringwald const hci_cmd_t hci_switch_role_command= {
579ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SWITCH_ROLE_COMMAND, "B1"
58056042629SMatthias Ringwald };
58156042629SMatthias Ringwald 
58256042629SMatthias Ringwald /**
58356042629SMatthias Ringwald  * @param handle
58456042629SMatthias Ringwald  */
58556042629SMatthias Ringwald const hci_cmd_t hci_read_link_policy_settings = {
586ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LINK_POLICY_SETTINGS, "H"
58756042629SMatthias Ringwald };
58856042629SMatthias Ringwald 
58956042629SMatthias Ringwald /**
59056042629SMatthias Ringwald  * @param handle
59156042629SMatthias Ringwald  * @param settings
59256042629SMatthias Ringwald  */
59356042629SMatthias Ringwald const hci_cmd_t hci_write_link_policy_settings = {
594ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LINK_POLICY_SETTINGS, "H2"
59556042629SMatthias Ringwald };
59656042629SMatthias Ringwald 
597c4c88f1bSJakob Krantz /**
59832e2f27fSMatthias Ringwald  * @param handle
59932e2f27fSMatthias Ringwald  * @param max_latency
60032e2f27fSMatthias Ringwald  * @param min_remote_timeout
60132e2f27fSMatthias Ringwald  * @param min_local_timeout
60232e2f27fSMatthias Ringwald  */
60332e2f27fSMatthias Ringwald const hci_cmd_t hci_sniff_subrating = {
60450fe3a99SMilanka Ringwald         HCI_OPCODE_HCI_SNIFF_SUBRATING, "H222"
60532e2f27fSMatthias Ringwald };
60632e2f27fSMatthias Ringwald 
60732e2f27fSMatthias Ringwald /**
608c4c88f1bSJakob Krantz  * @param policy
609c4c88f1bSJakob Krantz  */
61053138e7aSMatthias Ringwald const hci_cmd_t hci_write_default_link_policy_setting = {
611ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_DEFAULT_LINK_POLICY_SETTING, "2"
612c4c88f1bSJakob Krantz };
613c4c88f1bSJakob Krantz 
614733a7793SMatthias Ringwald /**
615733a7793SMatthias Ringwald  * @param handle
616733a7793SMatthias Ringwald  * @param unused
617733a7793SMatthias Ringwald  * @param flow_direction
618733a7793SMatthias Ringwald  * @param service_type
619733a7793SMatthias Ringwald  * @param token_rate
620733a7793SMatthias Ringwald  * @param token_bucket_size
621733a7793SMatthias Ringwald  * @param peak_bandwidth
622733a7793SMatthias Ringwald  * @param access_latency
623733a7793SMatthias Ringwald  */
624733a7793SMatthias Ringwald const hci_cmd_t hci_flow_specification = {
625733a7793SMatthias Ringwald         HCI_OPCODE_HCI_FLOW_SPECIFICATION, "H1114444"
626733a7793SMatthias Ringwald };
627733a7793SMatthias Ringwald 
62856042629SMatthias Ringwald 
62956042629SMatthias Ringwald /**
63056042629SMatthias Ringwald  *  Controller & Baseband Commands
63156042629SMatthias Ringwald  */
63256042629SMatthias Ringwald 
6339119d792SMilanka Ringwald 
63456042629SMatthias Ringwald /**
63556042629SMatthias Ringwald  * @param event_mask_lover_octets
63656042629SMatthias Ringwald  * @param event_mask_higher_octets
63756042629SMatthias Ringwald  */
63856042629SMatthias Ringwald const hci_cmd_t hci_set_event_mask = {
639ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_EVENT_MASK, "44"
64056042629SMatthias Ringwald };
64156042629SMatthias Ringwald 
64256042629SMatthias Ringwald /**
64356042629SMatthias Ringwald  */
64456042629SMatthias Ringwald const hci_cmd_t hci_reset = {
645ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_RESET, ""
64656042629SMatthias Ringwald };
64756042629SMatthias Ringwald 
64856042629SMatthias Ringwald /**
649e49d496aSMatthias Ringwald  * @param handle
650e49d496aSMatthias Ringwald  */
651e49d496aSMatthias Ringwald const hci_cmd_t hci_flush = {
652ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_FLUSH, "H"
6539af39d9fSMatthias Ringwald };
6549af39d9fSMatthias Ringwald 
6559af39d9fSMatthias Ringwald /**
6569af39d9fSMatthias Ringwald  * @param handle
6579af39d9fSMatthias Ringwald  */
6589af39d9fSMatthias Ringwald const hci_cmd_t hci_read_pin_type = {
659ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PIN_TYPE, ""
6609af39d9fSMatthias Ringwald };
6619af39d9fSMatthias Ringwald 
6629af39d9fSMatthias Ringwald /**
6639af39d9fSMatthias Ringwald  * @param handle
6649af39d9fSMatthias Ringwald  */
6659af39d9fSMatthias Ringwald const hci_cmd_t hci_write_pin_type = {
666ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PIN_TYPE, "1"
667e49d496aSMatthias Ringwald };
668e49d496aSMatthias Ringwald 
669e49d496aSMatthias Ringwald /**
67056042629SMatthias Ringwald  * @param bd_addr
67156042629SMatthias Ringwald  * @param delete_all_flags
67256042629SMatthias Ringwald  */
67356042629SMatthias Ringwald const hci_cmd_t hci_delete_stored_link_key = {
674ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_DELETE_STORED_LINK_KEY, "B1"
67556042629SMatthias Ringwald };
67656042629SMatthias Ringwald 
677f9f2075cSMatthias Ringwald #ifdef ENABLE_CLASSIC
67856042629SMatthias Ringwald /**
67956042629SMatthias Ringwald  * @param local_name (UTF-8, Null Terminated, max 248 octets)
68056042629SMatthias Ringwald  */
68156042629SMatthias Ringwald const hci_cmd_t hci_write_local_name = {
682ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LOCAL_NAME, "N"
68356042629SMatthias Ringwald };
684f9f2075cSMatthias Ringwald #endif
68556042629SMatthias Ringwald 
68656042629SMatthias Ringwald /**
687e90bae01SMatthias Ringwald  */
688e90bae01SMatthias Ringwald const hci_cmd_t hci_read_local_name = {
689ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_NAME, ""
690e90bae01SMatthias Ringwald };
691e90bae01SMatthias Ringwald 
692e90bae01SMatthias Ringwald /**
693195e82f3Sskoperst  */
694195e82f3Sskoperst const hci_cmd_t hci_read_page_timeout = {
695ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PAGE_TIMEOUT, ""
696195e82f3Sskoperst };
697195e82f3Sskoperst 
698195e82f3Sskoperst /**
69956042629SMatthias Ringwald  * @param page_timeout (* 0.625 ms)
70056042629SMatthias Ringwald  */
70156042629SMatthias Ringwald const hci_cmd_t hci_write_page_timeout = {
702ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_TIMEOUT, "2"
70356042629SMatthias Ringwald };
70456042629SMatthias Ringwald 
70556042629SMatthias Ringwald /**
7064eac2391SMatthias Ringwald  * @param scan_enable (no, inq, page, inq+page)
7074eac2391SMatthias Ringwald  */
7084eac2391SMatthias Ringwald const hci_cmd_t hci_write_scan_enable = {
709ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SCAN_ENABLE, "1"
7104eac2391SMatthias Ringwald };
7114eac2391SMatthias Ringwald 
7124eac2391SMatthias Ringwald /**
713195e82f3Sskoperst  */
714195e82f3Sskoperst const hci_cmd_t hci_read_page_scan_activity = {
715ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PAGE_SCAN_ACTIVITY, ""
716195e82f3Sskoperst };
717195e82f3Sskoperst 
718195e82f3Sskoperst /**
719195e82f3Sskoperst  * @param page_scan_interval (* 0.625 ms)
720195e82f3Sskoperst  * @param page_scan_window (* 0.625 ms, must be <= page_scan_interval)
721195e82f3Sskoperst  */
722195e82f3Sskoperst const hci_cmd_t hci_write_page_scan_activity = {
723ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_SCAN_ACTIVITY, "22"
724195e82f3Sskoperst };
725195e82f3Sskoperst 
726195e82f3Sskoperst /**
72756042629SMatthias Ringwald  */
7284eac2391SMatthias Ringwald const hci_cmd_t hci_read_inquiry_scan_activity = {
729ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_INQUIRY_SCAN_ACTIVITY, ""
7304eac2391SMatthias Ringwald };
7314eac2391SMatthias Ringwald 
7324eac2391SMatthias Ringwald /**
7334eac2391SMatthias Ringwald  * @param inquiry_scan_interval (* 0.625 ms)
7344eac2391SMatthias Ringwald  * @param inquiry_scan_window (* 0.625 ms, must be <= inquiry_scan_interval)
7354eac2391SMatthias Ringwald  */
7364eac2391SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_activity = {
737ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_ACTIVITY, "22"
73856042629SMatthias Ringwald };
73956042629SMatthias Ringwald 
74056042629SMatthias Ringwald /**
74156042629SMatthias Ringwald  * @param authentication_enable
74256042629SMatthias Ringwald  */
74356042629SMatthias Ringwald const hci_cmd_t hci_write_authentication_enable = {
744ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_AUTHENTICATION_ENABLE, "1"
74556042629SMatthias Ringwald };
74656042629SMatthias Ringwald 
74756042629SMatthias Ringwald /**
74856042629SMatthias Ringwald  * @param class_of_device
74956042629SMatthias Ringwald  */
75056042629SMatthias Ringwald const hci_cmd_t hci_write_class_of_device = {
751ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_CLASS_OF_DEVICE, "3"
75256042629SMatthias Ringwald };
75356042629SMatthias Ringwald 
75456042629SMatthias Ringwald /**
75556042629SMatthias Ringwald  */
75656042629SMatthias Ringwald const hci_cmd_t hci_read_num_broadcast_retransmissions = {
757ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS, ""
75856042629SMatthias Ringwald };
75956042629SMatthias Ringwald 
76056042629SMatthias Ringwald /**
76156042629SMatthias Ringwald  * @param num_broadcast_retransmissions (e.g. 0 for a single broadcast)
76256042629SMatthias Ringwald  */
76356042629SMatthias Ringwald const hci_cmd_t hci_write_num_broadcast_retransmissions = {
764ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS, "1"
76556042629SMatthias Ringwald };
76656042629SMatthias Ringwald 
76756042629SMatthias Ringwald /**
76844751e25SMatthias Ringwald  * @param connection_handle
76944751e25SMatthias Ringwald  * @param type 0 = current transmit level, 1 = max transmit level
77044751e25SMatthias Ringwald  */
77144751e25SMatthias Ringwald const hci_cmd_t hci_read_transmit_power_level = {
772ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_TRANSMIT_POWER_LEVEL, "11"
77344751e25SMatthias Ringwald };
77444751e25SMatthias Ringwald 
77544751e25SMatthias Ringwald /**
77656042629SMatthias Ringwald  * @param synchronous_flow_control_enable - if yes, num completed packet everts are sent for SCO packets
77756042629SMatthias Ringwald  */
77856042629SMatthias Ringwald const hci_cmd_t hci_write_synchronous_flow_control_enable = {
779ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE, "1"
78056042629SMatthias Ringwald };
78156042629SMatthias Ringwald 
7822b838201SMatthias Ringwald #ifdef ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL
7832b838201SMatthias Ringwald 
7842b838201SMatthias Ringwald /**
7852b838201SMatthias Ringwald  * @param flow_control_enable - 0: off, 1: ACL only, 2: SCO only, 3: ACL + SCO
7862b838201SMatthias Ringwald  */
7872b838201SMatthias Ringwald const hci_cmd_t hci_set_controller_to_host_flow_control = {
788ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL, "1"
7892b838201SMatthias Ringwald };
7902b838201SMatthias Ringwald 
79156042629SMatthias Ringwald /**
79256042629SMatthias Ringwald  * @param host_acl_data_packet_length
79356042629SMatthias Ringwald  * @param host_synchronous_data_packet_length
79456042629SMatthias Ringwald  * @param host_total_num_acl_data_packets
79556042629SMatthias Ringwald  * @param host_total_num_synchronous_data_packets
79656042629SMatthias Ringwald  */
79756042629SMatthias Ringwald const hci_cmd_t hci_host_buffer_size = {
798ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_HOST_BUFFER_SIZE, "2122"
79956042629SMatthias Ringwald };
80056042629SMatthias Ringwald 
8019119d792SMilanka Ringwald 
8022b838201SMatthias Ringwald #if 0
8032b838201SMatthias Ringwald //
8042b838201SMatthias Ringwald // command sent manually sent by hci_host_num_completed_packets
8052b838201SMatthias Ringwald //
8062b838201SMatthias Ringwald /**
8072b838201SMatthias Ringwald  * @note only single handle supported by BTstack command generator
8082b838201SMatthias Ringwald  * @param number_of_handles must be 1
8092b838201SMatthias Ringwald  * @param connection_handle
8102b838201SMatthias Ringwald  * @param host_num_of_completed_packets for the given connection handle
8112b838201SMatthias Ringwald  */
8122b838201SMatthias Ringwald const hci_cmd_t hci_host_number_of_completed_packets = {
813ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS, "1H2"
8142b838201SMatthias Ringwald };
8152b838201SMatthias Ringwald #endif
8162b838201SMatthias Ringwald 
8172b838201SMatthias Ringwald #endif
8182b838201SMatthias Ringwald 
81956042629SMatthias Ringwald /**
82056042629SMatthias Ringwald  * @param handle
82156042629SMatthias Ringwald  */
82256042629SMatthias Ringwald const hci_cmd_t hci_read_link_supervision_timeout = {
823ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LINK_SUPERVISION_TIMEOUT, "H"
82456042629SMatthias Ringwald };
82556042629SMatthias Ringwald 
82656042629SMatthias Ringwald /**
82756042629SMatthias Ringwald  * @param handle
82856042629SMatthias Ringwald  * @param timeout (0x0001 - 0xFFFF Time -> Range: 0.625ms - 40.9 sec)
82956042629SMatthias Ringwald  */
83056042629SMatthias Ringwald const hci_cmd_t hci_write_link_supervision_timeout = {
831ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LINK_SUPERVISION_TIMEOUT, "H2"
83256042629SMatthias Ringwald };
83356042629SMatthias Ringwald 
83456042629SMatthias Ringwald /**
8359119d792SMilanka Ringwald  * @param num_current_iac must be 2
8369119d792SMilanka Ringwald  * @param iac_lap1
8379119d792SMilanka Ringwald  * @param iac_lap2
8389119d792SMilanka Ringwald  */
8399119d792SMilanka Ringwald const hci_cmd_t hci_write_current_iac_lap_two_iacs = {
840ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_CURRENT_IAC_LAP_TWO_IACS, "133"
8419119d792SMilanka Ringwald };
8429119d792SMilanka Ringwald 
8439119d792SMilanka Ringwald /**
8445769fd77SMatthias Ringwald  * @param inquiry_scan_type (0x00 = standard, 0x01 = interlaced)
8455769fd77SMatthias Ringwald  */
8465769fd77SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_type = {
8475769fd77SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_TYPE,  "1"
8485769fd77SMatthias Ringwald };
8495769fd77SMatthias Ringwald 
8505769fd77SMatthias Ringwald /**
85156042629SMatthias Ringwald  * @param inquiry_mode (0x00 = standard, 0x01 = with RSSI, 0x02 = extended)
85256042629SMatthias Ringwald  */
85356042629SMatthias Ringwald const hci_cmd_t hci_write_inquiry_mode = {
854ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_MODE, "1"
85556042629SMatthias Ringwald };
85656042629SMatthias Ringwald 
85756042629SMatthias Ringwald /**
8585769fd77SMatthias Ringwald  * @param page_scan_type (0x00 = standard, 0x01 = interlaced)
8595769fd77SMatthias Ringwald  */
8605769fd77SMatthias Ringwald const hci_cmd_t hci_write_page_scan_type = {
8615769fd77SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_SCAN_TYPE, "1"
8625769fd77SMatthias Ringwald };
8635769fd77SMatthias Ringwald 
8645769fd77SMatthias Ringwald /**
86556042629SMatthias Ringwald  * @param fec_required
86656042629SMatthias Ringwald  * @param exstended_inquiry_response
86756042629SMatthias Ringwald  */
86856042629SMatthias Ringwald const hci_cmd_t hci_write_extended_inquiry_response = {
869ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_EXTENDED_INQUIRY_RESPONSE, "1E"
87056042629SMatthias Ringwald };
87156042629SMatthias Ringwald 
87256042629SMatthias Ringwald /**
87356042629SMatthias Ringwald  * @param mode (0 = off, 1 = on)
87456042629SMatthias Ringwald  */
87556042629SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_mode = {
876ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_MODE, "1"
87756042629SMatthias Ringwald };
87856042629SMatthias Ringwald 
879237daac5SMatthias Ringwald /**
880237daac5SMatthias Ringwald  */
881237daac5SMatthias Ringwald const hci_cmd_t hci_read_local_oob_data = {
882ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_OOB_DATA, ""
883237daac5SMatthias Ringwald     // return status, C, R
884237daac5SMatthias Ringwald };
885483c5078SMatthias Ringwald 
886483c5078SMatthias Ringwald /**
887483c5078SMatthias Ringwald  * @param mode (0 = off, 1 = on)
888483c5078SMatthias Ringwald  */
889483c5078SMatthias Ringwald const hci_cmd_t hci_write_default_erroneous_data_reporting = {
890ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING, "1"
891483c5078SMatthias Ringwald };
892483c5078SMatthias Ringwald 
89356042629SMatthias Ringwald /**
89456042629SMatthias Ringwald  */
89556042629SMatthias Ringwald const hci_cmd_t hci_read_le_host_supported = {
896ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LE_HOST_SUPPORTED, ""
89756042629SMatthias Ringwald     // return: status, le supported host, simultaneous le host
89856042629SMatthias Ringwald };
89956042629SMatthias Ringwald 
90056042629SMatthias Ringwald /**
90156042629SMatthias Ringwald  * @param le_supported_host
90256042629SMatthias Ringwald  * @param simultaneous_le_host
90356042629SMatthias Ringwald  */
90456042629SMatthias Ringwald const hci_cmd_t hci_write_le_host_supported = {
905ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LE_HOST_SUPPORTED, "11"
90656042629SMatthias Ringwald     // return: status
90756042629SMatthias Ringwald };
90856042629SMatthias Ringwald 
90956042629SMatthias Ringwald /**
910b002ae8cSMatthias Ringwald  * @param secure_connections_host_support
911b002ae8cSMatthias Ringwald  */
912b002ae8cSMatthias Ringwald const hci_cmd_t hci_write_secure_connections_host_support = {
913ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT, "1"
914b002ae8cSMatthias Ringwald     // return: status
915b002ae8cSMatthias Ringwald };
916b002ae8cSMatthias Ringwald 
917b002ae8cSMatthias Ringwald /**
918237daac5SMatthias Ringwald  */
919bb75dd7dSMatthias Ringwald const hci_cmd_t hci_read_local_extended_oob_data = {
9201849becdSMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_EXTENDED_OOB_DATA, ""
921237daac5SMatthias Ringwald     // return status, C_192, R_192, R_256, C_256
922237daac5SMatthias Ringwald };
923237daac5SMatthias Ringwald 
924237daac5SMatthias Ringwald 
925237daac5SMatthias Ringwald /**
92656042629SMatthias Ringwald  * Testing Commands
92756042629SMatthias Ringwald  */
92856042629SMatthias Ringwald 
92956042629SMatthias Ringwald 
93056042629SMatthias Ringwald /**
93156042629SMatthias Ringwald  */
93256042629SMatthias Ringwald const hci_cmd_t hci_read_loopback_mode = {
933ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOOPBACK_MODE, ""
93456042629SMatthias Ringwald     // return: status, loopback mode (0 = off, 1 = local loopback, 2 = remote loopback)
93556042629SMatthias Ringwald };
93656042629SMatthias Ringwald 
93756042629SMatthias Ringwald /**
93856042629SMatthias Ringwald  * @param loopback_mode
93956042629SMatthias Ringwald  */
94056042629SMatthias Ringwald const hci_cmd_t hci_write_loopback_mode = {
941ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LOOPBACK_MODE, "1"
94256042629SMatthias Ringwald     // return: status
94356042629SMatthias Ringwald };
94456042629SMatthias Ringwald 
94584ca9bd8SMatthias Ringwald /**
94684ca9bd8SMatthias Ringwald  */
94784ca9bd8SMatthias Ringwald const hci_cmd_t hci_enable_device_under_test_mode = {
948ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENABLE_DEVICE_UNDER_TEST_MODE, ""
94984ca9bd8SMatthias Ringwald     // return: status
95084ca9bd8SMatthias Ringwald };
95184ca9bd8SMatthias Ringwald 
95284ca9bd8SMatthias Ringwald /**
95384ca9bd8SMatthias Ringwald  * @param simple_pairing_debug_mode
95484ca9bd8SMatthias Ringwald  */
95584ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_debug_mode = {
956ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE, "1"
95784ca9bd8SMatthias Ringwald     // return: status
95884ca9bd8SMatthias Ringwald };
95984ca9bd8SMatthias Ringwald 
96084ca9bd8SMatthias Ringwald /**
96184ca9bd8SMatthias Ringwald  * @param handle
96284ca9bd8SMatthias Ringwald  * @param dm1_acl_u_mode
96384ca9bd8SMatthias Ringwald  * @param esco_loopback_mode
96484ca9bd8SMatthias Ringwald  */
96584ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_secure_connections_test_mode = {
966ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE, "H11"
96784ca9bd8SMatthias Ringwald     // return: status
96884ca9bd8SMatthias Ringwald };
96984ca9bd8SMatthias Ringwald 
97056042629SMatthias Ringwald 
97156042629SMatthias Ringwald /**
97256042629SMatthias Ringwald  * Informational Parameters
97356042629SMatthias Ringwald  */
97456042629SMatthias Ringwald 
97556042629SMatthias Ringwald const hci_cmd_t hci_read_local_version_information = {
976ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_VERSION_INFORMATION, ""
97756042629SMatthias Ringwald };
97856042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_commands = {
979ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_COMMANDS, ""
98056042629SMatthias Ringwald };
98156042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_features = {
982ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_FEATURES, ""
98356042629SMatthias Ringwald };
98456042629SMatthias Ringwald const hci_cmd_t hci_read_buffer_size = {
985ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_BUFFER_SIZE, ""
98656042629SMatthias Ringwald };
98756042629SMatthias Ringwald const hci_cmd_t hci_read_bd_addr = {
988ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_BD_ADDR, ""
98956042629SMatthias Ringwald };
99056042629SMatthias Ringwald 
99156042629SMatthias Ringwald /**
99256042629SMatthias Ringwald  * Status Paramters
99356042629SMatthias Ringwald  */
99456042629SMatthias Ringwald 
99556042629SMatthias Ringwald /**
99656042629SMatthias Ringwald  * @param handle
99756042629SMatthias Ringwald  */
99856042629SMatthias Ringwald const hci_cmd_t hci_read_rssi = {
999ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_RSSI, "H"
100056042629SMatthias Ringwald };
100156042629SMatthias Ringwald 
100297abfa24SMatthias Ringwald /**
100397abfa24SMatthias Ringwald  * @param handle
100497abfa24SMatthias Ringwald  */
100597abfa24SMatthias Ringwald const hci_cmd_t hci_read_encryption_key_size = {
1006ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_ENCRYPTION_KEY_SIZE, "H"
100797abfa24SMatthias Ringwald };
100856042629SMatthias Ringwald 
100956042629SMatthias Ringwald 
1010a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE
101156042629SMatthias Ringwald /**
101256042629SMatthias Ringwald  * Low Energy Commands
101356042629SMatthias Ringwald  */
101456042629SMatthias Ringwald 
101556042629SMatthias Ringwald /**
101656042629SMatthias Ringwald  * @param event_mask_lower_octets
101756042629SMatthias Ringwald  * @param event_mask_higher_octets
101856042629SMatthias Ringwald  */
101956042629SMatthias Ringwald const hci_cmd_t hci_le_set_event_mask = {
1020ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_EVENT_MASK, "44"
102156042629SMatthias Ringwald     // return: status
102256042629SMatthias Ringwald };
102356042629SMatthias Ringwald 
102456042629SMatthias Ringwald const hci_cmd_t hci_le_read_buffer_size = {
1025ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_BUFFER_SIZE, ""
102656042629SMatthias Ringwald     // return: status, le acl data packet len (16), total num le acl data packets(8)
102756042629SMatthias Ringwald };
102856042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_features = {
1029ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUPPORTED_FEATURES, ""
103056042629SMatthias Ringwald     // return: LE_Features See [Vol 6] Part B, Section 4.6
103156042629SMatthias Ringwald };
103256042629SMatthias Ringwald 
103356042629SMatthias Ringwald /**
103456042629SMatthias Ringwald  * @param random_bd_addr
103556042629SMatthias Ringwald  */
103656042629SMatthias Ringwald const hci_cmd_t hci_le_set_random_address = {
1037ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_RANDOM_ADDRESS, "B"
103856042629SMatthias Ringwald     // return: status
103956042629SMatthias Ringwald };
104056042629SMatthias Ringwald 
104156042629SMatthias Ringwald /**
104256042629SMatthias Ringwald  * @param advertising_interval_min ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec)
104356042629SMatthias Ringwald  * @param advertising_interval_max ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec)
104456042629SMatthias Ringwald  * @param advertising_type (enum from 0: ADV_IND, ADC_DIRECT_IND, ADV_SCAN_IND, ADV_NONCONN_IND)
104556042629SMatthias Ringwald  * @param own_address_type (enum from 0: public device address, random device address)
104656042629SMatthias Ringwald  * @param direct_address_type ()
104756042629SMatthias Ringwald  * @param direct_address (public or random address of device to be connecteed)
104856042629SMatthias Ringwald  * @param advertising_channel_map (flags: chan_37(1), chan_38(2), chan_39(4))
104956042629SMatthias Ringwald  * @param advertising_filter_policy (enum from 0: scan any conn any, scan whitelist, con any, scan any conn whitelist, scan whitelist, con whitelist)
105056042629SMatthias Ringwald  */
105156042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_parameters = {
1052ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISING_PARAMETERS, "22111B11"
105356042629SMatthias Ringwald     // return: status
105456042629SMatthias Ringwald };
105556042629SMatthias Ringwald 
105656042629SMatthias Ringwald const hci_cmd_t hci_le_read_advertising_channel_tx_power = {
1057ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER, ""
105856042629SMatthias Ringwald     // return: status, level [-20,10] signed int (8), units dBm
105956042629SMatthias Ringwald };
106056042629SMatthias Ringwald 
106156042629SMatthias Ringwald /**
106256042629SMatthias Ringwald  * @param advertising_data_length
106356042629SMatthias Ringwald  * @param advertising_data (31 bytes)
106456042629SMatthias Ringwald  */
106556042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_data= {
1066ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISING_DATA, "1A"
106756042629SMatthias Ringwald     // return: status
106856042629SMatthias Ringwald };
106956042629SMatthias Ringwald 
107056042629SMatthias Ringwald /**
107156042629SMatthias Ringwald  * @param scan_response_data_length
107256042629SMatthias Ringwald  * @param scan_response_data (31 bytes)
107356042629SMatthias Ringwald  */
107456042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_response_data= {
1075ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_RESPONSE_DATA, "1A"
107656042629SMatthias Ringwald     // return: status
107756042629SMatthias Ringwald };
107856042629SMatthias Ringwald 
107956042629SMatthias Ringwald /**
108056042629SMatthias Ringwald  * @param advertise_enable (off: 0, on: 1)
108156042629SMatthias Ringwald  */
108256042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertise_enable = {
1083ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISE_ENABLE, "1"
108456042629SMatthias Ringwald     // return: status
108556042629SMatthias Ringwald };
108656042629SMatthias Ringwald 
108756042629SMatthias Ringwald /**
108856042629SMatthias Ringwald  * @param le_scan_type (passive (0), active (1))
108956042629SMatthias Ringwald  * @param le_scan_interval ([0x0004,0x4000], unit: 0.625 msec)
109056042629SMatthias Ringwald  * @param le_scan_window   ([0x0004,0x4000], unit: 0.625 msec)
109156042629SMatthias Ringwald  * @param own_address_type (public (0), random (1))
109256042629SMatthias Ringwald  * @param scanning_filter_policy (any (0), only whitelist (1))
109356042629SMatthias Ringwald  */
109456042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_parameters = {
1095ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_PARAMETERS, "12211"
109656042629SMatthias Ringwald     // return: status
109756042629SMatthias Ringwald };
109856042629SMatthias Ringwald 
109956042629SMatthias Ringwald /**
110056042629SMatthias Ringwald  * @param le_scan_enable  (disabled (0), enabled (1))
110156042629SMatthias Ringwald  * @param filter_duplices (disabled (0), enabled (1))
110256042629SMatthias Ringwald  */
110356042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_enable = {
1104ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_ENABLE, "11"
110556042629SMatthias Ringwald     // return: status
110656042629SMatthias Ringwald };
110756042629SMatthias Ringwald 
110856042629SMatthias Ringwald /**
110956042629SMatthias Ringwald  * @param le_scan_interval ([0x0004, 0x4000], unit: 0.625 msec)
111056042629SMatthias Ringwald  * @param le_scan_window ([0x0004, 0x4000], unit: 0.625 msec)
111156042629SMatthias Ringwald  * @param initiator_filter_policy (peer address type + peer address (0), whitelist (1))
111256042629SMatthias Ringwald  * @param peer_address_type (public (0), random (1))
111356042629SMatthias Ringwald  * @param peer_address
111456042629SMatthias Ringwald  * @param own_address_type (public (0), random (1))
111556042629SMatthias Ringwald  * @param conn_interval_min ([0x0006, 0x0c80], unit: 1.25 msec)
111656042629SMatthias Ringwald  * @param conn_interval_max ([0x0006, 0x0c80], unit: 1.25 msec)
111756042629SMatthias Ringwald  * @param conn_latency (number of connection events [0x0000, 0x01f4])
111856042629SMatthias Ringwald  * @param supervision_timeout ([0x000a, 0x0c80], unit: 10 msec)
111956042629SMatthias Ringwald  * @param minimum_CE_length ([0x0000, 0xffff], unit: 0.625 msec)
112056042629SMatthias Ringwald  * @param maximum_CE_length ([0x0000, 0xffff], unit: 0.625 msec)
112156042629SMatthias Ringwald  */
112256042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection= {
1123ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CREATE_CONNECTION, "2211B1222222"
112456042629SMatthias Ringwald     // return: none -> le create connection complete event
112556042629SMatthias Ringwald };
112656042629SMatthias Ringwald 
112756042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection_cancel = {
1128ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CREATE_CONNECTION_CANCEL, ""
112956042629SMatthias Ringwald     // return: status
113056042629SMatthias Ringwald };
113156042629SMatthias Ringwald 
113256042629SMatthias Ringwald const hci_cmd_t hci_le_read_white_list_size = {
1133ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_WHITE_LIST_SIZE, ""
113456042629SMatthias Ringwald     // return: status, number of entries in controller whitelist
113556042629SMatthias Ringwald };
113656042629SMatthias Ringwald 
113756042629SMatthias Ringwald const hci_cmd_t hci_le_clear_white_list = {
1138ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CLEAR_WHITE_LIST, ""
113956042629SMatthias Ringwald     // return: status
114056042629SMatthias Ringwald };
114156042629SMatthias Ringwald 
114256042629SMatthias Ringwald /**
114356042629SMatthias Ringwald  * @param address_type (public (0), random (1))
114456042629SMatthias Ringwald  * @param bd_addr
114556042629SMatthias Ringwald  */
114656042629SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_white_list = {
1147ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_WHITE_LIST, "1B"
114856042629SMatthias Ringwald     // return: status
114956042629SMatthias Ringwald };
115056042629SMatthias Ringwald 
115156042629SMatthias Ringwald /**
115256042629SMatthias Ringwald  * @param address_type (public (0), random (1))
115356042629SMatthias Ringwald  * @param bd_addr
115456042629SMatthias Ringwald  */
115556042629SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_white_list = {
1156ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST, "1B"
115756042629SMatthias Ringwald     // return: status
115856042629SMatthias Ringwald };
115956042629SMatthias Ringwald 
116056042629SMatthias Ringwald /**
116156042629SMatthias Ringwald  * @param conn_handle
116256042629SMatthias Ringwald  * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec)
116356042629SMatthias Ringwald  * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec)
116456042629SMatthias Ringwald  * @param conn_latency ([0x0000,0x03e8], number of connection events)
116556042629SMatthias Ringwald  * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec)
116656042629SMatthias Ringwald  * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
116756042629SMatthias Ringwald  * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
116856042629SMatthias Ringwald  */
116956042629SMatthias Ringwald const hci_cmd_t hci_le_connection_update = {
1170ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CONNECTION_UPDATE, "H222222"
117156042629SMatthias Ringwald     // return: none -> le connection update complete event
117256042629SMatthias Ringwald };
117356042629SMatthias Ringwald 
117456042629SMatthias Ringwald /**
117556042629SMatthias Ringwald  * @param channel_map_lower_32bits
117656042629SMatthias Ringwald  * @param channel_map_higher_5bits
117756042629SMatthias Ringwald  */
117856042629SMatthias Ringwald const hci_cmd_t hci_le_set_host_channel_classification = {
1179ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION, "41"
118056042629SMatthias Ringwald     // return: status
118156042629SMatthias Ringwald };
118256042629SMatthias Ringwald 
118356042629SMatthias Ringwald /**
118456042629SMatthias Ringwald  * @param conn_handle
118556042629SMatthias Ringwald  */
118656042629SMatthias Ringwald const hci_cmd_t hci_le_read_channel_map = {
1187ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_CHANNEL_MAP, "H"
118856042629SMatthias Ringwald     // return: status, connection handle, channel map (5 bytes, 37 used)
118956042629SMatthias Ringwald };
119056042629SMatthias Ringwald 
119156042629SMatthias Ringwald /**
119256042629SMatthias Ringwald  * @param conn_handle
119356042629SMatthias Ringwald  */
119456042629SMatthias Ringwald const hci_cmd_t hci_le_read_remote_used_features = {
1195ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_REMOTE_USED_FEATURES, "H"
119656042629SMatthias Ringwald     // return: none -> le read remote used features complete event
119756042629SMatthias Ringwald };
119856042629SMatthias Ringwald 
119956042629SMatthias Ringwald /**
120056042629SMatthias Ringwald  * @param key ((128) for AES-128)
120156042629SMatthias Ringwald  * @param plain_text (128)
120256042629SMatthias Ringwald  */
120356042629SMatthias Ringwald const hci_cmd_t hci_le_encrypt = {
1204ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_ENCRYPT, "PP"
120556042629SMatthias Ringwald     // return: status, encrypted data (128)
120656042629SMatthias Ringwald };
120756042629SMatthias Ringwald 
120856042629SMatthias Ringwald const hci_cmd_t hci_le_rand = {
1209ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_RAND, ""
121056042629SMatthias Ringwald     // return: status, random number (64)
121156042629SMatthias Ringwald };
121256042629SMatthias Ringwald 
121356042629SMatthias Ringwald /**
121456042629SMatthias Ringwald  * @param conn_handle
121556042629SMatthias Ringwald  * @param random_number_lower_32bits
121656042629SMatthias Ringwald  * @param random_number_higher_32bits
121756042629SMatthias Ringwald  * @param encryption_diversifier (16)
121856042629SMatthias Ringwald  * @param long_term_key (128)
121956042629SMatthias Ringwald  */
122056042629SMatthias Ringwald const hci_cmd_t hci_le_start_encryption = {
1221ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_START_ENCRYPTION, "H442P"
122256042629SMatthias Ringwald     // return: none -> encryption changed or encryption key refresh complete event
122356042629SMatthias Ringwald };
122456042629SMatthias Ringwald 
122556042629SMatthias Ringwald /**
122656042629SMatthias Ringwald  * @param connection_handle
122756042629SMatthias Ringwald  * @param long_term_key (128)
122856042629SMatthias Ringwald  */
122956042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_request_reply = {
1230ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_LONG_TERM_KEY_REQUEST_REPLY, "HP"
123156042629SMatthias Ringwald     // return: status, connection handle
123256042629SMatthias Ringwald };
123356042629SMatthias Ringwald 
123456042629SMatthias Ringwald /**
123556042629SMatthias Ringwald  * @param conn_handle
123656042629SMatthias Ringwald  */
123756042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_negative_reply = {
1238ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_LONG_TERM_KEY_NEGATIVE_REPLY, "H"
123956042629SMatthias Ringwald     // return: status, connection handle
124056042629SMatthias Ringwald };
124156042629SMatthias Ringwald 
124256042629SMatthias Ringwald /**
124356042629SMatthias Ringwald  * @param conn_handle
124456042629SMatthias Ringwald  */
124556042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_states = {
1246ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUPPORTED_STATES, "H"
124756042629SMatthias Ringwald     // return: status, LE states (64)
124856042629SMatthias Ringwald };
124956042629SMatthias Ringwald 
125056042629SMatthias Ringwald /**
125156042629SMatthias Ringwald  * @param rx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2)
125256042629SMatthias Ringwald  */
125356042629SMatthias Ringwald const hci_cmd_t hci_le_receiver_test = {
1254ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_RECEIVER_TEST, "1"
125556042629SMatthias Ringwald     // return: status
125656042629SMatthias Ringwald };
125756042629SMatthias Ringwald 
125856042629SMatthias Ringwald /**
125956042629SMatthias Ringwald  * @param tx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2)
126056042629SMatthias Ringwald  * @param test_payload_lengh ([0x00,0x25])
126156042629SMatthias Ringwald  * @param packet_payload ([0,7] different patterns)
126256042629SMatthias Ringwald  */
126356042629SMatthias Ringwald const hci_cmd_t hci_le_transmitter_test = {
1264ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_TRANSMITTER_TEST, "111"
126556042629SMatthias Ringwald     // return: status
126656042629SMatthias Ringwald };
126756042629SMatthias Ringwald 
126856042629SMatthias Ringwald /**
126956042629SMatthias Ringwald  * @param end_test_cmd
127056042629SMatthias Ringwald  */
127156042629SMatthias Ringwald const hci_cmd_t hci_le_test_end = {
1272ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_TEST_END, "1"
127356042629SMatthias Ringwald     // return: status, number of packets (8)
127456042629SMatthias Ringwald };
127582180fcaSMatthias Ringwald 
127682180fcaSMatthias Ringwald /**
1277fe704c95SMatthias Ringwald  * @param conn_handle
1278fe704c95SMatthias Ringwald  * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec)
1279fe704c95SMatthias Ringwald  * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec)
1280fe704c95SMatthias Ringwald  * @param conn_latency ([0x0000,0x03e8], number of connection events)
1281fe704c95SMatthias Ringwald  * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec)
1282fe704c95SMatthias Ringwald  * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
1283fe704c95SMatthias Ringwald  * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
1284fe704c95SMatthias Ringwald  */
1285fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_reply = {
1286ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY, "H222222"
1287fe704c95SMatthias Ringwald     // return: status, connection handle
1288fe704c95SMatthias Ringwald };
1289fe704c95SMatthias Ringwald 
1290fe704c95SMatthias Ringwald /**
1291fe704c95SMatthias Ringwald  * @param con_handle
1292fe704c95SMatthias Ringwald  * @param reason
1293fe704c95SMatthias Ringwald  */
1294fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_negative_reply = {
1295ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY, "H1"
1296fe704c95SMatthias Ringwald     // return: status, connection handle
1297fe704c95SMatthias Ringwald };
1298fe704c95SMatthias Ringwald 
1299fe704c95SMatthias Ringwald /**
13000ea2847fSMatthias Ringwald  * @param con_handle
13010ea2847fSMatthias Ringwald  * @param tx_octets
13020ea2847fSMatthias Ringwald  * @param tx_time
13030ea2847fSMatthias Ringwald  */
13040ea2847fSMatthias Ringwald const hci_cmd_t hci_le_set_data_length = {
1305ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_DATA_LENGTH, "H22"
13060ea2847fSMatthias Ringwald     // return: status, connection handle
13070ea2847fSMatthias Ringwald };
13080ea2847fSMatthias Ringwald 
13090ea2847fSMatthias Ringwald /**
13100ea2847fSMatthias Ringwald  */
13110ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_suggested_default_data_length = {
1312ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH, ""
13130ea2847fSMatthias Ringwald     // return: status, suggested max tx octets, suggested max tx time
13140ea2847fSMatthias Ringwald };
13150ea2847fSMatthias Ringwald 
13160ea2847fSMatthias Ringwald /**
13170ea2847fSMatthias Ringwald  * @param suggested_max_tx_octets
13180ea2847fSMatthias Ringwald  * @param suggested_max_tx_time
13190ea2847fSMatthias Ringwald  */
13200ea2847fSMatthias Ringwald const hci_cmd_t hci_le_write_suggested_default_data_length = {
1321ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH, "22"
13220ea2847fSMatthias Ringwald     // return: status
13230ea2847fSMatthias Ringwald };
13240ea2847fSMatthias Ringwald 
13250ea2847fSMatthias Ringwald /**
132682180fcaSMatthias Ringwald  */
132782180fcaSMatthias Ringwald const hci_cmd_t hci_le_read_local_p256_public_key = {
1328ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_LOCAL_P256_PUBLIC_KEY, ""
132982180fcaSMatthias Ringwald //  LE Read Local P-256 Public Key Complete is generated on completion
133082180fcaSMatthias Ringwald };
133182180fcaSMatthias Ringwald 
133282180fcaSMatthias Ringwald /**
1333fcae305fSMatthias Ringwald  * @param public key
1334fcae305fSMatthias Ringwald  * @param private key
133582180fcaSMatthias Ringwald  */
133682180fcaSMatthias Ringwald const hci_cmd_t hci_le_generate_dhkey = {
1337ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_GENERATE_DHKEY, "QQ"
133882180fcaSMatthias Ringwald // LE Generate DHKey Complete is generated on completion
133982180fcaSMatthias Ringwald };
134082180fcaSMatthias Ringwald 
13410ea2847fSMatthias Ringwald /**
1342173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1343173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1344173ed1a3SMatthias Ringwald  * @param Peer_IRK
1345173ed1a3SMatthias Ringwald  * @param Local_IRK
1346173ed1a3SMatthias Ringwald  */
1347173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_resolving_list = {
1348173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST, "1BPP"
1349173ed1a3SMatthias Ringwald };
1350173ed1a3SMatthias Ringwald 
1351173ed1a3SMatthias Ringwald /**
1352173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1353173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1354173ed1a3SMatthias Ringwald  */
1355173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_resolving_list = {
1356173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST, "1B"
1357173ed1a3SMatthias Ringwald };
1358173ed1a3SMatthias Ringwald 
1359173ed1a3SMatthias Ringwald /**
1360173ed1a3SMatthias Ringwald  */
1361173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_clear_resolving_list = {
1362173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_CLEAR_RESOLVING_LIST, ""
1363173ed1a3SMatthias Ringwald };
1364173ed1a3SMatthias Ringwald 
1365173ed1a3SMatthias Ringwald /**
1366173ed1a3SMatthias Ringwald  */
1367173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_resolving_list_size = {
1368173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_RESOLVING_LIST_SIZE, ""
1369173ed1a3SMatthias Ringwald };
1370173ed1a3SMatthias Ringwald 
1371173ed1a3SMatthias Ringwald /**
1372173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1373173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1374173ed1a3SMatthias Ringwald  */
1375173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_peer_resolvable_address = {
1376173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_PEER_RESOLVABLE_ADDRESS, ""
1377173ed1a3SMatthias Ringwald };
1378173ed1a3SMatthias Ringwald 
1379173ed1a3SMatthias Ringwald /**
1380173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1381173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1382173ed1a3SMatthias Ringwald  */
1383173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_local_resolvable_address = {
1384173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS, ""
1385173ed1a3SMatthias Ringwald };
1386173ed1a3SMatthias Ringwald 
1387173ed1a3SMatthias Ringwald /**
1388173ed1a3SMatthias Ringwald  * @param Address_Resolution_Enable
1389173ed1a3SMatthias Ringwald  */
1390173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_address_resolution_enabled= {
1391173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_SET_ADDRESS_RESOLUTION_ENABLED, "1"
1392173ed1a3SMatthias Ringwald };
1393173ed1a3SMatthias Ringwald 
1394173ed1a3SMatthias Ringwald /**
1395173ed1a3SMatthias Ringwald  * @param RPA_Timeout in seconds, range 0x0001 to 0x0E10, default: 900 s
1396173ed1a3SMatthias Ringwald  */
1397173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_resolvable_private_address_timeout= {
1398173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT, "2"
1399173ed1a3SMatthias Ringwald };
1400173ed1a3SMatthias Ringwald 
1401173ed1a3SMatthias Ringwald /**
14020ea2847fSMatthias Ringwald  */
14030ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_maximum_data_length = {
1404ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_MAXIMUM_DATA_LENGTH, ""
14050ea2847fSMatthias Ringwald     // return: status, supported max tx octets, supported max tx time, supported max rx octets, supported max rx time
14060ea2847fSMatthias Ringwald };
14070ea2847fSMatthias Ringwald 
1408ca13daefSMatthias Ringwald /**
1409ca13daefSMatthias Ringwald  * @param con_handle
1410ca13daefSMatthias Ringwald  */
1411ca13daefSMatthias Ringwald const hci_cmd_t hci_le_read_phy = {
1412ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_PHY, "H"
1413ca13daefSMatthias Ringwald     // return: status, connection handler, tx phy, rx phy
1414ca13daefSMatthias Ringwald };
1415ca13daefSMatthias Ringwald 
1416ca13daefSMatthias Ringwald /**
1417ca13daefSMatthias Ringwald  * @param all_phys
1418ca13daefSMatthias Ringwald  * @param tx_phys
1419ca13daefSMatthias Ringwald  * @param rx_phys
1420ca13daefSMatthias Ringwald  */
1421ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_default_phy = {
1422ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_DEFAULT_PHY, "111"
1423ca13daefSMatthias Ringwald     // return: status
1424ca13daefSMatthias Ringwald };
1425ca13daefSMatthias Ringwald 
1426ca13daefSMatthias Ringwald /**
1427ca13daefSMatthias Ringwald  * @param con_handle
1428ca13daefSMatthias Ringwald  * @param all_phys
1429ca13daefSMatthias Ringwald  * @param tx_phys
1430ca13daefSMatthias Ringwald  * @param rx_phys
1431ca13daefSMatthias Ringwald  * @param phy_options
1432ca13daefSMatthias Ringwald  */
1433ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_phy = {
1434ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_PHY, "H1111"
1435ca13daefSMatthias Ringwald // LE PHY Update Complete is generated on completion
1436ca13daefSMatthias Ringwald };
1437ca13daefSMatthias Ringwald 
1438ca13daefSMatthias Ringwald 
143956042629SMatthias Ringwald #endif
1440a42798c3SMatthias Ringwald 
1441a42798c3SMatthias Ringwald // Broadcom / Cypress specific HCI commands
1442a42798c3SMatthias Ringwald 
1443a42798c3SMatthias Ringwald /**
1444067ecc36SMatthias Ringwald  * @brief Enable Wide-Band Speech / mSBC decoding for PCM
1445067ecc36SMatthias Ringwald  * @param enable_wbs is 0 for disable, 1 for enable
1446067ecc36SMatthias Ringwald  * @param uuid_wbs is 2 for EV2/EV3
1447067ecc36SMatthias Ringwald  */
1448067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_enable_wbs = {
1449067ecc36SMatthias Ringwald         HCI_OPCODE_HCI_BCM_ENABLE_WBS, "12"
1450067ecc36SMatthias Ringwald         // return: status
1451067ecc36SMatthias Ringwald };
1452067ecc36SMatthias Ringwald 
1453067ecc36SMatthias Ringwald /**
1454a42798c3SMatthias Ringwald  * @brief Configure SCO Routing (BCM)
1455a42798c3SMatthias Ringwald  * @param sco_routing is 0 for PCM, 1 for Transport, 2 for Codec and 3 for I2S
1456a42798c3SMatthias Ringwald  * @param pcm_interface_rate is 0 for 128KBps, 1 for 256 KBps, 2 for 512KBps, 3 for 1024KBps, and 4 for 2048Kbps
1457a42798c3SMatthias Ringwald  * @param frame_type is 0 for short and 1 for long
1458a42798c3SMatthias Ringwald  * @param sync_mode is 0 for slave and 1 for master
1459a42798c3SMatthias Ringwald  * @param clock_mode is 0 for slabe and 1 for master
1460a42798c3SMatthias Ringwald  */
1461a42798c3SMatthias Ringwald const hci_cmd_t hci_bcm_write_sco_pcm_int = {
1462ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_WRITE_SCO_PCM_INT, "11111"
1463a42798c3SMatthias Ringwald     // return: status
1464a42798c3SMatthias Ringwald };
1465eab6959fSMatthias Ringwald 
1466eab6959fSMatthias Ringwald /**
1467067ecc36SMatthias Ringwald  * @brief Configure the I2S/PCM interface (BCM)
1468067ecc36SMatthias Ringwald  * @param i2s_enable is 0 for off, 1 for on
1469067ecc36SMatthias Ringwald  * @param is_master is 0 for slave, is 1 for master
1470067ecc36SMatthias Ringwald  * @param sample_rate is 0 for 8 kHz, 1 for 16 kHz, 2 for 4 kHz
1471067ecc36SMatthias 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
1472067ecc36SMatthias Ringwald  * @param clock_mode is 0 for slabe and 1 for master
1473067ecc36SMatthias Ringwald  */
1474067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_write_i2spcm_interface_param = {
1475067ecc36SMatthias Ringwald         HCI_OPCODE_HCI_BCM_WRITE_I2SPCM_INTERFACE_PARAM, "1111"
1476067ecc36SMatthias Ringwald         // return: status
1477067ecc36SMatthias Ringwald };
1478067ecc36SMatthias Ringwald 
1479067ecc36SMatthias Ringwald 
1480067ecc36SMatthias Ringwald /**
1481eab6959fSMatthias Ringwald  * @brief Activates selected Sleep Mode
1482eab6959fSMatthias 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
1483eab6959fSMatthias Ringwald  * @param idle_threshold_host (modes 1,2,5,7) time until considered idle, unit roughly 300 ms
1484eab6959fSMatthias Ringwald  * @param idle_threshold_controller (modes 1-7,9) time until considered idle, unit roughly 300 ms
1485eab6959fSMatthias Ringwald  * @param bt_wake_active_mode (modes 1,2,7) 0 = BT_WAKE line is active high, 1 = BT_WAKE is active low
1486eab6959fSMatthias Ringwald  * @param host_wake_active_mode (modes 1,2,5,7) 0 = HOST_WAKE line is active high, 1 = HOST_WAKE is active low
1487eab6959fSMatthias Ringwald  * @param allow_host_sleep_during_sco (modes 1,2,3,5,7)
1488eab6959fSMatthias Ringwald  * @param combine_sleep_mode_and_lpm  (modes 1,2,3,5,7)
1489eab6959fSMatthias Ringwald  * @param enable_tristate_control_of_uart_tx_line (modes 1,2,7)
1490eab6959fSMatthias Ringwald  * @param active_connection_handling_on_suspend (modes 3,5)
1491eab6959fSMatthias Ringwald  * @param resume_timeout (modes 3,5)
1492eab6959fSMatthias Ringwald  * @param enable_break_to_host (mode 12)
1493eab6959fSMatthias Ringwald  * @param pulsed_host_wake (modes 1,12)
1494eab6959fSMatthias Ringwald  */
1495eab6959fSMatthias Ringwald const hci_cmd_t hci_bcm_set_sleep_mode = {
1496ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_SET_SLEEP_MODE, "111111111111"
1497eab6959fSMatthias Ringwald };
14985cdaddfaSMatthias Ringwald 
14995cdaddfaSMatthias Ringwald /**
15005cdaddfaSMatthias Ringwald  * @brief Set TX Power Table
15015cdaddfaSMatthias Ringwald  * @param is_le 0=classic, 1=LE
15025cdaddfaSMatthias Ringwald  * @param chip_max_tx_pwr_db chip level max TX power in dBM
15035cdaddfaSMatthias Ringwald  */
15045cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_write_tx_power_table = {
1505ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_WRITE_TX_POWER_TABLE, "11"
15065cdaddfaSMatthias Ringwald };
15075cdaddfaSMatthias Ringwald 
15085cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_set_tx_pwr = {
1509ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_SET_TX_PWR, "11H"
15105cdaddfaSMatthias Ringwald };
1511ba39ed56SMatthias Ringwald 
1512ba39ed56SMatthias Ringwald /**
151315fca961SMatthias Ringwald  * @brief This command starts receiving packets using packet transmission parameters such as
151415fca961SMatthias Ringwald  *        frequency channel, packet type, and packet length. It is used for Packet RX.
151515fca961SMatthias Ringwald  * @see   https://processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_RX
151615fca961SMatthias Ringwald  * @param frequency
151715fca961SMatthias Ringwald  * @param ADPLL loop mode
151815fca961SMatthias Ringwald  */
151915fca961SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_con_rx = {
152015fca961SMatthias Ringwald         0xFD17, "11"
152115fca961SMatthias Ringwald };
152215fca961SMatthias Ringwald 
152315fca961SMatthias Ringwald /**
1524ba39ed56SMatthias Ringwald  *
1525ba39ed56SMatthias Ringwald  *
1526ba39ed56SMatthias Ringwald  * @brief This command tests the RF transceiver in continuous transmission mode.
1527ba39ed56SMatthias Ringwald  *        The transmitter is activated by configuring the transmission parameters such as pattern,
1528ba39ed56SMatthias Ringwald  *        modulation, and frequency.
1529ba39ed56SMatthias Ringwald  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Con_TX.280xFD84.29
1530ba39ed56SMatthias Ringwald  * @param modulation
153115fca961SMatthias Ringwald  * @param test_pattern
1532ba39ed56SMatthias Ringwald  * @param frequency
1533ba39ed56SMatthias Ringwald  * @param power_level
1534ba39ed56SMatthias Ringwald  * @param reserved1
1535ba39ed56SMatthias Ringwald  * @param reserved2
1536ba39ed56SMatthias Ringwald  */
1537ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_con_tx = {
1538ba39ed56SMatthias Ringwald     0xFD84, "111144"
1539ba39ed56SMatthias Ringwald };
1540ba39ed56SMatthias Ringwald 
1541ba39ed56SMatthias Ringwald /**
1542ba39ed56SMatthias Ringwald  * @brief This command starts sending/receiving packets using packet transmission parameters such as
1543ba39ed56SMatthias Ringwald  *        frequency channel, packet type, and packet length. It is used for Packet TX/RX.
1544ba39ed56SMatthias Ringwald  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Packet_TX_RX_.280xFD85.29
1545ba39ed56SMatthias Ringwald  * @param frequency_mode
1546ba39ed56SMatthias Ringwald  * @param tx_single_frequency
1547ba39ed56SMatthias Ringwald  * @param rx_single_frequency
1548ba39ed56SMatthias Ringwald  * @param acl_packet_type
1549ba39ed56SMatthias Ringwald  * @paarm acl_packet_data_pattern
1550ba39ed56SMatthias Ringwald  * @param reserved
1551ba39ed56SMatthias Ringwald  * @param power_level
1552ba39ed56SMatthias Ringwald  * @param disable_whitening
1553ba39ed56SMatthias Ringwald  * @param prbs9_initialization_value
1554ba39ed56SMatthias Ringwald  */
1555ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_packet_tx_rx = {
1556ba39ed56SMatthias Ringwald     0xFD85, "1111112112"
1557ba39ed56SMatthias Ringwald };
1558365a7dd1SMatthias Ringwald 
1559733a7793SMatthias Ringwald 
1560733a7793SMatthias Ringwald /**
1561733a7793SMatthias Ringwald  * @param best effort access percentage
1562733a7793SMatthias Ringwald  * @param guaranteed access percentage
1563733a7793SMatthias Ringwald  * @param poll period
1564733a7793SMatthias Ringwald  * @param slave burst after tx
1565733a7793SMatthias Ringwald  * @param slave master search count
1566733a7793SMatthias Ringwald  * @param master burst after tx enable
1567733a7793SMatthias Ringwald  * @param master burst after rx limit
1568733a7793SMatthias Ringwald  */
1569cf26f982SMatthias Ringwald const hci_cmd_t hci_ti_configure_ddip = {
1570733a7793SMatthias Ringwald         HCI_OPCODE_HCI_TI_VS_CONFIGURE_DDIP, "1111111"
1571733a7793SMatthias Ringwald };
1572733a7793SMatthias Ringwald 
1573365a7dd1SMatthias Ringwald /**
1574365a7dd1SMatthias Ringwald  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
1575365a7dd1SMatthias Ringwald  * @param enable 0=disable, 1=enable
1576365a7dd1SMatthias Ringwald  * @param a3dp_role (NL5500, WL128x only) 0=source,1=sink
1577365a7dd1SMatthias Ringwald  * @param code_upload (NL5500, WL128x only) 0=do not load a3dp code, 1=load a3dp code
1578365a7dd1SMatthias Ringwald  * @param reserved for future use
1579365a7dd1SMatthias Ringwald  */
1580365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_avrp_enable = {
1581365a7dd1SMatthias Ringwald         0xFD92, "1112"
1582365a7dd1SMatthias Ringwald };
1583365a7dd1SMatthias Ringwald 
1584365a7dd1SMatthias Ringwald /**
1585365a7dd1SMatthias Ringwald  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
1586365a7dd1SMatthias Ringwald  * @param acl_con_handle
1587365a7dd1SMatthias Ringwald  */
1588365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_associate = {
1589365a7dd1SMatthias Ringwald         0xFD78, "H"
1590365a7dd1SMatthias Ringwald };
1591365a7dd1SMatthias Ringwald 
1592365a7dd1SMatthias Ringwald /**
1593365a7dd1SMatthias Ringwald  * @brief This command is used to disassociate Wide Band Speech configuration from any ACL handle.
1594365a7dd1SMatthias Ringwald  */
1595365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_disassociate = {
1596365a7dd1SMatthias Ringwald         0xFD79, ""
1597365a7dd1SMatthias Ringwald };
1598365a7dd1SMatthias Ringwald 
1599365a7dd1SMatthias Ringwald /**
1600365a7dd1SMatthias Ringwald  * @brief This command configures the codec interface parameters and the PCM clock rate, which is relevant when
1601365a7dd1SMatthias Ringwald           the Bluetooth core generates the clock. This command must be used by the host to use the PCM
1602365a7dd1SMatthias Ringwald           interface.
1603365a7dd1SMatthias Ringwald  * @param clock_rate in kHz
1604365a7dd1SMatthias Ringwald  * @param clock_direction 0=master/output, 1=slave/input
1605365a7dd1SMatthias Ringwald  * @param frame_sync_frequency in Hz
1606365a7dd1SMatthias Ringwald  * @param frame_sync_duty_cycle 0=50% (I2S Format), 0x0001-0xffff number of cycles of PCM clock
1607365a7dd1SMatthias Ringwald  * @param frame_sync_edge 0=driven/sampled at rising edge, 1=driven/sampled at falling edge of PCM clock
1608365a7dd1SMatthias Ringwald  * @param frame_sync_polariy 0=active high, 1=active low
1609365a7dd1SMatthias Ringwald  * @param reserved1
1610365a7dd1SMatthias Ringwald  * @param channel_1_data_out_size sample size in bits
1611365a7dd1SMatthias Ringwald  * @param channel_1_data_out_offset number of PCM clock cycles between rising of frame sync and data start
1612365a7dd1SMatthias Ringwald  * @param channel_1_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
1613365a7dd1SMatthias Ringwald  * @param channel_1_data_in_size sample size in bits
1614365a7dd1SMatthias Ringwald  * @param channel_1_data_in_offset number of PCM clock cycles between rising of frame sync and data start
1615365a7dd1SMatthias Ringwald  * @param channel_1_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
1616365a7dd1SMatthias Ringwald  * @param fsync_multiplier this field is only relevant to CC256XB from service pack 0.2 !!! -> use 0x00
1617365a7dd1SMatthias Ringwald  * @param channel_2_data_out_size sample size in bits
1618365a7dd1SMatthias Ringwald  * @param channel_2_data_out_offset number of PCM clock cycles between rising of frame sync and data start
1619365a7dd1SMatthias Ringwald  * @param channel_2_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
1620365a7dd1SMatthias Ringwald  * @param channel_2_data_in_size sample size in bits
1621365a7dd1SMatthias Ringwald  * @param channel_2_data_in_offset number of PCM clock cycles between rising of frame sync and data start
1622365a7dd1SMatthias Ringwald  * @param channel_2_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
1623365a7dd1SMatthias Ringwald  * @param reserved2
1624365a7dd1SMatthias Ringwald  *
1625365a7dd1SMatthias Ringwald  */
1626365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_write_codec_config = {
1627365a7dd1SMatthias Ringwald         0xFD06, "214211122122112212211"
1628365a7dd1SMatthias Ringwald };
162915fca961SMatthias Ringwald 
163015fca961SMatthias Ringwald /**
163115fca961SMatthias Ringwald  * @brief This command is used only for internal testing.
163215fca961SMatthias Ringwald  * @see   https://processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_TX
163315fca961SMatthias Ringwald  * @param frequency
163415fca961SMatthias Ringwald  * @param ADPLL loop mode
163515fca961SMatthias Ringwald  */
163615fca961SMatthias Ringwald const hci_cmd_t hci_ti_drpb_enable_rf_calibration = {
163715fca961SMatthias Ringwald         0xFD80, "141"
163815fca961SMatthias Ringwald };
163915fca961SMatthias Ringwald 
164015fca961SMatthias Ringwald /**
164115fca961SMatthias Ringwald  * @brief This command command is only required for the continuous TX test of modulated
164215fca961SMatthias Ringwald  * (GFSK, π/4-DQPSK or 8DPSK) signal. This command should be skipped when performing continuous TX test for CW.
164315fca961SMatthias Ringwald  * @see   https://processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_RX
164415fca961SMatthias Ringwald  * @param frequency
164515fca961SMatthias Ringwald  * @param ADPLL loop mode
164615fca961SMatthias Ringwald  */
164715fca961SMatthias Ringwald const hci_cmd_t hci_ti_write_hardware_register = {
164815fca961SMatthias Ringwald         0xFF01, "42"
164915fca961SMatthias Ringwald };
1650