/*************************************************************************** * * Copyright 2015-2019 BES. * All rights reserved. All unpublished rights reserved. * * No part of this work may be used or reproduced in any form or by any * means, or stored in a database or retrieval system, without prior written * permission of BES. * * Use of this work is governed by a license granted by BES. * This work contains confidential and proprietary information of * BES. which is protected by copyright, trade secret, * trademark and other intellectual property rights. * ****************************************************************************/ #ifndef __BTM_HCI_H__ #define __BTM_HCI_H__ #include "bt_sys_cfg.h" #include "string.h" /* HCI Error Codes */ #define HCI_STATUS_OK 0x00 #define HCI_ERR_UNKNOWN_HCI_CMD 0x01 #define HCI_ERR_NO_CONNECTION 0x02 #define HCI_ERR_HARDWARE_FAILURE 0x03 #define HCI_ERR_PAGE_TIMEOUT 0x04 #define HCI_ERR_AUTH_FAILURE 0x05 #define HCI_ERR_KEY_MISSING 0x06 #define HCI_ERR_MEMORY_FULL 0x07 #define HCI_ERR_CONN_TIMEOUT 0x08 #define HCI_ERR_MAX_NUM_CONNS 0x09 #define HCI_ERR_MAX_SCO_CONNS 0x0A #define HCI_ERR_ACL_ALREADY_EXISTS 0x0B #define HCI_ERR_CMD_DISALLOWED 0x0C #define HCI_ERR_HOST_REJ_NO_RESOURCES 0x0D #define HCI_ERR_HOST_REJ_SECURITY 0x0E #define HCI_ERR_HOST_REJ_PERSONAL_DEV 0x0F #define HCI_ERR_HOST_TIMEOUT 0x10 #define HCI_ERR_UNSUPP_FEATUR_PARM_VAL 0x11 #define HCI_ERR_INVAL_HCI_PARM_VAL 0x12 #define HCI_ERR_CONN_TERM_USER_REQ 0x13 #define HCI_ERR_CONN_TERM_LOW_RESOURCES 0x14 #define HCI_ERR_CONN_TERM_POWER_OFF 0x15 #define HCI_ERR_CONN_TERM_LOCAL_HOST 0x16 #define HCI_ERR_REPEATED_ATTEMPTS 0x17 #define HCI_ERR_PAIRING_DISALLOWED 0x18 #define HCI_ERR_UNKNOWN_LMP_PDU 0x19 #define HCI_ERR_UNSUPP_REMOTE_FEATURE 0x1A #define HCI_ERR_SCO_OFFSET_REJECTED 0x1B #define HCI_ERR_SCO_INTERVAL_REJECTED 0x1C #define HCI_ERR_SCO_AIR_MODE_REJECTED 0x1D #define HCI_ERR_INVALID_LMP_PARM 0x1E #define HCI_ERR_UNSPECIFIED_ERROR 0x1F #define HCI_ERR_UNSUPP_LMP_PARM 0x20 #define HCI_ERR_ROLE_CHANGE_DISALLOWED 0x21 #define HCI_ERR_LMP_RESPONSE_TIMEDOUT 0x22 #define HCI_ERR_LMP_ERR_TRANSACT_COLL 0x23 #define HCI_ERR_LMP_PDU_DISALLOWED 0x24 #define HCI_ERR_ENCRYPTN_MODE_UNACCEPT 0x25 #define HCI_ERR_UNIT_KEY_USED 0x26 #define HCI_ERR_QOS_NOT_SUPPORTED 0x27 #define HCI_ERR_INSTANT_PASSED 0x28 #define HCI_ERR_PAIRING_W_UNIT_KEY_UNSUPP 0x29 #define HCI_ERR_DIFFERENT_TRANSACTION_COLLISION 0x2A #define HCI_ERR_INSUFF_RESOURCES_FOR_SCATTER_MODE 0x2B #define HCI_ERR_QOS_UNACCEPTABLE_PARAMETER 0x2C #define HCI_ERR_QOS_REJECTED 0x2D #define HCI_ERR_CHANNEL_CLASSIF_NOT_SUPPORTED 0x2E #define HCI_ERR_INSUFFICIENT_SECURITY 0x2F #define HCI_ERR_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 #define HCI_ERR_SCATTER_MODE_NO_LONGER_REQUIRED 0x31 #define HCI_ERR_ROLE_SWITCH_PENDING 0x32 #define HCI_ERR_SCATTER_MODE_PARM_CHNG_PENDING 0x33 #define HCI_ERR_RESERVED_SLOT_VIOLATION 0x34 #define HCI_ERR_SWITCH_FAILED 0x35 #define HCI_ERR_EXTENDED_INQ_RESP_TOO_LARGE 0x36 #define HCI_ERR_SECURE_SIMPLE_PAIR_NOT_SUPPORTED 0x37 #define HCI_ERR_HOST_BUSY_PAIRING 0x38 /* voice setting*/ #define INPUT_CODING_LINEAR 0x0000 #define INPUT_CODING_ULAW 0x0100 #define INPUT_CODING_ALAW 0x0200 #define INPUT_DATA_FORMAT_1S 0x0000 #define INPUT_DATA_FORMAT_2S 0x0040 #define INPUT_DATA_FORMAT_SIGN 0x0080 #define INPUT_DATA_FORMAT_UNSIGN 0x00C0 #define INPUT_SAMPLE_SIZE_8BITS 0x0000 #define INPUT_SAMPLE_SIZE_16BITS 0x0020 #define AIR_CODING_FORMAT_CVSD 0x0000 #define AIR_CODING_FORMAT_ULAW 0x0001 #define AIR_CODING_FORMAT_ALAW 0x0002 #define AIR_CODING_FORMAT_TRANSPARENT 0x0003 #define AIR_CODING_FORMAT_MSBC 0x0060 /* ACL */ #define HCI_PKT_TYPE_DM1 0x0008 #define HCI_PKT_TYPE_DH1 0x0010 #define HCI_PKT_TYPE_DM3 0x0400 #define HCI_PKT_TYPE_DH3 0x0800 #define HCI_PKT_TYPE_DM5 0x4000 #define HCI_PKT_TYPE_DH5 0x8000 #define HCI_PKT_TYPE_ACL 0xcc18 /* sco esco */ #define HCI_PKT_TYPE_HV1 0x0001 #define HCI_PKT_TYPE_HV2 0x0002 #define HCI_PKT_TYPE_HV3 0x0004 #define HCI_PKT_TYPE_EV3 0x0008 #define HCI_PKT_TYPE_EV4 0x0010 #define HCI_PKT_TYPE_EV5 0x0020 #define HCI_PKT_TYPE_2EV3 0x0040 #define HCI_PKT_TYPE_3EV3 0x0080 #define HCI_PKT_TYPE_2EV5 0x0100 #define HCI_PKT_TYPE_3EV5 0x0200 #define HCI_PKT_TYPE_SCO 0x003f #define HCI_HANDLE_MASK 0x0FFF #define HCI_FLAG_PB_MASK 0x3000 #define HCI_FLAG_BROADCAST_MASK 0xC000 #define BROADCAST_NONE 0x0000 #define BROADCAST_ACTIVE 0x4000 #define BROADCAST_PARKED 0x8000 /*create connection param*/ #define ALLOW_ROLE_SWITCH_YES 0x01 #define ALLOW_ROLE_SWITCH_NO 0x00 /*accept connection req param*/ #define ROLE_BECAME_MASTER 0x00 #define ROLE_REMAIN_SLAVE 0x01 /* link policy */ #define HCI_LP_ENABLE_ROLE_SWITCH_MASK 0x01 #define HCI_LP_ENABLE_HOLD_MODE_MASK 0x02 #define HCI_LP_ENABLE_SNIFF_MODE_MASK 0x04 #define HCI_LP_ENABLE_PARK_MODE_MASK 0x08 #ifdef __IAG_BLE_INCLUDE__ #define HCI_BLE_SUBEVT_CODE_CONNECT_CPMPLETE 1 #endif /* __IAG_BLE_INCLUDE__ */ /****************************************************************************************** * Event Evtcode Definition (OLD) *****************************************************************************************/ #define HCI_MasterLinkKeyCompleteEvt_Code 0x0A #define HCI_PageScanModeChangeEvt_Code 0x1F #define HCI_PageScanRepetitionModeChangeEvt_Code 0x20 #define HCI_InquiryResultEvt_withRSSI 0x22 #define HCI_EV_INQUIRY_COMPLETE 0x01 struct hci_ev_inquiry_complete { uint8 status; }__attribute__ ((packed)); #define HCI_EV_INQUIRY_RESULT 0x02 #define HCI_EV_INQUIRY_RESULT_RSSI 0x22 #define HCI_EV_INQUIRY_RESULT_EXTINQ 0x2F #define PAGE_SCAN_REPETITION_MODE_R0 0x00 #define PAGE_SCAN_REPETITION_MODE_R1 0x01 #define PAGE_SCAN_REPETITION_MODE_R2 0x02 #define PAGE_SCAN_PERIOD_MODE_P0 0x00 #define PAGE_SCAN_PERIOD_MODE_P1 0x01 #define PAGE_SCAN_PERIOD_MODE_P2 0x02 struct hci_ev_inquiry_result { uint8 num_responses; struct bdaddr_t bdaddr; uint8 page_scan_repetition_mode; uint8 reserved1; uint8 reserved2;/*must be 0*/ uint8 class_dev[3]; uint16 clk_off; }__attribute__ ((packed)); #define HCI_EV_CONN_COMPLETE 0x03 struct hci_ev_conn_complete { uint8 status; uint16 handle; struct bdaddr_t bdaddr; uint8 link_type; uint8 encr_mode; }__attribute__ ((packed)); #define HCI_EV_CONN_REQUEST 0x04 #define HCI_LINK_TYPE_SCO 0x00 #define HCI_LINK_TYPE_ACL 0x01 #define HCI_LINK_TYPE_ESCO 0x02 struct hci_ev_conn_request { struct bdaddr_t bdaddr; uint8 class_dev[3]; uint8 link_type; }__attribute__ ((packed)); #define HCI_EV_DISCONN_COMPLETE 0x05 struct hci_ev_disconn_complete { uint8 status; uint16 handle; uint8 reason; }__attribute__ ((packed)); #define HCI_EV_AUTHENTICATION_COMPLETE 0x06 struct hci_ev_authentication_complete { uint8 status; uint16 handle; }__attribute__ ((packed)); #define HCI_EV_REMOTENAMEREQ_COMPLETE 0x07 #define HCI_REMOTENAME_MAX 248 struct hci_ev_remote_name_req_complete { uint8 status; struct bdaddr_t bdaddr; uint8 name[HCI_REMOTENAME_MAX]; }__attribute__ ((packed)); #define HCI_EV_ENCRYPTION_CHANGE 0x08 struct hci_ev_encryption_change { uint8 status; uint16 conn_handle; uint8 encryption_enable; }__attribute__ ((packed)); #define HCI_EV_READ_REMOTE_FEATURES 0x0B struct hci_ev_read_remote_features{ uint8 status; uint16 conn_handle; uint8 features[8]; }__attribute__ ((packed)); #define HCI_EV_READ_REMOTE_VERSION 0x0C struct hci_ev_read_remote_version{ uint8 status; uint16 conn_handle; uint8 lmp_version; uint16 manufacturer_name; uint16 lmp_subversion; }__attribute__ ((packed)); #define HCI_EV_QOSSETUP_COMPLETE 0x0D struct hci_ev_qossetup_complete{ uint8 status; uint16 conn_handle; uint8 flags; uint8 service_type; uint32 token_rate; uint32 peak_bandwith; uint32 latency; uint32 delay_v; }__attribute__ ((packed)); #define HCI_EV_CMD_COMPLETE 0x0e struct hci_ev_cmd_complete{ uint8 num_hci_cmd_packets; uint16 cmd_opcode; uint8 param[1]; }__attribute__ ((packed)); #define HCI_EV_CMD_STATUS 0x0f struct hci_ev_cmd_status{ uint8 status; uint8 num_hci_cmd_packets; uint16 cmd_opcode; }__attribute__ ((packed)); #define HCI_EV_HARDWARE_ERROR 0x10 struct hci_ev_hardware_error{ uint8 hw_code; }__attribute__ ((packed)); #define HCI_EV_ROLE_CHANGE 0x12 struct hci_ev_role_change{ uint8 status; struct bdaddr_t bdaddr; uint8 new_role; }__attribute__ ((packed)); struct hci_ev_cmd_complete_read_stored_linkkey{ uint8 status; uint16 max_num_keys; uint8 num_keys_read; }__attribute__ ((packed)); struct hci_ev_cmd_complete_le_read_buffer_size{ uint8 status; uint16 le_data_packet_length; uint8 total_num_le_data_packets; }__attribute__ ((packed)); struct hci_ev_cmd_complete_role_discovery{ uint8 status; uint16 connection_handle; uint8 current_role; }__attribute__ ((packed)); struct hci_ev_cmd_complete_read_local_version{ uint8 status; uint8 hci_version; uint16 hci_revision; uint8 lmp_version; uint16 manu_name; uint16 lmp_subversion; }__attribute__ ((packed)); struct hci_ev_cmd_complete_read_local_sup_features{ uint8 status; uint8 features[8]; }__attribute__ ((packed)); struct hci_ev_cmd_complete_read_local_ext_features{ uint8 status; uint8 page_num; uint8 max_page_num; uint8 features[8]; }__attribute__ ((packed)); #define HCI_EV_NUM_OF_CMPLT 0x13 struct hci_ev_num_of_complete{ uint8 num_handle; uint16 handle; uint16 num_of_comp; }__attribute__ ((packed)); struct hci_ev_num_of_complete_item{ uint16 handle; uint16 num_of_comp; }__attribute__ ((packed)); #define HCI_EV_MODE_CHANGE 0x14 #define HCI_MODE_ACTIVE 0x00 #define HCI_MODE_HOLD 0x01 #define HCI_MODE_SNIFF 0x02 #define HCI_MODE_PARK 0x03 struct hci_ev_mode_change { uint8 status; uint16 handle; uint8 current_mode; uint16 interval; }__attribute__ ((packed)); #define HCI_EV_RETURN_LINKKEYS 0x15 struct hci_ev_return_linkkeys{ uint8 num_keys; struct bdaddr_t bdaddr; uint8 link_key[16]; }__attribute__ ((packed)); struct hci_evt_packet_t { uint8 evt_code; uint8 length; uint8 data[1]; }__attribute__ ((packed)); #define HCI_EV_PIN_CODE_REQ 0x16 struct hci_ev_pin_code_req { struct bdaddr_t bdaddr; }__attribute__ ((packed)); #define HCI_EV_LINK_KEY_REQ 0x17 struct hci_ev_link_key_req { struct bdaddr_t bdaddr; }__attribute__ ((packed)); #define HCI_EV_LINK_KEY_NOTIFY 0x18 struct hci_ev_link_key_notify { struct bdaddr_t bdaddr; uint8 link_key[16]; uint8 key_type; }__attribute__ ((packed)); #define HCI_EV_DATABUF_OVERFLOW 0x1A struct hci_ev_databuf_overflow{ uint8 link_type; }__attribute__ ((packed)); #define HCI_EV_MAX_SLOT_CHANGE 0x1B struct hci_ev_max_slot_change { uint16 handle; uint8 max_slots; }__attribute__ ((packed)); #define HCI_EV_READ_CLKOFF_Code 0x1C struct hci_ev_read_clkoff{ uint8 status; uint16 handle; uint16 clkoff; }__attribute__ ((packed)); #define HCI_EV_CONNPKT_TYPE_CHANGE 0x1D struct hci_ev_connpkt_type_change { uint8 status; uint16 handle; uint16 pkt_type; }__attribute__ ((packed)); #define HCI_EV_QOS_VIOLATION 0x1E struct hci_ev_qos_violation { uint16 handle; }__attribute__ ((packed)); #define HCI_EV_FLOW_SPECIFICATION 0x21 struct hci_ev_flow_specification { uint8 status; uint16 handle; uint8 flags; uint8 flow_dir; uint8 service_type; uint32 token_rate; uint32 token_bucket; uint32 peak_bandwidth; uint32 latency; }__attribute__ ((packed)); #define HCI_EV_READ_REMOTE_EXTFEATURES 0x23 struct hci_ev_read_remote_extfeatures { uint8 status; uint16 handle; uint8 page_num; uint8 max_page_num; uint8 ext_features[8]; }__attribute__ ((packed)); #define HCI_EV_SYNC_CONN_COMPLETE 0x2c struct hci_ev_sync_conn_complete { uint8 status; uint16 handle; struct bdaddr_t bdaddr; uint8 link_type; uint8 tx_interval; uint8 retx_window; uint16 rx_pkt_length; uint16 tx_pkt_length; uint8 air_mode; }__attribute__ ((packed)); #define HCI_EV_ENCRYPT_KEY_REFRESH_COMPLETE 0x30 #define HCI_EV_IO_CAPABILITY_REQUEST 0x31 struct hci_ev_io_capability_request { struct bdaddr_t bdaddr; }__attribute__ ((packed)); #define HCI_EV_IO_CAPABILITY_RESPONSE 0x32 struct hci_ev_io_capability_response { struct bdaddr_t bdaddr; uint8 io_capability; uint8 oob_data_present; uint8 authentication_requirement; }__attribute__ ((packed)); #define HCI_EV_USER_CONFIRMATION_REQUEST 0x33 struct hci_ev_user_confirmation_request { struct bdaddr_t bdaddr; }__attribute__ ((packed)); #define HCI_EV_SIMPLE_PAIRING_COMPLETE 0x36 struct hci_ev_simple_pairing_complete{ uint8 status; struct bdaddr_t bdaddr; }__attribute__ ((packed)); #define HCI_EV_LINK_SUPERV_TIMEOUT_CHANGED 0x38 #define HCI_LE_META_EVT 0x3E #define HCI_LE_EV_CONN_COMPLETE 0x01 #define HCI_LE_EV_ADV_REPORT 0x02 #define HCI_EV_SYNC_CONN_CHANGE 0x2D struct hci_ev_sync_conn_change { uint8 status; uint16 handle; uint8 tx_interval; uint8 retx_window; uint16 rx_pkt_length; uint16 tx_pkt_length; }__attribute__ ((packed)); #define HCI_EV_SNIFF_SUBRATING 0x2E struct hci_ev_sniff_subrating { uint8 status; uint16 handle; uint16 maximum_transmit_lantency; uint16 maximum_receive_lantency; uint16 minimum_remote_timeout; uint16 minimum_local_timeout; }__attribute__ ((packed)); #define HCI_EV_DEBUG 0xFF struct hci_ev_debug { uint16 debug_evt_code; uint8 param[1]; }__attribute__ ((packed)); struct get_buffer { /// length of buffer uint8_t length; /// data of 128 bytes length uint8_t data[128]; }; struct hci_ev_rd_mem_cmp_evt { ///Status uint8_t status; ///buffer structure to return struct get_buffer buf; }; /* vendor event */ #define HCI_EV_VENDOR_EVENT (0xFF) //sub event code #define HCI_DBG_TRACE_WARNING_EVT_CODE 0x01 #define HCI_SCO_SNIFFER_STATUS_EVT_CODE 0x02 #define HCI_ACL_SNIFFER_STATUS_EVT_CODE 0x03 #define HCI_TWS_EXCHANGE_CMP_EVT_CODE 0x04 #define HCI_NOTIFY_CURRENT_ADDR_EVT_CODE 0x05 #define HCI_NOTIFY_DATA_XFER_EVT_CODE 0x06 #define HCI_START_SWITCH_EVT_CODE 0x09 #define HCI_LL_MONITOR_EVT_CODE 0x0A #define HCI_DBG_LMP_MESSAGE_RECORD_EVT_SUBCODE 0x0B #define HCI_GET_TWS_SLAVE_MOBILE_RSSI_CODE 0x0C #endif /* __BTM_HCI_H__ */