/*************************************************************************************************/ /*! * \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 */