vos/ambiq-hal-sys/ambiq-sparkfun-sdk/third_party/exactle/ble-host/include/hci_api.h
2022-10-23 23:45:43 -07:00

2436 lines
102 KiB
C

/*************************************************************************************************/
/*!
* \file
*
* \brief HCI subsystem API.
*
* Copyright (c) 2009-2019 Arm Ltd.
*
* Copyright (c) 2019 Packetcraft, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*************************************************************************************************/
#ifndef HCI_API_H
#define HCI_API_H
#include "wsf_types.h"
#include "hci_defs.h"
#include "wsf_os.h"
#include "util/bda.h"
#ifdef __cplusplus
extern "C" {
#endif
/**************************************************************************************************
Macros
**************************************************************************************************/
/*! \addtogroup STACK_HCI_EVT_API
* \{ */
/** \name HCI Internal Event Codes
* Proprietary HCI event codes for handling HCI events in callbacks.
*/
/**@{*/
#define HCI_RESET_SEQ_CMPL_CBACK_EVT 0 /*!< \brief Reset sequence complete */
#define HCI_LE_CONN_CMPL_CBACK_EVT 1 /*!< \brief LE connection complete */
#define HCI_LE_ENHANCED_CONN_CMPL_CBACK_EVT 2 /*!< \brief LE enhanced connection complete */
#define HCI_DISCONNECT_CMPL_CBACK_EVT 3 /*!< \brief LE disconnect complete */
#define HCI_LE_CONN_UPDATE_CMPL_CBACK_EVT 4 /*!< \brief LE connection update complete */
#define HCI_LE_CREATE_CONN_CANCEL_CMD_CMPL_CBACK_EVT 5 /*!< \brief LE create connection cancel command complete */
#define HCI_LE_ADV_REPORT_CBACK_EVT 6 /*!< \brief LE advertising report */
#define HCI_READ_RSSI_CMD_CMPL_CBACK_EVT 7 /*!< \brief Read RSSI command complete */
#define HCI_LE_READ_CHAN_MAP_CMD_CMPL_CBACK_EVT 8 /*!< \brief LE Read channel map command complete */
#define HCI_READ_TX_PWR_LVL_CMD_CMPL_CBACK_EVT 9 /*!< \brief Read transmit power level command complete */
#define HCI_READ_REMOTE_VER_INFO_CMPL_CBACK_EVT 10 /*!< \brief Read remote version information complete */
#define HCI_LE_READ_REMOTE_FEAT_CMPL_CBACK_EVT 11 /*!< \brief LE read remote features complete */
#define HCI_LE_LTK_REQ_REPL_CMD_CMPL_CBACK_EVT 12 /*!< \brief LE LTK request reply command complete */
#define HCI_LE_LTK_REQ_NEG_REPL_CMD_CMPL_CBACK_EVT 13 /*!< \brief LE LTK request negative reply command complete */
#define HCI_ENC_KEY_REFRESH_CMPL_CBACK_EVT 14 /*!< \brief Encryption key refresh complete */
#define HCI_ENC_CHANGE_CBACK_EVT 15 /*!< \brief Encryption change */
#define HCI_LE_LTK_REQ_CBACK_EVT 16 /*!< \brief LE LTK request */
#define HCI_VENDOR_SPEC_CMD_STATUS_CBACK_EVT 17 /*!< \brief Vendor specific command status */
#define HCI_VENDOR_SPEC_CMD_CMPL_CBACK_EVT 18 /*!< \brief Vendor specific command complete */
#define HCI_VENDOR_SPEC_CBACK_EVT 19 /*!< \brief Vendor specific */
#define HCI_HW_ERROR_CBACK_EVT 20 /*!< \brief Hardware error */
#define HCI_LE_ADD_DEV_TO_RES_LIST_CMD_CMPL_CBACK_EVT 21 /*!< \brief LE add device to resolving list command complete */
#define HCI_LE_REM_DEV_FROM_RES_LIST_CMD_CMPL_CBACK_EVT 22 /*!< \brief LE remove device from resolving command complete */
#define HCI_LE_CLEAR_RES_LIST_CMD_CMPL_CBACK_EVT 23 /*!< \brief LE clear resolving list command complete */
#define HCI_LE_READ_PEER_RES_ADDR_CMD_CMPL_CBACK_EVT 24 /*!< \brief LE read peer resolving address command complete */
#define HCI_LE_READ_LOCAL_RES_ADDR_CMD_CMPL_CBACK_EVT 25 /*!< \brief LE read local resolving address command complete */
#define HCI_LE_SET_ADDR_RES_ENABLE_CMD_CMPL_CBACK_EVT 26 /*!< \brief LE set address resolving enable command complete */
#define HCI_LE_ENCRYPT_CMD_CMPL_CBACK_EVT 27 /*!< \brief LE encrypt command complete */
#define HCI_LE_RAND_CMD_CMPL_CBACK_EVT 28 /*!< \brief LE rand command complete */
#define HCI_LE_REM_CONN_PARAM_REP_CMD_CMPL_CBACK_EVT 29 /*!< \brief LE remote connection parameter request reply complete */
#define HCI_LE_REM_CONN_PARAM_NEG_REP_CMD_CMPL_CBACK_EVT 30 /*!< \brief LE remote connection parameter request negative reply complete */
#define HCI_LE_READ_DEF_DATA_LEN_CMD_CMPL_CBACK_EVT 31 /*!< \brief LE read suggested default data length command complete */
#define HCI_LE_WRITE_DEF_DATA_LEN_CMD_CMPL_CBACK_EVT 32 /*!< \brief LE write suggested default data length command complete */
#define HCI_LE_SET_DATA_LEN_CMD_CMPL_CBACK_EVT 33 /*!< \brief LE set data length command complete */
#define HCI_LE_READ_MAX_DATA_LEN_CMD_CMPL_CBACK_EVT 34 /*!< \brief LE read maximum data length command complete */
#define HCI_LE_REM_CONN_PARAM_REQ_CBACK_EVT 35 /*!< \brief LE remote connection parameter request */
#define HCI_LE_DATA_LEN_CHANGE_CBACK_EVT 36 /*!< \brief LE data length change */
#define HCI_LE_READ_LOCAL_P256_PUB_KEY_CMPL_CBACK_EVT 37 /*!< \brief LE read local P-256 public key */
#define HCI_LE_GENERATE_DHKEY_CMPL_CBACK_EVT 38 /*!< \brief LE generate DHKey complete */
#define HCI_WRITE_AUTH_PAYLOAD_TO_CMD_CMPL_CBACK_EVT 39 /*!< \brief Write authenticated payload timeout command complete */
#define HCI_AUTH_PAYLOAD_TO_EXPIRED_CBACK_EVT 40 /*!< \brief Authenticated payload timeout expired event */
#define HCI_LE_READ_PHY_CMD_CMPL_CBACK_EVT 41 /*!< \brief LE read phy command complete */
#define HCI_LE_SET_DEF_PHY_CMD_CMPL_CBACK_EVT 42 /*!< \brief LE set default phy command complete */
#define HCI_LE_PHY_UPDATE_CMPL_CBACK_EVT 43 /*!< \brief LE phy update complete */
#define HCI_LE_EXT_ADV_REPORT_CBACK_EVT 44 /*!< \brief LE extended advertising report */
#define HCI_LE_SCAN_TIMEOUT_CBACK_EVT 45 /*!< \brief LE scan timeout event */
#define HCI_LE_ADV_SET_TERM_CBACK_EVT 46 /*!< \brief LE advertising set terminated event */
#define HCI_LE_SCAN_REQ_RCVD_CBACK_EVT 47 /*!< \brief LE scan request received event */
#define HCI_LE_PER_ADV_SYNC_EST_CBACK_EVT 48 /*!< \brief LE periodic advertising sync established event */
#define HCI_LE_PER_ADV_REPORT_CBACK_EVT 49 /*!< \brief LE periodic advertising report event */
#define HCI_LE_PER_ADV_SYNC_LOST_CBACK_EVT 50 /*!< \brief LE periodic advertising synch lost event */
#define HCI_LE_CH_SEL_ALGO_CBACK_EVT 51 /*!< \brief LE channel selection algorithm event */
#define HCI_LE_SCAN_ENABLE_CMD_CMPL_CBACK_EVT 52 /*!< \brief LE scan enable command complete */
#define HCI_LE_ADV_ENABLE_CMD_CMPL_CBACK_EVT 53 /*!< \brief LE advertise enable command complete */
#define HCI_LE_EXT_SCAN_ENABLE_CMD_CMPL_CBACK_EVT 54 /*!< \brief LE extended scan enable command complete */
#define HCI_LE_EXT_ADV_ENABLE_CMD_CMPL_CBACK_EVT 55 /*!< \brief LE extended advertise enable command complete */
#define HCI_LE_PER_ADV_ENABLE_CMD_CMPL_CBACK_EVT 56 /*!< \brief LE periodic advertise enable command complete */
#define HCI_LE_SET_RAND_ADDR_CMD_CMPL_CBACK_EVT 57 /*!< \brief LE set random address command complete */
#define HCI_LE_PER_SYNC_TRSF_RCVD_CBACK_EVT 58 /*!< \brief LE periodic advertising sync transfer received event */
#define HCI_LE_PER_ADV_SYNC_TRSF_CMD_CMPL_CBACK_EVT 59 /*!< \brief LE periodic advertising sync transfer command complete */
#define HCI_LE_PER_ADV_SET_INFO_TRSF_CMD_CMPL_CBACK_EVT 60 /*!< \brief LE set periodic advertising set info transfer command complete */
#define HCI_LE_CONN_IQ_REPORT_CBACK_EVT 61 /*!< \brief LE connection IQ report event */
#define HCI_LE_CTE_REQ_FAILED_CBACK_EVT 62 /*!< \brief LE CTE request failed event */
#define HCI_LE_SET_CONN_CTE_RX_PARAMS_CMD_CMPL_CBACK_EVT 63 /*!< \brief LE set connection CTE receive parameters command complete */
#define HCI_LE_SET_CONN_CTE_TX_PARAMS_CMD_CMPL_CBACK_EVT 64 /*!< \brief LE set connection CTE transmit parameters command complete */
#define HCI_LE_CONN_CTE_REQ_ENABLE_CMD_CMPL_CBACK_EVT 65 /*!< \brief LE connection CTE request enable command complete */
#define HCI_LE_CONN_CTE_RSP_ENABLE_CMD_CMPL_CBACK_EVT 66 /*!< \brief LE connection CTE response enable command complete */
#define HCI_LE_READ_ANTENNA_INFO_CMD_CMPL_CBACK_EVT 67 /*!< \brief LE read antenna information command complete */
#define HCI_CIS_EST_CBACK_EVT 68 /*!< \brief CIS established event */
#define HCI_CIS_REQ_CBACK_EVT 69 /*!< \brief CIS request event */
#define HCI_REQ_PEER_SCA_CBACK_EVT 70 /*!< \brief Request peer SCA complete */
/**@}*/
/**************************************************************************************************
Data Types
**************************************************************************************************/
/*! \brief LE connection complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
uint8_t role; /*!< \brief Local connection role. */
uint8_t addrType; /*!< \brief Peer address type. */
bdAddr_t peerAddr; /*!< \brief Peer address. */
uint16_t connInterval; /*!< \brief Connection interval */
uint16_t connLatency; /*!< \brief Connection latency. */
uint16_t supTimeout; /*!< \brief Supervision timeout. */
uint8_t clockAccuracy; /*!< \brief Clock accuracy. */
/* \brief enhanced fields */
bdAddr_t localRpa; /*!< \brief Local RPA. */
bdAddr_t peerRpa; /*!< \brief Peer RPA. */
} hciLeConnCmplEvt_t;
/*! \brief Disconnect complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Disconnect complete status. */
uint16_t handle; /*!< \brief Connect handle. */
uint8_t reason; /*!< \brief Reason. */
} hciDisconnectCmplEvt_t;
/*! \brief LE connection update complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
uint16_t connInterval; /*!< \brief Connection interval. */
uint16_t connLatency; /*!< \brief Connection latency. */
uint16_t supTimeout; /*!< \brief Supervision timeout. */
} hciLeConnUpdateCmplEvt_t;
/*! \brief LE create connection cancel command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
} hciLeCreateConnCancelCmdCmplEvt_t;
/*! \brief LE advertising report event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t *pData; /*!< \brief advertising or scan response data. */
uint8_t len; /*!< \brief length of advertising or scan response data. */
int8_t rssi; /*!< \brief RSSI. */
uint8_t eventType; /*!< \brief Advertising event type. */
uint8_t addrType; /*!< \brief Address type. */
bdAddr_t addr; /*!< \brief Device address. */
/* \brief direct fields */
uint8_t directAddrType; /*!< \brief Direct advertising address type. */
bdAddr_t directAddr; /*!< \brief Direct advertising address. */
} hciLeAdvReportEvt_t;
/*! \brief LE extended advertising report */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t eventType; /*!< \brief Event type. */
uint8_t addrType; /*!< \brief Address type. */
bdAddr_t addr; /*!< \brief Address. */
uint8_t priPhy; /*!< \brief Primary PHY. */
uint8_t secPhy; /*!< \brief Secondary PHY. */
uint8_t advSid; /*!< \brief Advertising SID. */
int8_t txPower; /*!< \brief Tx Power. */
int8_t rssi; /*!< \brief RSSI. */
int16_t perAdvInter; /*!< \brief Periodic advertising interval. */
uint8_t directAddrType; /*!< \brief Directed address type. */
bdAddr_t directAddr; /*!< \brief Directed address. */
uint16_t len; /*!< \brief Data buffer length. */
uint8_t *pData; /*!< \brief Data buffer. */
} hciLeExtAdvReportEvt_t;
/*! \brief LE scan timeout */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
} hciLeScanTimeoutEvt_t;
/*! \brief LE advertising set terminated */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint8_t advHandle; /*!< \brief Advertising handle. */
uint16_t handle; /*!< \brief Connection handle. */
uint8_t numComplEvts; /*!< \brief Number of completed extended advertising events. */
} hciLeAdvSetTermEvt_t;
/*! \brief LE scan request received */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t advHandle; /*!< \brief Advertising handle. */
uint8_t scanAddrType; /*!< \brief Scanner address type. */
bdAddr_t scanAddr; /*!< \brief Scanner address. */
} hciLeScanReqRcvdEvt_t;
/*! \brief LE periodic advertising sync established */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t syncHandle; /*!< \brief Sync handle. */
uint8_t advSid; /*!< \brief Advertising SID. */
uint8_t advAddrType; /*!< \brief Advertiser address type. */
bdAddr_t advAddr; /*!< \brief Advertiser address. */
uint8_t advPhy; /*!< \brief Advertiser PHY. */
uint16_t perAdvInterval; /*!< \brief Periodic advertising interval. */
uint8_t clockAccuracy; /*!< \brief Advertiser clock accuracy. */
} hciLePerAdvSyncEstEvt_t;
/*! \brief LE periodic advertising report */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t syncHandle; /*!< \brief Sync handle. */
uint8_t txPower; /*!< \brief Tx power. */
uint8_t rssi; /*!< \brief RSSI. */
uint8_t unused; /*!< \brief Intended to be used in a future feature. */
uint8_t status; /*!< \brief Data status. */
uint16_t len; /*!< \brief Data buffer length. */
uint8_t *pData; /*!< \brief Data buffer. */
} hciLePerAdvReportEvt_t;
/*! \brief LE periodic advertising synch lost */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t syncHandle; /*!< \brief Sync handle. */
} hciLePerAdvSyncLostEvt_t;
/*! \brief LE periodic advertising sync transfer received */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t connHandle; /*!< \brief Connection handle. */
uint16_t serviceData; /*!< \brief Service data. */
uint16_t syncHandle; /*!< \brief Sync handle. */
uint8_t advSid; /*!< \brief Advertising SID. */
uint8_t advAddrType; /*!< \brief Advertiser address type. */
bdAddr_t advAddr; /*!< \brief Advertiser address. */
uint8_t advPhy; /*!< \brief Advertiser PHY. */
uint16_t perAdvInterval; /*!< \brief Periodic advertising interval. */
uint8_t clockAccuracy; /*!< \brief Advertiser clock accuracy. */
} HciLePerAdvSyncTrsfRcvdEvt_t;
/*! \brief LE channel selection algorithm */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t handle; /*!< \brief Connection handle. */
uint8_t chSelAlgo; /*!< \brief Channel selection algorithm */
} hciLeChSelAlgoEvt_t;
/*! \brief Read RSSI command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
int8_t rssi; /*!< \brief RSSI. */
} hciReadRssiCmdCmplEvt_t;
/*! \brief LE Read channel map command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
uint8_t chanMap[HCI_CHAN_MAP_LEN]; /*!< \brief channel map. */
} hciReadChanMapCmdCmplEvt_t;
/*! \brief Read transmit power level command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint8_t handle; /*!< \brief Connection handle. */
int8_t pwrLvl; /*!< \brief Tx power level. */
} hciReadTxPwrLvlCmdCmplEvt_t;
/*! \brief Read remote version information complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
uint8_t version; /*!< \brief Version. */
uint16_t mfrName; /*!< \brief Manufacturer name. */
uint16_t subversion; /*!< \brief Sub-version. */
} hciReadRemoteVerInfoCmplEvt_t;
/*! \brief LE read remote features complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
uint8_t features[HCI_FEAT_LEN]; /*!< \brief Remote features buffer. */
} hciLeReadRemoteFeatCmplEvt_t;
/*! \brief LE LTK request reply command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLeLtkReqReplCmdCmplEvt_t;
/*! \brief LE LTK request negative reply command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLeLtkReqNegReplCmdCmplEvt_t;
/*! \brief Encryption key refresh complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciEncKeyRefreshCmpl_t;
/*! \brief Encryption change event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
uint8_t enabled; /*!< \brief Encryption enabled flag. */
} hciEncChangeEvt_t;
/*! \brief LE LTK request event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t handle; /*!< \brief Connection handle. */
uint8_t randNum[HCI_RAND_LEN]; /*!< \brief LTK random number. */
uint16_t encDiversifier; /*!< \brief LTK encryption diversifier. */
} hciLeLtkReqEvt_t;
/*! \brief Vendor specific command status event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t opcode; /*!< \brief Opcode. */
} hciVendorSpecCmdStatusEvt_t;
/*! \brief Vendor specific command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t opcode; /*!< \brief Opcode. */
uint8_t param[1]; /*!< \brief Operation parameter. */
} hciVendorSpecCmdCmplEvt_t;
/*! \brief Vendor specific event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t param[1]; /*!< \brief Vendor specific event. */
} hciVendorSpecEvt_t;
/*! \brief Hardware error event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t code; /*!< \brief Error code. */
} hciHwErrorEvt_t;
/*! \brief LE encrypt command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint8_t data[HCI_ENCRYPT_DATA_LEN]; /*!< \brief Data. */
} hciLeEncryptCmdCmplEvt_t;
/*! \brief LE rand command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint8_t randNum[HCI_RAND_LEN]; /*!< \brief Random number buffer. */
} hciLeRandCmdCmplEvt_t;
/*! \brief LE remote connection parameter request reply command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLeRemConnParamRepEvt_t;
/*! \brief LE remote connection parameter request negative reply command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLeRemConnParamNegRepEvt_t;
/*! \brief LE read suggested default data len command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t suggestedMaxTxOctets; /*!< \brief Suggested maximum Tx octets. */
uint16_t suggestedMaxTxTime; /*!< \brief Suggested maximum Tx time. */
} hciLeReadDefDataLenEvt_t;
/*! \brief LE write suggested default data len command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
} hciLeWriteDefDataLenEvt_t;
/*! \brief LE set data len command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLeSetDataLenEvt_t;
/*! \brief LE read maximum data len command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t supportedMaxTxOctets; /*!< \brief Supported maximum Tx octets. */
uint16_t supportedMaxTxTime; /*!< \brief Supported maximum Tx time. */
uint16_t supportedMaxRxOctets; /*!< \brief Supported maximum Rx octets. */
uint16_t supportedMaxRxTime; /*!< \brief Supported maximum Rx time. */
} hciLeReadMaxDataLenEvt_t;
/*! \brief LE remote connetion parameter request event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t handle; /*!< \brief Connection handle. */
uint16_t intervalMin; /*!< \brief Interval minimum. */
uint16_t intervalMax; /*!< \brief Interval maximum. */
uint16_t latency; /*!< \brief Connection latency. */
uint16_t timeout; /*!< \brief Connection timeout. */
} hciLeRemConnParamReqEvt_t;
/*! \brief LE data length change event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t handle; /*!< \brief Connection handle. */
uint16_t maxTxOctets; /*!< \brief Maximum Tx octets. */
uint16_t maxTxTime; /*!< \brief Maximum Tx time. */
uint16_t maxRxOctets; /*!< \brief Maximum Rx octets. */
uint16_t maxRxTime; /*!< \brief Maximum Rx time. */
} hciLeDataLenChangeEvt_t;
/*! \brief LE local p256 ecc key command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint8_t key[HCI_P256_KEY_LEN]; /*!< \brief P-256 public keys. */
} hciLeP256CmplEvt_t;
/*! \brief LE generate DH key command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint8_t key[HCI_DH_KEY_LEN]; /*!< \brief Diffie-Hellman (Share Secret) key. */
} hciLeGenDhKeyEvt_t;
/*! \brief LE read peer resolving address command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint8_t peerRpa[BDA_ADDR_LEN]; /*!< \brief Peer RPA. */
} hciLeReadPeerResAddrCmdCmplEvt_t;
/*! \brief LE read local resolving address command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint8_t localRpa[BDA_ADDR_LEN]; /*!< \brief Local RPA. */
} hciLeReadLocalResAddrCmdCmplEvt_t;
/*! \brief LE set address resolving enable command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
} hciLeSetAddrResEnableCmdCmplEvt_t;
/*! \brief LE add device to resolving list command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
} hciLeAddDevToResListCmdCmplEvt_t;
/*! \brief LE remove device from resolving list command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
} hciLeRemDevFromResListCmdCmplEvt_t;
/*! \brief LE clear resolving list command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
} hciLeClearResListCmdCmplEvt_t;
/*! \brief Write authenticated payload to command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciWriteAuthPayloadToCmdCmplEvt_t;
/*! \brief Authenticated payload to expire event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t handle; /*!< \brief Connection handle. */
} hciAuthPayloadToExpiredEvt_t;
/*! \brief LE read PHY command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
uint8_t txPhy; /*!< \brief Tx PHY. */
uint8_t rxPhy; /*!< \brief Rx PHY. */
} hciLeReadPhyCmdCmplEvt_t;
/*! \brief LE set default PHY command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
} hciLeSetDefPhyCmdCmplEvt_t;
/*! \brief LE PHY update complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Handle. */
uint8_t txPhy; /*!< \brief Tx PHY. */
uint8_t rxPhy; /*!< \brief Rx PHY. */
} hciLePhyUpdateEvt_t;
/*! \brief LE periodic advertising sync transfer command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLePerAdvSyncTrsfCmdCmplEvt_t;
/*! \brief LE set periodic advertising set info transfer command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLePerAdvSetInfoTrsfCmdCmplEvt_t;
/*! \brief LE connection IQ report */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint16_t handle; /*!< \brief Connection handle. */
uint8_t rxPhy; /*!< \brief Rx Phy. */
uint8_t dataChIdx; /*!< \brief Data Channel Index. */
int16_t rssi; /*!< \brief RSSI. */
uint8_t rssiAntennaId; /*!< \brief RSSI Antenna ID. */
uint8_t cteType; /*!< \brief CTE Type. */
uint8_t slotDurations; /*!< \brief Slot Durations. */
uint8_t pktStatus; /*!< \brief Packet Status. */
uint16_t connEvtCnt; /*!< \brief Connection Event Counter. */
uint8_t sampleCnt; /*!< \brief Sample Count. */
int8_t *pISample; /*!< \brief List of I Samples. */
int8_t *pQSample; /*!< \brief List of Q Samples. */
} hciLeConnIQReportEvt_t;
/*! \brief LE CTE request failed event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLeCteReqFailedEvt_t;
/*! \brief LE set connection CTE receive parameters command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLeSetConnCteRxParamsCmdCmplEvt_t;
/*! \brief LE set connection CTE transmit parameters command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLeSetConnCteTxParamsCmdCmplEvt_t;
/*! \brief LE connection CTE request enable command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLeConnCteReqEnableCmdCmplEvt_t;
/*! \brief LE connection CTE response enable command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint16_t handle; /*!< \brief Connection handle. */
} hciLeConnCteRspEnableCmdCmplEvt_t;
/*! \brief LE read antenna information command complete event */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
uint8_t status; /*!< \brief Status. */
uint8_t switchSampleRates; /*!< \brief Supported Switching Sampling Rates. */
uint8_t numAntennae; /*!< \brief Number of Antennae. */
uint8_t switchPatternMaxLen; /*!< \brief Max Length of Switching Pattern. */
uint8_t cteMaxLen; /*!< \brief Max CTE Length. */
} hciLeReadAntennaInfoCmdCmplEvt_t;
/*! \brief Local version information */
typedef struct
{
uint8_t hciVersion; /*!< \brief HCI version. */
uint16_t hciRevision; /*!< \brief HCI revision. */
uint8_t lmpVersion; /*!< \brief LMP version. */
uint16_t manufacturerName; /*!< \brief Manufacturer name. */
uint16_t lmpSubversion; /*!< \brief LMP Sub-version. */
} hciLocalVerInfo_t;
/*! \brief Union of all event types */
typedef union
{
wsfMsgHdr_t hdr; /*!< \brief Event header. */
wsfMsgHdr_t resetSeqCmpl; /*!< \brief Reset sequence complete. */
hciLeConnCmplEvt_t leConnCmpl; /*!< \brief LE connection complete. */
hciDisconnectCmplEvt_t disconnectCmpl; /*!< \brief Disconnect complete. */
hciLeConnUpdateCmplEvt_t leConnUpdateCmpl; /*!< \brief LE connection update complete. */
hciLeCreateConnCancelCmdCmplEvt_t leCreateConnCancelCmdCmpl; /*!< \brief LE create connection cancel command complete. */
hciLeAdvReportEvt_t leAdvReport; /*!< \brief LE advertising report. */
hciReadRssiCmdCmplEvt_t readRssiCmdCmpl; /*!< \brief Read RSSI command complete. */
hciReadChanMapCmdCmplEvt_t readChanMapCmdCmpl; /*!< \brief Read channel map command complete. */
hciReadTxPwrLvlCmdCmplEvt_t readTxPwrLvlCmdCmpl; /*!< \brief Read Tx power level command complete. */
hciReadRemoteVerInfoCmplEvt_t readRemoteVerInfoCmpl; /*!< \brief Read remote version information complete. */
hciLeReadRemoteFeatCmplEvt_t leReadRemoteFeatCmpl; /*!< \brief LE read remote feature complete. */
hciLeLtkReqReplCmdCmplEvt_t leLtkReqReplCmdCmpl; /*!< \brief LE LTK request reply command complete. */
hciLeLtkReqNegReplCmdCmplEvt_t leLtkReqNegReplCmdCmpl; /*!< \brief LE LT request negative reply command complete. */
hciEncKeyRefreshCmpl_t encKeyRefreshCmpl; /*!< \brief Encryption key refresh complete. */
hciEncChangeEvt_t encChange; /*!< \brief Encryption change. */
hciLeLtkReqEvt_t leLtkReq; /*!< \brief LE LTK request. */
hciVendorSpecCmdStatusEvt_t vendorSpecCmdStatus; /*!< \brief Vendor specific command status. */
hciVendorSpecCmdCmplEvt_t vendorSpecCmdCmpl; /*!< \brief Vendor specific command complete. */
hciVendorSpecEvt_t vendorSpec; /*!< \brief Vendor specific. */
hciHwErrorEvt_t hwError; /*!< \brief Hardware error. */
hciLeEncryptCmdCmplEvt_t leEncryptCmdCmpl; /*!< \brief LE encrypt command complete. */
hciLeRandCmdCmplEvt_t leRandCmdCmpl; /*!< \brief LE random command complete. */
hciLeReadPeerResAddrCmdCmplEvt_t leReadPeerResAddrCmdCmpl; /*!< \brief LE read peer resolvable address command complete. */
hciLeReadLocalResAddrCmdCmplEvt_t leReadLocalResAddrCmdCmpl; /*!< \brief LE read local resolvable address command complete. */
hciLeSetAddrResEnableCmdCmplEvt_t leSetAddrResEnableCmdCmpl; /*!< \brief LE set address resolution enable command complete. */
hciLeAddDevToResListCmdCmplEvt_t leAddDevToResListCmdCmpl; /*!< \brief LE add device to resolving list command complete. */
hciLeRemDevFromResListCmdCmplEvt_t leRemDevFromResListCmdCmpl; /*!< \brief LE remove device from resolving list command complete. */
hciLeClearResListCmdCmplEvt_t leClearResListCmdCmpl; /*!< \brief LE clear resolving list command complete. */
hciLeRemConnParamRepEvt_t leRemConnParamRepCmdCmpl; /*!< \brief LE Remo Connection Parameter Reply Command Complete. */
hciLeRemConnParamNegRepEvt_t leRemConnParamNegRepCmdCmpl; /*!< \brief LE Remote Connection Parameter Negative Reply Command Complete. */
hciLeReadDefDataLenEvt_t leReadDefDataLenCmdCmpl; /*!< \brief LE read default data length command complete. */
hciLeWriteDefDataLenEvt_t leWriteDefDataLenCmdCmpl; /*!< \brief LE write default data length command complete. */
hciLeSetDataLenEvt_t leSetDataLenCmdCmpl; /*!< \brief LE set data length command complete. */
hciLeReadMaxDataLenEvt_t leReadMaxDataLenCmdCmpl; /*!< \brief LE read max data length command complete. */
hciLeRemConnParamReqEvt_t leRemConnParamReq; /*!< \brief LE remote connection parameter request. */
hciLeDataLenChangeEvt_t leDataLenChange; /*!< \brief LE data length change. */
hciLeP256CmplEvt_t leP256; /*!< \brief LE P-256 */
hciLeGenDhKeyEvt_t leGenDHKey; /*!< \brief LE generate Diffie-Hellman key. */
hciWriteAuthPayloadToCmdCmplEvt_t writeAuthPayloadToCmdCmpl; /*!< \brief Write authenticated payload to command complete. */
hciAuthPayloadToExpiredEvt_t authPayloadToExpired; /*!< \brief Authenticated payload to expired. */
hciLeReadPhyCmdCmplEvt_t leReadPhyCmdCmpl; /*!< \brief LE read PHY command complete. */
hciLeSetDefPhyCmdCmplEvt_t leSetDefPhyCmdCmpl; /*!< \brief LE set default PHY command complete. */
hciLePhyUpdateEvt_t lePhyUpdate; /*!< \brief LE PHY update. */
hciLeExtAdvReportEvt_t leExtAdvReport; /*!< \brief LE extended advertising report. */
hciLeScanTimeoutEvt_t leScanTimeout; /*!< \brief LE scan timeout. */
hciLeAdvSetTermEvt_t leAdvSetTerm; /*!< \brief LE advertising set terminated. */
hciLeScanReqRcvdEvt_t leScanReqRcvd; /*!< \brief LE scan request received. */
hciLePerAdvSyncEstEvt_t lePerAdvSyncEst; /*!< \brief LE periodic advertising synchronization established. */
hciLePerAdvReportEvt_t lePerAdvReport; /*!< \brief LE periodic advertising report. */
hciLePerAdvSyncLostEvt_t lePerAdvSyncLost; /*!< \brief LE periodic advertising synchronization lost. */
hciLeChSelAlgoEvt_t leChSelAlgo; /*!< \brief LE channel select algorithm. */
HciLePerAdvSyncTrsfRcvdEvt_t lePerAdvSyncTrsfRcvd; /*!< \brief LE periodic advertising sync transfer received. */
hciLePerAdvSyncTrsfCmdCmplEvt_t lePerAdvSyncTrsfCmdCmpl; /*!< \brief LE periodic advertising sync transfer command complete. */
hciLePerAdvSetInfoTrsfCmdCmplEvt_t lePerAdvSetInfoTrsfCmdCmpl; /*!< \brief LE set periodic advertising set info transfer command complete. */
hciLeConnIQReportEvt_t leConnIQReport; /*!< \brief LE connection IQ report. */
hciLeCteReqFailedEvt_t leCteReqFailed; /*!< \brief LE CTE request failed. */
hciLeSetConnCteRxParamsCmdCmplEvt_t leSetConnCteRxParamsCmdCmpl; /*!< \brief LE set connection CTE receive parameters command complete. */
hciLeSetConnCteTxParamsCmdCmplEvt_t leSetConnCteTxParamsCmdCmpl; /*!< \brief LE set connection CTE transmit parameters command complete. */
hciLeConnCteReqEnableCmdCmplEvt_t leConnCteReqEnableCmdCmpl; /*!< \brief LE connection CTE request enable command complete. */
hciLeConnCteRspEnableCmdCmplEvt_t leConnCteRspEnableCmdCmpl; /*!< \brief LE connection CTE response enable command complete. */
hciLeReadAntennaInfoCmdCmplEvt_t leReadAntennaInfoCmdCmpl; /*!< \brief LE read antenna information command complete. */
} hciEvt_t;
/*! \} */ /* STACK_HCI_EVT_API */
/*! \addtogroup STACK_HCI_CMD_API
* \{ */
/*! \brief Connection specification type */
typedef struct
{
uint16_t connIntervalMin; /*!< \brief Minimum connection interval. */
uint16_t connIntervalMax; /*!< \brief Maximum connection interval. */
uint16_t connLatency; /*!< \brief Connection latency. */
uint16_t supTimeout; /*!< \brief Supervision timeout. */
uint16_t minCeLen; /*!< \brief Minimum CE length. */
uint16_t maxCeLen; /*!< \brief Maximum CE length. */
} hciConnSpec_t;
/*! \brief Initiating parameters */
typedef struct
{
uint8_t filterPolicy; /*!< \brief Scan filter policy. */
uint8_t ownAddrType; /*!< \brief Address type used by this device. */
uint8_t peerAddrType; /*!< \brief Address type used for peer device. */
const uint8_t *pPeerAddr; /*!< \brief Address of peer device. */
uint8_t initPhys; /*!< \brief Initiating PHYs. */
} hciExtInitParam_t;
/*! \brief Initiating scan parameters */
typedef struct
{
uint16_t scanInterval; /*!< \brief Scan interval. */
uint16_t scanWindow; /*!< \brief Scan window. */
} hciExtInitScanParam_t;
/*! \brief Extended advertising parameters */
typedef struct
{
uint16_t advEventProp; /*!< \brief Advertising Event Properties. */
uint32_t priAdvInterMin; /*!< \brief Primary Advertising Interval Minimum. */
uint32_t priAdvInterMax; /*!< \brief Primary Advertising Interval Maximum. */
uint8_t priAdvChanMap; /*!< \brief Primary Advertising Channel Map. */
uint8_t ownAddrType; /*!< \brief Own Address Type. */
uint8_t peerAddrType; /*!< \brief Peer Address Type. */
uint8_t *pPeerAddr; /*!< \brief Peer Address. */
uint8_t advFiltPolicy; /*!< \brief Advertising Filter Policy. */
int8_t advTxPwr; /*!< \brief Advertising Tx Power. */
uint8_t priAdvPhy; /*!< \brief Primary Advertising PHY. */
uint8_t secAdvMaxSkip; /*!< \brief Secondary Advertising Maximum Skip. */
uint8_t secAdvPhy; /*!< \brief Secondary Advertising PHY. */
uint8_t advSetId; /*!< \brief Advertising set ID. */
uint8_t scanReqNotifEna; /*!< \brief Scan Request Notification Enable. */
} hciExtAdvParam_t;
/*! \brief Extended advertising enable parameters */
typedef struct
{
uint8_t advHandle; /*!< \brief Advertising handle. */
uint16_t duration; /*!< \brief Advertising duration in 10 ms units. */
uint8_t maxEaEvents; /*!< \brief Maximum number of extended advertising events. */
} hciExtAdvEnableParam_t;
/*! \brief Extended scanning parameters */
typedef struct
{
uint16_t scanInterval; /*!< \brief Scan interval. */
uint16_t scanWindow; /*!< \brief Scan window. */
uint8_t scanType; /*!< \brief Scan type. */
} hciExtScanParam_t;
/*! \} */ /* STACK_HCI_CMD_API */
/**************************************************************************************************
Callback Function Types
**************************************************************************************************/
/*! \addtogroup STACK_HCI_EVT_API
* \{ */
/*! \brief HCI event callback type.
*
* This callback function sends events from HCI to the stack.
*
* \param pEvent Pointer to HCI callback event structure.
*
* \return None.
*/
typedef void (*hciEvtCback_t)(hciEvt_t *pEvent);
/*! \brief HCI security callback type
*
* This callback function sends certain security events from HCI to the stack.
* The security events passed in this callback are the LE Rand Command Complete event and the
* LE Encrypt Command Complete event.
*
* \param pEvt Pointer to HCK callback event structure.
*
* \return None.
*/
typedef void (*hciSecCback_t)(hciEvt_t *pEvent);
/*! \} */ /* STACK_HCI_EVT_API */
/*! \addtogroup STACK_HCI_ACL_API
* \{ */
/*! \brief HCI ACL callback type
*
* This callback function sends a data from HCI to the stack.
*
* \param pData WSF buffer containing an ACL packet.
*
* \return None.
*/
typedef void (*hciAclCback_t)(uint8_t *pData);
/*! \brief HCI flow control callback type
*
* This callback function manages flow control in the TX path betrween the stack and HCI.
*
* \param connId Connection handle.
* \param flowDisabled TRUE if flow is disabled.
*
* \return None.
*/
typedef void (*hciFlowCback_t)(uint16_t handle, bool_t flowDisabled);
/*! \} */ /* STACK_HCI_ACL_API */
/**************************************************************************************************
Function Declarations
**************************************************************************************************/
/*! \addtogroup STACK_HCI_INIT_API
* \{ */
/** \name HCI Initialization, Registration, Reset
*
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Register a callback for HCI events.
*
* \param evtCback Callback function.
*
* \return None.
*/
/*************************************************************************************************/
void HciEvtRegister(hciEvtCback_t evtCback);
/*************************************************************************************************/
/*!
* \brief Register a callback for certain HCI security events.
*
* \param secCback Callback function.
*
* \return None.
*/
/*************************************************************************************************/
void HciSecRegister(hciSecCback_t secCback);
/*************************************************************************************************/
/*!
* \brief Register callbacks for the HCI data path.
*
* \param aclCback ACL data callback function.
* \param flowCback Flow control callback function.
*
* \return None.
*/
/*************************************************************************************************/
void HciAclRegister(hciAclCback_t aclCback, hciFlowCback_t flowCback);
/*************************************************************************************************/
/*!
* \brief Initiate an HCI reset sequence.
*
* \return None.
*/
/*************************************************************************************************/
void HciResetSequence(void);
/*************************************************************************************************/
/*!
* \brief Vendor-specific controller initialization function.
*
* \param param Vendor-specific parameter.
*
* \return None.
*/
/*************************************************************************************************/
void HciVsInit(uint8_t param);
/*************************************************************************************************/
/*!
* \brief HCI core initialization.
*
* \return None.
*/
/*************************************************************************************************/
void HciCoreInit(void);
/*************************************************************************************************/
/*!
* \brief WSF event handler for core HCI.
*
* \param event WSF event mask.
* \param pMsg WSF message.
*
* \return None.
*/
/*************************************************************************************************/
void HciCoreHandler(wsfEventMask_t event, wsfMsgHdr_t *pMsg);
/*************************************************************************************************/
/*!
* \brief Set the maximum reassembled RX ACL packet length. Minimum value is 27.
*
* \param len ACL packet length.
*
* \return None.
*/
/*************************************************************************************************/
void HciSetMaxRxAclLen(uint16_t len);
/*************************************************************************************************/
/*!
* \brief Set TX ACL queue high and low watermarks.
*
* \param queueHi Disable flow on a connection when this many ACL buffers are queued.
* \param queueLo Disable flow on a connection when this many ACL buffers are queued.
*
* \return None.
*/
/*************************************************************************************************/
void HciSetAclQueueWatermarks(uint8_t queueHi, uint8_t queueLo);
/*************************************************************************************************/
/*!
* \brief Set LE supported features configuration mask.
*
* \param feat Feature bit to set or clear
* \param flag TRUE to set feature bit and FALSE to clear it
*
* \return None.
*/
/*************************************************************************************************/
void HciSetLeSupFeat(uint32_t feat, bool_t flag);
/**@}*/
/*************************************************************************************************/
/*!
* \brief Vendor-specific controller AE initialization function.
*
* \param param Vendor-specific parameter.
*
* \return None.
*/
/*************************************************************************************************/
void HciVsAeInit(uint8_t param);
/*! \} */ /* STACK_HCI_INIT_API */
/*! \addtogroup STACK_HCI_OPT_API
* \{ */
/** \name HCI Optimization Interface Functions
* This is an optimized interface for certain HCI commands that simply read a
* value. The stack uses these functions rather than their corresponding
* functions in the command interface.
* These functions can only be called after the reset sequence has been completed.
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Return a pointer to the BD address of this device.
*
* \return Pointer to the BD address.
*/
/*************************************************************************************************/
uint8_t *HciGetBdAddr(void);
/*************************************************************************************************/
/*!
* \brief Return the white list size.
*
* \return White list size.
*/
/*************************************************************************************************/
uint8_t HciGetWhiteListSize(void);
/*************************************************************************************************/
/*!
* \brief Return the advertising transmit power.
*
* \return Advertising transmit power.
*/
/*************************************************************************************************/
int8_t HciGetAdvTxPwr(void);
/*************************************************************************************************/
/*!
* \brief Return the ACL buffer size supported by the controller.
*
* \return ACL buffer size.
*/
/*************************************************************************************************/
uint16_t HciGetBufSize(void);
/*************************************************************************************************/
/*!
* \brief Return the number of ACL buffers supported by the controller.
*
* \return Number of ACL buffers.
*/
/*************************************************************************************************/
uint8_t HciGetNumBufs(void);
/*************************************************************************************************/
/*!
* \brief Return the states supported by the controller.
*
* \return Pointer to the supported states array.
*/
/*************************************************************************************************/
uint8_t *HciGetSupStates(void);
/*************************************************************************************************/
/*!
* \brief Return the LE supported features supported by the controller.
*
* \return Supported features.
*/
/*************************************************************************************************/
uint32_t HciGetLeSupFeat(void);
/*************************************************************************************************/
/*!
* \brief Get the maximum reassembled RX ACL packet length.
*
* \return ACL packet length.
*/
/*************************************************************************************************/
uint16_t HciGetMaxRxAclLen(void);
/*************************************************************************************************/
/*!
* \brief Return the resolving list size.
*
* \return resolving list size.
*/
/*************************************************************************************************/
uint8_t HciGetResolvingListSize(void);
/*************************************************************************************************/
/*!
* \brief Whether LL Privacy is supported.
*
* \return TRUE if LL Privacy is supported. FALSE, otherwise.
*/
/*************************************************************************************************/
bool_t HciLlPrivacySupported(void);
/*************************************************************************************************/
/*!
* \brief Get the maximum advertisement (or scan response) data length supported by the Controller.
*
* \return Maximum advertisement data length.
*/
/*************************************************************************************************/
uint16_t HciGetMaxAdvDataLen(void);
/*************************************************************************************************/
/*!
* \brief Get the maximum number of advertising sets supported by the Controller.
*
* \return Maximum number of advertising sets.
*/
/*************************************************************************************************/
uint8_t HciGetNumSupAdvSets(void);
/*************************************************************************************************/
/*!
* \brief Whether LE Advertising Extensions is supported.
*
* \return TRUE if LE Advertising Extensions is supported. FALSE, otherwise.
*/
/*************************************************************************************************/
bool_t HciLeAdvExtSupported(void);
/*************************************************************************************************/
/*!
* \brief Return the periodic advertising list size.
*
* \return periodic advertising list size.
*/
/*************************************************************************************************/
uint8_t HciGetPerAdvListSize(void);
/*************************************************************************************************/
/*!
* \brief Return a pointer to the local version information.
*
* \return Pointer to the local version information.
*/
/*************************************************************************************************/
hciLocalVerInfo_t *HciGetLocalVerInfo(void);
/**@}*/
/*! \} */ /* STACK_HCI_OPT_API */
/*! \addtogroup STACK_HCI_ACL_API
* \{ */
/** \name HCI ACL Data Functions
* HCI ACL data interface
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Send ACL Data from the stack to HCI.
*
* \param pAclData WSF buffer containing an ACL packet.
*
* \return None.
*/
/*************************************************************************************************/
void HciSendAclData(uint8_t *pAclData);
/**@}*/
/*! \} */ /* STACK_HCI_ACL_API */
/*! \addtogroup STACK_HCI_CMD_API
* \{ */
/** \name HCI Command Interface Functions
* HCI commands
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief HCI disconnect command.
*
* \param handle Connection handle.
* \param reason Reason for disconnect.
*
* \return None.
*/
/*************************************************************************************************/
void HciDisconnectCmd(uint16_t handle, uint8_t reason);
/*************************************************************************************************/
/*!
* \brief HCI LE add device white list command.
*
* \param addrType Address type.
* \param pAddr Peer address.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeAddDevWhiteListCmd(uint8_t addrType, uint8_t *pAddr);
/*************************************************************************************************/
/*!
* \brief HCI LE clear white list command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeClearWhiteListCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI connection update command.
*
* \param handle Connection handle.
* \param pConnSpec Update connection parameters.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeConnUpdateCmd(uint16_t handle, hciConnSpec_t *pConnSpec);
/*************************************************************************************************/
/*!
* \brief HCI LE create connection command.
*
* \param scanInterval Scan interval.
* \param scanWindow Scan window.
* \param filterPolicy Filter policy.
* \param peerAddrType Peer address type.
* \param pPeerAddr Peer address.
* \param ownAddrType Own address type.
* \param pConnSpec Connecdtion parameters.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeCreateConnCmd(uint16_t scanInterval, uint16_t scanWindow, uint8_t filterPolicy,
uint8_t peerAddrType, uint8_t *pPeerAddr, uint8_t ownAddrType,
hciConnSpec_t *pConnSpec);
/*************************************************************************************************/
/*!
* \brief HCI LE create connection cancel command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeCreateConnCancelCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI LE encrypt command.
*
* \param pKey Encryption key.
* \param pData Data to encrypt.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeEncryptCmd(uint8_t *pKey, uint8_t *pData);
/*************************************************************************************************/
/*!
* \brief HCI LE long term key request negative reply command.
*
* \param handle Connection handle.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeLtkReqNegReplCmd(uint16_t handle);
/*************************************************************************************************/
/*!
* \brief HCI LE long term key request reply command.
*
* \param handle Connection handle.
* \param pKey LTK.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeLtkReqReplCmd(uint16_t handle, uint8_t *pKey);
/*************************************************************************************************/
/*!
* \brief HCI LE random command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeRandCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI LE read advertising TX power command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadAdvTXPowerCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI LE read buffer size command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadBufSizeCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI LE read channel map command.
*
* \param handle Connection handle.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadChanMapCmd(uint16_t handle);
/*************************************************************************************************/
/*!
* \brief HCI LE read local supported feautre command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadLocalSupFeatCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI LE read remote feature command.
*
* \param handle Connection handle.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadRemoteFeatCmd(uint16_t handle);
/*************************************************************************************************/
/*!
* \brief HCI LE read supported states command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadSupStatesCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI LE read white list size command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadWhiteListSizeCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI LE remove device white list command.
*
* \param addrType Address type.
* \param pAddr Peer address.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeRemoveDevWhiteListCmd(uint8_t addrType, uint8_t *pAddr);
/*************************************************************************************************/
/*!
* \brief HCI LE set advanced enable command.
*
* \param enable Enable.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetAdvEnableCmd(uint8_t enable);
/*************************************************************************************************/
/*!
* \brief HCI LE set advertising data command.
*
* \param len Length of advertising data.
* \param pData Advertising data.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetAdvDataCmd(uint8_t len, uint8_t *pData);
/*************************************************************************************************/
/*!
* \brief HCI LE set advertising parameters command.
*
* \param advIntervalMin Adveritsing minimum interval.
* \param advIntervalMax Advertising maximum interval.
* \param advType Advertising type.
* \param ownAddrType Own address type.
* \param peerAddrType Peer address type.
* \param pPeerAddr Peer address.
* \param advChanMap Advertising channel map.
* \param advFiltPolicy Advertising filter policy.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetAdvParamCmd(uint16_t advIntervalMin, uint16_t advIntervalMax, uint8_t advType,
uint8_t ownAddrType, uint8_t peerAddrType, uint8_t *pPeerAddr,
uint8_t advChanMap, uint8_t advFiltPolicy);
/*************************************************************************************************/
/*!
* \brief HCI LE set event mask command.
*
* \param pLeEventMask LE Event mask.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetEventMaskCmd(uint8_t *pLeEventMask);
/*************************************************************************************************/
/*!
* \brief HCI set host channel class command.
*
* \param pChanMap Channel map.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetHostChanClassCmd(uint8_t *pChanMap);
/*************************************************************************************************/
/*!
* \brief HCI LE set random address command.
*
* \param pAddr Randon address.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetRandAddrCmd(uint8_t *pAddr);
/*************************************************************************************************/
/*!
* \brief HCI LE set scan enable command.
*
* \param enable Enable.
* \param filterDup Filter duplicates.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetScanEnableCmd(uint8_t enable, uint8_t filterDup);
/*************************************************************************************************/
/*!
* \brief HCI set scan parameters command.
*
* \param scanType Scan type.
* \param scanInterval Scan interval.
* \param scanWindow Scan window.
* \param ownAddrType Own address type.
* \param scanFiltPolicy Scanning filter policy.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetScanParamCmd(uint8_t scanType, uint16_t scanInterval, uint16_t scanWindow,
uint8_t ownAddrType, uint8_t scanFiltPolicy);
/*************************************************************************************************/
/*!
* \brief HCI LE set scan response data.
*
* \param len Scan response data length.
* \param pData Scan response data.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetScanRespDataCmd(uint8_t len, uint8_t *pData);
/*************************************************************************************************/
/*!
* \brief HCI LE start encryption command.
*
* \param handle Connection handle.
* \param pRand Random number.
* \param diversifier Diversifier.
* \param pKey Encryption key.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeStartEncryptionCmd(uint16_t handle, uint8_t *pRand, uint16_t diversifier, uint8_t *pKey);
/*************************************************************************************************/
/*!
* \brief HCI read BD address command.
*
* \return None.
*/
/*************************************************************************************************/
void HciReadBdAddrCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI read buffer size command.
*
* \return None.
*/
/*************************************************************************************************/
void HciReadBufSizeCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI read local supported feature command.
*
* \return None.
*/
/*************************************************************************************************/
void HciReadLocalSupFeatCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI read local version info command.
*
* \return None.
*/
/*************************************************************************************************/
void HciReadLocalVerInfoCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI read remote version info command.
*
* \param handle Connection handle.
*
* \return None.
*/
/*************************************************************************************************/
void HciReadRemoteVerInfoCmd(uint16_t handle);
/*************************************************************************************************/
/*!
* \brief HCI read RSSI command.
*
* \param handle Connection handle.
*
* \return None.
*/
/*************************************************************************************************/
void HciReadRssiCmd(uint16_t handle);
/*************************************************************************************************/
/*!
* \brief HCI read Tx power level command.
*
* \param handle Connection handle.
* \param type Type.
*
* \return None.
*/
/*************************************************************************************************/
void HciReadTxPwrLvlCmd(uint16_t handle, uint8_t type);
/*************************************************************************************************/
/*!
* \brief HCI reset command.
*
* \return None.
*/
/*************************************************************************************************/
void HciResetCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI set event mask command.
*
* \param pEventMask Page 1 of the event mask.
*
* \return None.
*/
/*************************************************************************************************/
void HciSetEventMaskCmd(uint8_t *pEventMask);
/*************************************************************************************************/
/*!
* \brief HCI set event page 2 mask command.
*
* \param pEventMask Page 2 of the event mask.
* \return None.
*/
/*************************************************************************************************/
void HciSetEventMaskPage2Cmd(uint8_t *pEventMask);
/*************************************************************************************************/
/*!
* \brief HCI read authenticated payload timeout command.
*
* \param handle Connection handle.
*
* \return None.
*/
/*************************************************************************************************/
void HciReadAuthPayloadTimeout(uint16_t handle);
/*************************************************************************************************/
/*!
* \brief HCI write authenticated payload timeout command.
*
* \param handle Connection handle.
* \param timeout Timeout value.
*
* \return None.
*/
/*************************************************************************************************/
void HciWriteAuthPayloadTimeout(uint16_t handle, uint16_t timeout);
/*************************************************************************************************/
/*!
* \brief HCI add device to resolving list command.
*
* \param peerAddrType Peer identity address type.
* \param pPeerIdentityAddr Peer identity address.
* \param pPeerIrk Peer IRK.
* \param pLocalIrk Local IRK.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeAddDeviceToResolvingListCmd(uint8_t peerAddrType, const uint8_t *pPeerIdentityAddr,
const uint8_t *pPeerIrk, const uint8_t *pLocalIrk);
/*************************************************************************************************/
/*!
* \brief HCI remove device from resolving list command.
*
* \param peerAddrType Peer identity address type.
* \param pPeerIdentityAddr Peer identity address.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeRemoveDeviceFromResolvingList(uint8_t peerAddrType, const uint8_t *pPeerIdentityAddr);
/*************************************************************************************************/
/*!
* \brief HCI clear resolving list command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeClearResolvingList(void);
/*************************************************************************************************/
/*!
* \brief HCI read resolving list command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadResolvingListSize(void);
/*************************************************************************************************/
/*!
* \brief HCI read peer resolvable address command.
*
* \param addrType Peer identity address type.
* \param pIdentityAddr Peer identity address.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadPeerResolvableAddr(uint8_t addrType, const uint8_t *pIdentityAddr);
/*************************************************************************************************/
/*!
* \brief HCI read local resolvable address command.
*
* \param addrType Peer identity address type.
* \param pIdentityAddr Peer identity address.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadLocalResolvableAddr(uint8_t addrType, const uint8_t *pIdentityAddr);
/*************************************************************************************************/
/*!
* \brief HCI enable or disable address resolution command.
*
* \param enable Set to TRUE to enable address resolution or FALSE to disable address
* resolution.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetAddrResolutionEnable(uint8_t enable);
/*************************************************************************************************/
/*!
* \brief HCI set resolvable private address timeout command.
*
* \param rpaTimeout Timeout measured in seconds.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetResolvablePrivateAddrTimeout(uint16_t rpaTimeout);
/*************************************************************************************************/
/*!
* \brief HCI LE set privacy mode command.
*
* \param addrType Peer identity address type.
* \param pAddr Peer identity address.
* \param mode Privacy mode.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetPrivacyModeCmd(uint8_t addrType, uint8_t *pAddr, uint8_t mode);
/*************************************************************************************************/
/*!
* \brief HCI read PHY command.
*
* \param handle Connection handle.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadPhyCmd(uint16_t handle);
/*************************************************************************************************/
/*!
* \brief HCI set default PHY command.
*
* \param allPhys All PHYs.
* \param txPhys Tx PHYs.
* \param rxPhys Rx PHYs.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetDefaultPhyCmd(uint8_t allPhys, uint8_t txPhys, uint8_t rxPhys);
/*************************************************************************************************/
/*!
* \brief HCI set PHY command.
*
* \param handle Connection handle.
* \param allPhys All PHYs.
* \param txPhys Tx PHYs.
* \param rxPhys Rx PHYs.
* \param phyOptions PHY options.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetPhyCmd(uint16_t handle, uint8_t allPhys, uint8_t txPhys, uint8_t rxPhys, uint16_t phyOptions);
/*************************************************************************************************/
/*!
* \brief HCI vencor specific command.
*
* \param opcode Opcode.
* \param len Length of pData.
* \param pData Command data.
*
* \return None.
*/
/*************************************************************************************************/
void HciVendorSpecificCmd(uint16_t opcode, uint8_t len, uint8_t *pData);
/*************************************************************************************************/
/*!
* \brief HCI Remote Connection Parameter Request Reply.
*
* \param handle Connection handle.
* \param intervalMin Interval minimum.
* \param intervalMax Interval maximum.
* \param latency Connection latency.
* \param timeout Connection timeout.
* \param minCeLen Minimum connection event length.
* \param maxCeLen Maximum connection event length.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeRemoteConnParamReqReply(uint16_t handle, uint16_t intervalMin, uint16_t intervalMax, uint16_t latency,
uint16_t timeout, uint16_t minCeLen, uint16_t maxCeLen);
/*************************************************************************************************/
/*!
* \brief HCI Remote Connection Parameter Request Negative Reply.
*
* \param handle Connection handle.
* \param reason Negative reply reason.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeRemoteConnParamReqNegReply(uint16_t handle, uint8_t reason);
/*************************************************************************************************/
/*!
* \brief HCI LE Set Data Length.
*
* \param handle Connection handle.
* \param txOctets Tx octets.
* \param txTime Tx time.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetDataLen(uint16_t handle, uint16_t txOctets, uint16_t txTime);
/*************************************************************************************************/
/*!
* \brief HCI LE Read Default Data Length.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadDefDataLen(void);
/*************************************************************************************************/
/*!
* \brief HCI LE Write Default Data Length.
*
* \param suggestedMaxTxOctets Suggested maximum Tx octets.
* \param suggestedMaxTxTime Suggested maximum Tx time.
*
*
* \return None.
*/
/*************************************************************************************************/
void HciLeWriteDefDataLen(uint16_t suggestedMaxTxOctets, uint16_t suggestedMaxTxTime);
/*************************************************************************************************/
/*!
* \brief HCI LE Read Local P-256 Public Key.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadLocalP256PubKey(void);
/*************************************************************************************************/
/*!
* \brief HCI LE Generate DH Key.
*
* \param pPubKeyX Public key X-coordinate.
* \param pPubKeyY Public key Y-coordinate.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeGenerateDHKey(uint8_t *pPubKeyX, uint8_t *pPubKeyY);
/*************************************************************************************************/
/*!
* \brief HCI LE Generate DH Key Version 2.
*
* \param pPubKeyX Public key X-coordinate.
* \param pPubKeyY Public key Y-coordinate.
* \param keyType Key type.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeGenerateDHKeyV2(uint8_t *pPubKeyX, uint8_t *pPubKeyY, uint8_t keyType);
/*************************************************************************************************/
/*!
* \brief HCI LE Read Maximum Data Length.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadMaxDataLen(void);
/*************************************************************************************************/
/*!
* \brief HCI write authenticated payload timeout command.
*
* \param handle Connection handle.
* \param timeout Timeout value.
*
* \return None.
*/
/*************************************************************************************************/
void HciWriteAuthPayloadTimeout(uint16_t handle, uint16_t timeout);
/*************************************************************************************************/
/*!
* \brief HCI LE read transmit power command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadTxPower(void);
/*************************************************************************************************/
/*!
* \brief HCI LE read RF path compensation command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadRfPathComp(void);
/*************************************************************************************************/
/*!
* \brief HCI LE write RF path compensation command.
*
* \param txPathComp RF transmit path compensation value.
* \param rxPathComp RF receive path compensation value.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeWriteRfPathComp(int16_t txPathComp, int16_t rxPathComp);
/**@}*/
/** \name HCI AE Advertiser Interface
* HCI Advertising Extension functions used by the Advertiser role.
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief HCI LE set advertising set random device address command.
*
* \param advHandle Advertising handle.
* \param pAddr Random device address.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetAdvSetRandAddrCmd(uint8_t advHandle, const uint8_t *pAddr);
/*************************************************************************************************/
/*!
* \brief HCI LE set extended advertising parameters command.
*
* \param advHandle Advertising handle.
* \param pExtAdvParam Extended advertising parameters.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetExtAdvParamCmd(uint8_t advHandle, hciExtAdvParam_t *pExtAdvParam);
/*************************************************************************************************/
/*!
* \brief HCI LE set extended advertising data command.
*
* \param advHandle Advertising handle.
* \param op Operation.
* \param fragPref Fragment preference.
* \param len Data buffer length.
* \param pData Advertising data buffer.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetExtAdvDataCmd(uint8_t advHandle, uint8_t op, uint8_t fragPref, uint8_t len,
const uint8_t *pData);
/*************************************************************************************************/
/*!
* \brief HCI LE set extended scan response data command.
*
* \param advHandle Advertising handle.
* \param op Operation.
* \param fragPref Fragment preference.
* \param len Data buffer length.
* \param pData Scan response data buffer.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetExtScanRespDataCmd(uint8_t advHandle, uint8_t op, uint8_t fragPref, uint8_t len,
const uint8_t *pData);
/*************************************************************************************************/
/*!
* \brief HCI LE set extended advertising enable command.
*
* \param enable Set to TRUE to enable advertising, FALSE to disable advertising.
* \param numSets Number of advertising sets.
* \param pEnableParam Advertising enable parameter array.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetExtAdvEnableCmd(uint8_t enable, uint8_t numSets, hciExtAdvEnableParam_t *pEnableParam);
/*************************************************************************************************/
/*!
* \brief HCI LE read maximum advertising data length command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadMaxAdvDataLen(void);
/*************************************************************************************************/
/*!
* \brief HCI LE read number of supported advertising sets command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadNumSupAdvSets(void);
/*************************************************************************************************/
/*!
* \brief HCI LE remove advertising set command.
*
* \param advHandle Advertising handle.
*
* \return Status error code.
*/
/*************************************************************************************************/
void HciLeRemoveAdvSet(uint8_t advHandle);
/*************************************************************************************************/
/*!
* \brief HCI LE clear advertising sets command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeClearAdvSets(void);
/*************************************************************************************************/
/*!
* \brief HCI LE set periodic advertising parameters command.
*
* \param advHandle Advertising handle.
* \param advIntervalMin Periodic advertising interval minimum.
* \param advIntervalMax Periodic advertising interval maximum.
* \param advProps Periodic advertising properties.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetPerAdvParamCmd(uint8_t advHandle, uint16_t advIntervalMin, uint16_t advIntervalMax,
uint16_t advProps);
/*************************************************************************************************/
/*!
* \brief HCI LE set periodic advertising data command.
*
* \param advHandle Advertising handle.
* \param op Operation.
* \param len Data buffer length.
* \param pData Advertising data buffer.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetPerAdvDataCmd(uint8_t advHandle, uint8_t op, uint8_t len, const uint8_t *pData);
/*************************************************************************************************/
/*!
* \brief HCI LE set periodic advertising enable command.
*
* \param enable Set to TRUE to enable advertising, FALSE to disable advertising.
* \param advHandle Advertising handle.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetPerAdvEnableCmd(uint8_t enable, uint8_t advHandle);
/**@}*/
/** \name HCI AE Scanner Interface
* HCI Advertising Extension functions used in the Scanner role.
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief HCI LE set extended scanning parameters command.
*
* \param ownAddrType Address type used by this device.
* \param scanFiltPolicy Scan filter policy.
* \param scanPhys Scanning PHYs.
* \param pScanParam Scanning parameter array.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetExtScanParamCmd(uint8_t ownAddrType, uint8_t scanFiltPolicy, uint8_t scanPhys,
hciExtScanParam_t *pScanParam);
/*************************************************************************************************/
/*!
* \brief HCI LE extended scan enable command.
*
* \param enable Set to TRUE to enable scanning, FALSE to disable scanning.
* \param filterDup Set to TRUE to filter duplicates.
* \param duration Duration.
* \param period Period.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeExtScanEnableCmd(uint8_t enable, uint8_t filterDup, uint16_t duration, uint16_t period);
/*************************************************************************************************/
/*!
* \brief HCI LE extended create connection command.
*
* \param pInitParam Initiating parameters.
* \param pScanParam Initiating scan parameters.
* \param pConnSpec Connection specification.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeExtCreateConnCmd(hciExtInitParam_t *pInitParam, hciExtInitScanParam_t *pScanParam,
hciConnSpec_t *pConnSpec);
/*************************************************************************************************/
/*!
* \brief HCI LE periodic advertising create sync command.
*
* \param options options.
* \param advSid Advertising SID.
* \param advAddrType Advertiser address type.
* \param pAdvAddr Advertiser address.
* \param skip Number of periodic advertising packets that can be skipped after
* successful receive.
* \param syncTimeout Synchronization timeout.
* \param unused Reserved for future use (must be zero).
*
* \return None.
*/
/*************************************************************************************************/
void HciLePerAdvCreateSyncCmd(uint8_t options, uint8_t advSid, uint8_t advAddrType,
uint8_t *pAdvAddr, uint16_t skip, uint16_t syncTimeout, uint8_t unused);
/*************************************************************************************************/
/*!
* \brief HCI LE periodic advertising create sync cancel command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLePerAdvCreateSyncCancelCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI LE periodic advertising terminate sync command.
*
* \param syncHandle Sync handle.
*
* \return None.
*/
/*************************************************************************************************/
void HciLePerAdvTerminateSyncCmd(uint16_t syncHandle);
/*************************************************************************************************/
/*!
* \brief HCI LE add device to periodic advertiser list command.
*
* \param advAddrType Advertiser address type.
* \param pAdvAddr Advertiser address.
* \param advSid Advertising SID.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeAddDeviceToPerAdvListCmd(uint8_t advAddrType, uint8_t *pAdvAddr, uint8_t advSid);
/*************************************************************************************************/
/*!
* \brief HCI LE remove device from periodic advertiser list command.
*
* \param advAddrType Advertiser address type.
* \param pAdvAddr Advertiser address.
* \param advSid Advertising SID.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeRemoveDeviceFromPerAdvListCmd(uint8_t advAddrType, uint8_t *pAdvAddr, uint8_t advSid);
/*************************************************************************************************/
/*!
* \brief HCI LE clear periodic advertiser list command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeClearPerAdvListCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI LE read periodic advertiser size command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadPerAdvListSizeCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI LE set periodic advertising receive enable command.
*
* \param syncHandle Periodic sync handle.
* \param enable TRUE to enable reports, FALSE to disable reports.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetPerAdvRcvEnableCmd(uint16_t syncHandle, uint8_t enable);
/*************************************************************************************************/
/*!
* \brief HCI LE periodic advertising sync transfer command.
*
* \param connHandle Connection handle.
* \param serviceData Service data provided by the host.
* \param syncHandle Periodic sync handle.
*
* \return None.
*/
/*************************************************************************************************/
void HciLePerAdvSyncTrsfCmd(uint16_t connHandle, uint16_t serviceData, uint16_t syncHandle);
/*************************************************************************************************/
/*!
* \brief HCI LE set periodic advertising set info transfer command.
*
* \param connHandle Connection handle.
* \param serviceData Service data provided by the host.
* \param advHandle Handle to identify an advertising set.
*
* \return None.
*/
/*************************************************************************************************/
void HciLePerAdvSetInfoTrsfCmd(uint16_t connHandle, uint16_t serviceData, uint8_t advHandle);
/*************************************************************************************************/
/*!
* \brief HCI LE set periodic advertising sync transfer parameters command.
*
* \param connHandle Connection handle.
* \param mode Periodic sync advertising sync transfer mode.
* \param skip The number of periodic advertising packets that can be skipped after
* a successful receive.
* \param syncTimeout Synchronization timeout for the periodic advertising.
* \param cteType Constant tone extension type(Used in AoD/AoA).
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetPerAdvSyncTrsfParamsCmd(uint16_t connHandle, uint8_t mode, uint16_t skip,
uint16_t syncTimeout, uint8_t cteType);
/*************************************************************************************************/
/*!
* \brief HCI LE set default periodic advertising sync transfer parameters command.
*
* \param mode Periodic sync advertising sync transfer mode.
* \param skip The number of periodic advertising packets that can be skipped after
* a successful receive.
* \param syncTimeout Synchronization timeout for the periodic advertising.
* \param cteType Constant tone extension type(Used in AoD/AoA).
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetDefaultPerAdvSyncTrsfParamsCmd(uint8_t mode, uint16_t skip, uint16_t syncTimeout,
uint8_t cteType);
/*************************************************************************************************/
/*!
* \brief HCI LE set connection CTE receive parameters command.
*
* \param connHandle Connection handle.
* \param samplingEnable TRUE to enable Connection IQ sampling, FALSE to disable it.
* \param slotDurations Switching and sampling slot durations to be used while receiving CTE.
* \param switchPatternLen Number of Antenna IDs in switching pattern.
* \param pAntennaIDs List of Antenna IDs in switching pattern.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetConnCteRxParamsCmd(uint16_t connHandle, uint8_t samplingEnable, uint8_t slotDurations,
uint8_t switchPatternLen, uint8_t *pAntennaIDs);
/*************************************************************************************************/
/*!
* \brief HCI LE set connection CTE transmit parameters command.
*
* \param connHandle Connection handle.
* \param cteTypeBits Permitted CTE type bits used for transmitting CTEs requested by peer.
* \param switchPatternLen Number of Antenna IDs in switching pattern.
* \param pAntennaIDs List of Antenna IDs in switching pattern.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeSetConnCteTxParamsCmd(uint16_t connHandle, uint8_t cteTypeBits, uint8_t switchPatternLen,
uint8_t *pAntennaIDs);
/*************************************************************************************************/
/*!
* \brief HCI LE connection CTE request enable command.
*
* \param connHandle Connection handle.
* \param enable TRUE to enable CTE request for connection, FALSE to disable it.
* \param cteReqInt CTE request interval.
* \param reqCteLen Minimum length of CTE being requested in 8 us units.
* \param reqCteType Requested CTE type.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeConnCteReqEnableCmd(uint16_t connHandle, uint8_t enable, uint16_t cteReqInt,
uint8_t reqCteLen, uint8_t reqCteType);
/*************************************************************************************************/
/*!
* \brief HCI LE connection CTE response enable command.
*
* \param connHandle Connection handle.
* \param enable TRUE to enable CTE response for connection, FALSE to disable it.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeConnCteRspEnableCmd(uint16_t connHandle, uint8_t enable);
/*************************************************************************************************/
/*!
* \brief HCI LE read antenna information command.
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReadAntennaInfoCmd(void);
/**@}*/
/*************************************************************************************************/
/*!
* \brief HCI LE Receiver Test command.
*
* \param RX_Channel radio channel
*
* \return None.
*/
/*************************************************************************************************/
void HciLeReceiverTestCmd(uint8_t RX_Channel);
/*************************************************************************************************/
/*!
* \brief HCI LE Transmitter Test command.
*
* \param TX_Channel radio channel to transmit
* \param len_of_test_data the length of data to transmit
* \param packet_payload the payload type to transmit
*
* \return None.
*/
/*************************************************************************************************/
void HciLeTransmitterTestCmd(uint8_t TX_Channel, uint8_t len_of_test_data, uint8_t packet_payload);
/*************************************************************************************************/
/*!
* \brief HCI LE Test End command.
*
* \param None
*
* \return None.
*/
/*************************************************************************************************/
void HciLeTestEndCmd(void);
/*************************************************************************************************/
/*!
* \brief HCI Vendor specific command.
*
* \param opcode operation code of HCI vendor specific command
* \param len the length of parameter associated with the command
* \param pData the parameter for the command
*
* \return None.
*/
/*************************************************************************************************/
void HciVendorSpecificCmd(uint16_t opcode, uint8_t len, uint8_t *pData);
/*! \} */ /* STACK_HCI_CMD_API */
#ifdef __cplusplus
};
#endif
#endif /* HCI_API_H */