156042629SMatthias Ringwald /* 256042629SMatthias Ringwald * Copyright (C) 2014 BlueKitchen GmbH 356042629SMatthias Ringwald * 456042629SMatthias Ringwald * Redistribution and use in source and binary forms, with or without 556042629SMatthias Ringwald * modification, are permitted provided that the following conditions 656042629SMatthias Ringwald * are met: 756042629SMatthias Ringwald * 856042629SMatthias Ringwald * 1. Redistributions of source code must retain the above copyright 956042629SMatthias Ringwald * notice, this list of conditions and the following disclaimer. 1056042629SMatthias Ringwald * 2. Redistributions in binary form must reproduce the above copyright 1156042629SMatthias Ringwald * notice, this list of conditions and the following disclaimer in the 1256042629SMatthias Ringwald * documentation and/or other materials provided with the distribution. 1356042629SMatthias Ringwald * 3. Neither the name of the copyright holders nor the names of 1456042629SMatthias Ringwald * contributors may be used to endorse or promote products derived 1556042629SMatthias Ringwald * from this software without specific prior written permission. 1656042629SMatthias Ringwald * 4. Any redistribution, use, or modification is done solely for 1756042629SMatthias Ringwald * personal benefit and not for any commercial purpose or for 1856042629SMatthias Ringwald * monetary gain. 1956042629SMatthias Ringwald * 2056042629SMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 2156042629SMatthias Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2256042629SMatthias Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 2356042629SMatthias Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 2456042629SMatthias Ringwald * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 2556042629SMatthias Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 2656042629SMatthias Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 2756042629SMatthias Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 2856042629SMatthias Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 2956042629SMatthias Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 3056042629SMatthias Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3156042629SMatthias Ringwald * SUCH DAMAGE. 3256042629SMatthias Ringwald * 3356042629SMatthias Ringwald * Please inquire about commercial licensing options at 3456042629SMatthias Ringwald * [email protected] 3556042629SMatthias Ringwald * 3656042629SMatthias Ringwald */ 3756042629SMatthias Ringwald 38e501bae0SMatthias Ringwald #define BTSTACK_FILE__ "hci_cmd.c" 39ab2c6ae4SMatthias Ringwald 4056042629SMatthias Ringwald /* 4156042629SMatthias Ringwald * hci_cmd.c 4256042629SMatthias Ringwald * 4356042629SMatthias Ringwald * Created by Matthias Ringwald on 7/23/09. 4456042629SMatthias Ringwald */ 4556042629SMatthias Ringwald 467907f069SMatthias Ringwald #include "btstack_config.h" 4756042629SMatthias Ringwald 4856042629SMatthias Ringwald #include "hci.h" 4956042629SMatthias Ringwald #include "hci_cmd.h" 50f9f2075cSMatthias Ringwald #include "btstack_debug.h" 5156042629SMatthias Ringwald 5256042629SMatthias Ringwald #include <string.h> 5356042629SMatthias Ringwald 54c56de76bSMilanka Ringwald 5559c9672fSMatthias Ringwald #ifdef ENABLE_SDP 5659c9672fSMatthias Ringwald #include "classic/sdp_util.h" 5759c9672fSMatthias Ringwald #endif 5859c9672fSMatthias Ringwald 5956042629SMatthias Ringwald // calculate combined ogf/ocf value 605efd5011SMatthias Ringwald #define OPCODE(ogf, ocf) ((ocf) | ((ogf) << 10)) 6156042629SMatthias Ringwald 62*7f67490cSMatthias Ringwald #define INVALID_VAR_LEN 0xffffu 63*7f67490cSMatthias Ringwald 6456042629SMatthias Ringwald /** 6556042629SMatthias Ringwald * construct HCI Command based on template 6656042629SMatthias Ringwald * 6756042629SMatthias Ringwald * Format: 6856042629SMatthias Ringwald * 1,2,3,4: one to four byte value 6956042629SMatthias Ringwald * H: HCI connection handle 7056042629SMatthias Ringwald * B: Bluetooth Baseband Address (BD_ADDR) 7156042629SMatthias Ringwald * D: 8 byte data block 7256042629SMatthias Ringwald * E: Extended Inquiry Result 7356042629SMatthias Ringwald * N: Name up to 248 chars, \0 terminated 74237daac5SMatthias Ringwald * P: 16 byte data block. Pairing code, Simple Pairing Hash and Randomizer 7556042629SMatthias Ringwald * A: 31 bytes advertising data 7656042629SMatthias Ringwald * S: Service Record (Data Element Sequence) 7782180fcaSMatthias Ringwald * Q: 32 byte data block, e.g. for X and Y coordinates of P-256 public key 78*7f67490cSMatthias Ringwald * J: 8-bit length of variable size element 79*7f67490cSMatthias Ringwald * V: variable size element, len was given with param 'J' 8056042629SMatthias Ringwald */ 8156042629SMatthias Ringwald uint16_t hci_cmd_create_from_template(uint8_t *hci_cmd_buffer, const hci_cmd_t *cmd, va_list argptr){ 8256042629SMatthias Ringwald 834ea43905SMatthias Ringwald hci_cmd_buffer[0] = cmd->opcode & 0xffu; 8456042629SMatthias Ringwald hci_cmd_buffer[1] = cmd->opcode >> 8; 8556042629SMatthias Ringwald int pos = 3; 8656042629SMatthias Ringwald 8756042629SMatthias Ringwald const char *format = cmd->format; 8856042629SMatthias Ringwald uint16_t word; 8956042629SMatthias Ringwald uint32_t longword; 9056042629SMatthias Ringwald uint8_t * ptr; 91*7f67490cSMatthias Ringwald uint16_t var_len = INVALID_VAR_LEN; 92*7f67490cSMatthias Ringwald 9356042629SMatthias Ringwald while (*format) { 9456042629SMatthias Ringwald switch(*format) { 9556042629SMatthias Ringwald case '1': // 8 bit value 96c56de76bSMilanka Ringwald // minimal va_arg is int: 2 bytes on 8+16 bit CPUs 97c56de76bSMilanka Ringwald word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE 984ea43905SMatthias Ringwald hci_cmd_buffer[pos++] = word & 0xffu; 99c56de76bSMilanka Ringwald break; 100*7f67490cSMatthias Ringwald case 'J': // 8 bit variable length indicator 101*7f67490cSMatthias Ringwald // minimal va_arg is int: 2 bytes on 8+16 bit CPUs 102*7f67490cSMatthias Ringwald word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE 103*7f67490cSMatthias Ringwald var_len = word & 0xffu; 104*7f67490cSMatthias Ringwald hci_cmd_buffer[pos++] = var_len; 105*7f67490cSMatthias Ringwald break; 106c56de76bSMilanka Ringwald case '2': // 16 bit value 107c56de76bSMilanka Ringwald // minimal va_arg is int: 2 bytes on 8+16 bit CPUs 108c56de76bSMilanka Ringwald word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE 109c56de76bSMilanka Ringwald hci_cmd_buffer[pos++] = word & 0xffu; 11056042629SMatthias Ringwald hci_cmd_buffer[pos++] = word >> 8; 111c56de76bSMilanka Ringwald break; 112c56de76bSMilanka Ringwald case 'H': // hci_handle 113c56de76bSMilanka Ringwald // minimal va_arg is int: 2 bytes on 8+16 bit CPUs 114c56de76bSMilanka Ringwald word = va_arg(argptr, int); // LCOV_EXCL_BR_LINE 115c56de76bSMilanka Ringwald hci_cmd_buffer[pos++] = word & 0xffu; 11656042629SMatthias Ringwald hci_cmd_buffer[pos++] = word >> 8; 11756042629SMatthias Ringwald break; 11856042629SMatthias Ringwald case '3': 119c56de76bSMilanka Ringwald longword = va_arg(argptr, uint32_t); // LCOV_EXCL_BR_LINE 12056042629SMatthias Ringwald hci_cmd_buffer[pos++] = longword; 12156042629SMatthias Ringwald hci_cmd_buffer[pos++] = longword >> 8; 12256042629SMatthias Ringwald hci_cmd_buffer[pos++] = longword >> 16; 123c56de76bSMilanka Ringwald break; 124c56de76bSMilanka Ringwald case '4': 125c56de76bSMilanka Ringwald longword = va_arg(argptr, uint32_t); // LCOV_EXCL_BR_LINE 126c56de76bSMilanka Ringwald hci_cmd_buffer[pos++] = longword; 127c56de76bSMilanka Ringwald hci_cmd_buffer[pos++] = longword >> 8; 128c56de76bSMilanka Ringwald hci_cmd_buffer[pos++] = longword >> 16; 12956042629SMatthias Ringwald hci_cmd_buffer[pos++] = longword >> 24; 13056042629SMatthias Ringwald break; 13156042629SMatthias Ringwald case 'B': // bt-addr 132c56de76bSMilanka Ringwald ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 13356042629SMatthias Ringwald hci_cmd_buffer[pos++] = ptr[5]; 13456042629SMatthias Ringwald hci_cmd_buffer[pos++] = ptr[4]; 13556042629SMatthias Ringwald hci_cmd_buffer[pos++] = ptr[3]; 13656042629SMatthias Ringwald hci_cmd_buffer[pos++] = ptr[2]; 13756042629SMatthias Ringwald hci_cmd_buffer[pos++] = ptr[1]; 13856042629SMatthias Ringwald hci_cmd_buffer[pos++] = ptr[0]; 13956042629SMatthias Ringwald break; 14056042629SMatthias Ringwald case 'D': // 8 byte data block 141c56de76bSMilanka Ringwald ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 1426535961aSMatthias Ringwald (void)memcpy(&hci_cmd_buffer[pos], ptr, 8); 14356042629SMatthias Ringwald pos += 8; 14456042629SMatthias Ringwald break; 14556042629SMatthias Ringwald case 'E': // Extended Inquiry Information 240 octets 146c56de76bSMilanka Ringwald ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 1476535961aSMatthias Ringwald (void)memcpy(&hci_cmd_buffer[pos], ptr, 240); 14856042629SMatthias Ringwald pos += 240; 14956042629SMatthias Ringwald break; 15056042629SMatthias Ringwald case 'N': { // UTF-8 string, null terminated 151c56de76bSMilanka Ringwald ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 15256042629SMatthias Ringwald uint16_t len = strlen((const char*) ptr); 1534ea43905SMatthias Ringwald if (len > 248u) { 15456042629SMatthias Ringwald len = 248; 15556042629SMatthias Ringwald } 1566535961aSMatthias Ringwald (void)memcpy(&hci_cmd_buffer[pos], ptr, len); 1574ea43905SMatthias Ringwald if (len < 248u) { 15856042629SMatthias Ringwald // fill remaining space with zeroes 1594ea43905SMatthias Ringwald memset(&hci_cmd_buffer[pos+len], 0u, 248u-len); 16056042629SMatthias Ringwald } 16156042629SMatthias Ringwald pos += 248; 16256042629SMatthias Ringwald break; 16356042629SMatthias Ringwald } 164bb75dd7dSMatthias Ringwald case 'P': // 16 byte PIN code or link key in little endian 165c56de76bSMilanka Ringwald ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 1666535961aSMatthias Ringwald (void)memcpy(&hci_cmd_buffer[pos], ptr, 16); 16756042629SMatthias Ringwald pos += 16; 16856042629SMatthias Ringwald break; 169a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE 17056042629SMatthias Ringwald case 'A': // 31 bytes advertising data 171c56de76bSMilanka Ringwald ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 1726535961aSMatthias Ringwald (void)memcpy(&hci_cmd_buffer[pos], ptr, 31); 17356042629SMatthias Ringwald pos += 31; 17456042629SMatthias Ringwald break; 17556042629SMatthias Ringwald #endif 176a9a4c409SMatthias Ringwald #ifdef ENABLE_SDP 17756042629SMatthias Ringwald case 'S': { // Service Record (Data Element Sequence) 178c56de76bSMilanka Ringwald ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 17956042629SMatthias Ringwald uint16_t len = de_get_len(ptr); 1806535961aSMatthias Ringwald (void)memcpy(&hci_cmd_buffer[pos], ptr, len); 18156042629SMatthias Ringwald pos += len; 18256042629SMatthias Ringwald break; 18356042629SMatthias Ringwald } 18456042629SMatthias Ringwald #endif 18582180fcaSMatthias Ringwald #ifdef ENABLE_LE_SECURE_CONNECTIONS 18682180fcaSMatthias Ringwald case 'Q': 187c56de76bSMilanka Ringwald ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 18882180fcaSMatthias Ringwald reverse_bytes(ptr, &hci_cmd_buffer[pos], 32); 18982180fcaSMatthias Ringwald pos += 32; 19082180fcaSMatthias Ringwald break; 19182180fcaSMatthias Ringwald #endif 192bb75dd7dSMatthias Ringwald case 'K': // 16 byte OOB Data or Link Key in big endian 193c56de76bSMilanka Ringwald ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 194bb75dd7dSMatthias Ringwald reverse_bytes(ptr, &hci_cmd_buffer[pos], 16); 195bb75dd7dSMatthias Ringwald pos += 16; 196bb75dd7dSMatthias Ringwald break; 197*7f67490cSMatthias Ringwald case 'V': 198*7f67490cSMatthias Ringwald btstack_assert(var_len != INVALID_VAR_LEN); 199*7f67490cSMatthias Ringwald ptr = va_arg(argptr, uint8_t *); // LCOV_EXCL_BR_LINE 200*7f67490cSMatthias Ringwald (void)memcpy(&hci_cmd_buffer[pos], ptr, var_len); 201*7f67490cSMatthias Ringwald pos += var_len; 202*7f67490cSMatthias Ringwald var_len = INVALID_VAR_LEN; 203*7f67490cSMatthias Ringwald break; 20456042629SMatthias Ringwald default: 205*7f67490cSMatthias Ringwald btstack_unreachable(); 20656042629SMatthias Ringwald break; 20756042629SMatthias Ringwald } 20856042629SMatthias Ringwald format++; 20956042629SMatthias Ringwald }; 21056042629SMatthias Ringwald hci_cmd_buffer[2] = pos - 3; 21156042629SMatthias Ringwald return pos; 21256042629SMatthias Ringwald } 21356042629SMatthias Ringwald 21456042629SMatthias Ringwald /** 21556042629SMatthias Ringwald * Link Control Commands 21656042629SMatthias Ringwald */ 21756042629SMatthias Ringwald 21856042629SMatthias Ringwald /** 21956042629SMatthias Ringwald * @param lap 22056042629SMatthias Ringwald * @param inquiry_length 22156042629SMatthias Ringwald * @param num_responses 22256042629SMatthias Ringwald */ 22356042629SMatthias Ringwald const hci_cmd_t hci_inquiry = { 224ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_INQUIRY, "311" 22556042629SMatthias Ringwald }; 22656042629SMatthias Ringwald 22756042629SMatthias Ringwald /** 22856042629SMatthias Ringwald */ 22956042629SMatthias Ringwald const hci_cmd_t hci_inquiry_cancel = { 230ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_INQUIRY_CANCEL, "" 23156042629SMatthias Ringwald }; 23256042629SMatthias Ringwald 23356042629SMatthias Ringwald /** 23456042629SMatthias Ringwald * @param bd_addr 23556042629SMatthias Ringwald * @param packet_type 23656042629SMatthias Ringwald * @param page_scan_repetition_mode 23756042629SMatthias Ringwald * @param reserved 23856042629SMatthias Ringwald * @param clock_offset 23956042629SMatthias Ringwald * @param allow_role_switch 24056042629SMatthias Ringwald */ 24156042629SMatthias Ringwald const hci_cmd_t hci_create_connection = { 242ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_CREATE_CONNECTION, "B21121" 24356042629SMatthias Ringwald }; 24456042629SMatthias Ringwald 24556042629SMatthias Ringwald /** 24656042629SMatthias Ringwald * @param handle 24756042629SMatthias Ringwald * @param reason (0x05, 0x13-0x15, 0x1a, 0x29, see Errors Codes in BT Spec Part D) 24856042629SMatthias Ringwald */ 24956042629SMatthias Ringwald const hci_cmd_t hci_disconnect = { 250ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_DISCONNECT, "H1" 25156042629SMatthias Ringwald }; 25256042629SMatthias Ringwald 25356042629SMatthias Ringwald /** 25456042629SMatthias Ringwald * @param bd_addr 25556042629SMatthias Ringwald */ 25656042629SMatthias Ringwald const hci_cmd_t hci_create_connection_cancel = { 257ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_CREATE_CONNECTION_CANCEL, "B" 25856042629SMatthias Ringwald }; 25956042629SMatthias Ringwald 26056042629SMatthias Ringwald /** 26156042629SMatthias Ringwald * @param bd_addr 26256042629SMatthias Ringwald * @param role (become master, stay slave) 26356042629SMatthias Ringwald */ 26456042629SMatthias Ringwald const hci_cmd_t hci_accept_connection_request = { 265ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_ACCEPT_CONNECTION_REQUEST, "B1" 26656042629SMatthias Ringwald }; 26756042629SMatthias Ringwald 26856042629SMatthias Ringwald /** 26956042629SMatthias Ringwald * @param bd_addr 27056042629SMatthias Ringwald * @param reason (e.g. CONNECTION REJECTED DUE TO LIMITED RESOURCES (0x0d)) 27156042629SMatthias Ringwald */ 27256042629SMatthias Ringwald const hci_cmd_t hci_reject_connection_request = { 273ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_REJECT_CONNECTION_REQUEST, "B1" 27456042629SMatthias Ringwald }; 27556042629SMatthias Ringwald 27656042629SMatthias Ringwald /** 27756042629SMatthias Ringwald * @param bd_addr 27856042629SMatthias Ringwald * @param link_key 27956042629SMatthias Ringwald */ 28056042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_reply = { 281ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LINK_KEY_REQUEST_REPLY, "BP" 28256042629SMatthias Ringwald }; 28356042629SMatthias Ringwald 28456042629SMatthias Ringwald /** 28556042629SMatthias Ringwald * @param bd_addr 28656042629SMatthias Ringwald */ 28756042629SMatthias Ringwald const hci_cmd_t hci_link_key_request_negative_reply = { 288ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY, "B" 28956042629SMatthias Ringwald }; 29056042629SMatthias Ringwald 29156042629SMatthias Ringwald /** 29256042629SMatthias Ringwald * @param bd_addr 29356042629SMatthias Ringwald * @param pin_length 29456042629SMatthias Ringwald * @param pin (c-string) 29556042629SMatthias Ringwald */ 29656042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_reply = { 297ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_PIN_CODE_REQUEST_REPLY, "B1P" 29856042629SMatthias Ringwald }; 29956042629SMatthias Ringwald 30056042629SMatthias Ringwald /** 30156042629SMatthias Ringwald * @param bd_addr 30256042629SMatthias Ringwald */ 30356042629SMatthias Ringwald const hci_cmd_t hci_pin_code_request_negative_reply = { 304ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY, "B" 30556042629SMatthias Ringwald }; 30656042629SMatthias Ringwald 30756042629SMatthias Ringwald /** 30856042629SMatthias Ringwald * @param handle 30956042629SMatthias Ringwald * @param packet_type 31056042629SMatthias Ringwald */ 31156042629SMatthias Ringwald const hci_cmd_t hci_change_connection_packet_type = { 312ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_CHANGE_CONNECTION_PACKET_TYPE, "H2" 31356042629SMatthias Ringwald }; 31456042629SMatthias Ringwald 31556042629SMatthias Ringwald /** 31656042629SMatthias Ringwald * @param handle 31756042629SMatthias Ringwald */ 31856042629SMatthias Ringwald const hci_cmd_t hci_authentication_requested = { 319ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_AUTHENTICATION_REQUESTED, "H" 32056042629SMatthias Ringwald }; 32156042629SMatthias Ringwald 32256042629SMatthias Ringwald /** 32356042629SMatthias Ringwald * @param handle 32456042629SMatthias Ringwald * @param encryption_enable 32556042629SMatthias Ringwald */ 32656042629SMatthias Ringwald const hci_cmd_t hci_set_connection_encryption = { 327ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_SET_CONNECTION_ENCRYPTION, "H1" 32856042629SMatthias Ringwald }; 32956042629SMatthias Ringwald 33056042629SMatthias Ringwald /** 33156042629SMatthias Ringwald * @param handle 33256042629SMatthias Ringwald */ 33356042629SMatthias Ringwald const hci_cmd_t hci_change_connection_link_key = { 334ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_CHANGE_CONNECTION_LINK_KEY, "H" 33556042629SMatthias Ringwald }; 33656042629SMatthias Ringwald 33756042629SMatthias Ringwald /** 33856042629SMatthias Ringwald * @param bd_addr 33956042629SMatthias Ringwald * @param page_scan_repetition_mode 34056042629SMatthias Ringwald * @param reserved 34156042629SMatthias Ringwald * @param clock_offset 34256042629SMatthias Ringwald */ 34356042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request = { 344ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_REMOTE_NAME_REQUEST, "B112" 34556042629SMatthias Ringwald }; 34656042629SMatthias Ringwald 34756042629SMatthias Ringwald 34856042629SMatthias Ringwald /** 34956042629SMatthias Ringwald * @param bd_addr 35056042629SMatthias Ringwald */ 35156042629SMatthias Ringwald const hci_cmd_t hci_remote_name_request_cancel = { 352ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_REMOTE_NAME_REQUEST_CANCEL, "B" 35356042629SMatthias Ringwald }; 35456042629SMatthias Ringwald 35556042629SMatthias Ringwald /** 35656042629SMatthias Ringwald * @param handle 35756042629SMatthias Ringwald */ 35856042629SMatthias Ringwald const hci_cmd_t hci_read_remote_supported_features_command = { 359ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND, "H" 3608b22c04dSMatthias Ringwald }; 3618b22c04dSMatthias Ringwald 3628b22c04dSMatthias Ringwald /** 363d5057706SMatthias Ringwald * @param handle 364d5057706SMatthias Ringwald */ 365d5057706SMatthias Ringwald const hci_cmd_t hci_read_remote_extended_features_command = { 366ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND, "H1" 367d5057706SMatthias Ringwald }; 368d5057706SMatthias Ringwald 369d5057706SMatthias Ringwald /** 3708b22c04dSMatthias Ringwald * @param handle 3718b22c04dSMatthias Ringwald */ 3728b22c04dSMatthias Ringwald const hci_cmd_t hci_read_remote_version_information = { 373ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_REMOTE_VERSION_INFORMATION, "H" 37456042629SMatthias Ringwald }; 37556042629SMatthias Ringwald 37656042629SMatthias Ringwald /** 37756042629SMatthias Ringwald * @param handle 37856042629SMatthias Ringwald * @param transmit_bandwidth 8000(64kbps) 37956042629SMatthias Ringwald * @param receive_bandwidth 8000(64kbps) 38056042629SMatthias Ringwald * @param max_latency >= 7ms for eSCO, 0xFFFF do not care 38156042629SMatthias Ringwald * @param voice_settings e.g. CVSD, Input Coding: Linear, Input Data Format: 2’s complement, data 16bit: 00011000000 == 0x60 38256042629SMatthias Ringwald * @param retransmission_effort e.g. 0xFF do not care 38356042629SMatthias Ringwald * @param packet_type at least EV3 for eSCO 38456042629SMatthias Ringwald */ 38556042629SMatthias Ringwald const hci_cmd_t hci_setup_synchronous_connection = { 386ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_SETUP_SYNCHRONOUS_CONNECTION, "H442212" 38756042629SMatthias Ringwald }; 38856042629SMatthias Ringwald 38956042629SMatthias Ringwald /** 39056042629SMatthias Ringwald * @param bd_addr 39156042629SMatthias Ringwald * @param transmit_bandwidth 39256042629SMatthias Ringwald * @param receive_bandwidth 39356042629SMatthias Ringwald * @param max_latency 39456042629SMatthias Ringwald * @param voice_settings 39556042629SMatthias Ringwald * @param retransmission_effort 39656042629SMatthias Ringwald * @param packet_type 39756042629SMatthias Ringwald */ 39856042629SMatthias Ringwald const hci_cmd_t hci_accept_synchronous_connection = { 399ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_ACCEPT_SYNCHRONOUS_CONNECTION, "B442212" 40056042629SMatthias Ringwald }; 40156042629SMatthias Ringwald 40256042629SMatthias Ringwald /** 40356042629SMatthias Ringwald * @param bd_addr 40456042629SMatthias Ringwald * @param IO_capability 40556042629SMatthias Ringwald * @param OOB_data_present 40656042629SMatthias Ringwald * @param authentication_requirements 40756042629SMatthias Ringwald */ 40856042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_reply = { 409ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_REPLY, "B111" 41056042629SMatthias Ringwald }; 41156042629SMatthias Ringwald 41256042629SMatthias Ringwald /** 41356042629SMatthias Ringwald * @param bd_addr 41456042629SMatthias Ringwald */ 41556042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_reply = { 416ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_REPLY, "B" 41756042629SMatthias Ringwald }; 41856042629SMatthias Ringwald 41956042629SMatthias Ringwald /** 42056042629SMatthias Ringwald * @param bd_addr 42156042629SMatthias Ringwald */ 42256042629SMatthias Ringwald const hci_cmd_t hci_user_confirmation_request_negative_reply = { 423ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY, "B" 42456042629SMatthias Ringwald }; 42556042629SMatthias Ringwald 42656042629SMatthias Ringwald /** 42756042629SMatthias Ringwald * @param bd_addr 42856042629SMatthias Ringwald * @param numeric_value 42956042629SMatthias Ringwald */ 43056042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_reply = { 431ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_REPLY, "B4" 43256042629SMatthias Ringwald }; 43356042629SMatthias Ringwald 43456042629SMatthias Ringwald /** 43556042629SMatthias Ringwald * @param bd_addr 43656042629SMatthias Ringwald */ 43756042629SMatthias Ringwald const hci_cmd_t hci_user_passkey_request_negative_reply = { 438ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY, "B" 43956042629SMatthias Ringwald }; 44056042629SMatthias Ringwald 44156042629SMatthias Ringwald /** 44256042629SMatthias Ringwald * @param bd_addr 443237daac5SMatthias Ringwald * @param c Simple Pairing Hash C 444237daac5SMatthias Ringwald * @param r Simple Pairing Randomizer R 445237daac5SMatthias Ringwald */ 446237daac5SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_reply = { 447bb75dd7dSMatthias Ringwald HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_REPLY, "BKK" 448237daac5SMatthias Ringwald }; 449237daac5SMatthias Ringwald 450237daac5SMatthias Ringwald /** 451237daac5SMatthias Ringwald * @param bd_addr 45256042629SMatthias Ringwald */ 45356042629SMatthias Ringwald const hci_cmd_t hci_remote_oob_data_request_negative_reply = { 454ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY, "B" 45556042629SMatthias Ringwald }; 45656042629SMatthias Ringwald 45756042629SMatthias Ringwald /** 45856042629SMatthias Ringwald * @param bd_addr 45956042629SMatthias Ringwald * @param reason (Part D, Error codes) 46056042629SMatthias Ringwald */ 46156042629SMatthias Ringwald const hci_cmd_t hci_io_capability_request_negative_reply = { 462ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY, "B1" 46356042629SMatthias Ringwald }; 46456042629SMatthias Ringwald 46556042629SMatthias Ringwald /** 46656042629SMatthias Ringwald * @param handle 46756042629SMatthias Ringwald * @param transmit_bandwidth 46856042629SMatthias Ringwald * @param receive_bandwidth 46956042629SMatthias Ringwald * @param transmit_coding_format_type 47056042629SMatthias Ringwald * @param transmit_coding_format_company 47156042629SMatthias Ringwald * @param transmit_coding_format_codec 47256042629SMatthias Ringwald * @param receive_coding_format_type 47356042629SMatthias Ringwald * @param receive_coding_format_company 47456042629SMatthias Ringwald * @param receive_coding_format_codec 47556042629SMatthias Ringwald * @param transmit_coding_frame_size 47656042629SMatthias Ringwald * @param receive_coding_frame_size 47756042629SMatthias Ringwald * @param input_bandwidth 47856042629SMatthias Ringwald * @param output_bandwidth 47956042629SMatthias Ringwald * @param input_coding_format_type 48056042629SMatthias Ringwald * @param input_coding_format_company 48156042629SMatthias Ringwald * @param input_coding_format_codec 48256042629SMatthias Ringwald * @param output_coding_format_type 48356042629SMatthias Ringwald * @param output_coding_format_company 48456042629SMatthias Ringwald * @param output_coding_format_codec 48556042629SMatthias Ringwald * @param input_coded_data_size 48656042629SMatthias Ringwald * @param outupt_coded_data_size 48756042629SMatthias Ringwald * @param input_pcm_data_format 48856042629SMatthias Ringwald * @param output_pcm_data_format 48956042629SMatthias Ringwald * @param input_pcm_sample_payload_msb_position 49056042629SMatthias Ringwald * @param output_pcm_sample_payload_msb_position 49156042629SMatthias Ringwald * @param input_data_path 49256042629SMatthias Ringwald * @param output_data_path 49356042629SMatthias Ringwald * @param input_transport_unit_size 49456042629SMatthias Ringwald * @param output_transport_unit_size 49556042629SMatthias Ringwald * @param max_latency 49656042629SMatthias Ringwald * @param packet_type 49756042629SMatthias Ringwald * @param retransmission_effort 49856042629SMatthias Ringwald */ 49956042629SMatthias Ringwald const hci_cmd_t hci_enhanced_setup_synchronous_connection = { 500ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION, "H4412212222441221222211111111221" 50156042629SMatthias Ringwald }; 50256042629SMatthias Ringwald 50356042629SMatthias Ringwald /** 50456042629SMatthias Ringwald * @param bd_addr 50556042629SMatthias Ringwald * @param transmit_bandwidth 50656042629SMatthias Ringwald * @param receive_bandwidth 50756042629SMatthias Ringwald * @param transmit_coding_format_type 50856042629SMatthias Ringwald * @param transmit_coding_format_company 50956042629SMatthias Ringwald * @param transmit_coding_format_codec 51056042629SMatthias Ringwald * @param receive_coding_format_type 51156042629SMatthias Ringwald * @param receive_coding_format_company 51256042629SMatthias Ringwald * @param receive_coding_format_codec 51356042629SMatthias Ringwald * @param transmit_coding_frame_size 51456042629SMatthias Ringwald * @param receive_coding_frame_size 51556042629SMatthias Ringwald * @param input_bandwidth 51656042629SMatthias Ringwald * @param output_bandwidth 51756042629SMatthias Ringwald * @param input_coding_format_type 51856042629SMatthias Ringwald * @param input_coding_format_company 51956042629SMatthias Ringwald * @param input_coding_format_codec 52056042629SMatthias Ringwald * @param output_coding_format_type 52156042629SMatthias Ringwald * @param output_coding_format_company 52256042629SMatthias Ringwald * @param output_coding_format_codec 52356042629SMatthias Ringwald * @param input_coded_data_size 52456042629SMatthias Ringwald * @param outupt_coded_data_size 52556042629SMatthias Ringwald * @param input_pcm_data_format 52656042629SMatthias Ringwald * @param output_pcm_data_format 52756042629SMatthias Ringwald * @param input_pcm_sample_payload_msb_position 52856042629SMatthias Ringwald * @param output_pcm_sample_payload_msb_position 52956042629SMatthias Ringwald * @param input_data_path 53056042629SMatthias Ringwald * @param output_data_path 53156042629SMatthias Ringwald * @param input_transport_unit_size 53256042629SMatthias Ringwald * @param output_transport_unit_size 53356042629SMatthias Ringwald * @param max_latency 53456042629SMatthias Ringwald * @param packet_type 53556042629SMatthias Ringwald * @param retransmission_effort 53656042629SMatthias Ringwald */ 53756042629SMatthias Ringwald const hci_cmd_t hci_enhanced_accept_synchronous_connection = { 538ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION, "B4412212222441221222211111111221" 53956042629SMatthias Ringwald }; 54056042629SMatthias Ringwald 54156042629SMatthias Ringwald /** 542bb75dd7dSMatthias Ringwald * @param bd_addr 543bb75dd7dSMatthias Ringwald * @param c_192 Simple Pairing Hash C derived from P-192 public key 544bb75dd7dSMatthias Ringwald * @param r_192 Simple Pairing Randomizer derived from P-192 public key 545bb75dd7dSMatthias Ringwald * @param c_256 Simple Pairing Hash C derived from P-256 public key 546bb75dd7dSMatthias Ringwald * @param r_256 Simple Pairing Randomizer derived from P-256 public key 547bb75dd7dSMatthias Ringwald */ 548bb75dd7dSMatthias Ringwald const hci_cmd_t hci_remote_oob_extended_data_request_reply = { 549bb75dd7dSMatthias Ringwald HCI_OPCODE_HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY, "BKKKK" 550bb75dd7dSMatthias Ringwald }; 551bb75dd7dSMatthias Ringwald 552bb75dd7dSMatthias Ringwald /** 55356042629SMatthias Ringwald * Link Policy Commands 55456042629SMatthias Ringwald */ 55556042629SMatthias Ringwald 55656042629SMatthias Ringwald /** 55756042629SMatthias Ringwald * @param handle 55856042629SMatthias Ringwald * @param sniff_max_interval 55956042629SMatthias Ringwald * @param sniff_min_interval 56056042629SMatthias Ringwald * @param sniff_attempt 56156042629SMatthias Ringwald * @param sniff_timeout 56256042629SMatthias Ringwald */ 56356042629SMatthias Ringwald const hci_cmd_t hci_sniff_mode = { 564ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_SNIFF_MODE, "H2222" 56556042629SMatthias Ringwald }; 56656042629SMatthias Ringwald 56756042629SMatthias Ringwald /** 56856042629SMatthias Ringwald * @param handle 5697cd21895SMatthias Ringwald */ 5707cd21895SMatthias Ringwald const hci_cmd_t hci_exit_sniff_mode = { 571ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_EXIT_SNIFF_MODE, "H" 5727cd21895SMatthias Ringwald }; 5737cd21895SMatthias Ringwald 5747cd21895SMatthias Ringwald /** 5757cd21895SMatthias Ringwald * @param handle 57656042629SMatthias Ringwald * @param flags 57756042629SMatthias Ringwald * @param service_type 57856042629SMatthias Ringwald * @param token_rate (bytes/s) 57956042629SMatthias Ringwald * @param peak_bandwith (bytes/s) 58056042629SMatthias Ringwald * @param latency (us) 58156042629SMatthias Ringwald * @param delay_variation (us) 58256042629SMatthias Ringwald */ 58356042629SMatthias Ringwald const hci_cmd_t hci_qos_setup = { 584ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_QOS_SETUP, "H114444" 58556042629SMatthias Ringwald }; 58656042629SMatthias Ringwald 58756042629SMatthias Ringwald /** 58856042629SMatthias Ringwald * @param handle 58956042629SMatthias Ringwald */ 59056042629SMatthias Ringwald const hci_cmd_t hci_role_discovery = { 591ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_ROLE_DISCOVERY, "H" 59256042629SMatthias Ringwald }; 59356042629SMatthias Ringwald 59456042629SMatthias Ringwald /** 59556042629SMatthias Ringwald * @param bd_addr 59656042629SMatthias Ringwald * @param role (0=master,1=slave) 59756042629SMatthias Ringwald */ 59856042629SMatthias Ringwald const hci_cmd_t hci_switch_role_command= { 599ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_SWITCH_ROLE_COMMAND, "B1" 60056042629SMatthias Ringwald }; 60156042629SMatthias Ringwald 60256042629SMatthias Ringwald /** 60356042629SMatthias Ringwald * @param handle 60456042629SMatthias Ringwald */ 60556042629SMatthias Ringwald const hci_cmd_t hci_read_link_policy_settings = { 606ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_LINK_POLICY_SETTINGS, "H" 60756042629SMatthias Ringwald }; 60856042629SMatthias Ringwald 60956042629SMatthias Ringwald /** 61056042629SMatthias Ringwald * @param handle 61156042629SMatthias Ringwald * @param settings 61256042629SMatthias Ringwald */ 61356042629SMatthias Ringwald const hci_cmd_t hci_write_link_policy_settings = { 614ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_LINK_POLICY_SETTINGS, "H2" 61556042629SMatthias Ringwald }; 61656042629SMatthias Ringwald 617c4c88f1bSJakob Krantz /** 61832e2f27fSMatthias Ringwald * @param handle 61932e2f27fSMatthias Ringwald * @param max_latency 62032e2f27fSMatthias Ringwald * @param min_remote_timeout 62132e2f27fSMatthias Ringwald * @param min_local_timeout 62232e2f27fSMatthias Ringwald */ 62332e2f27fSMatthias Ringwald const hci_cmd_t hci_sniff_subrating = { 62450fe3a99SMilanka Ringwald HCI_OPCODE_HCI_SNIFF_SUBRATING, "H222" 62532e2f27fSMatthias Ringwald }; 62632e2f27fSMatthias Ringwald 62732e2f27fSMatthias Ringwald /** 628c4c88f1bSJakob Krantz * @param policy 629c4c88f1bSJakob Krantz */ 63053138e7aSMatthias Ringwald const hci_cmd_t hci_write_default_link_policy_setting = { 631ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_DEFAULT_LINK_POLICY_SETTING, "2" 632c4c88f1bSJakob Krantz }; 633c4c88f1bSJakob Krantz 634733a7793SMatthias Ringwald /** 635733a7793SMatthias Ringwald * @param handle 636733a7793SMatthias Ringwald * @param unused 637733a7793SMatthias Ringwald * @param flow_direction 638733a7793SMatthias Ringwald * @param service_type 639733a7793SMatthias Ringwald * @param token_rate 640733a7793SMatthias Ringwald * @param token_bucket_size 641733a7793SMatthias Ringwald * @param peak_bandwidth 642733a7793SMatthias Ringwald * @param access_latency 643733a7793SMatthias Ringwald */ 644733a7793SMatthias Ringwald const hci_cmd_t hci_flow_specification = { 645733a7793SMatthias Ringwald HCI_OPCODE_HCI_FLOW_SPECIFICATION, "H1114444" 646733a7793SMatthias Ringwald }; 647733a7793SMatthias Ringwald 64856042629SMatthias Ringwald 64956042629SMatthias Ringwald /** 65056042629SMatthias Ringwald * Controller & Baseband Commands 65156042629SMatthias Ringwald */ 65256042629SMatthias Ringwald 6539119d792SMilanka Ringwald 65456042629SMatthias Ringwald /** 65556042629SMatthias Ringwald * @param event_mask_lover_octets 65656042629SMatthias Ringwald * @param event_mask_higher_octets 65756042629SMatthias Ringwald */ 65856042629SMatthias Ringwald const hci_cmd_t hci_set_event_mask = { 659ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_SET_EVENT_MASK, "44" 66056042629SMatthias Ringwald }; 66156042629SMatthias Ringwald 66256042629SMatthias Ringwald /** 66356042629SMatthias Ringwald */ 66456042629SMatthias Ringwald const hci_cmd_t hci_reset = { 665ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_RESET, "" 66656042629SMatthias Ringwald }; 66756042629SMatthias Ringwald 66856042629SMatthias Ringwald /** 669e49d496aSMatthias Ringwald * @param handle 670e49d496aSMatthias Ringwald */ 671e49d496aSMatthias Ringwald const hci_cmd_t hci_flush = { 672ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_FLUSH, "H" 6739af39d9fSMatthias Ringwald }; 6749af39d9fSMatthias Ringwald 6759af39d9fSMatthias Ringwald /** 6769af39d9fSMatthias Ringwald * @param handle 6779af39d9fSMatthias Ringwald */ 6789af39d9fSMatthias Ringwald const hci_cmd_t hci_read_pin_type = { 679ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_PIN_TYPE, "" 6809af39d9fSMatthias Ringwald }; 6819af39d9fSMatthias Ringwald 6829af39d9fSMatthias Ringwald /** 6839af39d9fSMatthias Ringwald * @param handle 6849af39d9fSMatthias Ringwald */ 6859af39d9fSMatthias Ringwald const hci_cmd_t hci_write_pin_type = { 686ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_PIN_TYPE, "1" 687e49d496aSMatthias Ringwald }; 688e49d496aSMatthias Ringwald 689e49d496aSMatthias Ringwald /** 69056042629SMatthias Ringwald * @param bd_addr 69156042629SMatthias Ringwald * @param delete_all_flags 69256042629SMatthias Ringwald */ 69356042629SMatthias Ringwald const hci_cmd_t hci_delete_stored_link_key = { 694ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_DELETE_STORED_LINK_KEY, "B1" 69556042629SMatthias Ringwald }; 69656042629SMatthias Ringwald 697f9f2075cSMatthias Ringwald #ifdef ENABLE_CLASSIC 69856042629SMatthias Ringwald /** 69956042629SMatthias Ringwald * @param local_name (UTF-8, Null Terminated, max 248 octets) 70056042629SMatthias Ringwald */ 70156042629SMatthias Ringwald const hci_cmd_t hci_write_local_name = { 702ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_LOCAL_NAME, "N" 70356042629SMatthias Ringwald }; 704f9f2075cSMatthias Ringwald #endif 70556042629SMatthias Ringwald 70656042629SMatthias Ringwald /** 707e90bae01SMatthias Ringwald */ 708e90bae01SMatthias Ringwald const hci_cmd_t hci_read_local_name = { 709ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_LOCAL_NAME, "" 710e90bae01SMatthias Ringwald }; 711e90bae01SMatthias Ringwald 712e90bae01SMatthias Ringwald /** 713195e82f3Sskoperst */ 714195e82f3Sskoperst const hci_cmd_t hci_read_page_timeout = { 715ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_PAGE_TIMEOUT, "" 716195e82f3Sskoperst }; 717195e82f3Sskoperst 718195e82f3Sskoperst /** 71956042629SMatthias Ringwald * @param page_timeout (* 0.625 ms) 72056042629SMatthias Ringwald */ 72156042629SMatthias Ringwald const hci_cmd_t hci_write_page_timeout = { 722ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_PAGE_TIMEOUT, "2" 72356042629SMatthias Ringwald }; 72456042629SMatthias Ringwald 72556042629SMatthias Ringwald /** 7264eac2391SMatthias Ringwald * @param scan_enable (no, inq, page, inq+page) 7274eac2391SMatthias Ringwald */ 7284eac2391SMatthias Ringwald const hci_cmd_t hci_write_scan_enable = { 729ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_SCAN_ENABLE, "1" 7304eac2391SMatthias Ringwald }; 7314eac2391SMatthias Ringwald 7324eac2391SMatthias Ringwald /** 733195e82f3Sskoperst */ 734195e82f3Sskoperst const hci_cmd_t hci_read_page_scan_activity = { 735ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_PAGE_SCAN_ACTIVITY, "" 736195e82f3Sskoperst }; 737195e82f3Sskoperst 738195e82f3Sskoperst /** 739195e82f3Sskoperst * @param page_scan_interval (* 0.625 ms) 740195e82f3Sskoperst * @param page_scan_window (* 0.625 ms, must be <= page_scan_interval) 741195e82f3Sskoperst */ 742195e82f3Sskoperst const hci_cmd_t hci_write_page_scan_activity = { 743ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_PAGE_SCAN_ACTIVITY, "22" 744195e82f3Sskoperst }; 745195e82f3Sskoperst 746195e82f3Sskoperst /** 74756042629SMatthias Ringwald */ 7484eac2391SMatthias Ringwald const hci_cmd_t hci_read_inquiry_scan_activity = { 749ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_INQUIRY_SCAN_ACTIVITY, "" 7504eac2391SMatthias Ringwald }; 7514eac2391SMatthias Ringwald 7524eac2391SMatthias Ringwald /** 7534eac2391SMatthias Ringwald * @param inquiry_scan_interval (* 0.625 ms) 7544eac2391SMatthias Ringwald * @param inquiry_scan_window (* 0.625 ms, must be <= inquiry_scan_interval) 7554eac2391SMatthias Ringwald */ 7564eac2391SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_activity = { 757ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_ACTIVITY, "22" 75856042629SMatthias Ringwald }; 75956042629SMatthias Ringwald 76056042629SMatthias Ringwald /** 76156042629SMatthias Ringwald * @param authentication_enable 76256042629SMatthias Ringwald */ 76356042629SMatthias Ringwald const hci_cmd_t hci_write_authentication_enable = { 764ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_AUTHENTICATION_ENABLE, "1" 76556042629SMatthias Ringwald }; 76656042629SMatthias Ringwald 76756042629SMatthias Ringwald /** 76856042629SMatthias Ringwald * @param class_of_device 76956042629SMatthias Ringwald */ 77056042629SMatthias Ringwald const hci_cmd_t hci_write_class_of_device = { 771ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_CLASS_OF_DEVICE, "3" 77256042629SMatthias Ringwald }; 77356042629SMatthias Ringwald 77456042629SMatthias Ringwald /** 77556042629SMatthias Ringwald */ 77656042629SMatthias Ringwald const hci_cmd_t hci_read_num_broadcast_retransmissions = { 777ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS, "" 77856042629SMatthias Ringwald }; 77956042629SMatthias Ringwald 78056042629SMatthias Ringwald /** 78156042629SMatthias Ringwald * @param num_broadcast_retransmissions (e.g. 0 for a single broadcast) 78256042629SMatthias Ringwald */ 78356042629SMatthias Ringwald const hci_cmd_t hci_write_num_broadcast_retransmissions = { 784ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS, "1" 78556042629SMatthias Ringwald }; 78656042629SMatthias Ringwald 78756042629SMatthias Ringwald /** 78844751e25SMatthias Ringwald * @param connection_handle 78944751e25SMatthias Ringwald * @param type 0 = current transmit level, 1 = max transmit level 79044751e25SMatthias Ringwald */ 79144751e25SMatthias Ringwald const hci_cmd_t hci_read_transmit_power_level = { 792ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_TRANSMIT_POWER_LEVEL, "11" 79344751e25SMatthias Ringwald }; 79444751e25SMatthias Ringwald 79544751e25SMatthias Ringwald /** 79656042629SMatthias Ringwald * @param synchronous_flow_control_enable - if yes, num completed packet everts are sent for SCO packets 79756042629SMatthias Ringwald */ 79856042629SMatthias Ringwald const hci_cmd_t hci_write_synchronous_flow_control_enable = { 799ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE, "1" 80056042629SMatthias Ringwald }; 80156042629SMatthias Ringwald 8022b838201SMatthias Ringwald #ifdef ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL 8032b838201SMatthias Ringwald 8042b838201SMatthias Ringwald /** 8052b838201SMatthias Ringwald * @param flow_control_enable - 0: off, 1: ACL only, 2: SCO only, 3: ACL + SCO 8062b838201SMatthias Ringwald */ 8072b838201SMatthias Ringwald const hci_cmd_t hci_set_controller_to_host_flow_control = { 808ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL, "1" 8092b838201SMatthias Ringwald }; 8102b838201SMatthias Ringwald 81156042629SMatthias Ringwald /** 81256042629SMatthias Ringwald * @param host_acl_data_packet_length 81356042629SMatthias Ringwald * @param host_synchronous_data_packet_length 81456042629SMatthias Ringwald * @param host_total_num_acl_data_packets 81556042629SMatthias Ringwald * @param host_total_num_synchronous_data_packets 81656042629SMatthias Ringwald */ 81756042629SMatthias Ringwald const hci_cmd_t hci_host_buffer_size = { 818ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_HOST_BUFFER_SIZE, "2122" 81956042629SMatthias Ringwald }; 82056042629SMatthias Ringwald 8219119d792SMilanka Ringwald 8222b838201SMatthias Ringwald #if 0 8232b838201SMatthias Ringwald // 8242b838201SMatthias Ringwald // command sent manually sent by hci_host_num_completed_packets 8252b838201SMatthias Ringwald // 8262b838201SMatthias Ringwald /** 8272b838201SMatthias Ringwald * @note only single handle supported by BTstack command generator 8282b838201SMatthias Ringwald * @param number_of_handles must be 1 8292b838201SMatthias Ringwald * @param connection_handle 8302b838201SMatthias Ringwald * @param host_num_of_completed_packets for the given connection handle 8312b838201SMatthias Ringwald */ 8322b838201SMatthias Ringwald const hci_cmd_t hci_host_number_of_completed_packets = { 833ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS, "1H2" 8342b838201SMatthias Ringwald }; 8352b838201SMatthias Ringwald #endif 8362b838201SMatthias Ringwald 8372b838201SMatthias Ringwald #endif 8382b838201SMatthias Ringwald 83956042629SMatthias Ringwald /** 84056042629SMatthias Ringwald * @param handle 84156042629SMatthias Ringwald */ 84256042629SMatthias Ringwald const hci_cmd_t hci_read_link_supervision_timeout = { 843ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_LINK_SUPERVISION_TIMEOUT, "H" 84456042629SMatthias Ringwald }; 84556042629SMatthias Ringwald 84656042629SMatthias Ringwald /** 84756042629SMatthias Ringwald * @param handle 84856042629SMatthias Ringwald * @param timeout (0x0001 - 0xFFFF Time -> Range: 0.625ms - 40.9 sec) 84956042629SMatthias Ringwald */ 85056042629SMatthias Ringwald const hci_cmd_t hci_write_link_supervision_timeout = { 851ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_LINK_SUPERVISION_TIMEOUT, "H2" 85256042629SMatthias Ringwald }; 85356042629SMatthias Ringwald 85456042629SMatthias Ringwald /** 8559119d792SMilanka Ringwald * @param num_current_iac must be 2 8569119d792SMilanka Ringwald * @param iac_lap1 8579119d792SMilanka Ringwald * @param iac_lap2 8589119d792SMilanka Ringwald */ 8599119d792SMilanka Ringwald const hci_cmd_t hci_write_current_iac_lap_two_iacs = { 860ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_CURRENT_IAC_LAP_TWO_IACS, "133" 8619119d792SMilanka Ringwald }; 8629119d792SMilanka Ringwald 8639119d792SMilanka Ringwald /** 8645769fd77SMatthias Ringwald * @param inquiry_scan_type (0x00 = standard, 0x01 = interlaced) 8655769fd77SMatthias Ringwald */ 8665769fd77SMatthias Ringwald const hci_cmd_t hci_write_inquiry_scan_type = { 8675769fd77SMatthias Ringwald HCI_OPCODE_HCI_WRITE_INQUIRY_SCAN_TYPE, "1" 8685769fd77SMatthias Ringwald }; 8695769fd77SMatthias Ringwald 8705769fd77SMatthias Ringwald /** 87156042629SMatthias Ringwald * @param inquiry_mode (0x00 = standard, 0x01 = with RSSI, 0x02 = extended) 87256042629SMatthias Ringwald */ 87356042629SMatthias Ringwald const hci_cmd_t hci_write_inquiry_mode = { 874ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_INQUIRY_MODE, "1" 87556042629SMatthias Ringwald }; 87656042629SMatthias Ringwald 87756042629SMatthias Ringwald /** 8785769fd77SMatthias Ringwald * @param page_scan_type (0x00 = standard, 0x01 = interlaced) 8795769fd77SMatthias Ringwald */ 8805769fd77SMatthias Ringwald const hci_cmd_t hci_write_page_scan_type = { 8815769fd77SMatthias Ringwald HCI_OPCODE_HCI_WRITE_PAGE_SCAN_TYPE, "1" 8825769fd77SMatthias Ringwald }; 8835769fd77SMatthias Ringwald 8845769fd77SMatthias Ringwald /** 88556042629SMatthias Ringwald * @param fec_required 88656042629SMatthias Ringwald * @param exstended_inquiry_response 88756042629SMatthias Ringwald */ 88856042629SMatthias Ringwald const hci_cmd_t hci_write_extended_inquiry_response = { 889ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_EXTENDED_INQUIRY_RESPONSE, "1E" 89056042629SMatthias Ringwald }; 89156042629SMatthias Ringwald 89256042629SMatthias Ringwald /** 89356042629SMatthias Ringwald * @param mode (0 = off, 1 = on) 89456042629SMatthias Ringwald */ 89556042629SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_mode = { 896ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_MODE, "1" 89756042629SMatthias Ringwald }; 89856042629SMatthias Ringwald 899237daac5SMatthias Ringwald /** 900237daac5SMatthias Ringwald */ 901237daac5SMatthias Ringwald const hci_cmd_t hci_read_local_oob_data = { 902ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_LOCAL_OOB_DATA, "" 903237daac5SMatthias Ringwald // return status, C, R 904237daac5SMatthias Ringwald }; 905483c5078SMatthias Ringwald 906483c5078SMatthias Ringwald /** 907483c5078SMatthias Ringwald * @param mode (0 = off, 1 = on) 908483c5078SMatthias Ringwald */ 909483c5078SMatthias Ringwald const hci_cmd_t hci_write_default_erroneous_data_reporting = { 910ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING, "1" 911483c5078SMatthias Ringwald }; 912483c5078SMatthias Ringwald 91356042629SMatthias Ringwald /** 91456042629SMatthias Ringwald */ 91556042629SMatthias Ringwald const hci_cmd_t hci_read_le_host_supported = { 916ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_LE_HOST_SUPPORTED, "" 91756042629SMatthias Ringwald // return: status, le supported host, simultaneous le host 91856042629SMatthias Ringwald }; 91956042629SMatthias Ringwald 92056042629SMatthias Ringwald /** 92156042629SMatthias Ringwald * @param le_supported_host 92256042629SMatthias Ringwald * @param simultaneous_le_host 92356042629SMatthias Ringwald */ 92456042629SMatthias Ringwald const hci_cmd_t hci_write_le_host_supported = { 925ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_LE_HOST_SUPPORTED, "11" 92656042629SMatthias Ringwald // return: status 92756042629SMatthias Ringwald }; 92856042629SMatthias Ringwald 92956042629SMatthias Ringwald /** 930b002ae8cSMatthias Ringwald * @param secure_connections_host_support 931b002ae8cSMatthias Ringwald */ 932b002ae8cSMatthias Ringwald const hci_cmd_t hci_write_secure_connections_host_support = { 933ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT, "1" 934b002ae8cSMatthias Ringwald // return: status 935b002ae8cSMatthias Ringwald }; 936b002ae8cSMatthias Ringwald 937b002ae8cSMatthias Ringwald /** 938237daac5SMatthias Ringwald */ 939bb75dd7dSMatthias Ringwald const hci_cmd_t hci_read_local_extended_oob_data = { 9401849becdSMatthias Ringwald HCI_OPCODE_HCI_READ_LOCAL_EXTENDED_OOB_DATA, "" 941237daac5SMatthias Ringwald // return status, C_192, R_192, R_256, C_256 942237daac5SMatthias Ringwald }; 943237daac5SMatthias Ringwald 944237daac5SMatthias Ringwald 945237daac5SMatthias Ringwald /** 94656042629SMatthias Ringwald * Testing Commands 94756042629SMatthias Ringwald */ 94856042629SMatthias Ringwald 94956042629SMatthias Ringwald 95056042629SMatthias Ringwald /** 95156042629SMatthias Ringwald */ 95256042629SMatthias Ringwald const hci_cmd_t hci_read_loopback_mode = { 953ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_LOOPBACK_MODE, "" 95456042629SMatthias Ringwald // return: status, loopback mode (0 = off, 1 = local loopback, 2 = remote loopback) 95556042629SMatthias Ringwald }; 95656042629SMatthias Ringwald 95756042629SMatthias Ringwald /** 95856042629SMatthias Ringwald * @param loopback_mode 95956042629SMatthias Ringwald */ 96056042629SMatthias Ringwald const hci_cmd_t hci_write_loopback_mode = { 961ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_LOOPBACK_MODE, "1" 96256042629SMatthias Ringwald // return: status 96356042629SMatthias Ringwald }; 96456042629SMatthias Ringwald 96584ca9bd8SMatthias Ringwald /** 96684ca9bd8SMatthias Ringwald */ 96784ca9bd8SMatthias Ringwald const hci_cmd_t hci_enable_device_under_test_mode = { 968ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_ENABLE_DEVICE_UNDER_TEST_MODE, "" 96984ca9bd8SMatthias Ringwald // return: status 97084ca9bd8SMatthias Ringwald }; 97184ca9bd8SMatthias Ringwald 97284ca9bd8SMatthias Ringwald /** 97384ca9bd8SMatthias Ringwald * @param simple_pairing_debug_mode 97484ca9bd8SMatthias Ringwald */ 97584ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_simple_pairing_debug_mode = { 976ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE, "1" 97784ca9bd8SMatthias Ringwald // return: status 97884ca9bd8SMatthias Ringwald }; 97984ca9bd8SMatthias Ringwald 98084ca9bd8SMatthias Ringwald /** 98184ca9bd8SMatthias Ringwald * @param handle 98284ca9bd8SMatthias Ringwald * @param dm1_acl_u_mode 98384ca9bd8SMatthias Ringwald * @param esco_loopback_mode 98484ca9bd8SMatthias Ringwald */ 98584ca9bd8SMatthias Ringwald const hci_cmd_t hci_write_secure_connections_test_mode = { 986ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE, "H11" 98784ca9bd8SMatthias Ringwald // return: status 98884ca9bd8SMatthias Ringwald }; 98984ca9bd8SMatthias Ringwald 99056042629SMatthias Ringwald 99156042629SMatthias Ringwald /** 99256042629SMatthias Ringwald * Informational Parameters 99356042629SMatthias Ringwald */ 99456042629SMatthias Ringwald 99556042629SMatthias Ringwald const hci_cmd_t hci_read_local_version_information = { 996ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_LOCAL_VERSION_INFORMATION, "" 99756042629SMatthias Ringwald }; 99856042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_commands = { 999ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_COMMANDS, "" 100056042629SMatthias Ringwald }; 100156042629SMatthias Ringwald const hci_cmd_t hci_read_local_supported_features = { 1002ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_LOCAL_SUPPORTED_FEATURES, "" 100356042629SMatthias Ringwald }; 100456042629SMatthias Ringwald const hci_cmd_t hci_read_buffer_size = { 1005ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_BUFFER_SIZE, "" 100656042629SMatthias Ringwald }; 100756042629SMatthias Ringwald const hci_cmd_t hci_read_bd_addr = { 1008ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_BD_ADDR, "" 100956042629SMatthias Ringwald }; 101056042629SMatthias Ringwald 101156042629SMatthias Ringwald /** 101256042629SMatthias Ringwald * Status Paramters 101356042629SMatthias Ringwald */ 101456042629SMatthias Ringwald 101556042629SMatthias Ringwald /** 101656042629SMatthias Ringwald * @param handle 101756042629SMatthias Ringwald */ 101856042629SMatthias Ringwald const hci_cmd_t hci_read_rssi = { 1019ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_RSSI, "H" 102056042629SMatthias Ringwald }; 102156042629SMatthias Ringwald 102297abfa24SMatthias Ringwald /** 102397abfa24SMatthias Ringwald * @param handle 102497abfa24SMatthias Ringwald */ 102597abfa24SMatthias Ringwald const hci_cmd_t hci_read_encryption_key_size = { 1026ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_READ_ENCRYPTION_KEY_SIZE, "H" 102797abfa24SMatthias Ringwald }; 102856042629SMatthias Ringwald 102956042629SMatthias Ringwald 1030a9a4c409SMatthias Ringwald #ifdef ENABLE_BLE 103156042629SMatthias Ringwald /** 103256042629SMatthias Ringwald * Low Energy Commands 103356042629SMatthias Ringwald */ 103456042629SMatthias Ringwald 103556042629SMatthias Ringwald /** 103656042629SMatthias Ringwald * @param event_mask_lower_octets 103756042629SMatthias Ringwald * @param event_mask_higher_octets 103856042629SMatthias Ringwald */ 103956042629SMatthias Ringwald const hci_cmd_t hci_le_set_event_mask = { 1040ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_EVENT_MASK, "44" 104156042629SMatthias Ringwald // return: status 104256042629SMatthias Ringwald }; 104356042629SMatthias Ringwald 104456042629SMatthias Ringwald const hci_cmd_t hci_le_read_buffer_size = { 1045ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_BUFFER_SIZE, "" 104656042629SMatthias Ringwald // return: status, le acl data packet len (16), total num le acl data packets(8) 104756042629SMatthias Ringwald }; 104856042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_features = { 1049ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_SUPPORTED_FEATURES, "" 105056042629SMatthias Ringwald // return: LE_Features See [Vol 6] Part B, Section 4.6 105156042629SMatthias Ringwald }; 105256042629SMatthias Ringwald 105356042629SMatthias Ringwald /** 105456042629SMatthias Ringwald * @param random_bd_addr 105556042629SMatthias Ringwald */ 105656042629SMatthias Ringwald const hci_cmd_t hci_le_set_random_address = { 1057ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_RANDOM_ADDRESS, "B" 105856042629SMatthias Ringwald // return: status 105956042629SMatthias Ringwald }; 106056042629SMatthias Ringwald 106156042629SMatthias Ringwald /** 106256042629SMatthias Ringwald * @param advertising_interval_min ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec) 106356042629SMatthias Ringwald * @param advertising_interval_max ([0x0020,0x4000], default: 0x0800, unit: 0.625 msec) 106456042629SMatthias Ringwald * @param advertising_type (enum from 0: ADV_IND, ADC_DIRECT_IND, ADV_SCAN_IND, ADV_NONCONN_IND) 106556042629SMatthias Ringwald * @param own_address_type (enum from 0: public device address, random device address) 106656042629SMatthias Ringwald * @param direct_address_type () 106756042629SMatthias Ringwald * @param direct_address (public or random address of device to be connecteed) 106856042629SMatthias Ringwald * @param advertising_channel_map (flags: chan_37(1), chan_38(2), chan_39(4)) 106956042629SMatthias Ringwald * @param advertising_filter_policy (enum from 0: scan any conn any, scan whitelist, con any, scan any conn whitelist, scan whitelist, con whitelist) 107056042629SMatthias Ringwald */ 107156042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_parameters = { 1072ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_ADVERTISING_PARAMETERS, "22111B11" 107356042629SMatthias Ringwald // return: status 107456042629SMatthias Ringwald }; 107556042629SMatthias Ringwald 107656042629SMatthias Ringwald const hci_cmd_t hci_le_read_advertising_channel_tx_power = { 1077ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER, "" 107856042629SMatthias Ringwald // return: status, level [-20,10] signed int (8), units dBm 107956042629SMatthias Ringwald }; 108056042629SMatthias Ringwald 108156042629SMatthias Ringwald /** 108256042629SMatthias Ringwald * @param advertising_data_length 108356042629SMatthias Ringwald * @param advertising_data (31 bytes) 108456042629SMatthias Ringwald */ 108556042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertising_data= { 1086ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_ADVERTISING_DATA, "1A" 108756042629SMatthias Ringwald // return: status 108856042629SMatthias Ringwald }; 108956042629SMatthias Ringwald 109056042629SMatthias Ringwald /** 109156042629SMatthias Ringwald * @param scan_response_data_length 109256042629SMatthias Ringwald * @param scan_response_data (31 bytes) 109356042629SMatthias Ringwald */ 109456042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_response_data= { 1095ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_SCAN_RESPONSE_DATA, "1A" 109656042629SMatthias Ringwald // return: status 109756042629SMatthias Ringwald }; 109856042629SMatthias Ringwald 109956042629SMatthias Ringwald /** 110056042629SMatthias Ringwald * @param advertise_enable (off: 0, on: 1) 110156042629SMatthias Ringwald */ 110256042629SMatthias Ringwald const hci_cmd_t hci_le_set_advertise_enable = { 1103ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_ADVERTISE_ENABLE, "1" 110456042629SMatthias Ringwald // return: status 110556042629SMatthias Ringwald }; 110656042629SMatthias Ringwald 110756042629SMatthias Ringwald /** 110856042629SMatthias Ringwald * @param le_scan_type (passive (0), active (1)) 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 own_address_type (public (0), random (1)) 111256042629SMatthias Ringwald * @param scanning_filter_policy (any (0), only whitelist (1)) 111356042629SMatthias Ringwald */ 111456042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_parameters = { 1115ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_SCAN_PARAMETERS, "12211" 111656042629SMatthias Ringwald // return: status 111756042629SMatthias Ringwald }; 111856042629SMatthias Ringwald 111956042629SMatthias Ringwald /** 112056042629SMatthias Ringwald * @param le_scan_enable (disabled (0), enabled (1)) 112156042629SMatthias Ringwald * @param filter_duplices (disabled (0), enabled (1)) 112256042629SMatthias Ringwald */ 112356042629SMatthias Ringwald const hci_cmd_t hci_le_set_scan_enable = { 1124ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_SCAN_ENABLE, "11" 112556042629SMatthias Ringwald // return: status 112656042629SMatthias Ringwald }; 112756042629SMatthias Ringwald 112856042629SMatthias Ringwald /** 112956042629SMatthias Ringwald * @param le_scan_interval ([0x0004, 0x4000], unit: 0.625 msec) 113056042629SMatthias Ringwald * @param le_scan_window ([0x0004, 0x4000], unit: 0.625 msec) 113156042629SMatthias Ringwald * @param initiator_filter_policy (peer address type + peer address (0), whitelist (1)) 113256042629SMatthias Ringwald * @param peer_address_type (public (0), random (1)) 113356042629SMatthias Ringwald * @param peer_address 113456042629SMatthias Ringwald * @param own_address_type (public (0), random (1)) 113556042629SMatthias Ringwald * @param conn_interval_min ([0x0006, 0x0c80], unit: 1.25 msec) 113656042629SMatthias Ringwald * @param conn_interval_max ([0x0006, 0x0c80], unit: 1.25 msec) 113756042629SMatthias Ringwald * @param conn_latency (number of connection events [0x0000, 0x01f4]) 113856042629SMatthias Ringwald * @param supervision_timeout ([0x000a, 0x0c80], unit: 10 msec) 113956042629SMatthias Ringwald * @param minimum_CE_length ([0x0000, 0xffff], unit: 0.625 msec) 114056042629SMatthias Ringwald * @param maximum_CE_length ([0x0000, 0xffff], unit: 0.625 msec) 114156042629SMatthias Ringwald */ 114256042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection= { 1143ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_CREATE_CONNECTION, "2211B1222222" 114456042629SMatthias Ringwald // return: none -> le create connection complete event 114556042629SMatthias Ringwald }; 114656042629SMatthias Ringwald 114756042629SMatthias Ringwald const hci_cmd_t hci_le_create_connection_cancel = { 1148ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_CREATE_CONNECTION_CANCEL, "" 114956042629SMatthias Ringwald // return: status 115056042629SMatthias Ringwald }; 115156042629SMatthias Ringwald 115256042629SMatthias Ringwald const hci_cmd_t hci_le_read_white_list_size = { 1153ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_WHITE_LIST_SIZE, "" 115456042629SMatthias Ringwald // return: status, number of entries in controller whitelist 115556042629SMatthias Ringwald }; 115656042629SMatthias Ringwald 115756042629SMatthias Ringwald const hci_cmd_t hci_le_clear_white_list = { 1158ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_CLEAR_WHITE_LIST, "" 115956042629SMatthias Ringwald // return: status 116056042629SMatthias Ringwald }; 116156042629SMatthias Ringwald 116256042629SMatthias Ringwald /** 116356042629SMatthias Ringwald * @param address_type (public (0), random (1)) 116456042629SMatthias Ringwald * @param bd_addr 116556042629SMatthias Ringwald */ 116656042629SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_white_list = { 1167ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_WHITE_LIST, "1B" 116856042629SMatthias Ringwald // return: status 116956042629SMatthias Ringwald }; 117056042629SMatthias Ringwald 117156042629SMatthias Ringwald /** 117256042629SMatthias Ringwald * @param address_type (public (0), random (1)) 117356042629SMatthias Ringwald * @param bd_addr 117456042629SMatthias Ringwald */ 117556042629SMatthias Ringwald const hci_cmd_t hci_le_remove_device_from_white_list = { 1176ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST, "1B" 117756042629SMatthias Ringwald // return: status 117856042629SMatthias Ringwald }; 117956042629SMatthias Ringwald 118056042629SMatthias Ringwald /** 118156042629SMatthias Ringwald * @param conn_handle 118256042629SMatthias Ringwald * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec) 118356042629SMatthias Ringwald * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec) 118456042629SMatthias Ringwald * @param conn_latency ([0x0000,0x03e8], number of connection events) 118556042629SMatthias Ringwald * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec) 118656042629SMatthias Ringwald * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec) 118756042629SMatthias Ringwald * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec) 118856042629SMatthias Ringwald */ 118956042629SMatthias Ringwald const hci_cmd_t hci_le_connection_update = { 1190ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_CONNECTION_UPDATE, "H222222" 119156042629SMatthias Ringwald // return: none -> le connection update complete event 119256042629SMatthias Ringwald }; 119356042629SMatthias Ringwald 119456042629SMatthias Ringwald /** 119556042629SMatthias Ringwald * @param channel_map_lower_32bits 119656042629SMatthias Ringwald * @param channel_map_higher_5bits 119756042629SMatthias Ringwald */ 119856042629SMatthias Ringwald const hci_cmd_t hci_le_set_host_channel_classification = { 1199ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION, "41" 120056042629SMatthias Ringwald // return: status 120156042629SMatthias Ringwald }; 120256042629SMatthias Ringwald 120356042629SMatthias Ringwald /** 120456042629SMatthias Ringwald * @param conn_handle 120556042629SMatthias Ringwald */ 120656042629SMatthias Ringwald const hci_cmd_t hci_le_read_channel_map = { 1207ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_CHANNEL_MAP, "H" 120856042629SMatthias Ringwald // return: status, connection handle, channel map (5 bytes, 37 used) 120956042629SMatthias Ringwald }; 121056042629SMatthias Ringwald 121156042629SMatthias Ringwald /** 121256042629SMatthias Ringwald * @param conn_handle 121356042629SMatthias Ringwald */ 121456042629SMatthias Ringwald const hci_cmd_t hci_le_read_remote_used_features = { 1215ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_REMOTE_USED_FEATURES, "H" 121656042629SMatthias Ringwald // return: none -> le read remote used features complete event 121756042629SMatthias Ringwald }; 121856042629SMatthias Ringwald 121956042629SMatthias Ringwald /** 122056042629SMatthias Ringwald * @param key ((128) for AES-128) 122156042629SMatthias Ringwald * @param plain_text (128) 122256042629SMatthias Ringwald */ 122356042629SMatthias Ringwald const hci_cmd_t hci_le_encrypt = { 1224ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_ENCRYPT, "PP" 122556042629SMatthias Ringwald // return: status, encrypted data (128) 122656042629SMatthias Ringwald }; 122756042629SMatthias Ringwald 122856042629SMatthias Ringwald const hci_cmd_t hci_le_rand = { 1229ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_RAND, "" 123056042629SMatthias Ringwald // return: status, random number (64) 123156042629SMatthias Ringwald }; 123256042629SMatthias Ringwald 123356042629SMatthias Ringwald /** 123456042629SMatthias Ringwald * @param conn_handle 123556042629SMatthias Ringwald * @param random_number_lower_32bits 123656042629SMatthias Ringwald * @param random_number_higher_32bits 123756042629SMatthias Ringwald * @param encryption_diversifier (16) 123856042629SMatthias Ringwald * @param long_term_key (128) 123956042629SMatthias Ringwald */ 124056042629SMatthias Ringwald const hci_cmd_t hci_le_start_encryption = { 1241ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_START_ENCRYPTION, "H442P" 124256042629SMatthias Ringwald // return: none -> encryption changed or encryption key refresh complete event 124356042629SMatthias Ringwald }; 124456042629SMatthias Ringwald 124556042629SMatthias Ringwald /** 124656042629SMatthias Ringwald * @param connection_handle 124756042629SMatthias Ringwald * @param long_term_key (128) 124856042629SMatthias Ringwald */ 124956042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_request_reply = { 1250ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_LONG_TERM_KEY_REQUEST_REPLY, "HP" 125156042629SMatthias Ringwald // return: status, connection handle 125256042629SMatthias Ringwald }; 125356042629SMatthias Ringwald 125456042629SMatthias Ringwald /** 125556042629SMatthias Ringwald * @param conn_handle 125656042629SMatthias Ringwald */ 125756042629SMatthias Ringwald const hci_cmd_t hci_le_long_term_key_negative_reply = { 1258ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_LONG_TERM_KEY_NEGATIVE_REPLY, "H" 125956042629SMatthias Ringwald // return: status, connection handle 126056042629SMatthias Ringwald }; 126156042629SMatthias Ringwald 126256042629SMatthias Ringwald /** 126356042629SMatthias Ringwald * @param conn_handle 126456042629SMatthias Ringwald */ 126556042629SMatthias Ringwald const hci_cmd_t hci_le_read_supported_states = { 1266ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_SUPPORTED_STATES, "H" 126756042629SMatthias Ringwald // return: status, LE states (64) 126856042629SMatthias Ringwald }; 126956042629SMatthias Ringwald 127056042629SMatthias Ringwald /** 127156042629SMatthias Ringwald * @param rx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2) 127256042629SMatthias Ringwald */ 127356042629SMatthias Ringwald const hci_cmd_t hci_le_receiver_test = { 1274ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_RECEIVER_TEST, "1" 127556042629SMatthias Ringwald // return: status 127656042629SMatthias Ringwald }; 127756042629SMatthias Ringwald 127856042629SMatthias Ringwald /** 127956042629SMatthias Ringwald * @param tx_frequency ([0x00 0x27], frequency (MHz): 2420 + N*2) 128056042629SMatthias Ringwald * @param test_payload_lengh ([0x00,0x25]) 128156042629SMatthias Ringwald * @param packet_payload ([0,7] different patterns) 128256042629SMatthias Ringwald */ 128356042629SMatthias Ringwald const hci_cmd_t hci_le_transmitter_test = { 1284ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_TRANSMITTER_TEST, "111" 128556042629SMatthias Ringwald // return: status 128656042629SMatthias Ringwald }; 128756042629SMatthias Ringwald 128856042629SMatthias Ringwald /** 128956042629SMatthias Ringwald * @param end_test_cmd 129056042629SMatthias Ringwald */ 129156042629SMatthias Ringwald const hci_cmd_t hci_le_test_end = { 1292ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_TEST_END, "1" 129356042629SMatthias Ringwald // return: status, number of packets (8) 129456042629SMatthias Ringwald }; 129582180fcaSMatthias Ringwald 129682180fcaSMatthias Ringwald /** 1297fe704c95SMatthias Ringwald * @param conn_handle 1298fe704c95SMatthias Ringwald * @param conn_interval_min ([0x0006,0x0c80], unit: 1.25 msec) 1299fe704c95SMatthias Ringwald * @param conn_interval_max ([0x0006,0x0c80], unit: 1.25 msec) 1300fe704c95SMatthias Ringwald * @param conn_latency ([0x0000,0x03e8], number of connection events) 1301fe704c95SMatthias Ringwald * @param supervision_timeout ([0x000a,0x0c80], unit: 10 msec) 1302fe704c95SMatthias Ringwald * @param minimum_CE_length ([0x0000,0xffff], unit: 0.625 msec) 1303fe704c95SMatthias Ringwald * @param maximum_CE_length ([0x0000,0xffff], unit: 0.625 msec) 1304fe704c95SMatthias Ringwald */ 1305fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_reply = { 1306ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY, "H222222" 1307fe704c95SMatthias Ringwald // return: status, connection handle 1308fe704c95SMatthias Ringwald }; 1309fe704c95SMatthias Ringwald 1310fe704c95SMatthias Ringwald /** 1311fe704c95SMatthias Ringwald * @param con_handle 1312fe704c95SMatthias Ringwald * @param reason 1313fe704c95SMatthias Ringwald */ 1314fe704c95SMatthias Ringwald const hci_cmd_t hci_le_remote_connection_parameter_request_negative_reply = { 1315ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY, "H1" 1316fe704c95SMatthias Ringwald // return: status, connection handle 1317fe704c95SMatthias Ringwald }; 1318fe704c95SMatthias Ringwald 1319fe704c95SMatthias Ringwald /** 13200ea2847fSMatthias Ringwald * @param con_handle 13210ea2847fSMatthias Ringwald * @param tx_octets 13220ea2847fSMatthias Ringwald * @param tx_time 13230ea2847fSMatthias Ringwald */ 13240ea2847fSMatthias Ringwald const hci_cmd_t hci_le_set_data_length = { 1325ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_DATA_LENGTH, "H22" 13260ea2847fSMatthias Ringwald // return: status, connection handle 13270ea2847fSMatthias Ringwald }; 13280ea2847fSMatthias Ringwald 13290ea2847fSMatthias Ringwald /** 13300ea2847fSMatthias Ringwald */ 13310ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_suggested_default_data_length = { 1332ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH, "" 13330ea2847fSMatthias Ringwald // return: status, suggested max tx octets, suggested max tx time 13340ea2847fSMatthias Ringwald }; 13350ea2847fSMatthias Ringwald 13360ea2847fSMatthias Ringwald /** 13370ea2847fSMatthias Ringwald * @param suggested_max_tx_octets 13380ea2847fSMatthias Ringwald * @param suggested_max_tx_time 13390ea2847fSMatthias Ringwald */ 13400ea2847fSMatthias Ringwald const hci_cmd_t hci_le_write_suggested_default_data_length = { 1341ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH, "22" 13420ea2847fSMatthias Ringwald // return: status 13430ea2847fSMatthias Ringwald }; 13440ea2847fSMatthias Ringwald 13450ea2847fSMatthias Ringwald /** 134682180fcaSMatthias Ringwald */ 134782180fcaSMatthias Ringwald const hci_cmd_t hci_le_read_local_p256_public_key = { 1348ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_LOCAL_P256_PUBLIC_KEY, "" 134982180fcaSMatthias Ringwald // LE Read Local P-256 Public Key Complete is generated on completion 135082180fcaSMatthias Ringwald }; 135182180fcaSMatthias Ringwald 135282180fcaSMatthias Ringwald /** 1353fcae305fSMatthias Ringwald * @param public key 1354fcae305fSMatthias Ringwald * @param private key 135582180fcaSMatthias Ringwald */ 135682180fcaSMatthias Ringwald const hci_cmd_t hci_le_generate_dhkey = { 1357ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_GENERATE_DHKEY, "QQ" 135882180fcaSMatthias Ringwald // LE Generate DHKey Complete is generated on completion 135982180fcaSMatthias Ringwald }; 136082180fcaSMatthias Ringwald 13610ea2847fSMatthias Ringwald /** 1362173ed1a3SMatthias Ringwald * @param Peer_Identity_Address_Type 1363173ed1a3SMatthias Ringwald * @param Peer_Identity_Address 1364173ed1a3SMatthias Ringwald * @param Peer_IRK 1365173ed1a3SMatthias Ringwald * @param Local_IRK 1366173ed1a3SMatthias Ringwald */ 1367173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_add_device_to_resolving_list = { 1368173ed1a3SMatthias Ringwald HCI_OPCODE_HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST, "1BPP" 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_remove_device_from_resolving_list = { 1376173ed1a3SMatthias Ringwald HCI_OPCODE_HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST, "1B" 1377173ed1a3SMatthias Ringwald }; 1378173ed1a3SMatthias Ringwald 1379173ed1a3SMatthias Ringwald /** 1380173ed1a3SMatthias Ringwald */ 1381173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_clear_resolving_list = { 1382173ed1a3SMatthias Ringwald HCI_OPCODE_HCI_LE_CLEAR_RESOLVING_LIST, "" 1383173ed1a3SMatthias Ringwald }; 1384173ed1a3SMatthias Ringwald 1385173ed1a3SMatthias Ringwald /** 1386173ed1a3SMatthias Ringwald */ 1387173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_resolving_list_size = { 1388173ed1a3SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_RESOLVING_LIST_SIZE, "" 1389173ed1a3SMatthias Ringwald }; 1390173ed1a3SMatthias Ringwald 1391173ed1a3SMatthias Ringwald /** 1392173ed1a3SMatthias Ringwald * @param Peer_Identity_Address_Type 1393173ed1a3SMatthias Ringwald * @param Peer_Identity_Address 1394173ed1a3SMatthias Ringwald */ 1395173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_peer_resolvable_address = { 1396173ed1a3SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_PEER_RESOLVABLE_ADDRESS, "" 1397173ed1a3SMatthias Ringwald }; 1398173ed1a3SMatthias Ringwald 1399173ed1a3SMatthias Ringwald /** 1400173ed1a3SMatthias Ringwald * @param Peer_Identity_Address_Type 1401173ed1a3SMatthias Ringwald * @param Peer_Identity_Address 1402173ed1a3SMatthias Ringwald */ 1403173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_read_local_resolvable_address = { 1404173ed1a3SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS, "" 1405173ed1a3SMatthias Ringwald }; 1406173ed1a3SMatthias Ringwald 1407173ed1a3SMatthias Ringwald /** 1408173ed1a3SMatthias Ringwald * @param Address_Resolution_Enable 1409173ed1a3SMatthias Ringwald */ 1410173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_address_resolution_enabled= { 1411173ed1a3SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_ADDRESS_RESOLUTION_ENABLED, "1" 1412173ed1a3SMatthias Ringwald }; 1413173ed1a3SMatthias Ringwald 1414173ed1a3SMatthias Ringwald /** 1415173ed1a3SMatthias Ringwald * @param RPA_Timeout in seconds, range 0x0001 to 0x0E10, default: 900 s 1416173ed1a3SMatthias Ringwald */ 1417173ed1a3SMatthias Ringwald const hci_cmd_t hci_le_set_resolvable_private_address_timeout= { 1418173ed1a3SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT, "2" 1419173ed1a3SMatthias Ringwald }; 1420173ed1a3SMatthias Ringwald 1421173ed1a3SMatthias Ringwald /** 14220ea2847fSMatthias Ringwald */ 14230ea2847fSMatthias Ringwald const hci_cmd_t hci_le_read_maximum_data_length = { 1424ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_MAXIMUM_DATA_LENGTH, "" 14250ea2847fSMatthias Ringwald // return: status, supported max tx octets, supported max tx time, supported max rx octets, supported max rx time 14260ea2847fSMatthias Ringwald }; 14270ea2847fSMatthias Ringwald 1428ca13daefSMatthias Ringwald /** 1429ca13daefSMatthias Ringwald * @param con_handle 1430ca13daefSMatthias Ringwald */ 1431ca13daefSMatthias Ringwald const hci_cmd_t hci_le_read_phy = { 1432ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_READ_PHY, "H" 1433ca13daefSMatthias Ringwald // return: status, connection handler, tx phy, rx phy 1434ca13daefSMatthias Ringwald }; 1435ca13daefSMatthias Ringwald 1436ca13daefSMatthias Ringwald /** 1437ca13daefSMatthias Ringwald * @param all_phys 1438ca13daefSMatthias Ringwald * @param tx_phys 1439ca13daefSMatthias Ringwald * @param rx_phys 1440ca13daefSMatthias Ringwald */ 1441ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_default_phy = { 1442ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_DEFAULT_PHY, "111" 1443ca13daefSMatthias Ringwald // return: status 1444ca13daefSMatthias Ringwald }; 1445ca13daefSMatthias Ringwald 1446ca13daefSMatthias Ringwald /** 1447ca13daefSMatthias Ringwald * @param con_handle 1448ca13daefSMatthias Ringwald * @param all_phys 1449ca13daefSMatthias Ringwald * @param tx_phys 1450ca13daefSMatthias Ringwald * @param rx_phys 1451ca13daefSMatthias Ringwald * @param phy_options 1452ca13daefSMatthias Ringwald */ 1453ca13daefSMatthias Ringwald const hci_cmd_t hci_le_set_phy = { 1454ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_LE_SET_PHY, "H1111" 1455ca13daefSMatthias Ringwald // LE PHY Update Complete is generated on completion 1456ca13daefSMatthias Ringwald }; 1457ca13daefSMatthias Ringwald 1458ca13daefSMatthias Ringwald 145956042629SMatthias Ringwald #endif 1460a42798c3SMatthias Ringwald 1461a42798c3SMatthias Ringwald // Broadcom / Cypress specific HCI commands 1462a42798c3SMatthias Ringwald 1463a42798c3SMatthias Ringwald /** 1464067ecc36SMatthias Ringwald * @brief Enable Wide-Band Speech / mSBC decoding for PCM 1465067ecc36SMatthias Ringwald * @param enable_wbs is 0 for disable, 1 for enable 1466067ecc36SMatthias Ringwald * @param uuid_wbs is 2 for EV2/EV3 1467067ecc36SMatthias Ringwald */ 1468067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_enable_wbs = { 1469067ecc36SMatthias Ringwald HCI_OPCODE_HCI_BCM_ENABLE_WBS, "12" 1470067ecc36SMatthias Ringwald // return: status 1471067ecc36SMatthias Ringwald }; 1472067ecc36SMatthias Ringwald 1473067ecc36SMatthias Ringwald /** 1474a42798c3SMatthias Ringwald * @brief Configure SCO Routing (BCM) 1475a42798c3SMatthias Ringwald * @param sco_routing is 0 for PCM, 1 for Transport, 2 for Codec and 3 for I2S 1476a42798c3SMatthias Ringwald * @param pcm_interface_rate is 0 for 128KBps, 1 for 256 KBps, 2 for 512KBps, 3 for 1024KBps, and 4 for 2048Kbps 1477a42798c3SMatthias Ringwald * @param frame_type is 0 for short and 1 for long 1478a42798c3SMatthias Ringwald * @param sync_mode is 0 for slave and 1 for master 1479a42798c3SMatthias Ringwald * @param clock_mode is 0 for slabe and 1 for master 1480a42798c3SMatthias Ringwald */ 1481a42798c3SMatthias Ringwald const hci_cmd_t hci_bcm_write_sco_pcm_int = { 1482ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_BCM_WRITE_SCO_PCM_INT, "11111" 1483a42798c3SMatthias Ringwald // return: status 1484a42798c3SMatthias Ringwald }; 1485eab6959fSMatthias Ringwald 1486eab6959fSMatthias Ringwald /** 1487067ecc36SMatthias Ringwald * @brief Configure the I2S/PCM interface (BCM) 1488067ecc36SMatthias Ringwald * @param i2s_enable is 0 for off, 1 for on 1489067ecc36SMatthias Ringwald * @param is_master is 0 for slave, is 1 for master 1490067ecc36SMatthias Ringwald * @param sample_rate is 0 for 8 kHz, 1 for 16 kHz, 2 for 4 kHz 1491067ecc36SMatthias 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 1492067ecc36SMatthias Ringwald * @param clock_mode is 0 for slabe and 1 for master 1493067ecc36SMatthias Ringwald */ 1494067ecc36SMatthias Ringwald const hci_cmd_t hci_bcm_write_i2spcm_interface_param = { 1495067ecc36SMatthias Ringwald HCI_OPCODE_HCI_BCM_WRITE_I2SPCM_INTERFACE_PARAM, "1111" 1496067ecc36SMatthias Ringwald // return: status 1497067ecc36SMatthias Ringwald }; 1498067ecc36SMatthias Ringwald 1499067ecc36SMatthias Ringwald 1500067ecc36SMatthias Ringwald /** 1501eab6959fSMatthias Ringwald * @brief Activates selected Sleep Mode 1502eab6959fSMatthias 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 1503eab6959fSMatthias Ringwald * @param idle_threshold_host (modes 1,2,5,7) time until considered idle, unit roughly 300 ms 1504eab6959fSMatthias Ringwald * @param idle_threshold_controller (modes 1-7,9) time until considered idle, unit roughly 300 ms 1505eab6959fSMatthias Ringwald * @param bt_wake_active_mode (modes 1,2,7) 0 = BT_WAKE line is active high, 1 = BT_WAKE is active low 1506eab6959fSMatthias Ringwald * @param host_wake_active_mode (modes 1,2,5,7) 0 = HOST_WAKE line is active high, 1 = HOST_WAKE is active low 1507eab6959fSMatthias Ringwald * @param allow_host_sleep_during_sco (modes 1,2,3,5,7) 1508eab6959fSMatthias Ringwald * @param combine_sleep_mode_and_lpm (modes 1,2,3,5,7) 1509eab6959fSMatthias Ringwald * @param enable_tristate_control_of_uart_tx_line (modes 1,2,7) 1510eab6959fSMatthias Ringwald * @param active_connection_handling_on_suspend (modes 3,5) 1511eab6959fSMatthias Ringwald * @param resume_timeout (modes 3,5) 1512eab6959fSMatthias Ringwald * @param enable_break_to_host (mode 12) 1513eab6959fSMatthias Ringwald * @param pulsed_host_wake (modes 1,12) 1514eab6959fSMatthias Ringwald */ 1515eab6959fSMatthias Ringwald const hci_cmd_t hci_bcm_set_sleep_mode = { 1516ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_BCM_SET_SLEEP_MODE, "111111111111" 1517eab6959fSMatthias Ringwald }; 15185cdaddfaSMatthias Ringwald 15195cdaddfaSMatthias Ringwald /** 15205cdaddfaSMatthias Ringwald * @brief Set TX Power Table 15215cdaddfaSMatthias Ringwald * @param is_le 0=classic, 1=LE 15225cdaddfaSMatthias Ringwald * @param chip_max_tx_pwr_db chip level max TX power in dBM 15235cdaddfaSMatthias Ringwald */ 15245cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_write_tx_power_table = { 1525ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_BCM_WRITE_TX_POWER_TABLE, "11" 15265cdaddfaSMatthias Ringwald }; 15275cdaddfaSMatthias Ringwald 15285cdaddfaSMatthias Ringwald const hci_cmd_t hci_bcm_set_tx_pwr = { 1529ea5cc3a8SMatthias Ringwald HCI_OPCODE_HCI_BCM_SET_TX_PWR, "11H" 15305cdaddfaSMatthias Ringwald }; 1531ba39ed56SMatthias Ringwald 1532ba39ed56SMatthias Ringwald /** 153315fca961SMatthias Ringwald * @brief This command starts receiving packets using packet transmission parameters such as 153415fca961SMatthias Ringwald * frequency channel, packet type, and packet length. It is used for Packet RX. 153515fca961SMatthias Ringwald * @see https://processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_RX 153615fca961SMatthias Ringwald * @param frequency 153715fca961SMatthias Ringwald * @param ADPLL loop mode 153815fca961SMatthias Ringwald */ 153915fca961SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_con_rx = { 154015fca961SMatthias Ringwald 0xFD17, "11" 154115fca961SMatthias Ringwald }; 154215fca961SMatthias Ringwald 154315fca961SMatthias Ringwald /** 1544ba39ed56SMatthias Ringwald * 1545ba39ed56SMatthias Ringwald * 1546ba39ed56SMatthias Ringwald * @brief This command tests the RF transceiver in continuous transmission mode. 1547ba39ed56SMatthias Ringwald * The transmitter is activated by configuring the transmission parameters such as pattern, 1548ba39ed56SMatthias Ringwald * modulation, and frequency. 1549ba39ed56SMatthias Ringwald * @see processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Con_TX.280xFD84.29 1550ba39ed56SMatthias Ringwald * @param modulation 155115fca961SMatthias Ringwald * @param test_pattern 1552ba39ed56SMatthias Ringwald * @param frequency 1553ba39ed56SMatthias Ringwald * @param power_level 1554ba39ed56SMatthias Ringwald * @param reserved1 1555ba39ed56SMatthias Ringwald * @param reserved2 1556ba39ed56SMatthias Ringwald */ 1557ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_con_tx = { 1558ba39ed56SMatthias Ringwald 0xFD84, "111144" 1559ba39ed56SMatthias Ringwald }; 1560ba39ed56SMatthias Ringwald 1561ba39ed56SMatthias Ringwald /** 1562ba39ed56SMatthias Ringwald * @brief This command starts sending/receiving packets using packet transmission parameters such as 1563ba39ed56SMatthias Ringwald * frequency channel, packet type, and packet length. It is used for Packet TX/RX. 1564ba39ed56SMatthias Ringwald * @see processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_DRPb_Tester_Packet_TX_RX_.280xFD85.29 1565ba39ed56SMatthias Ringwald * @param frequency_mode 1566ba39ed56SMatthias Ringwald * @param tx_single_frequency 1567ba39ed56SMatthias Ringwald * @param rx_single_frequency 1568ba39ed56SMatthias Ringwald * @param acl_packet_type 1569ba39ed56SMatthias Ringwald * @paarm acl_packet_data_pattern 1570ba39ed56SMatthias Ringwald * @param reserved 1571ba39ed56SMatthias Ringwald * @param power_level 1572ba39ed56SMatthias Ringwald * @param disable_whitening 1573ba39ed56SMatthias Ringwald * @param prbs9_initialization_value 1574ba39ed56SMatthias Ringwald */ 1575ba39ed56SMatthias Ringwald const hci_cmd_t hci_ti_drpb_tester_packet_tx_rx = { 1576ba39ed56SMatthias Ringwald 0xFD85, "1111112112" 1577ba39ed56SMatthias Ringwald }; 1578365a7dd1SMatthias Ringwald 1579733a7793SMatthias Ringwald 1580733a7793SMatthias Ringwald /** 1581733a7793SMatthias Ringwald * @param best effort access percentage 1582733a7793SMatthias Ringwald * @param guaranteed access percentage 1583733a7793SMatthias Ringwald * @param poll period 1584733a7793SMatthias Ringwald * @param slave burst after tx 1585733a7793SMatthias Ringwald * @param slave master search count 1586733a7793SMatthias Ringwald * @param master burst after tx enable 1587733a7793SMatthias Ringwald * @param master burst after rx limit 1588733a7793SMatthias Ringwald */ 1589cf26f982SMatthias Ringwald const hci_cmd_t hci_ti_configure_ddip = { 1590733a7793SMatthias Ringwald HCI_OPCODE_HCI_TI_VS_CONFIGURE_DDIP, "1111111" 1591733a7793SMatthias Ringwald }; 1592733a7793SMatthias Ringwald 1593365a7dd1SMatthias Ringwald /** 1594365a7dd1SMatthias Ringwald * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration. 1595365a7dd1SMatthias Ringwald * @param enable 0=disable, 1=enable 1596365a7dd1SMatthias Ringwald * @param a3dp_role (NL5500, WL128x only) 0=source,1=sink 1597365a7dd1SMatthias Ringwald * @param code_upload (NL5500, WL128x only) 0=do not load a3dp code, 1=load a3dp code 1598365a7dd1SMatthias Ringwald * @param reserved for future use 1599365a7dd1SMatthias Ringwald */ 1600365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_avrp_enable = { 1601365a7dd1SMatthias Ringwald 0xFD92, "1112" 1602365a7dd1SMatthias Ringwald }; 1603365a7dd1SMatthias Ringwald 1604365a7dd1SMatthias Ringwald /** 1605365a7dd1SMatthias Ringwald * @brief This command is used to associate the requested ACL handle with Wide Band Speech configuration. 1606365a7dd1SMatthias Ringwald * @param acl_con_handle 1607365a7dd1SMatthias Ringwald */ 1608365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_associate = { 1609365a7dd1SMatthias Ringwald 0xFD78, "H" 1610365a7dd1SMatthias Ringwald }; 1611365a7dd1SMatthias Ringwald 1612365a7dd1SMatthias Ringwald /** 1613365a7dd1SMatthias Ringwald * @brief This command is used to disassociate Wide Band Speech configuration from any ACL handle. 1614365a7dd1SMatthias Ringwald */ 1615365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_wbs_disassociate = { 1616365a7dd1SMatthias Ringwald 0xFD79, "" 1617365a7dd1SMatthias Ringwald }; 1618365a7dd1SMatthias Ringwald 1619365a7dd1SMatthias Ringwald /** 1620365a7dd1SMatthias Ringwald * @brief This command configures the codec interface parameters and the PCM clock rate, which is relevant when 1621365a7dd1SMatthias Ringwald the Bluetooth core generates the clock. This command must be used by the host to use the PCM 1622365a7dd1SMatthias Ringwald interface. 1623365a7dd1SMatthias Ringwald * @param clock_rate in kHz 1624365a7dd1SMatthias Ringwald * @param clock_direction 0=master/output, 1=slave/input 1625365a7dd1SMatthias Ringwald * @param frame_sync_frequency in Hz 1626365a7dd1SMatthias Ringwald * @param frame_sync_duty_cycle 0=50% (I2S Format), 0x0001-0xffff number of cycles of PCM clock 1627365a7dd1SMatthias Ringwald * @param frame_sync_edge 0=driven/sampled at rising edge, 1=driven/sampled at falling edge of PCM clock 1628365a7dd1SMatthias Ringwald * @param frame_sync_polariy 0=active high, 1=active low 1629365a7dd1SMatthias Ringwald * @param reserved1 1630365a7dd1SMatthias Ringwald * @param channel_1_data_out_size sample size in bits 1631365a7dd1SMatthias Ringwald * @param channel_1_data_out_offset number of PCM clock cycles between rising of frame sync and data start 1632365a7dd1SMatthias Ringwald * @param channel_1_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock 1633365a7dd1SMatthias Ringwald * @param channel_1_data_in_size sample size in bits 1634365a7dd1SMatthias Ringwald * @param channel_1_data_in_offset number of PCM clock cycles between rising of frame sync and data start 1635365a7dd1SMatthias Ringwald * @param channel_1_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock 1636365a7dd1SMatthias Ringwald * @param fsync_multiplier this field is only relevant to CC256XB from service pack 0.2 !!! -> use 0x00 1637365a7dd1SMatthias Ringwald * @param channel_2_data_out_size sample size in bits 1638365a7dd1SMatthias Ringwald * @param channel_2_data_out_offset number of PCM clock cycles between rising of frame sync and data start 1639365a7dd1SMatthias Ringwald * @param channel_2_data_out_edge 0=data driven at rising edge, 1=data driven at falling edge of PCM clock 1640365a7dd1SMatthias Ringwald * @param channel_2_data_in_size sample size in bits 1641365a7dd1SMatthias Ringwald * @param channel_2_data_in_offset number of PCM clock cycles between rising of frame sync and data start 1642365a7dd1SMatthias Ringwald * @param channel_2_data_in_edge 0=data sampled at rising edge, 1=data sampled at falling edge of PCM clock 1643365a7dd1SMatthias Ringwald * @param reserved2 1644365a7dd1SMatthias Ringwald * 1645365a7dd1SMatthias Ringwald */ 1646365a7dd1SMatthias Ringwald const hci_cmd_t hci_ti_write_codec_config = { 1647365a7dd1SMatthias Ringwald 0xFD06, "214211122122112212211" 1648365a7dd1SMatthias Ringwald }; 164915fca961SMatthias Ringwald 165015fca961SMatthias Ringwald /** 165115fca961SMatthias Ringwald * @brief This command is used only for internal testing. 165215fca961SMatthias Ringwald * @see https://processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_TX 165315fca961SMatthias Ringwald * @param frequency 165415fca961SMatthias Ringwald * @param ADPLL loop mode 165515fca961SMatthias Ringwald */ 165615fca961SMatthias Ringwald const hci_cmd_t hci_ti_drpb_enable_rf_calibration = { 165715fca961SMatthias Ringwald 0xFD80, "141" 165815fca961SMatthias Ringwald }; 165915fca961SMatthias Ringwald 166015fca961SMatthias Ringwald /** 166115fca961SMatthias Ringwald * @brief This command command is only required for the continuous TX test of modulated 166215fca961SMatthias Ringwald * (GFSK, π/4-DQPSK or 8DPSK) signal. This command should be skipped when performing continuous TX test for CW. 166315fca961SMatthias Ringwald * @see https://processors.wiki.ti.com/index.php/CC256x_Testing_Guide#Continuous_RX 166415fca961SMatthias Ringwald * @param frequency 166515fca961SMatthias Ringwald * @param ADPLL loop mode 166615fca961SMatthias Ringwald */ 166715fca961SMatthias Ringwald const hci_cmd_t hci_ti_write_hardware_register = { 166815fca961SMatthias Ringwald 0xFF01, "42" 166915fca961SMatthias Ringwald }; 1670