xref: /btstack/src/hci_cmd.c (revision 067ecc364d8946158008b54f1e59f9128f2e967e)
156042629SMatthias Ringwald /*
256042629SMatthias Ringwald  * Copyright (C) 2014 BlueKitchen GmbH
356042629SMatthias Ringwald  *
456042629SMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
556042629SMatthias Ringwald  * modification, are permitted provided that the following conditions
656042629SMatthias Ringwald  * are met:
756042629SMatthias Ringwald  *
856042629SMatthias Ringwald  * 1. Redistributions of source code must retain the above copyright
956042629SMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
1056042629SMatthias Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
1156042629SMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
1256042629SMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
1356042629SMatthias Ringwald  * 3. Neither the name of the copyright holders nor the names of
1456042629SMatthias Ringwald  *    contributors may be used to endorse or promote products derived
1556042629SMatthias Ringwald  *    from this software without specific prior written permission.
1656042629SMatthias Ringwald  * 4. Any redistribution, use, or modification is done solely for
1756042629SMatthias Ringwald  *    personal benefit and not for any commercial purpose or for
1856042629SMatthias Ringwald  *    monetary gain.
1956042629SMatthias Ringwald  *
2056042629SMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
2156042629SMatthias Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2256042629SMatthias Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
2356042629SMatthias Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
2456042629SMatthias Ringwald  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2556042629SMatthias Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
2656042629SMatthias Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
2756042629SMatthias Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
2856042629SMatthias Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
2956042629SMatthias Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
3056042629SMatthias Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3156042629SMatthias Ringwald  * SUCH DAMAGE.
3256042629SMatthias Ringwald  *
3356042629SMatthias Ringwald  * Please inquire about commercial licensing options at
3456042629SMatthias Ringwald  * [email protected]
3556042629SMatthias Ringwald  *
3656042629SMatthias Ringwald  */
3756042629SMatthias Ringwald 
38e501bae0SMatthias Ringwald #define BTSTACK_FILE__ "hci_cmd.c"
39ab2c6ae4SMatthias Ringwald 
4056042629SMatthias Ringwald /*
4156042629SMatthias Ringwald  *  hci_cmd.c
4256042629SMatthias Ringwald  *
4356042629SMatthias Ringwald  *  Created by Matthias Ringwald on 7/23/09.
4456042629SMatthias Ringwald  */
4556042629SMatthias Ringwald 
467907f069SMatthias Ringwald #include "btstack_config.h"
4756042629SMatthias Ringwald 
4856042629SMatthias Ringwald #include "classic/sdp_util.h"
4956042629SMatthias Ringwald #include "hci.h"
5056042629SMatthias Ringwald #include "hci_cmd.h"
51f9f2075cSMatthias Ringwald #include "btstack_debug.h"
5256042629SMatthias Ringwald 
5356042629SMatthias Ringwald #include <string.h>
5456042629SMatthias Ringwald 
5556042629SMatthias Ringwald // calculate combined ogf/ocf value
565efd5011SMatthias Ringwald #define OPCODE(ogf, ocf) ((ocf) | ((ogf) << 10))
5756042629SMatthias Ringwald 
5856042629SMatthias Ringwald /**
5956042629SMatthias Ringwald  * construct HCI Command based on template
6056042629SMatthias Ringwald  *
6156042629SMatthias Ringwald  * Format:
6256042629SMatthias Ringwald  *   1,2,3,4: one to four byte value
6356042629SMatthias Ringwald  *   H: HCI connection handle
6456042629SMatthias Ringwald  *   B: Bluetooth Baseband Address (BD_ADDR)
6556042629SMatthias Ringwald  *   D: 8 byte data block
6656042629SMatthias Ringwald  *   E: Extended Inquiry Result
6756042629SMatthias Ringwald  *   N: Name up to 248 chars, \0 terminated
68237daac5SMatthias Ringwald  *   P: 16 byte data block. Pairing code, Simple Pairing Hash and Randomizer
6956042629SMatthias Ringwald  *   A: 31 bytes advertising data
7056042629SMatthias Ringwald  *   S: Service Record (Data Element Sequence)
7182180fcaSMatthias Ringwald  *   Q: 32 byte data block, e.g. for X and Y coordinates of P-256 public key
7256042629SMatthias Ringwald  */
7356042629SMatthias Ringwald uint16_t hci_cmd_create_from_template(uint8_t *hci_cmd_buffer, const hci_cmd_t *cmd, va_list argptr){
7456042629SMatthias Ringwald 
754ea43905SMatthias Ringwald     hci_cmd_buffer[0] = cmd->opcode & 0xffu;
7656042629SMatthias Ringwald     hci_cmd_buffer[1] = cmd->opcode >> 8;
7756042629SMatthias Ringwald     int pos = 3;
7856042629SMatthias Ringwald 
7956042629SMatthias Ringwald     const char *format = cmd->format;
8056042629SMatthias Ringwald     uint16_t word;
8156042629SMatthias Ringwald     uint32_t longword;
8256042629SMatthias Ringwald     uint8_t * ptr;
8356042629SMatthias Ringwald     while (*format) {
8456042629SMatthias Ringwald         switch(*format) {
8556042629SMatthias Ringwald             case '1': //  8 bit value
8656042629SMatthias Ringwald             case '2': // 16 bit value
8756042629SMatthias Ringwald             case 'H': // hci_handle
8856042629SMatthias Ringwald                 word = va_arg(argptr, int);  // minimal va_arg is int: 2 bytes on 8+16 bit CPUs
894ea43905SMatthias Ringwald                 hci_cmd_buffer[pos++] = word & 0xffu;
9056042629SMatthias Ringwald                 if (*format == '2') {
9156042629SMatthias Ringwald                     hci_cmd_buffer[pos++] = word >> 8;
9256042629SMatthias Ringwald                 } else if (*format == 'H') {
9356042629SMatthias Ringwald                     // TODO implement opaque client connection handles
9456042629SMatthias Ringwald                     //      pass module handle for now
9556042629SMatthias Ringwald                     hci_cmd_buffer[pos++] = word >> 8;
9656042629SMatthias Ringwald                 }
9756042629SMatthias Ringwald                 break;
9856042629SMatthias Ringwald             case '3':
9956042629SMatthias Ringwald             case '4':
10056042629SMatthias Ringwald                 longword = va_arg(argptr, uint32_t);
10156042629SMatthias Ringwald                 // longword = va_arg(argptr, int);
10256042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword;
10356042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 8;
10456042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = longword >> 16;
10556042629SMatthias Ringwald                 if (*format == '4'){
10656042629SMatthias Ringwald                     hci_cmd_buffer[pos++] = longword >> 24;
10756042629SMatthias Ringwald                 }
10856042629SMatthias Ringwald                 break;
10956042629SMatthias Ringwald             case 'B': // bt-addr
11056042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
11156042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[5];
11256042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[4];
11356042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[3];
11456042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[2];
11556042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[1];
11656042629SMatthias Ringwald                 hci_cmd_buffer[pos++] = ptr[0];
11756042629SMatthias Ringwald                 break;
11856042629SMatthias Ringwald             case 'D': // 8 byte data block
11956042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1206535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 8);
12156042629SMatthias Ringwald                 pos += 8;
12256042629SMatthias Ringwald                 break;
12356042629SMatthias Ringwald             case 'E': // Extended Inquiry Information 240 octets
12456042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1256535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 240);
12656042629SMatthias Ringwald                 pos += 240;
12756042629SMatthias Ringwald                 break;
12856042629SMatthias Ringwald             case 'N': { // UTF-8 string, null terminated
12956042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
13056042629SMatthias Ringwald                 uint16_t len = strlen((const char*) ptr);
1314ea43905SMatthias Ringwald                 if (len > 248u) {
13256042629SMatthias Ringwald                     len = 248;
13356042629SMatthias Ringwald                 }
1346535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, len);
1354ea43905SMatthias Ringwald                 if (len < 248u) {
13656042629SMatthias Ringwald                     // fill remaining space with zeroes
1374ea43905SMatthias Ringwald                     memset(&hci_cmd_buffer[pos+len], 0u, 248u-len);
13856042629SMatthias Ringwald                 }
13956042629SMatthias Ringwald                 pos += 248;
14056042629SMatthias Ringwald                 break;
14156042629SMatthias Ringwald             }
14256042629SMatthias Ringwald             case 'P': // 16 byte PIN code or link key
14356042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1446535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 16);
14556042629SMatthias Ringwald                 pos += 16;
14656042629SMatthias Ringwald                 break;
147a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE
14856042629SMatthias Ringwald             case 'A': // 31 bytes advertising data
14956042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
1506535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, 31);
15156042629SMatthias Ringwald                 pos += 31;
15256042629SMatthias Ringwald                 break;
15356042629SMatthias Ringwald #endif
154a9a4c409SMatthias Ringwald #ifdef ENABLE_SDP
15556042629SMatthias Ringwald             case 'S': { // Service Record (Data Element Sequence)
15656042629SMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
15756042629SMatthias Ringwald                 uint16_t len = de_get_len(ptr);
1586535961aSMatthias Ringwald                 (void)memcpy(&hci_cmd_buffer[pos], ptr, len);
15956042629SMatthias Ringwald                 pos += len;
16056042629SMatthias Ringwald                 break;
16156042629SMatthias Ringwald             }
16256042629SMatthias Ringwald #endif
16382180fcaSMatthias Ringwald #ifdef ENABLE_LE_SECURE_CONNECTIONS
16482180fcaSMatthias Ringwald             case 'Q':
16582180fcaSMatthias Ringwald                 ptr = va_arg(argptr, uint8_t *);
16682180fcaSMatthias Ringwald                 reverse_bytes(ptr, &hci_cmd_buffer[pos], 32);
16782180fcaSMatthias Ringwald                 pos += 32;
16882180fcaSMatthias Ringwald                 break;
16982180fcaSMatthias Ringwald #endif
17056042629SMatthias Ringwald             default:
17156042629SMatthias Ringwald                 break;
17256042629SMatthias Ringwald         }
17356042629SMatthias Ringwald         format++;
17456042629SMatthias Ringwald     };
17556042629SMatthias Ringwald     hci_cmd_buffer[2] = pos - 3;
17656042629SMatthias Ringwald     return pos;
17756042629SMatthias Ringwald }
17856042629SMatthias Ringwald 
17956042629SMatthias Ringwald /**
18056042629SMatthias Ringwald  *  Link Control Commands
18156042629SMatthias Ringwald  */
18256042629SMatthias Ringwald 
18356042629SMatthias Ringwald /**
18456042629SMatthias Ringwald  * @param lap
18556042629SMatthias Ringwald  * @param inquiry_length
18656042629SMatthias Ringwald  * @param num_responses
18756042629SMatthias Ringwald  */
18856042629SMatthias Ringwald const hci_cmd_t hci_inquiry = {
189ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_INQUIRY, "311"
19056042629SMatthias Ringwald };
19156042629SMatthias Ringwald 
19256042629SMatthias Ringwald /**
19356042629SMatthias Ringwald  */
19456042629SMatthias Ringwald const hci_cmd_t hci_inquiry_cancel = {
195ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_INQUIRY_CANCEL, ""
19656042629SMatthias Ringwald };
19756042629SMatthias Ringwald 
19856042629SMatthias Ringwald /**
19956042629SMatthias Ringwald  * @param bd_addr
20056042629SMatthias Ringwald  * @param packet_type
20156042629SMatthias Ringwald  * @param page_scan_repetition_mode
20256042629SMatthias Ringwald  * @param reserved
20356042629SMatthias Ringwald  * @param clock_offset
20456042629SMatthias Ringwald  * @param allow_role_switch
20556042629SMatthias Ringwald  */
20656042629SMatthias Ringwald const hci_cmd_t hci_create_connection = {
207ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CREATE_CONNECTION, "B21121"
20856042629SMatthias Ringwald };
20956042629SMatthias Ringwald 
21056042629SMatthias Ringwald /**
21156042629SMatthias Ringwald  * @param handle
21256042629SMatthias Ringwald  * @param reason (0x05, 0x13-0x15, 0x1a, 0x29, see Errors Codes in BT Spec Part D)
21356042629SMatthias Ringwald  */
21456042629SMatthias Ringwald const hci_cmd_t hci_disconnect = {
215ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_DISCONNECT, "H1"
21656042629SMatthias Ringwald };
21756042629SMatthias Ringwald 
21856042629SMatthias Ringwald /**
21956042629SMatthias Ringwald  * @param bd_addr
22056042629SMatthias Ringwald  */
22156042629SMatthias Ringwald const hci_cmd_t hci_create_connection_cancel = {
222ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CREATE_CONNECTION_CANCEL, "B"
22356042629SMatthias Ringwald };
22456042629SMatthias Ringwald 
22556042629SMatthias Ringwald /**
22656042629SMatthias Ringwald  * @param bd_addr
22756042629SMatthias Ringwald  * @param role (become master, stay slave)
22856042629SMatthias Ringwald  */
22956042629SMatthias Ringwald const hci_cmd_t hci_accept_connection_request = {
230ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ACCEPT_CONNECTION_REQUEST, "B1"
23156042629SMatthias Ringwald };
23256042629SMatthias Ringwald 
23356042629SMatthias Ringwald /**
23456042629SMatthias Ringwald  * @param bd_addr
23556042629SMatthias Ringwald  * @param reason (e.g. CONNECTION REJECTED DUE TO LIMITED RESOURCES (0x0d))
23656042629SMatthias Ringwald  */
23756042629SMatthias Ringwald const hci_cmd_t hci_reject_connection_request = {
238ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REJECT_CONNECTION_REQUEST, "B1"
23956042629SMatthias Ringwald };
24056042629SMatthias Ringwald 
24156042629SMatthias Ringwald /**
24256042629SMatthias Ringwald  * @param bd_addr
24356042629SMatthias Ringwald  * @param link_key
24456042629SMatthias Ringwald  */
24556042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_reply = {
246ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LINK_KEY_REQUEST_REPLY, "BP"
24756042629SMatthias Ringwald };
24856042629SMatthias Ringwald 
24956042629SMatthias Ringwald /**
25056042629SMatthias Ringwald  * @param bd_addr
25156042629SMatthias Ringwald  */
25256042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_negative_reply = {
253ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY, "B"
25456042629SMatthias Ringwald };
25556042629SMatthias Ringwald 
25656042629SMatthias Ringwald /**
25756042629SMatthias Ringwald  * @param bd_addr
25856042629SMatthias Ringwald  * @param pin_length
25956042629SMatthias Ringwald  * @param pin (c-string)
26056042629SMatthias Ringwald  */
26156042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_reply = {
262ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_PIN_CODE_REQUEST_REPLY, "B1P"
26356042629SMatthias Ringwald };
26456042629SMatthias Ringwald 
26556042629SMatthias Ringwald /**
26656042629SMatthias Ringwald  * @param bd_addr
26756042629SMatthias Ringwald  */
26856042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_negative_reply = {
269ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY, "B"
27056042629SMatthias Ringwald };
27156042629SMatthias Ringwald 
27256042629SMatthias Ringwald /**
27356042629SMatthias Ringwald  * @param handle
27456042629SMatthias Ringwald  * @param packet_type
27556042629SMatthias Ringwald  */
27656042629SMatthias Ringwald const hci_cmd_t hci_change_connection_packet_type = {
277ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CHANGE_CONNECTION_PACKET_TYPE, "H2"
27856042629SMatthias Ringwald };
27956042629SMatthias Ringwald 
28056042629SMatthias Ringwald /**
28156042629SMatthias Ringwald  * @param handle
28256042629SMatthias Ringwald  */
28356042629SMatthias Ringwald const hci_cmd_t hci_authentication_requested = {
284ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_AUTHENTICATION_REQUESTED, "H"
28556042629SMatthias Ringwald };
28656042629SMatthias Ringwald 
28756042629SMatthias Ringwald /**
28856042629SMatthias Ringwald  * @param handle
28956042629SMatthias Ringwald  * @param encryption_enable
29056042629SMatthias Ringwald  */
29156042629SMatthias Ringwald const hci_cmd_t hci_set_connection_encryption = {
292ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_CONNECTION_ENCRYPTION, "H1"
29356042629SMatthias Ringwald };
29456042629SMatthias Ringwald 
29556042629SMatthias Ringwald /**
29656042629SMatthias Ringwald  * @param handle
29756042629SMatthias Ringwald  */
29856042629SMatthias Ringwald const hci_cmd_t hci_change_connection_link_key = {
299ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_CHANGE_CONNECTION_LINK_KEY, "H"
30056042629SMatthias Ringwald };
30156042629SMatthias Ringwald 
30256042629SMatthias Ringwald /**
30356042629SMatthias Ringwald  * @param bd_addr
30456042629SMatthias Ringwald  * @param page_scan_repetition_mode
30556042629SMatthias Ringwald  * @param reserved
30656042629SMatthias Ringwald  * @param clock_offset
30756042629SMatthias Ringwald  */
30856042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request = {
309ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_NAME_REQUEST, "B112"
31056042629SMatthias Ringwald };
31156042629SMatthias Ringwald 
31256042629SMatthias Ringwald 
31356042629SMatthias Ringwald /**
31456042629SMatthias Ringwald  * @param bd_addr
31556042629SMatthias Ringwald  */
31656042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request_cancel = {
317ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_NAME_REQUEST_CANCEL, "B"
31856042629SMatthias Ringwald };
31956042629SMatthias Ringwald 
32056042629SMatthias Ringwald  /**
32156042629SMatthias Ringwald  * @param handle
32256042629SMatthias Ringwald  */
32356042629SMatthias Ringwald const hci_cmd_t hci_read_remote_supported_features_command = {
324ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND, "H"
3258b22c04dSMatthias Ringwald };
3268b22c04dSMatthias Ringwald 
3278b22c04dSMatthias Ringwald /**
328d5057706SMatthias Ringwald * @param handle
329d5057706SMatthias Ringwald */
330d5057706SMatthias Ringwald const hci_cmd_t hci_read_remote_extended_features_command = {
331ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND, "H1"
332d5057706SMatthias Ringwald };
333d5057706SMatthias Ringwald 
334d5057706SMatthias Ringwald /**
3358b22c04dSMatthias Ringwald  * @param handle
3368b22c04dSMatthias Ringwald  */
3378b22c04dSMatthias Ringwald const hci_cmd_t hci_read_remote_version_information = {
338ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_REMOTE_VERSION_INFORMATION, "H"
33956042629SMatthias Ringwald };
34056042629SMatthias Ringwald 
34156042629SMatthias Ringwald /**
34256042629SMatthias Ringwald  * @param handle
34356042629SMatthias Ringwald  * @param transmit_bandwidth 8000(64kbps)
34456042629SMatthias Ringwald  * @param receive_bandwidth  8000(64kbps)
34556042629SMatthias Ringwald  * @param max_latency        >= 7ms for eSCO, 0xFFFF do not care
34656042629SMatthias Ringwald  * @param voice_settings     e.g. CVSD, Input Coding: Linear, Input Data Format: 2’s complement, data 16bit: 00011000000 == 0x60
34756042629SMatthias Ringwald  * @param retransmission_effort  e.g. 0xFF do not care
34856042629SMatthias Ringwald  * @param packet_type        at least EV3 for eSCO
34956042629SMatthias Ringwald  */
35056042629SMatthias Ringwald const hci_cmd_t hci_setup_synchronous_connection = {
351ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SETUP_SYNCHRONOUS_CONNECTION, "H442212"
35256042629SMatthias Ringwald };
35356042629SMatthias Ringwald 
35456042629SMatthias Ringwald /**
35556042629SMatthias Ringwald  * @param bd_addr
35656042629SMatthias Ringwald  * @param transmit_bandwidth
35756042629SMatthias Ringwald  * @param receive_bandwidth
35856042629SMatthias Ringwald  * @param max_latency
35956042629SMatthias Ringwald  * @param voice_settings
36056042629SMatthias Ringwald  * @param retransmission_effort
36156042629SMatthias Ringwald  * @param packet_type
36256042629SMatthias Ringwald  */
36356042629SMatthias Ringwald const hci_cmd_t hci_accept_synchronous_connection = {
364ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ACCEPT_SYNCHRONOUS_CONNECTION, "B442212"
36556042629SMatthias Ringwald };
36656042629SMatthias Ringwald 
36756042629SMatthias Ringwald /**
36856042629SMatthias Ringwald  * @param bd_addr
36956042629SMatthias Ringwald  * @param IO_capability
37056042629SMatthias Ringwald  * @param OOB_data_present
37156042629SMatthias Ringwald  * @param authentication_requirements
37256042629SMatthias Ringwald  */
37356042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_reply = {
374ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_REPLY, "B111"
37556042629SMatthias Ringwald };
37656042629SMatthias Ringwald 
37756042629SMatthias Ringwald /**
37856042629SMatthias Ringwald  * @param bd_addr
37956042629SMatthias Ringwald  */
38056042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_reply = {
381ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_REPLY, "B"
38256042629SMatthias Ringwald };
38356042629SMatthias Ringwald 
38456042629SMatthias Ringwald /**
38556042629SMatthias Ringwald  * @param bd_addr
38656042629SMatthias Ringwald  */
38756042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_negative_reply = {
388ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY, "B"
38956042629SMatthias Ringwald };
39056042629SMatthias Ringwald 
39156042629SMatthias Ringwald /**
39256042629SMatthias Ringwald  * @param bd_addr
39356042629SMatthias Ringwald  * @param numeric_value
39456042629SMatthias Ringwald  */
39556042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_reply = {
396ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_REPLY, "B4"
39756042629SMatthias Ringwald };
39856042629SMatthias Ringwald 
39956042629SMatthias Ringwald /**
40056042629SMatthias Ringwald  * @param bd_addr
40156042629SMatthias Ringwald  */
40256042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_negative_reply = {
403ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY, "B"
40456042629SMatthias Ringwald };
40556042629SMatthias Ringwald 
40656042629SMatthias Ringwald /**
40756042629SMatthias Ringwald  * @param bd_addr
408237daac5SMatthias Ringwald  * @param c Simple Pairing Hash C
409237daac5SMatthias Ringwald  * @param r Simple Pairing Randomizer R
410237daac5SMatthias Ringwald  */
411237daac5SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_reply = {
412ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_REPLY, "BPP"
413237daac5SMatthias Ringwald };
414237daac5SMatthias Ringwald 
415237daac5SMatthias Ringwald /**
416237daac5SMatthias Ringwald  * @param bd_addr
41756042629SMatthias Ringwald  */
41856042629SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_negative_reply = {
419ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY, "B"
42056042629SMatthias Ringwald };
42156042629SMatthias Ringwald 
42256042629SMatthias Ringwald /**
42356042629SMatthias Ringwald  * @param bd_addr
42456042629SMatthias Ringwald  * @param reason (Part D, Error codes)
42556042629SMatthias Ringwald  */
42656042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_negative_reply = {
427ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY, "B1"
42856042629SMatthias Ringwald };
42956042629SMatthias Ringwald 
43056042629SMatthias Ringwald /**
43156042629SMatthias Ringwald  * @param handle
43256042629SMatthias Ringwald  * @param transmit_bandwidth
43356042629SMatthias Ringwald  * @param receive_bandwidth
43456042629SMatthias Ringwald  * @param transmit_coding_format_type
43556042629SMatthias Ringwald  * @param transmit_coding_format_company
43656042629SMatthias Ringwald  * @param transmit_coding_format_codec
43756042629SMatthias Ringwald  * @param receive_coding_format_type
43856042629SMatthias Ringwald  * @param receive_coding_format_company
43956042629SMatthias Ringwald  * @param receive_coding_format_codec
44056042629SMatthias Ringwald  * @param transmit_coding_frame_size
44156042629SMatthias Ringwald  * @param receive_coding_frame_size
44256042629SMatthias Ringwald  * @param input_bandwidth
44356042629SMatthias Ringwald  * @param output_bandwidth
44456042629SMatthias Ringwald  * @param input_coding_format_type
44556042629SMatthias Ringwald  * @param input_coding_format_company
44656042629SMatthias Ringwald  * @param input_coding_format_codec
44756042629SMatthias Ringwald  * @param output_coding_format_type
44856042629SMatthias Ringwald  * @param output_coding_format_company
44956042629SMatthias Ringwald  * @param output_coding_format_codec
45056042629SMatthias Ringwald  * @param input_coded_data_size
45156042629SMatthias Ringwald  * @param outupt_coded_data_size
45256042629SMatthias Ringwald  * @param input_pcm_data_format
45356042629SMatthias Ringwald  * @param output_pcm_data_format
45456042629SMatthias Ringwald  * @param input_pcm_sample_payload_msb_position
45556042629SMatthias Ringwald  * @param output_pcm_sample_payload_msb_position
45656042629SMatthias Ringwald  * @param input_data_path
45756042629SMatthias Ringwald  * @param output_data_path
45856042629SMatthias Ringwald  * @param input_transport_unit_size
45956042629SMatthias Ringwald  * @param output_transport_unit_size
46056042629SMatthias Ringwald  * @param max_latency
46156042629SMatthias Ringwald  * @param packet_type
46256042629SMatthias Ringwald  * @param retransmission_effort
46356042629SMatthias Ringwald  */
46456042629SMatthias Ringwald const hci_cmd_t hci_enhanced_setup_synchronous_connection = {
465ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION, "H4412212222441221222211111111221"
46656042629SMatthias Ringwald };
46756042629SMatthias Ringwald 
46856042629SMatthias Ringwald /**
46956042629SMatthias Ringwald  * @param bd_addr
47056042629SMatthias Ringwald  * @param transmit_bandwidth
47156042629SMatthias Ringwald  * @param receive_bandwidth
47256042629SMatthias Ringwald  * @param transmit_coding_format_type
47356042629SMatthias Ringwald  * @param transmit_coding_format_company
47456042629SMatthias Ringwald  * @param transmit_coding_format_codec
47556042629SMatthias Ringwald  * @param receive_coding_format_type
47656042629SMatthias Ringwald  * @param receive_coding_format_company
47756042629SMatthias Ringwald  * @param receive_coding_format_codec
47856042629SMatthias Ringwald  * @param transmit_coding_frame_size
47956042629SMatthias Ringwald  * @param receive_coding_frame_size
48056042629SMatthias Ringwald  * @param input_bandwidth
48156042629SMatthias Ringwald  * @param output_bandwidth
48256042629SMatthias Ringwald  * @param input_coding_format_type
48356042629SMatthias Ringwald  * @param input_coding_format_company
48456042629SMatthias Ringwald  * @param input_coding_format_codec
48556042629SMatthias Ringwald  * @param output_coding_format_type
48656042629SMatthias Ringwald  * @param output_coding_format_company
48756042629SMatthias Ringwald  * @param output_coding_format_codec
48856042629SMatthias Ringwald  * @param input_coded_data_size
48956042629SMatthias Ringwald  * @param outupt_coded_data_size
49056042629SMatthias Ringwald  * @param input_pcm_data_format
49156042629SMatthias Ringwald  * @param output_pcm_data_format
49256042629SMatthias Ringwald  * @param input_pcm_sample_payload_msb_position
49356042629SMatthias Ringwald  * @param output_pcm_sample_payload_msb_position
49456042629SMatthias Ringwald  * @param input_data_path
49556042629SMatthias Ringwald  * @param output_data_path
49656042629SMatthias Ringwald  * @param input_transport_unit_size
49756042629SMatthias Ringwald  * @param output_transport_unit_size
49856042629SMatthias Ringwald  * @param max_latency
49956042629SMatthias Ringwald  * @param packet_type
50056042629SMatthias Ringwald  * @param retransmission_effort
50156042629SMatthias Ringwald  */
50256042629SMatthias Ringwald const hci_cmd_t hci_enhanced_accept_synchronous_connection = {
503ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION, "B4412212222441221222211111111221"
50456042629SMatthias Ringwald };
50556042629SMatthias Ringwald 
50656042629SMatthias Ringwald /**
50756042629SMatthias Ringwald  *  Link Policy Commands
50856042629SMatthias Ringwald  */
50956042629SMatthias Ringwald 
51056042629SMatthias Ringwald /**
51156042629SMatthias Ringwald  * @param handle
51256042629SMatthias Ringwald  * @param sniff_max_interval
51356042629SMatthias Ringwald  * @param sniff_min_interval
51456042629SMatthias Ringwald  * @param sniff_attempt
51556042629SMatthias Ringwald  * @param sniff_timeout
51656042629SMatthias Ringwald  */
51756042629SMatthias Ringwald const hci_cmd_t hci_sniff_mode = {
518ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SNIFF_MODE, "H2222"
51956042629SMatthias Ringwald };
52056042629SMatthias Ringwald 
52156042629SMatthias Ringwald /**
52256042629SMatthias Ringwald  * @param handle
5237cd21895SMatthias Ringwald  */
5247cd21895SMatthias Ringwald const hci_cmd_t hci_exit_sniff_mode = {
525ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_EXIT_SNIFF_MODE, "H"
5267cd21895SMatthias Ringwald };
5277cd21895SMatthias Ringwald 
5287cd21895SMatthias Ringwald /**
5297cd21895SMatthias Ringwald  * @param handle
53056042629SMatthias Ringwald  * @param flags
53156042629SMatthias Ringwald  * @param service_type
53256042629SMatthias Ringwald  * @param token_rate (bytes/s)
53356042629SMatthias Ringwald  * @param peak_bandwith (bytes/s)
53456042629SMatthias Ringwald  * @param latency (us)
53556042629SMatthias Ringwald  * @param delay_variation (us)
53656042629SMatthias Ringwald  */
53756042629SMatthias Ringwald const hci_cmd_t hci_qos_setup = {
538ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_QOS_SETUP, "H114444"
53956042629SMatthias Ringwald };
54056042629SMatthias Ringwald 
54156042629SMatthias Ringwald /**
54256042629SMatthias Ringwald  * @param handle
54356042629SMatthias Ringwald  */
54456042629SMatthias Ringwald const hci_cmd_t hci_role_discovery = {
545ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ROLE_DISCOVERY, "H"
54656042629SMatthias Ringwald };
54756042629SMatthias Ringwald 
54856042629SMatthias Ringwald /**
54956042629SMatthias Ringwald  * @param bd_addr
55056042629SMatthias Ringwald  * @param role (0=master,1=slave)
55156042629SMatthias Ringwald  */
55256042629SMatthias Ringwald const hci_cmd_t hci_switch_role_command= {
553ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SWITCH_ROLE_COMMAND, "B1"
55456042629SMatthias Ringwald };
55556042629SMatthias Ringwald 
55656042629SMatthias Ringwald /**
55756042629SMatthias Ringwald  * @param handle
55856042629SMatthias Ringwald  */
55956042629SMatthias Ringwald const hci_cmd_t hci_read_link_policy_settings = {
560ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LINK_POLICY_SETTINGS, "H"
56156042629SMatthias Ringwald };
56256042629SMatthias Ringwald 
56356042629SMatthias Ringwald /**
56456042629SMatthias Ringwald  * @param handle
56556042629SMatthias Ringwald  * @param settings
56656042629SMatthias Ringwald  */
56756042629SMatthias Ringwald const hci_cmd_t hci_write_link_policy_settings = {
568ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LINK_POLICY_SETTINGS, "H2"
56956042629SMatthias Ringwald };
57056042629SMatthias Ringwald 
571c4c88f1bSJakob Krantz /**
572c4c88f1bSJakob Krantz  * @param policy
573c4c88f1bSJakob Krantz  */
57453138e7aSMatthias Ringwald const hci_cmd_t hci_write_default_link_policy_setting = {
575ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_DEFAULT_LINK_POLICY_SETTING, "2"
576c4c88f1bSJakob Krantz };
577c4c88f1bSJakob Krantz 
57856042629SMatthias Ringwald 
57956042629SMatthias Ringwald /**
58056042629SMatthias Ringwald  *  Controller & Baseband Commands
58156042629SMatthias Ringwald  */
58256042629SMatthias Ringwald 
5839119d792SMilanka Ringwald 
58456042629SMatthias Ringwald /**
58556042629SMatthias Ringwald  * @param event_mask_lover_octets
58656042629SMatthias Ringwald  * @param event_mask_higher_octets
58756042629SMatthias Ringwald  */
58856042629SMatthias Ringwald const hci_cmd_t hci_set_event_mask = {
589ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_EVENT_MASK, "44"
59056042629SMatthias Ringwald };
59156042629SMatthias Ringwald 
59256042629SMatthias Ringwald /**
59356042629SMatthias Ringwald  */
59456042629SMatthias Ringwald const hci_cmd_t hci_reset = {
595ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_RESET, ""
59656042629SMatthias Ringwald };
59756042629SMatthias Ringwald 
59856042629SMatthias Ringwald /**
599e49d496aSMatthias Ringwald  * @param handle
600e49d496aSMatthias Ringwald  */
601e49d496aSMatthias Ringwald const hci_cmd_t hci_flush = {
602ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_FLUSH, "H"
6039af39d9fSMatthias Ringwald };
6049af39d9fSMatthias Ringwald 
6059af39d9fSMatthias Ringwald /**
6069af39d9fSMatthias Ringwald  * @param handle
6079af39d9fSMatthias Ringwald  */
6089af39d9fSMatthias Ringwald const hci_cmd_t hci_read_pin_type = {
609ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PIN_TYPE, ""
6109af39d9fSMatthias Ringwald };
6119af39d9fSMatthias Ringwald 
6129af39d9fSMatthias Ringwald /**
6139af39d9fSMatthias Ringwald  * @param handle
6149af39d9fSMatthias Ringwald  */
6159af39d9fSMatthias Ringwald const hci_cmd_t hci_write_pin_type = {
616ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PIN_TYPE, "1"
617e49d496aSMatthias Ringwald };
618e49d496aSMatthias Ringwald 
619e49d496aSMatthias Ringwald /**
62056042629SMatthias Ringwald  * @param bd_addr
62156042629SMatthias Ringwald  * @param delete_all_flags
62256042629SMatthias Ringwald  */
62356042629SMatthias Ringwald const hci_cmd_t hci_delete_stored_link_key = {
624ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_DELETE_STORED_LINK_KEY, "B1"
62556042629SMatthias Ringwald };
62656042629SMatthias Ringwald 
627f9f2075cSMatthias Ringwald #ifdef ENABLE_CLASSIC
62856042629SMatthias Ringwald /**
62956042629SMatthias Ringwald  * @param local_name (UTF-8, Null Terminated, max 248 octets)
63056042629SMatthias Ringwald  */
63156042629SMatthias Ringwald const hci_cmd_t hci_write_local_name = {
632ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LOCAL_NAME, "N"
63356042629SMatthias Ringwald };
634f9f2075cSMatthias Ringwald #endif
63556042629SMatthias Ringwald 
63656042629SMatthias Ringwald /**
637e90bae01SMatthias Ringwald  */
638e90bae01SMatthias Ringwald const hci_cmd_t hci_read_local_name = {
639ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_NAME, ""
640e90bae01SMatthias Ringwald };
641e90bae01SMatthias Ringwald 
642e90bae01SMatthias Ringwald /**
643195e82f3Sskoperst  */
644195e82f3Sskoperst const hci_cmd_t hci_read_page_timeout = {
645ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PAGE_TIMEOUT, ""
646195e82f3Sskoperst };
647195e82f3Sskoperst 
648195e82f3Sskoperst /**
64956042629SMatthias Ringwald  * @param page_timeout (* 0.625 ms)
65056042629SMatthias Ringwald  */
65156042629SMatthias Ringwald const hci_cmd_t hci_write_page_timeout = {
652ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_TIMEOUT, "2"
65356042629SMatthias Ringwald };
65456042629SMatthias Ringwald 
65556042629SMatthias Ringwald /**
6564eac2391SMatthias Ringwald  * @param scan_enable (no, inq, page, inq+page)
6574eac2391SMatthias Ringwald  */
6584eac2391SMatthias Ringwald const hci_cmd_t hci_write_scan_enable = {
659ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SCAN_ENABLE, "1"
6604eac2391SMatthias Ringwald };
6614eac2391SMatthias Ringwald 
6624eac2391SMatthias Ringwald /**
663195e82f3Sskoperst  */
664195e82f3Sskoperst const hci_cmd_t hci_read_page_scan_activity = {
665ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_PAGE_SCAN_ACTIVITY, ""
666195e82f3Sskoperst };
667195e82f3Sskoperst 
668195e82f3Sskoperst /**
669195e82f3Sskoperst  * @param page_scan_interval (* 0.625 ms)
670195e82f3Sskoperst  * @param page_scan_window (* 0.625 ms, must be <= page_scan_interval)
671195e82f3Sskoperst  */
672195e82f3Sskoperst const hci_cmd_t hci_write_page_scan_activity = {
673ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_PAGE_SCAN_ACTIVITY, "22"
674195e82f3Sskoperst };
675195e82f3Sskoperst 
676195e82f3Sskoperst /**
67756042629SMatthias Ringwald  */
6784eac2391SMatthias Ringwald const hci_cmd_t hci_read_inquiry_scan_activity = {
679ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_INQUIRY_SCAN_ACTIVITY, ""
6804eac2391SMatthias Ringwald };
6814eac2391SMatthias Ringwald 
6824eac2391SMatthias Ringwald /**
6834eac2391SMatthias Ringwald  * @param inquiry_scan_interval (* 0.625 ms)
6844eac2391SMatthias Ringwald  * @param inquiry_scan_window (* 0.625 ms, must be <= inquiry_scan_interval)
6854eac2391SMatthias Ringwald  */
6864eac2391SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_activity = {
687ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_ACTIVITY, "22"
68856042629SMatthias Ringwald };
68956042629SMatthias Ringwald 
69056042629SMatthias Ringwald /**
69156042629SMatthias Ringwald  * @param authentication_enable
69256042629SMatthias Ringwald  */
69356042629SMatthias Ringwald const hci_cmd_t hci_write_authentication_enable = {
694ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_AUTHENTICATION_ENABLE, "1"
69556042629SMatthias Ringwald };
69656042629SMatthias Ringwald 
69756042629SMatthias Ringwald /**
69856042629SMatthias Ringwald  * @param class_of_device
69956042629SMatthias Ringwald  */
70056042629SMatthias Ringwald const hci_cmd_t hci_write_class_of_device = {
701ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_CLASS_OF_DEVICE, "3"
70256042629SMatthias Ringwald };
70356042629SMatthias Ringwald 
70456042629SMatthias Ringwald /**
70556042629SMatthias Ringwald  */
70656042629SMatthias Ringwald const hci_cmd_t hci_read_num_broadcast_retransmissions = {
707ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS, ""
70856042629SMatthias Ringwald };
70956042629SMatthias Ringwald 
71056042629SMatthias Ringwald /**
71156042629SMatthias Ringwald  * @param num_broadcast_retransmissions (e.g. 0 for a single broadcast)
71256042629SMatthias Ringwald  */
71356042629SMatthias Ringwald const hci_cmd_t hci_write_num_broadcast_retransmissions = {
714ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS, "1"
71556042629SMatthias Ringwald };
71656042629SMatthias Ringwald 
71756042629SMatthias Ringwald /**
71844751e25SMatthias Ringwald  * @param connection_handle
71944751e25SMatthias Ringwald  * @param type 0 = current transmit level, 1 = max transmit level
72044751e25SMatthias Ringwald  */
72144751e25SMatthias Ringwald const hci_cmd_t hci_read_transmit_power_level = {
722ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_TRANSMIT_POWER_LEVEL, "11"
72344751e25SMatthias Ringwald };
72444751e25SMatthias Ringwald 
72544751e25SMatthias Ringwald /**
72656042629SMatthias Ringwald  * @param synchronous_flow_control_enable - if yes, num completed packet everts are sent for SCO packets
72756042629SMatthias Ringwald  */
72856042629SMatthias Ringwald const hci_cmd_t hci_write_synchronous_flow_control_enable = {
729ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE, "1"
73056042629SMatthias Ringwald };
73156042629SMatthias Ringwald 
7322b838201SMatthias Ringwald #ifdef ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL
7332b838201SMatthias Ringwald 
7342b838201SMatthias Ringwald /**
7352b838201SMatthias Ringwald  * @param flow_control_enable - 0: off, 1: ACL only, 2: SCO only, 3: ACL + SCO
7362b838201SMatthias Ringwald  */
7372b838201SMatthias Ringwald const hci_cmd_t hci_set_controller_to_host_flow_control = {
738ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL, "1"
7392b838201SMatthias Ringwald };
7402b838201SMatthias Ringwald 
74156042629SMatthias Ringwald /**
74256042629SMatthias Ringwald  * @param host_acl_data_packet_length
74356042629SMatthias Ringwald  * @param host_synchronous_data_packet_length
74456042629SMatthias Ringwald  * @param host_total_num_acl_data_packets
74556042629SMatthias Ringwald  * @param host_total_num_synchronous_data_packets
74656042629SMatthias Ringwald  */
74756042629SMatthias Ringwald const hci_cmd_t hci_host_buffer_size = {
748ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_HOST_BUFFER_SIZE, "2122"
74956042629SMatthias Ringwald };
75056042629SMatthias Ringwald 
7519119d792SMilanka Ringwald 
7522b838201SMatthias Ringwald #if 0
7532b838201SMatthias Ringwald //
7542b838201SMatthias Ringwald // command sent manually sent by hci_host_num_completed_packets
7552b838201SMatthias Ringwald //
7562b838201SMatthias Ringwald /**
7572b838201SMatthias Ringwald  * @note only single handle supported by BTstack command generator
7582b838201SMatthias Ringwald  * @param number_of_handles must be 1
7592b838201SMatthias Ringwald  * @param connection_handle
7602b838201SMatthias Ringwald  * @param host_num_of_completed_packets for the given connection handle
7612b838201SMatthias Ringwald  */
7622b838201SMatthias Ringwald const hci_cmd_t hci_host_number_of_completed_packets = {
763ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS, "1H2"
7642b838201SMatthias Ringwald };
7652b838201SMatthias Ringwald #endif
7662b838201SMatthias Ringwald 
7672b838201SMatthias Ringwald #endif
7682b838201SMatthias Ringwald 
76956042629SMatthias Ringwald /**
77056042629SMatthias Ringwald  * @param handle
77156042629SMatthias Ringwald  */
77256042629SMatthias Ringwald const hci_cmd_t hci_read_link_supervision_timeout = {
773ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LINK_SUPERVISION_TIMEOUT, "H"
77456042629SMatthias Ringwald };
77556042629SMatthias Ringwald 
77656042629SMatthias Ringwald /**
77756042629SMatthias Ringwald  * @param handle
77856042629SMatthias Ringwald  * @param timeout (0x0001 - 0xFFFF Time -> Range: 0.625ms - 40.9 sec)
77956042629SMatthias Ringwald  */
78056042629SMatthias Ringwald const hci_cmd_t hci_write_link_supervision_timeout = {
781ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LINK_SUPERVISION_TIMEOUT, "H2"
78256042629SMatthias Ringwald };
78356042629SMatthias Ringwald 
78456042629SMatthias Ringwald /**
7859119d792SMilanka Ringwald  * @param num_current_iac must be 2
7869119d792SMilanka Ringwald  * @param iac_lap1
7879119d792SMilanka Ringwald  * @param iac_lap2
7889119d792SMilanka Ringwald  */
7899119d792SMilanka Ringwald const hci_cmd_t hci_write_current_iac_lap_two_iacs = {
790ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_CURRENT_IAC_LAP_TWO_IACS, "133"
7919119d792SMilanka Ringwald };
7929119d792SMilanka Ringwald 
7939119d792SMilanka Ringwald /**
79456042629SMatthias Ringwald  * @param inquiry_mode (0x00 = standard, 0x01 = with RSSI, 0x02 = extended)
79556042629SMatthias Ringwald  */
79656042629SMatthias Ringwald const hci_cmd_t hci_write_inquiry_mode = {
797ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_INQUIRY_MODE, "1"
79856042629SMatthias Ringwald };
79956042629SMatthias Ringwald 
80056042629SMatthias Ringwald /**
80156042629SMatthias Ringwald  * @param fec_required
80256042629SMatthias Ringwald  * @param exstended_inquiry_response
80356042629SMatthias Ringwald  */
80456042629SMatthias Ringwald const hci_cmd_t hci_write_extended_inquiry_response = {
805ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_EXTENDED_INQUIRY_RESPONSE, "1E"
80656042629SMatthias Ringwald };
80756042629SMatthias Ringwald 
80856042629SMatthias Ringwald /**
80956042629SMatthias Ringwald  * @param mode (0 = off, 1 = on)
81056042629SMatthias Ringwald  */
81156042629SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_mode = {
812ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_MODE, "1"
81356042629SMatthias Ringwald };
81456042629SMatthias Ringwald 
815237daac5SMatthias Ringwald /**
816237daac5SMatthias Ringwald  */
817237daac5SMatthias Ringwald const hci_cmd_t hci_read_local_oob_data = {
818ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_OOB_DATA, ""
819237daac5SMatthias Ringwald     // return status, C, R
820237daac5SMatthias Ringwald };
821483c5078SMatthias Ringwald 
822483c5078SMatthias Ringwald /**
823483c5078SMatthias Ringwald  * @param mode (0 = off, 1 = on)
824483c5078SMatthias Ringwald  */
825483c5078SMatthias Ringwald const hci_cmd_t hci_write_default_erroneous_data_reporting = {
826ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING, "1"
827483c5078SMatthias Ringwald };
828483c5078SMatthias Ringwald 
82956042629SMatthias Ringwald /**
83056042629SMatthias Ringwald  */
83156042629SMatthias Ringwald const hci_cmd_t hci_read_le_host_supported = {
832ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LE_HOST_SUPPORTED, ""
83356042629SMatthias Ringwald     // return: status, le supported host, simultaneous le host
83456042629SMatthias Ringwald };
83556042629SMatthias Ringwald 
83656042629SMatthias Ringwald /**
83756042629SMatthias Ringwald  * @param le_supported_host
83856042629SMatthias Ringwald  * @param simultaneous_le_host
83956042629SMatthias Ringwald  */
84056042629SMatthias Ringwald const hci_cmd_t hci_write_le_host_supported = {
841ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LE_HOST_SUPPORTED, "11"
84256042629SMatthias Ringwald     // return: status
84356042629SMatthias Ringwald };
84456042629SMatthias Ringwald 
84556042629SMatthias Ringwald /**
846b002ae8cSMatthias Ringwald  * @param secure_connections_host_support
847b002ae8cSMatthias Ringwald  */
848b002ae8cSMatthias Ringwald const hci_cmd_t hci_write_secure_connections_host_support = {
849ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT, "1"
850b002ae8cSMatthias Ringwald     // return: status
851b002ae8cSMatthias Ringwald };
852b002ae8cSMatthias Ringwald 
853b002ae8cSMatthias Ringwald /**
854237daac5SMatthias Ringwald  */
855237daac5SMatthias Ringwald const hci_cmd_t hci_read_local_extended_ob_data = {
856ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_EXTENDED_OB_DATA, ""
857237daac5SMatthias Ringwald     // return status, C_192, R_192, R_256, C_256
858237daac5SMatthias Ringwald };
859237daac5SMatthias Ringwald 
860237daac5SMatthias Ringwald 
861237daac5SMatthias Ringwald /**
86256042629SMatthias Ringwald  * Testing Commands
86356042629SMatthias Ringwald  */
86456042629SMatthias Ringwald 
86556042629SMatthias Ringwald 
86656042629SMatthias Ringwald /**
86756042629SMatthias Ringwald  */
86856042629SMatthias Ringwald const hci_cmd_t hci_read_loopback_mode = {
869ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOOPBACK_MODE, ""
87056042629SMatthias Ringwald     // return: status, loopback mode (0 = off, 1 = local loopback, 2 = remote loopback)
87156042629SMatthias Ringwald };
87256042629SMatthias Ringwald 
87356042629SMatthias Ringwald /**
87456042629SMatthias Ringwald  * @param loopback_mode
87556042629SMatthias Ringwald  */
87656042629SMatthias Ringwald const hci_cmd_t hci_write_loopback_mode = {
877ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_LOOPBACK_MODE, "1"
87856042629SMatthias Ringwald     // return: status
87956042629SMatthias Ringwald };
88056042629SMatthias Ringwald 
88184ca9bd8SMatthias Ringwald /**
88284ca9bd8SMatthias Ringwald  */
88384ca9bd8SMatthias Ringwald const hci_cmd_t hci_enable_device_under_test_mode = {
884ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_ENABLE_DEVICE_UNDER_TEST_MODE, ""
88584ca9bd8SMatthias Ringwald     // return: status
88684ca9bd8SMatthias Ringwald };
88784ca9bd8SMatthias Ringwald 
88884ca9bd8SMatthias Ringwald /**
88984ca9bd8SMatthias Ringwald  * @param simple_pairing_debug_mode
89084ca9bd8SMatthias Ringwald  */
89184ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_debug_mode = {
892ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE, "1"
89384ca9bd8SMatthias Ringwald     // return: status
89484ca9bd8SMatthias Ringwald };
89584ca9bd8SMatthias Ringwald 
89684ca9bd8SMatthias Ringwald /**
89784ca9bd8SMatthias Ringwald  * @param handle
89884ca9bd8SMatthias Ringwald  * @param dm1_acl_u_mode
89984ca9bd8SMatthias Ringwald  * @param esco_loopback_mode
90084ca9bd8SMatthias Ringwald  */
90184ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_secure_connections_test_mode = {
902ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE, "H11"
90384ca9bd8SMatthias Ringwald     // return: status
90484ca9bd8SMatthias Ringwald };
90584ca9bd8SMatthias Ringwald 
90656042629SMatthias Ringwald 
90756042629SMatthias Ringwald /**
90856042629SMatthias Ringwald  * Informational Parameters
90956042629SMatthias Ringwald  */
91056042629SMatthias Ringwald 
91156042629SMatthias Ringwald const hci_cmd_t hci_read_local_version_information = {
912ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_VERSION_INFORMATION, ""
91356042629SMatthias Ringwald };
91456042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_commands = {
915ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_COMMANDS, ""
91656042629SMatthias Ringwald };
91756042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_features = {
918ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_FEATURES, ""
91956042629SMatthias Ringwald };
92056042629SMatthias Ringwald const hci_cmd_t hci_read_buffer_size = {
921ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_BUFFER_SIZE, ""
92256042629SMatthias Ringwald };
92356042629SMatthias Ringwald const hci_cmd_t hci_read_bd_addr = {
924ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_BD_ADDR, ""
92556042629SMatthias Ringwald };
92656042629SMatthias Ringwald 
92756042629SMatthias Ringwald /**
92856042629SMatthias Ringwald  * Status Paramters
92956042629SMatthias Ringwald  */
93056042629SMatthias Ringwald 
93156042629SMatthias Ringwald /**
93256042629SMatthias Ringwald  * @param handle
93356042629SMatthias Ringwald  */
93456042629SMatthias Ringwald const hci_cmd_t hci_read_rssi = {
935ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_RSSI, "H"
93656042629SMatthias Ringwald };
93756042629SMatthias Ringwald 
93897abfa24SMatthias Ringwald /**
93997abfa24SMatthias Ringwald  * @param handle
94097abfa24SMatthias Ringwald  */
94197abfa24SMatthias Ringwald const hci_cmd_t hci_read_encryption_key_size = {
942ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_READ_ENCRYPTION_KEY_SIZE, "H"
94397abfa24SMatthias Ringwald };
94456042629SMatthias Ringwald 
94556042629SMatthias Ringwald 
946a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE
94756042629SMatthias Ringwald /**
94856042629SMatthias Ringwald  * Low Energy Commands
94956042629SMatthias Ringwald  */
95056042629SMatthias Ringwald 
95156042629SMatthias Ringwald /**
95256042629SMatthias Ringwald  * @param event_mask_lower_octets
95356042629SMatthias Ringwald  * @param event_mask_higher_octets
95456042629SMatthias Ringwald  */
95556042629SMatthias Ringwald const hci_cmd_t hci_le_set_event_mask = {
956ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_EVENT_MASK, "44"
95756042629SMatthias Ringwald     // return: status
95856042629SMatthias Ringwald };
95956042629SMatthias Ringwald 
96056042629SMatthias Ringwald const hci_cmd_t hci_le_read_buffer_size = {
961ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_BUFFER_SIZE, ""
96256042629SMatthias Ringwald     // return: status, le acl data packet len (16), total num le acl data packets(8)
96356042629SMatthias Ringwald };
96456042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_features = {
965ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUPPORTED_FEATURES, ""
96656042629SMatthias Ringwald     // return: LE_Features See [Vol 6] Part B, Section 4.6
96756042629SMatthias Ringwald };
96856042629SMatthias Ringwald 
96956042629SMatthias Ringwald /**
97056042629SMatthias Ringwald  * @param random_bd_addr
97156042629SMatthias Ringwald  */
97256042629SMatthias Ringwald const hci_cmd_t hci_le_set_random_address = {
973ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_RANDOM_ADDRESS, "B"
97456042629SMatthias Ringwald     // return: status
97556042629SMatthias Ringwald };
97656042629SMatthias Ringwald 
97756042629SMatthias Ringwald /**
97856042629SMatthias Ringwald  * @param advertising_interval_min ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec)
97956042629SMatthias Ringwald  * @param advertising_interval_max ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec)
98056042629SMatthias Ringwald  * @param advertising_type (enum from 0: ADV_IND, ADC_DIRECT_IND, ADV_SCAN_IND, ADV_NONCONN_IND)
98156042629SMatthias Ringwald  * @param own_address_type (enum from 0: public device address, random device address)
98256042629SMatthias Ringwald  * @param direct_address_type ()
98356042629SMatthias Ringwald  * @param direct_address (public or random address of device to be connecteed)
98456042629SMatthias Ringwald  * @param advertising_channel_map (flags: chan_37(1), chan_38(2), chan_39(4))
98556042629SMatthias Ringwald  * @param advertising_filter_policy (enum from 0: scan any conn any, scan whitelist, con any, scan any conn whitelist, scan whitelist, con whitelist)
98656042629SMatthias Ringwald  */
98756042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_parameters = {
988ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISING_PARAMETERS, "22111B11"
98956042629SMatthias Ringwald     // return: status
99056042629SMatthias Ringwald };
99156042629SMatthias Ringwald 
99256042629SMatthias Ringwald const hci_cmd_t hci_le_read_advertising_channel_tx_power = {
993ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER, ""
99456042629SMatthias Ringwald     // return: status, level [-20,10] signed int (8), units dBm
99556042629SMatthias Ringwald };
99656042629SMatthias Ringwald 
99756042629SMatthias Ringwald /**
99856042629SMatthias Ringwald  * @param advertising_data_length
99956042629SMatthias Ringwald  * @param advertising_data (31 bytes)
100056042629SMatthias Ringwald  */
100156042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_data= {
1002ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISING_DATA, "1A"
100356042629SMatthias Ringwald     // return: status
100456042629SMatthias Ringwald };
100556042629SMatthias Ringwald 
100656042629SMatthias Ringwald /**
100756042629SMatthias Ringwald  * @param scan_response_data_length
100856042629SMatthias Ringwald  * @param scan_response_data (31 bytes)
100956042629SMatthias Ringwald  */
101056042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_response_data= {
1011ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_RESPONSE_DATA, "1A"
101256042629SMatthias Ringwald     // return: status
101356042629SMatthias Ringwald };
101456042629SMatthias Ringwald 
101556042629SMatthias Ringwald /**
101656042629SMatthias Ringwald  * @param advertise_enable (off: 0, on: 1)
101756042629SMatthias Ringwald  */
101856042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertise_enable = {
1019ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_ADVERTISE_ENABLE, "1"
102056042629SMatthias Ringwald     // return: status
102156042629SMatthias Ringwald };
102256042629SMatthias Ringwald 
102356042629SMatthias Ringwald /**
102456042629SMatthias Ringwald  * @param le_scan_type (passive (0), active (1))
102556042629SMatthias Ringwald  * @param le_scan_interval ([0x0004,0x4000], unit: 0.625 msec)
102656042629SMatthias Ringwald  * @param le_scan_window   ([0x0004,0x4000], unit: 0.625 msec)
102756042629SMatthias Ringwald  * @param own_address_type (public (0), random (1))
102856042629SMatthias Ringwald  * @param scanning_filter_policy (any (0), only whitelist (1))
102956042629SMatthias Ringwald  */
103056042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_parameters = {
1031ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_PARAMETERS, "12211"
103256042629SMatthias Ringwald     // return: status
103356042629SMatthias Ringwald };
103456042629SMatthias Ringwald 
103556042629SMatthias Ringwald /**
103656042629SMatthias Ringwald  * @param le_scan_enable  (disabled (0), enabled (1))
103756042629SMatthias Ringwald  * @param filter_duplices (disabled (0), enabled (1))
103856042629SMatthias Ringwald  */
103956042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_enable = {
1040ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_SCAN_ENABLE, "11"
104156042629SMatthias Ringwald     // return: status
104256042629SMatthias Ringwald };
104356042629SMatthias Ringwald 
104456042629SMatthias Ringwald /**
104556042629SMatthias Ringwald  * @param le_scan_interval ([0x0004, 0x4000], unit: 0.625 msec)
104656042629SMatthias Ringwald  * @param le_scan_window ([0x0004, 0x4000], unit: 0.625 msec)
104756042629SMatthias Ringwald  * @param initiator_filter_policy (peer address type + peer address (0), whitelist (1))
104856042629SMatthias Ringwald  * @param peer_address_type (public (0), random (1))
104956042629SMatthias Ringwald  * @param peer_address
105056042629SMatthias Ringwald  * @param own_address_type (public (0), random (1))
105156042629SMatthias Ringwald  * @param conn_interval_min ([0x0006, 0x0c80], unit: 1.25 msec)
105256042629SMatthias Ringwald  * @param conn_interval_max ([0x0006, 0x0c80], unit: 1.25 msec)
105356042629SMatthias Ringwald  * @param conn_latency (number of connection events [0x0000, 0x01f4])
105456042629SMatthias Ringwald  * @param supervision_timeout ([0x000a, 0x0c80], unit: 10 msec)
105556042629SMatthias Ringwald  * @param minimum_CE_length ([0x0000, 0xffff], unit: 0.625 msec)
105656042629SMatthias Ringwald  * @param maximum_CE_length ([0x0000, 0xffff], unit: 0.625 msec)
105756042629SMatthias Ringwald  */
105856042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection= {
1059ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CREATE_CONNECTION, "2211B1222222"
106056042629SMatthias Ringwald     // return: none -> le create connection complete event
106156042629SMatthias Ringwald };
106256042629SMatthias Ringwald 
106356042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection_cancel = {
1064ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CREATE_CONNECTION_CANCEL, ""
106556042629SMatthias Ringwald     // return: status
106656042629SMatthias Ringwald };
106756042629SMatthias Ringwald 
106856042629SMatthias Ringwald const hci_cmd_t hci_le_read_white_list_size = {
1069ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_WHITE_LIST_SIZE, ""
107056042629SMatthias Ringwald     // return: status, number of entries in controller whitelist
107156042629SMatthias Ringwald };
107256042629SMatthias Ringwald 
107356042629SMatthias Ringwald const hci_cmd_t hci_le_clear_white_list = {
1074ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CLEAR_WHITE_LIST, ""
107556042629SMatthias Ringwald     // return: status
107656042629SMatthias Ringwald };
107756042629SMatthias Ringwald 
107856042629SMatthias Ringwald /**
107956042629SMatthias Ringwald  * @param address_type (public (0), random (1))
108056042629SMatthias Ringwald  * @param bd_addr
108156042629SMatthias Ringwald  */
108256042629SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_white_list = {
1083ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_WHITE_LIST, "1B"
108456042629SMatthias Ringwald     // return: status
108556042629SMatthias Ringwald };
108656042629SMatthias Ringwald 
108756042629SMatthias Ringwald /**
108856042629SMatthias Ringwald  * @param address_type (public (0), random (1))
108956042629SMatthias Ringwald  * @param bd_addr
109056042629SMatthias Ringwald  */
109156042629SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_white_list = {
1092ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST, "1B"
109356042629SMatthias Ringwald     // return: status
109456042629SMatthias Ringwald };
109556042629SMatthias Ringwald 
109656042629SMatthias Ringwald /**
109756042629SMatthias Ringwald  * @param conn_handle
109856042629SMatthias Ringwald  * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec)
109956042629SMatthias Ringwald  * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec)
110056042629SMatthias Ringwald  * @param conn_latency ([0x0000,0x03e8], number of connection events)
110156042629SMatthias Ringwald  * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec)
110256042629SMatthias Ringwald  * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
110356042629SMatthias Ringwald  * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
110456042629SMatthias Ringwald  */
110556042629SMatthias Ringwald const hci_cmd_t hci_le_connection_update = {
1106ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_CONNECTION_UPDATE, "H222222"
110756042629SMatthias Ringwald     // return: none -> le connection update complete event
110856042629SMatthias Ringwald };
110956042629SMatthias Ringwald 
111056042629SMatthias Ringwald /**
111156042629SMatthias Ringwald  * @param channel_map_lower_32bits
111256042629SMatthias Ringwald  * @param channel_map_higher_5bits
111356042629SMatthias Ringwald  */
111456042629SMatthias Ringwald const hci_cmd_t hci_le_set_host_channel_classification = {
1115ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION, "41"
111656042629SMatthias Ringwald     // return: status
111756042629SMatthias Ringwald };
111856042629SMatthias Ringwald 
111956042629SMatthias Ringwald /**
112056042629SMatthias Ringwald  * @param conn_handle
112156042629SMatthias Ringwald  */
112256042629SMatthias Ringwald const hci_cmd_t hci_le_read_channel_map = {
1123ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_CHANNEL_MAP, "H"
112456042629SMatthias Ringwald     // return: status, connection handle, channel map (5 bytes, 37 used)
112556042629SMatthias Ringwald };
112656042629SMatthias Ringwald 
112756042629SMatthias Ringwald /**
112856042629SMatthias Ringwald  * @param conn_handle
112956042629SMatthias Ringwald  */
113056042629SMatthias Ringwald const hci_cmd_t hci_le_read_remote_used_features = {
1131ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_REMOTE_USED_FEATURES, "H"
113256042629SMatthias Ringwald     // return: none -> le read remote used features complete event
113356042629SMatthias Ringwald };
113456042629SMatthias Ringwald 
113556042629SMatthias Ringwald /**
113656042629SMatthias Ringwald  * @param key ((128) for AES-128)
113756042629SMatthias Ringwald  * @param plain_text (128)
113856042629SMatthias Ringwald  */
113956042629SMatthias Ringwald const hci_cmd_t hci_le_encrypt = {
1140ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_ENCRYPT, "PP"
114156042629SMatthias Ringwald     // return: status, encrypted data (128)
114256042629SMatthias Ringwald };
114356042629SMatthias Ringwald 
114456042629SMatthias Ringwald const hci_cmd_t hci_le_rand = {
1145ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_RAND, ""
114656042629SMatthias Ringwald     // return: status, random number (64)
114756042629SMatthias Ringwald };
114856042629SMatthias Ringwald 
114956042629SMatthias Ringwald /**
115056042629SMatthias Ringwald  * @param conn_handle
115156042629SMatthias Ringwald  * @param random_number_lower_32bits
115256042629SMatthias Ringwald  * @param random_number_higher_32bits
115356042629SMatthias Ringwald  * @param encryption_diversifier (16)
115456042629SMatthias Ringwald  * @param long_term_key (128)
115556042629SMatthias Ringwald  */
115656042629SMatthias Ringwald const hci_cmd_t hci_le_start_encryption = {
1157ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_START_ENCRYPTION, "H442P"
115856042629SMatthias Ringwald     // return: none -> encryption changed or encryption key refresh complete event
115956042629SMatthias Ringwald };
116056042629SMatthias Ringwald 
116156042629SMatthias Ringwald /**
116256042629SMatthias Ringwald  * @param connection_handle
116356042629SMatthias Ringwald  * @param long_term_key (128)
116456042629SMatthias Ringwald  */
116556042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_request_reply = {
1166ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_LONG_TERM_KEY_REQUEST_REPLY, "HP"
116756042629SMatthias Ringwald     // return: status, connection handle
116856042629SMatthias Ringwald };
116956042629SMatthias Ringwald 
117056042629SMatthias Ringwald /**
117156042629SMatthias Ringwald  * @param conn_handle
117256042629SMatthias Ringwald  */
117356042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_negative_reply = {
1174ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_LONG_TERM_KEY_NEGATIVE_REPLY, "H"
117556042629SMatthias Ringwald     // return: status, connection handle
117656042629SMatthias Ringwald };
117756042629SMatthias Ringwald 
117856042629SMatthias Ringwald /**
117956042629SMatthias Ringwald  * @param conn_handle
118056042629SMatthias Ringwald  */
118156042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_states = {
1182ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUPPORTED_STATES, "H"
118356042629SMatthias Ringwald     // return: status, LE states (64)
118456042629SMatthias Ringwald };
118556042629SMatthias Ringwald 
118656042629SMatthias Ringwald /**
118756042629SMatthias Ringwald  * @param rx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2)
118856042629SMatthias Ringwald  */
118956042629SMatthias Ringwald const hci_cmd_t hci_le_receiver_test = {
1190ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_RECEIVER_TEST, "1"
119156042629SMatthias Ringwald     // return: status
119256042629SMatthias Ringwald };
119356042629SMatthias Ringwald 
119456042629SMatthias Ringwald /**
119556042629SMatthias Ringwald  * @param tx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2)
119656042629SMatthias Ringwald  * @param test_payload_lengh ([0x00,0x25])
119756042629SMatthias Ringwald  * @param packet_payload ([0,7] different patterns)
119856042629SMatthias Ringwald  */
119956042629SMatthias Ringwald const hci_cmd_t hci_le_transmitter_test = {
1200ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_TRANSMITTER_TEST, "111"
120156042629SMatthias Ringwald     // return: status
120256042629SMatthias Ringwald };
120356042629SMatthias Ringwald 
120456042629SMatthias Ringwald /**
120556042629SMatthias Ringwald  * @param end_test_cmd
120656042629SMatthias Ringwald  */
120756042629SMatthias Ringwald const hci_cmd_t hci_le_test_end = {
1208ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_TEST_END, "1"
120956042629SMatthias Ringwald     // return: status, number of packets (8)
121056042629SMatthias Ringwald };
121182180fcaSMatthias Ringwald 
121282180fcaSMatthias Ringwald /**
1213fe704c95SMatthias Ringwald  * @param conn_handle
1214fe704c95SMatthias Ringwald  * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec)
1215fe704c95SMatthias Ringwald  * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec)
1216fe704c95SMatthias Ringwald  * @param conn_latency ([0x0000,0x03e8], number of connection events)
1217fe704c95SMatthias Ringwald  * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec)
1218fe704c95SMatthias Ringwald  * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
1219fe704c95SMatthias Ringwald  * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec)
1220fe704c95SMatthias Ringwald  */
1221fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_reply = {
1222ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY, "H222222"
1223fe704c95SMatthias Ringwald     // return: status, connection handle
1224fe704c95SMatthias Ringwald };
1225fe704c95SMatthias Ringwald 
1226fe704c95SMatthias Ringwald /**
1227fe704c95SMatthias Ringwald  * @param con_handle
1228fe704c95SMatthias Ringwald  * @param reason
1229fe704c95SMatthias Ringwald  */
1230fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_negative_reply = {
1231ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY, "H1"
1232fe704c95SMatthias Ringwald     // return: status, connection handle
1233fe704c95SMatthias Ringwald };
1234fe704c95SMatthias Ringwald 
1235fe704c95SMatthias Ringwald /**
12360ea2847fSMatthias Ringwald  * @param con_handle
12370ea2847fSMatthias Ringwald  * @param tx_octets
12380ea2847fSMatthias Ringwald  * @param tx_time
12390ea2847fSMatthias Ringwald  */
12400ea2847fSMatthias Ringwald const hci_cmd_t hci_le_set_data_length = {
1241ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_DATA_LENGTH, "H22"
12420ea2847fSMatthias Ringwald     // return: status, connection handle
12430ea2847fSMatthias Ringwald };
12440ea2847fSMatthias Ringwald 
12450ea2847fSMatthias Ringwald /**
12460ea2847fSMatthias Ringwald  */
12470ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_suggested_default_data_length = {
1248ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH, ""
12490ea2847fSMatthias Ringwald     // return: status, suggested max tx octets, suggested max tx time
12500ea2847fSMatthias Ringwald };
12510ea2847fSMatthias Ringwald 
12520ea2847fSMatthias Ringwald /**
12530ea2847fSMatthias Ringwald  * @param suggested_max_tx_octets
12540ea2847fSMatthias Ringwald  * @param suggested_max_tx_time
12550ea2847fSMatthias Ringwald  */
12560ea2847fSMatthias Ringwald const hci_cmd_t hci_le_write_suggested_default_data_length = {
1257ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH, "22"
12580ea2847fSMatthias Ringwald     // return: status
12590ea2847fSMatthias Ringwald };
12600ea2847fSMatthias Ringwald 
12610ea2847fSMatthias Ringwald /**
126282180fcaSMatthias Ringwald  */
126382180fcaSMatthias Ringwald const hci_cmd_t hci_le_read_local_p256_public_key = {
1264ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_LOCAL_P256_PUBLIC_KEY, ""
126582180fcaSMatthias Ringwald //  LE Read Local P-256 Public Key Complete is generated on completion
126682180fcaSMatthias Ringwald };
126782180fcaSMatthias Ringwald 
126882180fcaSMatthias Ringwald /**
1269fcae305fSMatthias Ringwald  * @param public key
1270fcae305fSMatthias Ringwald  * @param private key
127182180fcaSMatthias Ringwald  */
127282180fcaSMatthias Ringwald const hci_cmd_t hci_le_generate_dhkey = {
1273ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_GENERATE_DHKEY, "QQ"
127482180fcaSMatthias Ringwald // LE Generate DHKey Complete is generated on completion
127582180fcaSMatthias Ringwald };
127682180fcaSMatthias Ringwald 
12770ea2847fSMatthias Ringwald /**
1278173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1279173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1280173ed1a3SMatthias Ringwald  * @param Peer_IRK
1281173ed1a3SMatthias Ringwald  * @param Local_IRK
1282173ed1a3SMatthias Ringwald  */
1283173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_resolving_list = {
1284173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST, "1BPP"
1285173ed1a3SMatthias Ringwald };
1286173ed1a3SMatthias Ringwald 
1287173ed1a3SMatthias Ringwald /**
1288173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1289173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1290173ed1a3SMatthias Ringwald  */
1291173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_resolving_list = {
1292173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST, "1B"
1293173ed1a3SMatthias Ringwald };
1294173ed1a3SMatthias Ringwald 
1295173ed1a3SMatthias Ringwald /**
1296173ed1a3SMatthias Ringwald  */
1297173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_clear_resolving_list = {
1298173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_CLEAR_RESOLVING_LIST, ""
1299173ed1a3SMatthias Ringwald };
1300173ed1a3SMatthias Ringwald 
1301173ed1a3SMatthias Ringwald /**
1302173ed1a3SMatthias Ringwald  */
1303173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_resolving_list_size = {
1304173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_RESOLVING_LIST_SIZE, ""
1305173ed1a3SMatthias Ringwald };
1306173ed1a3SMatthias Ringwald 
1307173ed1a3SMatthias Ringwald /**
1308173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1309173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1310173ed1a3SMatthias Ringwald  */
1311173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_peer_resolvable_address = {
1312173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_PEER_RESOLVABLE_ADDRESS, ""
1313173ed1a3SMatthias Ringwald };
1314173ed1a3SMatthias Ringwald 
1315173ed1a3SMatthias Ringwald /**
1316173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address_Type
1317173ed1a3SMatthias Ringwald  * @param Peer_Identity_Address
1318173ed1a3SMatthias Ringwald  */
1319173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_local_resolvable_address = {
1320173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS, ""
1321173ed1a3SMatthias Ringwald };
1322173ed1a3SMatthias Ringwald 
1323173ed1a3SMatthias Ringwald /**
1324173ed1a3SMatthias Ringwald  * @param Address_Resolution_Enable
1325173ed1a3SMatthias Ringwald  */
1326173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_address_resolution_enabled= {
1327173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_SET_ADDRESS_RESOLUTION_ENABLED, "1"
1328173ed1a3SMatthias Ringwald };
1329173ed1a3SMatthias Ringwald 
1330173ed1a3SMatthias Ringwald /**
1331173ed1a3SMatthias Ringwald  * @param RPA_Timeout in seconds, range 0x0001 to 0x0E10, default: 900 s
1332173ed1a3SMatthias Ringwald  */
1333173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_resolvable_private_address_timeout= {
1334173ed1a3SMatthias Ringwald         HCI_OPCODE_HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT, "2"
1335173ed1a3SMatthias Ringwald };
1336173ed1a3SMatthias Ringwald 
1337173ed1a3SMatthias Ringwald /**
13380ea2847fSMatthias Ringwald  */
13390ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_maximum_data_length = {
1340ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_MAXIMUM_DATA_LENGTH, ""
13410ea2847fSMatthias Ringwald     // return: status, supported max tx octets, supported max tx time, supported max rx octets, supported max rx time
13420ea2847fSMatthias Ringwald };
13430ea2847fSMatthias Ringwald 
1344ca13daefSMatthias Ringwald /**
1345ca13daefSMatthias Ringwald  * @param con_handle
1346ca13daefSMatthias Ringwald  */
1347ca13daefSMatthias Ringwald const hci_cmd_t hci_le_read_phy = {
1348ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_READ_PHY, "H"
1349ca13daefSMatthias Ringwald     // return: status, connection handler, tx phy, rx phy
1350ca13daefSMatthias Ringwald };
1351ca13daefSMatthias Ringwald 
1352ca13daefSMatthias Ringwald /**
1353ca13daefSMatthias Ringwald  * @param all_phys
1354ca13daefSMatthias Ringwald  * @param tx_phys
1355ca13daefSMatthias Ringwald  * @param rx_phys
1356ca13daefSMatthias Ringwald  */
1357ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_default_phy = {
1358ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_DEFAULT_PHY, "111"
1359ca13daefSMatthias Ringwald     // return: status
1360ca13daefSMatthias Ringwald };
1361ca13daefSMatthias Ringwald 
1362ca13daefSMatthias Ringwald /**
1363ca13daefSMatthias Ringwald  * @param con_handle
1364ca13daefSMatthias Ringwald  * @param all_phys
1365ca13daefSMatthias Ringwald  * @param tx_phys
1366ca13daefSMatthias Ringwald  * @param rx_phys
1367ca13daefSMatthias Ringwald  * @param phy_options
1368ca13daefSMatthias Ringwald  */
1369ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_phy = {
1370ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_LE_SET_PHY, "H1111"
1371ca13daefSMatthias Ringwald // LE PHY Update Complete is generated on completion
1372ca13daefSMatthias Ringwald };
1373ca13daefSMatthias Ringwald 
1374ca13daefSMatthias Ringwald 
137556042629SMatthias Ringwald #endif
1376a42798c3SMatthias Ringwald 
1377a42798c3SMatthias Ringwald // Broadcom / Cypress specific HCI commands
1378a42798c3SMatthias Ringwald 
1379a42798c3SMatthias Ringwald /**
1380*067ecc36SMatthias Ringwald  * @brief Enable Wide-Band Speech / mSBC decoding for PCM
1381*067ecc36SMatthias Ringwald  * @param enable_wbs is 0 for disable, 1 for enable
1382*067ecc36SMatthias Ringwald  * @param uuid_wbs is 2 for EV2/EV3
1383*067ecc36SMatthias Ringwald  */
1384*067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_enable_wbs = {
1385*067ecc36SMatthias Ringwald         HCI_OPCODE_HCI_BCM_ENABLE_WBS, "12"
1386*067ecc36SMatthias Ringwald         // return: status
1387*067ecc36SMatthias Ringwald };
1388*067ecc36SMatthias Ringwald 
1389*067ecc36SMatthias Ringwald /**
1390a42798c3SMatthias Ringwald  * @brief Configure SCO Routing (BCM)
1391a42798c3SMatthias Ringwald  * @param sco_routing is 0 for PCM, 1 for Transport, 2 for Codec and 3 for I2S
1392a42798c3SMatthias Ringwald  * @param pcm_interface_rate is 0 for 128KBps, 1 for 256 KBps, 2 for 512KBps, 3 for 1024KBps, and 4 for 2048Kbps
1393a42798c3SMatthias Ringwald  * @param frame_type is 0 for short and 1 for long
1394a42798c3SMatthias Ringwald  * @param sync_mode is 0 for slave and 1 for master
1395a42798c3SMatthias Ringwald  * @param clock_mode is 0 for slabe and 1 for master
1396a42798c3SMatthias Ringwald  */
1397a42798c3SMatthias Ringwald const hci_cmd_t hci_bcm_write_sco_pcm_int = {
1398ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_WRITE_SCO_PCM_INT, "11111"
1399a42798c3SMatthias Ringwald     // return: status
1400a42798c3SMatthias Ringwald };
1401eab6959fSMatthias Ringwald 
1402eab6959fSMatthias Ringwald /**
1403*067ecc36SMatthias Ringwald  * @brief Configure the I2S/PCM interface (BCM)
1404*067ecc36SMatthias Ringwald  * @param i2s_enable is 0 for off, 1 for on
1405*067ecc36SMatthias Ringwald  * @param is_master is 0 for slave, is 1 for master
1406*067ecc36SMatthias Ringwald  * @param sample_rate is 0 for 8 kHz, 1 for 16 kHz, 2 for 4 kHz
1407*067ecc36SMatthias 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
1408*067ecc36SMatthias Ringwald  * @param clock_mode is 0 for slabe and 1 for master
1409*067ecc36SMatthias Ringwald  */
1410*067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_write_i2spcm_interface_param = {
1411*067ecc36SMatthias Ringwald         HCI_OPCODE_HCI_BCM_WRITE_I2SPCM_INTERFACE_PARAM, "1111"
1412*067ecc36SMatthias Ringwald         // return: status
1413*067ecc36SMatthias Ringwald };
1414*067ecc36SMatthias Ringwald 
1415*067ecc36SMatthias Ringwald 
1416*067ecc36SMatthias Ringwald /**
1417eab6959fSMatthias Ringwald  * @brief Activates selected Sleep Mode
1418eab6959fSMatthias 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
1419eab6959fSMatthias Ringwald  * @param idle_threshold_host (modes 1,2,5,7) time until considered idle, unit roughly 300 ms
1420eab6959fSMatthias Ringwald  * @param idle_threshold_controller (modes 1-7,9) time until considered idle, unit roughly 300 ms
1421eab6959fSMatthias Ringwald  * @param bt_wake_active_mode (modes 1,2,7) 0 = BT_WAKE line is active high, 1 = BT_WAKE is active low
1422eab6959fSMatthias Ringwald  * @param host_wake_active_mode (modes 1,2,5,7) 0 = HOST_WAKE line is active high, 1 = HOST_WAKE is active low
1423eab6959fSMatthias Ringwald  * @param allow_host_sleep_during_sco (modes 1,2,3,5,7)
1424eab6959fSMatthias Ringwald  * @param combine_sleep_mode_and_lpm  (modes 1,2,3,5,7)
1425eab6959fSMatthias Ringwald  * @param enable_tristate_control_of_uart_tx_line (modes 1,2,7)
1426eab6959fSMatthias Ringwald  * @param active_connection_handling_on_suspend (modes 3,5)
1427eab6959fSMatthias Ringwald  * @param resume_timeout (modes 3,5)
1428eab6959fSMatthias Ringwald  * @param enable_break_to_host (mode 12)
1429eab6959fSMatthias Ringwald  * @param pulsed_host_wake (modes 1,12)
1430eab6959fSMatthias Ringwald  */
1431eab6959fSMatthias Ringwald const hci_cmd_t hci_bcm_set_sleep_mode = {
1432ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_SET_SLEEP_MODE, "111111111111"
1433eab6959fSMatthias Ringwald };
14345cdaddfaSMatthias Ringwald 
14355cdaddfaSMatthias Ringwald /**
14365cdaddfaSMatthias Ringwald  * @brief Set TX Power Table
14375cdaddfaSMatthias Ringwald  * @param is_le 0=classic, 1=LE
14385cdaddfaSMatthias Ringwald  * @param chip_max_tx_pwr_db chip level max TX power in dBM
14395cdaddfaSMatthias Ringwald  */
14405cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_write_tx_power_table = {
1441ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_WRITE_TX_POWER_TABLE, "11"
14425cdaddfaSMatthias Ringwald };
14435cdaddfaSMatthias Ringwald 
14445cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_set_tx_pwr = {
1445ea5cc3a8SMatthias Ringwald     HCI_OPCODE_HCI_BCM_SET_TX_PWR, "11H"
14465cdaddfaSMatthias Ringwald };
1447ba39ed56SMatthias Ringwald 
1448ba39ed56SMatthias Ringwald /**
1449ba39ed56SMatthias Ringwald  *
1450ba39ed56SMatthias Ringwald  *
1451ba39ed56SMatthias Ringwald  * @brief This command tests the RF transceiver in continuous transmission mode.
1452ba39ed56SMatthias Ringwald  *        The transmitter is activated by configuring the transmission parameters such as pattern,
1453ba39ed56SMatthias Ringwald  *        modulation, and frequency.
1454ba39ed56SMatthias Ringwald  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Con_TX.280xFD84.29
1455ba39ed56SMatthias Ringwald  * @param modulation
1456ba39ed56SMatthias Ringwald  * @param test_patern
1457ba39ed56SMatthias Ringwald  * @param frequency
1458ba39ed56SMatthias Ringwald  * @param power_level
1459ba39ed56SMatthias Ringwald  * @param reserved1
1460ba39ed56SMatthias Ringwald  * @param reserved2
1461ba39ed56SMatthias Ringwald  */
1462ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_con_tx = {
1463ba39ed56SMatthias Ringwald     0xFD84, "111144"
1464ba39ed56SMatthias Ringwald };
1465ba39ed56SMatthias Ringwald 
1466ba39ed56SMatthias Ringwald /**
1467ba39ed56SMatthias Ringwald  * @brief This command starts sending/receiving packets using packet transmission parameters such as
1468ba39ed56SMatthias Ringwald  *        frequency channel, packet type, and packet length. It is used for Packet TX/RX.
1469ba39ed56SMatthias Ringwald  * @see   processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Packet_TX_RX_.280xFD85.29
1470ba39ed56SMatthias Ringwald  * @param frequency_mode
1471ba39ed56SMatthias Ringwald  * @param tx_single_frequency
1472ba39ed56SMatthias Ringwald  * @param rx_single_frequency
1473ba39ed56SMatthias Ringwald  * @param acl_packet_type
1474ba39ed56SMatthias Ringwald  * @paarm acl_packet_data_pattern
1475ba39ed56SMatthias Ringwald  * @param reserved
1476ba39ed56SMatthias Ringwald  * @param power_level
1477ba39ed56SMatthias Ringwald  * @param disable_whitening
1478ba39ed56SMatthias Ringwald  * @param prbs9_initialization_value
1479ba39ed56SMatthias Ringwald  */
1480ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_packet_tx_rx = {
1481ba39ed56SMatthias Ringwald     0xFD85, "1111112112"
1482ba39ed56SMatthias Ringwald };
1483365a7dd1SMatthias Ringwald 
1484365a7dd1SMatthias Ringwald /**
1485365a7dd1SMatthias Ringwald  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
1486365a7dd1SMatthias Ringwald  * @param enable 0=disable, 1=enable
1487365a7dd1SMatthias Ringwald  * @param a3dp_role (NL5500, WL128x only) 0=source,1=sink
1488365a7dd1SMatthias Ringwald  * @param code_upload (NL5500, WL128x only) 0=do not load a3dp code, 1=load a3dp code
1489365a7dd1SMatthias Ringwald  * @param reserved for future use
1490365a7dd1SMatthias Ringwald  */
1491365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_avrp_enable = {
1492365a7dd1SMatthias Ringwald         0xFD92, "1112"
1493365a7dd1SMatthias Ringwald };
1494365a7dd1SMatthias Ringwald 
1495365a7dd1SMatthias Ringwald /**
1496365a7dd1SMatthias Ringwald  * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration.
1497365a7dd1SMatthias Ringwald  * @param acl_con_handle
1498365a7dd1SMatthias Ringwald  */
1499365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_associate = {
1500365a7dd1SMatthias Ringwald         0xFD78, "H"
1501365a7dd1SMatthias Ringwald };
1502365a7dd1SMatthias Ringwald 
1503365a7dd1SMatthias Ringwald /**
1504365a7dd1SMatthias Ringwald  * @brief This command is used to disassociate Wide Band Speech configuration from any ACL handle.
1505365a7dd1SMatthias Ringwald  */
1506365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_disassociate = {
1507365a7dd1SMatthias Ringwald         0xFD79, ""
1508365a7dd1SMatthias Ringwald };
1509365a7dd1SMatthias Ringwald 
1510365a7dd1SMatthias Ringwald /**
1511365a7dd1SMatthias Ringwald  * @brief This command configures the codec interface parameters and the PCM clock rate, which is relevant when
1512365a7dd1SMatthias Ringwald           the Bluetooth core generates the clock. This command must be used by the host to use the PCM
1513365a7dd1SMatthias Ringwald           interface.
1514365a7dd1SMatthias Ringwald  * @param clock_rate in kHz
1515365a7dd1SMatthias Ringwald  * @param clock_direction 0=master/output, 1=slave/input
1516365a7dd1SMatthias Ringwald  * @param frame_sync_frequency in Hz
1517365a7dd1SMatthias Ringwald  * @param frame_sync_duty_cycle 0=50% (I2S Format), 0x0001-0xffff number of cycles of PCM clock
1518365a7dd1SMatthias Ringwald  * @param frame_sync_edge 0=driven/sampled at rising edge, 1=driven/sampled at falling edge of PCM clock
1519365a7dd1SMatthias Ringwald  * @param frame_sync_polariy 0=active high, 1=active low
1520365a7dd1SMatthias Ringwald  * @param reserved1
1521365a7dd1SMatthias Ringwald  * @param channel_1_data_out_size sample size in bits
1522365a7dd1SMatthias Ringwald  * @param channel_1_data_out_offset number of PCM clock cycles between rising of frame sync and data start
1523365a7dd1SMatthias Ringwald  * @param channel_1_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
1524365a7dd1SMatthias Ringwald  * @param channel_1_data_in_size sample size in bits
1525365a7dd1SMatthias Ringwald  * @param channel_1_data_in_offset number of PCM clock cycles between rising of frame sync and data start
1526365a7dd1SMatthias Ringwald  * @param channel_1_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
1527365a7dd1SMatthias Ringwald  * @param fsync_multiplier this field is only relevant to CC256XB from service pack 0.2 !!! -> use 0x00
1528365a7dd1SMatthias Ringwald  * @param channel_2_data_out_size sample size in bits
1529365a7dd1SMatthias Ringwald  * @param channel_2_data_out_offset number of PCM clock cycles between rising of frame sync and data start
1530365a7dd1SMatthias Ringwald  * @param channel_2_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock
1531365a7dd1SMatthias Ringwald  * @param channel_2_data_in_size sample size in bits
1532365a7dd1SMatthias Ringwald  * @param channel_2_data_in_offset number of PCM clock cycles between rising of frame sync and data start
1533365a7dd1SMatthias Ringwald  * @param channel_2_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock
1534365a7dd1SMatthias Ringwald  * @param reserved2
1535365a7dd1SMatthias Ringwald  *
1536365a7dd1SMatthias Ringwald  */
1537365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_write_codec_config = {
1538365a7dd1SMatthias Ringwald         0xFD06, "214211122122112212211"
1539365a7dd1SMatthias Ringwald };
1540