pinebuds/services/bt_if_enhanced/inc/hci_api.h
2022-08-15 17:20:27 +08:00

345 lines
15 KiB
C

/***************************************************************************
*
* 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 __HCI_API__H__
#define __HCI_API__H__
#include "bluetooth.h"
#include "stdbool.h"
#if defined(IBRT)
#include "me_api.h"
#endif
/*---------------------------------------------------------------------------
* btif_hci_handle_t type
*
*/
typedef uint16_t btif_hci_handle_t;
#define BTIF_ACTIVE_BROADCAST 0x4000
#define BTIF_PICONET_BROADCAST 0x8000
#define BTIF_INVALID_HCI_HANDLE 0xFFFF
#define BTIF_ACTIVE_BC_HANDLE (0x0F01 | ACTIVE_BROADCAST)
#define BTIF_PICONET_BC_HANDLE (0x0F00 | PICONET_BROADCAST)
#define BTIF_PBF_MASK 0x3000
#define BTIF_FIRST_NON_FLUSH_PKT 0x0000
#define BTIF_CONTINUING_PACKET 0x1000
#define BTIF_FIRST_FLUSHABLE_PKT 0x2000
#define BTIF_FIRST_PACKET 0x2000
#define BTIF_SCO_DATA_CORRECT 0x0000
#define BTIF_SCO_DATA_INVALID 0x1000
#define BTIF_SCO_DATA_NONE 0x2000
#define BTIF_SCO_DATA_PARTIAL 0x3000
/* End of btif_hci_handle_t */
/* Group: Link control commands */
#define BTIF_HCC_INQUIRY 0x0401
#define BTIF_HCC_INQUIRY_CANCEL 0x0402
#define BTIF_HCC_START_PERIODIC_INQ_MODE 0x0403
#define BTIF_HCC_EXIT_PERIODIC_INQ_MODE 0x0404
#define BTIF_HCC_CREATE_CONNECTION 0x0405
#define BTIF_HCC_DISCONNECT 0x0406
#define BTIF_HCC_ADD_SCO_CONNECTION 0x0407 /* Not in 1.2 */
#define BTIF_HCC_CREATE_CONNECTION_CANCEL 0x0408 /* 1.2 */
#define BTIF_HCC_ACCEPT_CON_REQ 0x0409
#define BTIF_HCC_REJECT_CON_REQ 0x040A
#define BTIF_HCC_LINK_KEY_REQ_REPL 0x040B
#define BTIF_HCC_LINK_KEY_REQ_NEG_REPL 0x040C
#define BTIF_HCC_PIN_CODE_REQ_REPL 0x040D
#define BTIF_HCC_PIN_CODE_REQ_NEG_REPL 0x040E
#define BTIF_HCC_CHNG_CONN_PACKET_TYPE 0x040F
#define BTIF_HCC_AUTH_REQ 0x0411
#define BTIF_HCC_SET_CONN_ENCRYPT 0x0413
#define BTIF_HCC_CHNG_CONN_LINK_KEY 0x0415
#define BTIF_HCC_MASTER_LINK_KEY 0x0417
#define BTIF_HCC_REM_NAME_REQ 0x0419
#define BTIF_HCC_REM_NAME_REQ_CANCEL 0x041A /* 1.2 */
#define BTIF_HCC_READ_REMOTE_FEATURES 0x041B
#define BTIF_HCC_READ_REMOTE_EXT_FEATURES 0x041C /* 1.2 */
#define BTIF_HCC_READ_REMOTE_VERSION 0x041D
#define BTIF_HCC_READ_CLOCK_OFFSET 0x041F
#define BTIF_HCC_READ_LMP_HANDLE 0x0420 /* 1.2 */
#define BTIF_HCC_EXCHANGE_FIXED_INFO 0x0421 /* 1.2, not in 2.1 */
#define BTIF_HCC_EXCHANGE_ALIAS_INFO 0x0422 /* 1.2, not in 2.1 */
#define BTIF_HCC_PRIVATE_PAIRING_REQ_REPL 0x0423 /* 1.2, not in 2.1 */
#define BTIF_HCC_PRIVATE_PAIRING_REQ_NEG_REPL 0x0424 /* 1.2, not in 2.1 */
#define BTIF_HCC_GENERATED_ALIAS 0x0425 /* 1.2, not in 2.1 */
#define BTIF_HCC_ALIAS_ADDRESS_REQ_REPL 0x0426 /* 1.2, not in 2.1 */
#define BTIF_HCC_ALIAS_ADDRESS_REQ_NEG_REPL 0x0427 /* 1.2, not in 2.1 */
#define BTIF_HCC_SETUP_SYNC_CONNECTION 0x0428 /* 1.2 */
#define BTIF_HCC_ACCEPT_SYNC_CON_REQ 0x0429 /* 1.2 */
#define BTIF_HCC_REJECT_SYNC_CON_REQ 0x042A /* 1.2 */
#define BTIF_HCC_IO_CAPABILITY_RESPONSE 0x042B /* 2.1 */
#define BTIF_HCC_USER_CONFIRM_REQ_REPL 0x042C /* 2.1 */
#define BTIF_HCC_USER_CONFIRM_REQ_NEG_REPL 0x042D /* 2.1 */
#define BTIF_HCC_USER_PASSKEY_REQ_REPL 0x042E /* 2.1 */
#define BTIF_HCC_USER_PASSKEY_REQ_NEG_REPL 0x042F /* 2.1 */
#define BTIF_HCC_REM_OOB_DATA_REQ_REPL 0x0430 /* 2.1 */
#define BTIF_HCC_REM_OOB_DATA_REQ_NEG_REPL 0x0433 /* 2.1 */
#define BTIF_HCC_IO_CAPABILITY_NEG_REPL 0x0434 /* 2.1 */
/* Group: Link policy commands */
#define BTIF_HCC_HOLD_MODE 0x0801
#define BTIF_HCC_SNIFF_MODE 0x0803
#define BTIF_HCC_EXIT_SNIFF_MODE 0x0804
#define BTIF_HCC_PARK_MODE 0x0805
#define BTIF_HCC_EXIT_PARK_MODE 0x0806
#define BTIF_HCC_QOS_SETUP 0x0807
#define BTIF_HCC_ROLE_DISCOVERY 0x0809
#define BTIF_HCC_SWITCH_ROLE 0x080B
#define BTIF_HCC_READ_LINK_POLICY 0x080C
#define BTIF_HCC_WRITE_LINK_POLICY 0x080D
#define BTIF_HCC_READ_DEFAULT_LINK_POLICY 0x080E /* 1.2 */
#define BTIF_HCC_WRITE_DEFAULT_LINK_POLICY 0x080F /* 1.2 */
#define BTIF_HCC_FLOW_SPECIFICATION 0x0810 /* 1.2 */
#define BTIF_HCC_SNIFF_SUBRATING 0x0811 /* 2.1 */
/* Group: Host controller and baseband commands */
#define BTIF_HCC_SET_EVENT_MASK 0x0C01
#define BTIF_HCC_RESET 0x0C03
#define BTIF_HCC_EVENT_FILTER 0x0C05
#define BTIF_HCC_FLUSH 0x0C08
#define BTIF_HCC_READ_PIN_TYPE 0x0C09
#define BTIF_HCC_WRITE_PIN_TYPE 0x0C0A
#define BTIF_HCC_CREATE_NEW_UNIT_KEY 0x0C0B
#define BTIF_HCC_READ_STORED_LINK_KEY 0x0C0D
#define BTIF_HCC_WRITE_STORED_LINK_KEY 0x0C11
#define BTIF_HCC_DEL_STORED_LINK_KEY 0x0C12
#if BTIF_BT_BEST_SYNC_CONFIG == BTIF_ENABLED
#define BTIF_HCC_WRITE_SYNC_CONFIG 0xFC51
#endif /* */
#define BTIF_HCC_CHNG_LOCAL_NAME 0x0C13
#define BTIF_HCC_READ_LOCAL_NAME 0x0C14
#define BTIF_HCC_READ_CONN_ACCEPT_TIMEOUT 0x0C15
#define BTIF_HCC_WRITE_CONN_ACCEPT_TIMEOUT 0x0C16
#define BTIF_HCC_READ_PAGE_TIMEOUT 0x0C17
#define BTIF_HCC_WRITE_PAGE_TIMEOUT 0x0C18
#define BTIF_HCC_READ_SCAN_ENABLE 0x0C19
#define BTIF_HCC_WRITE_SCAN_ENABLE 0x0C1A
#define BTIF_HCC_READ_PAGE_SCAN_ACTIVITY 0x0C1B
#define BTIF_HCC_WRITE_PAGE_SCAN_ACTIVITY 0x0C1C
#define BTIF_HCC_READ_INQ_SCAN_ACTIVITY 0x0C1D
#define BTIF_HCC_WRITE_INQ_SCAN_ACTIVITY 0x0C1E
#define BTIF_HCC_READ_AUTH_ENABLE 0x0C1F
#define BTIF_HCC_WRITE_AUTH_ENABLE 0x0C20
#define BTIF_HCC_READ_ENCRYPT_MODE 0x0C21 /* Not in 2.1 */
#define BTIF_HCC_WRITE_ENCRYPT_MODE 0x0C22 /* Not in 2.1 */
#define BTIF_HCC_READ_CLASS_OF_DEVICE 0x0C23
#define BTIF_HCC_WRITE_CLASS_OF_DEVICE 0x0C24
#define BTIF_HCC_READ_VOICE_SETTING 0x0C25
#define BTIF_HCC_WRITE_VOICE_SETTING 0x0C26
#define BTIF_HCC_READ_AUTO_FLUSH_TIMEOUT 0x0C27
#define BTIF_HCC_WRITE_AUTO_FLUSH_TIMEOUT 0x0C28
#define BTIF_HCC_READ_NUM_BC_RETRANSMIT 0x0C29
#define BTIF_HCC_WRITE_NUM_BC_RETRANSMIT 0x0C2A
#define BTIF_HCC_READ_HOLD_MODE_ACTIVITY 0x0C2B
#define BTIF_HCC_WRITE_HOLD_MODE_ACTIVITY 0x0C2C
#define BTIF_HCC_READ_XMIT_POWER_LEVEL 0x0C2D
#define BTIF_HCC_READ_SCO_FC_ENABLE 0x0C2E
#define BTIF_HCC_WRITE_SCO_FC_ENABLE 0x0C2F
#define BTIF_HCC_SET_CTRLR_TO_HOST_FLOW_CTRL 0x0C31
#define BTIF_HCC_HOST_BUFFER_SIZE 0x0C33
#define BTIF_HCC_HOST_NUM_COMPLETED_PACKETS 0x0C35
#define BTIF_HCC_READ_LINK_SUPERV_TIMEOUT 0x0C36
#define BTIF_HCC_WRITE_LINK_SUPERV_TIMEOUT 0x0C37
#define BTIF_HCC_READ_NUM_IAC 0x0C38
#define BTIF_HCC_READ_CURRENT_IAC_LAP 0x0C39
#define BTIF_HCC_WRITE_CURRENT_IAC_LAP 0x0C3A
#define BTIF_HCC_READ_PAGE_SCAN_PERIOD_MODE 0x0C3B /* Not in 2.1 */
#define BTIF_HCC_WRITE_PAGE_SCAN_PERIOD_MODE 0x0C3C /* Not in 2.1 */
#define BTIF_HCC_READ_PAGE_SCAN_MODE 0x0C3D /* Not in 1.2 */
#define BTIF_HCC_WRITE_PAGE_SCAN_MODE 0x0C3E /* Not in 1.2 */
#define BTIF_HCC_SET_AFH_HOST_CHAN_CLASS 0x0C3F /* 1.2 */
#define BTIF_HCC_READ_INQ_SCAN_TYPE 0x0C42 /* 1.2 */
#define BTIF_HCC_WRITE_INQ_SCAN_TYPE 0x0C43 /* 1.2 */
#define BTIF_HCC_READ_INQ_MODE 0x0C44 /* 1.2 */
#define BTIF_HCC_WRITE_INQ_MODE 0x0C45 /* 1.2 */
#define BTIF_HCC_READ_PAGE_SCAN_TYPE 0x0C46 /* 1.2 */
#define BTIF_HCC_WRITE_PAGE_SCAN_TYPE 0x0C47 /* 1.2 */
#define BTIF_HCC_READ_AFH_CHAN_ASSESS_MODE 0x0C48 /* 1.2 */
#define BTIF_HCC_WRITE_AFH_CHAN_ASSESS_MODE 0x0C49 /* 1.2 */
#define BTIF_HCC_READ_ANONYMITY_MODE 0x0C4A /* 1.2, not in 2.1 */
#define BTIF_HCC_WRITE_ANONYMITY_MODE 0x0C4B /* 1.2, not in 2.1 */
#define BTIF_HCC_READ_ALIAS_AUTH_ENABLE 0x0C4C /* 1.2, not in 2.1 */
#define BTIF_HCC_WRITE_ALIAS_AUTH_ENABLE 0x0C4D /* 1.2, not in 2.1 */
#define BTIF_HCC_READ_ANON_ADDR_CHNG_PARM 0x0C4E /* 1.2, not in 2.1 */
#define BTIF_HCC_WRITE_ANON_ADDR_CHNG_PARM 0x0C4F /* 1.2, not in 2.1 */
#define BTIF_HCC_RESET_FIXED_ADDR_COUNTER 0x0C50 /* 1.2, not in 2.1 */
#define BTIF_HCC_READ_EXTENDED_INQ_RESP 0x0C51 /* 2.1 */
#define BTIF_HCC_WRITE_EXTENDED_INQ_RESP 0x0C52 /* 2.1 */
#define BTIF_HCC_REFRESH_ENCRYPT_KEY 0x0C53 /* 2.1 */
#define BTIF_HCC_READ_SIMPLE_PAIRING_MODE 0x0C55 /* 2.1 */
#define BTIF_HCC_WRITE_SIMPLE_PAIRING_MODE 0x0C56 /* 2.1 */
#define BTIF_HCC_READ_LOCAL_OOB_DATA 0x0C57 /* 2.1 */
#define BTIF_HCC_READ_INQ_RESP_TRANS_PWR_LVL 0x0C58 /* 2.1 */
#define BTIF_HCC_WRITE_INQ_TRANS_PWR_LVL 0x0C59 /* 2.1 */
#define BTIF_HCC_READ_DEF_ERR_DATA_REPORTING 0x0C5A /* 2.1 */
#define BTIF_HCC_WRITE_DEF_ERR_DATA_REPORTING 0x0C5B /* 2.1 */
#define BTIF_HCC_ENHANCED_FLUSH 0x0C5F /* 2.1 */
#define BTIF_HCC_SEND_KEYPRESS_NOTIFY 0x0C60 /* 2.1 */
/* Represents an invalid Host Controller handle. */
#define BTIF_HCI_INVALID_HANDLE 0xFFFF
typedef uint8_t btif_hci_buf_flags_t;
#define BTIF_HCI_COMMAND_DATA_PACKET 0x01
#define BTIF_HCI_ACL_DATA_PACKET 0x02
#define BTIF_HCI_SCO_DATA_PACKET 0x03
#define BTIF_HCI_EVENT_PACKET 0x04
#define BTIF_HCI_BUFTYPE_COMMAND 0x01
#define BTIF_HCI_BUFTYPE_EVENT 0x02 /* Never sent as an HciPacket */
#define BTIF_HCI_BUFTYPE_ACL_DATA 0x04
#define BTIF_HCI_BUFTYPE_SCO_DATA 0x08
#define BTIF_HCI_BUFTYPE_INTERMEDIATE 0x10 /* Intermediate part of an L2CAP packet */
#define BTIF_HCI_BUFTYPE_L2CAP 0x20 /* L2CAP owns this buffer */
#ifdef __IAG_BLE_INCLUDE__
#define BTIF_HCI_BUFTYPE_BLE 0x40
#endif /* */
typedef struct {
list_entry_t node; /* Node element for linked list management. */
uint16_t len; /* Length of data in "buffer". */
uint8_t *buffer; /* Pointer to received data buffer. */
uint8_t flags; /* Flags to identify the type of packet.
* Actually uses the HciBufFlags type.
*/
#ifdef BTIF_XA_STATISTICS
uint32_t hci_timer;
#endif /* XA_STATISTICS == XA_ENABLED */
} btif_hci_buffer_t;
typedef struct {
uint8_t event; /* The type of HCI event received */
U8 len; /* Length of the event parameters */
U8 *parms; /* Event-specific parameters */
#ifdef __IAG_BLE_INCLUDE__
btif_hci_buffer_t *rx_buff; /* Received packet */
#endif
} hci_event_t;
typedef void (*btif_tws_data_received_callback_func)(uint8_t * data, uint16_t dataLen);
typedef void (*btif_bt_hci_dbg_ll_monitor_callback_func)(const unsigned char *buf,
unsigned int buf_len);
typedef void (*btif_bt_hci_dbg_trace_warning_evt_code_callback_func)(const unsigned char *buf,
unsigned int buf_len);
typedef btif_hci_buffer_t *btif_rx_buff_handle_t;
typedef void (*btif_tws_role_switch_cmp_callback_func) (uint16_t conhdl, uint8_t ret);
typedef void (*btif_bt_addr_exchanged_callback_func) (uint8_t * newBtAddr);
typedef void (*btif_hci_vendor_event_callback_func)(uint8_t* pbuf, uint32_t length);
#if defined(IBRT)
typedef bool (*btif_hci_sync_airmode_check_ind_func)(uint8_t status);
typedef void (*btif_ibrt_connect_ind_callback_func)(uint16_t conhdl,uint8_t ret);
typedef void (*btif_ibrt_disconnect_ind_callback_func)(uint16_t conhdl,uint8_t ret);
typedef void (*btif_ibrt_switch_cmp_callback_func)(uint16_t conhdl,uint8_t role);
typedef void (*btif_ibrt_env_init_cmp_callback_func)(uint8_t sniffer_role);
typedef void (*btif_ibrt_prase_data_callback_func)(btif_hci_buffer_t* hcibuffer,uint16_t conhdl);
typedef void (*bt_hci_acl_ecc_softbit_handler_func)(uint16_t*,uint16_t*, uint16_t, uint8_t*);
#endif
#ifdef __cplusplus
extern "C" {
#endif
bool btif_hci_Is_any_pending_hci_xfer(void);
void btif_HciBypassProcessReceivedDataExt(uint32_t(*ext_fn) (void));
void btif_hci_send_complete_packet_command_right_now(uint16_t handle, uint8_t num);
list_entry_t *btif_hci_get_rx_buffer_list(void);
void btif_hci_rxbuffer_free(btif_rx_buff_handle_t rxBuffHandle);
void btif_register_hci_ll_monitor_evt_code_callback(
btif_bt_hci_dbg_ll_monitor_callback_func func);
void btif_register_hci_dbg_trace_warning_evt_code_callback
(btif_bt_hci_dbg_trace_warning_evt_code_callback_func func);
unsigned short btif_hci_h4_receive_msg_generic(bool isSimulated, const uint8_t * buf,
uint32_t size);
void btif_hci_clean_host_num_of_completed_packet(uint16_t connHanlde);
bool btif_hci_restore_new_master_num_of_completed_packet(uint16_t connHanlde);
void btif_register_tws_role_switch_cmp_callback(btif_tws_role_switch_cmp_callback_func func);
void btif_register_bt_addr_exchanged_callback(btif_bt_addr_exchanged_callback_func func);
uint32_t btif_hci_current_rx_packet_complete(void);
uint32_t btif_hci_current_rx_aclfreelist_cnt(void);
uint32_t btif_hci_get_acl_buffers_num(void);
void *btif_hci_get_PktsCompleteTimerHandler(void);
int btif_hci_init(void);
void btif_register_vendor_event_callback(btif_hci_vendor_event_callback_func func);
uint8_t* btif_hci_peek_hci_tx_buf(uint8_t tx_type,uint16_t handle);
void btif_hci_ahead_hci_tx_buf(uint8_t* hci_buf);
#if defined(IBRT)
void btif_register_hci_sync_airmode_check_ind_callback(btif_hci_sync_airmode_check_ind_func func);
uint8_t btif_hci_disconnect_connection_direct(uint16_t conn_handle, uint8_t reason);
uint8_t btif_hci_tws_switch_direct(uint8_t op);
uint32_t btif_save_hci_ctx(uint8_t * ctx_buffer, uint16_t dev_id);
uint32_t btif_set_hci_ctx(uint8_t* ctx_buffer, uint16_t dev_id);
uint16_t btif_hci_get_con_hci_handle(uint8_t con_idx);
uint8_t btif_hci_get_con_conflags(uint8_t con_idx);
void btif_hci_register_tx_buf_tss_process_callback(btif_callback_ext3 cb);
#endif
#ifdef __cplusplus
}
#endif
#endif /*__HCI_API__H__*/