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