#ifndef CO_HCI_H_ #define CO_HCI_H_ /** **************************************************************************************** * @addtogroup COMMON Common SW Block * @{ **************************************************************************************** */ /* * INCLUDE FILES **************************************************************************************** */ #include // standard boolean definitions #include // standard definitions #include // standard integer definitions #include "rwip_config.h" // IP configuration #include "compiler.h" // compiler definitions #include "hci_api.h" /* * DEFINES **************************************************************************************** */ /******************************************************************************************/ /* ------------------------- H4TL DEFINITIONS Part IV.A -----------------------------*/ /******************************************************************************************/ ///HCI Transport Header length - change if different transport #define HCI_TRANSPORT_HDR_LEN 0x01 ///UART header: command message type #define HCI_CMD_MSG_TYPE 0x01 ///UART header: ACL data message type #define HCI_ACL_MSG_TYPE 0x02 ///UART header: Synchronous data message type #define HCI_SYNC_MSG_TYPE 0x03 ///UART header: event message type #define HCI_EVT_MSG_TYPE 0x04 ///UART header: event message type #define HCI_TCI_MSG_TYPE 0xFF /******************************************************************************************/ /* ------------------------- HCI DEFINITIONS Part II.E -----------------------------*/ /******************************************************************************************/ ///HCI Command Opcode byte length #define HCI_CMD_OPCODE_LEN (0x02) ///HCI Event code byte length #define HCI_EVT_CODE_LEN (0x01) ///HCI Command/Event parameter length field byte length #define HCI_CMDEVT_PARLEN_LEN (0x01) ///HCI Command header length #define HCI_CMD_HDR_LEN (HCI_CMD_OPCODE_LEN + HCI_CMDEVT_PARLEN_LEN) ///HCI Event header length #define HCI_EVT_HDR_LEN (HCI_EVT_CODE_LEN + HCI_CMDEVT_PARLEN_LEN) /// HCI ACL header: handle and flags decoding enum hci_acl_hdr_fields { /// bits[00:11]: Connection handle HCI_ACL_HDR_HDL_LSB = (0), HCI_ACL_HDR_HDL_MASK = (0x0FFF), /// bits[12:13]: Packet boundary flag HCI_ACL_HDR_PB_FLAG_LSB = (12), HCI_ACL_HDR_PB_FLAG_MASK = (0x3000), /// bits[14:15]: Broadcast flag HCI_ACL_HDR_BC_FLAG_LSB = (14), HCI_ACL_HDR_BC_FLAG_MASK = (0xC000), /// Packet boundary and Broadcast flags HCI_ACL_HDR_DATA_FLAG_LSB = (12), HCI_ACL_HDR_DATA_FLAG_MASK = (0xF000), }; #define HCI_ACL_HDR_HDL_FLAGS_POS (0) #define HCI_ACL_HDR_HDL_FLAGS_LEN (2) /// HCI ACL header: data length field length #define HCI_ACL_HDR_DATA_LEN_POS (HCI_ACL_HDR_HDL_FLAGS_LEN) #define HCI_ACL_HDR_DATA_LEN_LEN (2) ///HCI ACL data packet header length #define HCI_ACL_HDR_LEN (HCI_ACL_HDR_HDL_FLAGS_LEN + HCI_ACL_HDR_DATA_LEN_LEN) /// HCI Synchronous header: handle and flags decoding #define HCI_SYNC_HDR_HDL_FLAGS_POS (0) #define HCI_SYNC_HDR_HDL_FLAGS_LEN (2) #define HCI_SYNC_HDR_HDL_POS (0) #define HCI_SYNC_HDR_HDL_MASK (0x0FFF) #define HCI_SYNC_HDR_PSF_FLAG_POS (12) #define HCI_SYNC_HDR_PSF_FLAG_MASK (0x3000) #define HCI_SYNC_HDR_RES_FLAG_POS (14) #define HCI_SYNC_HDR_RES_FLAG_MASK (0xC000) #define HCI_SYNC_HDR_DATA_FLAG_POS (12) #define HCI_SYNC_HDR_DATA_FLAG_MASK (0xF000) /// HCI Synchronous header: data length field length #define HCI_SYNC_HDR_DATA_LEN_POS (HCI_SYNC_HDR_HDL_FLAGS_LEN) #define HCI_SYNC_HDR_DATA_LEN_LEN (1) #define HCI_SYNC_MAX_DATA_SIZE (255) ///HCI sync data packet header length #define HCI_SYNC_HDR_LEN (HCI_SYNC_HDR_HDL_FLAGS_LEN + HCI_SYNC_HDR_DATA_LEN_LEN) ///HCI Command Complete Event minimum parameter length: 1(nb_pk)+2(opcode) #define HCI_CCEVT_HDR_PARLEN (0x03) ///HCI Command Complete Event header length:1(code)+1(len)+1(pk)+2(opcode) #define HCI_CCEVT_HDR_LEN (HCI_EVT_HDR_LEN + HCI_CCEVT_HDR_PARLEN) ///HCI Basic Command Complete Event packet length #define HCI_CCEVT_BASIC_LEN (HCI_CCEVT_HDR_LEN + 1) ///HCI Command Status Event parameter length - constant #define HCI_CSEVT_PARLEN (0x04) ///HCI Command Status Event length:1(code)+1(len)+1(st)+1(pk)+2(opcode) #define HCI_CSEVT_LEN (HCI_EVT_HDR_LEN + HCI_CSEVT_PARLEN) ///HCI Reset Command parameter length #define HCI_RESET_CMD_PARLEN 0 /// Default return parameter length for HCI Command Complete Event #define HCI_CCEVT_BASIC_RETPAR_LEN 1 /// Max HCI commands param size #define HCI_MAX_CMD_PARAM_SIZE 255 /// Macro to extract OCF from OPCODE #define HCI_OP2OCF(opcode) ((opcode) & 0x03FF) /// Macro to extract OGF from OPCODE #define HCI_OP2OGF(opcode) ((opcode) >> 10 & 0x003F) /// Macro to create OPCODE from OGF and OCF #define HCI_OPCODE(ocf, ogf) (((ogf) << 10) | ocf) /// Maximum length of HCI advertising data fragments #define HCI_ADV_DATA_FRAG_MAX_LEN 252 /************************************************************************************** ************** HCI COMMANDS **************** **************************************************************************************/ ///HCI enumeration of possible Command OGF values. enum { ///HCI Link Control Commands Group OGF code LK_CNTL_OGF = 0x01, ///HCI Link Policy Commands Group OGF code LK_POL_OGF, ///HCI Controller and Baseband Commands Group OGF code CNTLR_BB_OGF, ///HCI Information Parameters Commands Group OGF code INFO_PAR_OGF, ///HCI Status Commands Group OGF code STAT_PAR_OGF, ///HCI Test Commands Group OGF code TEST_OGF, ///HCI Low Energy Commands Group OGF code LE_CNTLR_OGF=0x08, ///HCI Vendor Specific Group OGF code VS_OGF = 0x3F, MAX_OGF }; ///Commands Opcodes: OGF(6b) | OCF(10b) /* Some Abbreviation used in names: * - LK = Link Key * - RD = Read * - WR = Write * - REM = Remote * - STG = Settings * - CON = Connection * - CHG = Change * - DFT = Default * - PER = Periodic */ ///HCI enumeration of possible Command OP Codes. enum hci_opcode { HCI_NO_OPERATION_CMD_OPCODE = 0x0000, //Link Control Commands HCI_INQ_CMD_OPCODE = 0x0401, HCI_INQ_CANCEL_CMD_OPCODE = 0x0402, HCI_PER_INQ_MODE_CMD_OPCODE = 0x0403, HCI_EXIT_PER_INQ_MODE_CMD_OPCODE = 0x0404, HCI_CREATE_CON_CMD_OPCODE = 0x0405, HCI_DISCONNECT_CMD_OPCODE = 0x0406, HCI_CREATE_CON_CANCEL_CMD_OPCODE = 0x0408, HCI_ACCEPT_CON_REQ_CMD_OPCODE = 0x0409, HCI_REJECT_CON_REQ_CMD_OPCODE = 0x040A, HCI_LK_REQ_REPLY_CMD_OPCODE = 0x040B, HCI_LK_REQ_NEG_REPLY_CMD_OPCODE = 0x040C, HCI_PIN_CODE_REQ_REPLY_CMD_OPCODE = 0x040D, HCI_PIN_CODE_REQ_NEG_REPLY_CMD_OPCODE = 0x040E, HCI_CHG_CON_PKT_TYPE_CMD_OPCODE = 0x040F, HCI_AUTH_REQ_CMD_OPCODE = 0x0411, HCI_SET_CON_ENC_CMD_OPCODE = 0x0413, HCI_CHG_CON_LK_CMD_OPCODE = 0x0415, HCI_MASTER_LK_CMD_OPCODE = 0x0417, HCI_REM_NAME_REQ_CMD_OPCODE = 0x0419, HCI_REM_NAME_REQ_CANCEL_CMD_OPCODE = 0x041A, HCI_RD_REM_SUPP_FEATS_CMD_OPCODE = 0x041B, HCI_RD_REM_EXT_FEATS_CMD_OPCODE = 0x041C, HCI_RD_REM_VER_INFO_CMD_OPCODE = 0x041D, HCI_RD_CLK_OFF_CMD_OPCODE = 0x041F, HCI_RD_LMP_HDL_CMD_OPCODE = 0x0420, HCI_SETUP_SYNC_CON_CMD_OPCODE = 0x0428, HCI_ACCEPT_SYNC_CON_REQ_CMD_OPCODE = 0x0429, HCI_REJECT_SYNC_CON_REQ_CMD_OPCODE = 0x042A, HCI_IO_CAP_REQ_REPLY_CMD_OPCODE = 0x042B, HCI_USER_CFM_REQ_REPLY_CMD_OPCODE = 0x042C, HCI_USER_CFM_REQ_NEG_REPLY_CMD_OPCODE = 0x042D, HCI_USER_PASSKEY_REQ_REPLY_CMD_OPCODE = 0x042E, HCI_USER_PASSKEY_REQ_NEG_REPLY_CMD_OPCODE = 0x042F, HCI_REM_OOB_DATA_REQ_REPLY_CMD_OPCODE = 0x0430, HCI_REM_OOB_DATA_REQ_NEG_REPLY_CMD_OPCODE = 0x0433, HCI_IO_CAP_REQ_NEG_REPLY_CMD_OPCODE = 0x0434, HCI_ENH_SETUP_SYNC_CON_CMD_OPCODE = 0x043D, HCI_ENH_ACCEPT_SYNC_CON_CMD_OPCODE = 0x043E, HCI_TRUNC_PAGE_CMD_OPCODE = 0x043F, HCI_TRUNC_PAGE_CAN_CMD_OPCODE = 0x0440, HCI_SET_CON_SLV_BCST_CMD_OPCODE = 0x0441, HCI_SET_CON_SLV_BCST_REC_CMD_OPCODE = 0x0442, HCI_START_SYNC_TRAIN_CMD_OPCODE = 0x0443, HCI_REC_SYNC_TRAIN_CMD_OPCODE = 0x0444, HCI_REM_OOB_EXT_DATA_REQ_REPLY_CMD_OPCODE = 0x0445, //Link Policy Commands HCI_HOLD_MODE_CMD_OPCODE = 0x0801, HCI_SNIFF_MODE_CMD_OPCODE = 0x0803, HCI_EXIT_SNIFF_MODE_CMD_OPCODE = 0x0804, HCI_PARK_STATE_CMD_OPCODE = 0x0805, HCI_EXIT_PARK_STATE_CMD_OPCODE = 0x0806, HCI_QOS_SETUP_CMD_OPCODE = 0x0807, HCI_ROLE_DISCOVERY_CMD_OPCODE = 0x0809, HCI_SWITCH_ROLE_CMD_OPCODE = 0x080B, HCI_RD_LINK_POL_STG_CMD_OPCODE = 0x080C, HCI_WR_LINK_POL_STG_CMD_OPCODE = 0x080D, HCI_RD_DFT_LINK_POL_STG_CMD_OPCODE = 0x080E, HCI_WR_DFT_LINK_POL_STG_CMD_OPCODE = 0x080F, HCI_FLOW_SPEC_CMD_OPCODE = 0x0810, HCI_SNIFF_SUB_CMD_OPCODE = 0x0811, //Controller and Baseband Commands HCI_SET_EVT_MASK_CMD_OPCODE = 0x0C01, HCI_RESET_CMD_OPCODE = 0x0C03, HCI_SET_EVT_FILTER_CMD_OPCODE = 0x0C05, HCI_FLUSH_CMD_OPCODE = 0x0C08, HCI_RD_PIN_TYPE_CMD_OPCODE = 0x0C09, HCI_WR_PIN_TYPE_CMD_OPCODE = 0x0C0A, HCI_CREATE_NEW_UNIT_KEY_CMD_OPCODE = 0x0C0B, HCI_RD_STORED_LK_CMD_OPCODE = 0x0C0D, HCI_WR_STORED_LK_CMD_OPCODE = 0x0C11, HCI_DEL_STORED_LK_CMD_OPCODE = 0x0C12, HCI_WR_LOCAL_NAME_CMD_OPCODE = 0x0C13, HCI_RD_LOCAL_NAME_CMD_OPCODE = 0x0C14, HCI_RD_CON_ACCEPT_TO_CMD_OPCODE = 0x0C15, HCI_WR_CON_ACCEPT_TO_CMD_OPCODE = 0x0C16, HCI_RD_PAGE_TO_CMD_OPCODE = 0x0C17, HCI_WR_PAGE_TO_CMD_OPCODE = 0x0C18, HCI_RD_SCAN_EN_CMD_OPCODE = 0x0C19, HCI_WR_SCAN_EN_CMD_OPCODE = 0x0C1A, HCI_RD_PAGE_SCAN_ACT_CMD_OPCODE = 0x0C1B, HCI_WR_PAGE_SCAN_ACT_CMD_OPCODE = 0x0C1C, HCI_RD_INQ_SCAN_ACT_CMD_OPCODE = 0x0C1D, HCI_WR_INQ_SCAN_ACT_CMD_OPCODE = 0x0C1E, HCI_RD_AUTH_EN_CMD_OPCODE = 0x0C1F, HCI_WR_AUTH_EN_CMD_OPCODE = 0x0C20, HCI_RD_CLASS_OF_DEV_CMD_OPCODE = 0x0C23, HCI_WR_CLASS_OF_DEV_CMD_OPCODE = 0x0C24, HCI_RD_VOICE_STG_CMD_OPCODE = 0x0C25, HCI_WR_VOICE_STG_CMD_OPCODE = 0x0C26, HCI_RD_AUTO_FLUSH_TO_CMD_OPCODE = 0x0C27, HCI_WR_AUTO_FLUSH_TO_CMD_OPCODE = 0x0C28, HCI_RD_NB_BDCST_RETX_CMD_OPCODE = 0x0C29, HCI_WR_NB_BDCST_RETX_CMD_OPCODE = 0x0C2A, HCI_RD_HOLD_MODE_ACTIVITY_CMD_OPCODE = 0x0C2B, HCI_WR_HOLD_MODE_ACTIVITY_CMD_OPCODE = 0x0C2C, HCI_RD_TX_PWR_LVL_CMD_OPCODE = 0x0C2D, HCI_RD_SYNC_FLOW_CTRL_EN_CMD_OPCODE = 0x0C2E, HCI_WR_SYNC_FLOW_CTRL_EN_CMD_OPCODE = 0x0C2F, HCI_SET_CTRL_TO_HOST_FLOW_CTRL_CMD_OPCODE = 0x0C31, HCI_HOST_BUF_SIZE_CMD_OPCODE = 0x0C33, HCI_HOST_NB_CMP_PKTS_CMD_OPCODE = 0x0C35, HCI_RD_LINK_SUPV_TO_CMD_OPCODE = 0x0C36, HCI_WR_LINK_SUPV_TO_CMD_OPCODE = 0x0C37, HCI_RD_NB_SUPP_IAC_CMD_OPCODE = 0x0C38, HCI_RD_CURR_IAC_LAP_CMD_OPCODE = 0x0C39, HCI_WR_CURR_IAC_LAP_CMD_OPCODE = 0x0C3A, HCI_SET_AFH_HOST_CH_CLASS_CMD_OPCODE = 0x0C3F, HCI_RD_INQ_SCAN_TYPE_CMD_OPCODE = 0x0C42, HCI_WR_INQ_SCAN_TYPE_CMD_OPCODE = 0x0C43, HCI_RD_INQ_MODE_CMD_OPCODE = 0x0C44, HCI_WR_INQ_MODE_CMD_OPCODE = 0x0C45, HCI_RD_PAGE_SCAN_TYPE_CMD_OPCODE = 0x0C46, HCI_WR_PAGE_SCAN_TYPE_CMD_OPCODE = 0x0C47, HCI_RD_AFH_CH_ASSESS_MODE_CMD_OPCODE = 0x0C48, HCI_WR_AFH_CH_ASSESS_MODE_CMD_OPCODE = 0x0C49, HCI_RD_EXT_INQ_RSP_CMD_OPCODE = 0x0C51, HCI_WR_EXT_INQ_RSP_CMD_OPCODE = 0x0C52, HCI_REFRESH_ENC_KEY_CMD_OPCODE = 0x0C53, HCI_RD_SP_MODE_CMD_OPCODE = 0x0C55, HCI_WR_SP_MODE_CMD_OPCODE = 0x0C56, HCI_RD_LOC_OOB_DATA_CMD_OPCODE = 0x0C57, HCI_RD_INQ_RSP_TX_PWR_LVL_CMD_OPCODE = 0x0C58, HCI_WR_INQ_TX_PWR_LVL_CMD_OPCODE = 0x0C59, HCI_RD_DFT_ERR_DATA_REP_CMD_OPCODE = 0x0C5A, HCI_WR_DFT_ERR_DATA_REP_CMD_OPCODE = 0x0C5B, HCI_ENH_FLUSH_CMD_OPCODE = 0x0C5F, HCI_SEND_KEYPRESS_NOTIF_CMD_OPCODE = 0x0C60, HCI_SET_EVT_MASK_PAGE_2_CMD_OPCODE = 0x0C63, HCI_RD_FLOW_CNTL_MODE_CMD_OPCODE = 0x0C66, HCI_WR_FLOW_CNTL_MODE_CMD_OPCODE = 0x0C67, HCI_RD_ENH_TX_PWR_LVL_CMD_OPCODE = 0x0C68, HCI_RD_LE_HOST_SUPP_CMD_OPCODE = 0x0C6C, HCI_WR_LE_HOST_SUPP_CMD_OPCODE = 0x0C6D, HCI_SET_MWS_CHANNEL_PARAMS_CMD_OPCODE = 0x0C6E, HCI_SET_EXTERNAL_FRAME_CONFIG_CMD_OPCODE = 0x0C6F, HCI_SET_MWS_SIGNALING_CMD_OPCODE = 0x0C70, HCI_SET_MWS_TRANSPORT_LAYER_CMD_OPCODE = 0x0C71, HCI_SET_MWS_SCAN_FREQ_TABLE_CMD_OPCODE = 0x0C72, HCI_SET_MWS_PATTERN_CONFIG_CMD_OPCODE = 0x0C73, HCI_SET_RES_LT_ADDR_CMD_OPCODE = 0x0C74, HCI_DEL_RES_LT_ADDR_CMD_OPCODE = 0x0C75, HCI_SET_CON_SLV_BCST_DATA_CMD_OPCODE = 0x0C76, HCI_RD_SYNC_TRAIN_PARAM_CMD_OPCODE = 0x0C77, HCI_WR_SYNC_TRAIN_PARAM_CMD_OPCODE = 0x0C78, HCI_RD_SEC_CON_HOST_SUPP_CMD_OPCODE = 0x0C79, HCI_WR_SEC_CON_HOST_SUPP_CMD_OPCODE = 0x0C7A, HCI_RD_AUTH_PAYL_TO_CMD_OPCODE = 0x0C7B, HCI_WR_AUTH_PAYL_TO_CMD_OPCODE = 0x0C7C, HCI_RD_LOC_OOB_EXT_DATA_CMD_OPCODE = 0x0C7D, HCI_RD_EXT_PAGE_TO_CMD_OPCODE = 0x0C7E, HCI_WR_EXT_PAGE_TO_CMD_OPCODE = 0x0C7F, HCI_RD_EXT_INQ_LEN_CMD_OPCODE = 0x0C80, HCI_WR_EXT_INQ_LEN_CMD_OPCODE = 0x0C81, //Info Params HCI_RD_LOCAL_VER_INFO_CMD_OPCODE = 0x1001, HCI_RD_LOCAL_SUPP_CMDS_CMD_OPCODE = 0x1002, HCI_RD_LOCAL_SUPP_FEATS_CMD_OPCODE = 0x1003, HCI_RD_LOCAL_EXT_FEATS_CMD_OPCODE = 0x1004, HCI_RD_BUFF_SIZE_CMD_OPCODE = 0x1005, HCI_RD_BD_ADDR_CMD_OPCODE = 0x1009, HCI_RD_LOCAL_SUPP_CODECS_CMD_OPCODE = 0x100B, //Status Params HCI_RD_FAIL_CONTACT_CNT_CMD_OPCODE = 0x1401, HCI_RST_FAIL_CONTACT_CNT_CMD_OPCODE = 0x1402, HCI_RD_LINK_QUAL_CMD_OPCODE = 0x1403, HCI_RD_RSSI_CMD_OPCODE = 0x1405, HCI_RD_AFH_CH_MAP_CMD_OPCODE = 0x1406, HCI_RD_CLK_CMD_OPCODE = 0x1407, HCI_RD_ENC_KEY_SIZE_CMD_OPCODE = 0x1408, HCI_GET_MWS_TRANSPORT_LAYER_CONFIG_CMD_OPCODE = 0x140C, //Testing Commands HCI_RD_LOOPBACK_MODE_CMD_OPCODE = 0x1801, HCI_WR_LOOPBACK_MODE_CMD_OPCODE = 0x1802, HCI_EN_DUT_MODE_CMD_OPCODE = 0x1803, HCI_WR_SP_DBG_MODE_CMD_OPCODE = 0x1804, /// LE Commands Opcodes HCI_LE_SET_EVT_MASK_CMD_OPCODE = 0x2001, HCI_LE_RD_BUFF_SIZE_CMD_OPCODE = 0x2002, HCI_LE_RD_LOCAL_SUPP_FEATS_CMD_OPCODE = 0x2003, HCI_LE_SET_RAND_ADDR_CMD_OPCODE = 0x2005, HCI_LE_SET_ADV_PARAM_CMD_OPCODE = 0x2006, HCI_LE_RD_ADV_CHNL_TX_PW_CMD_OPCODE = 0x2007, HCI_LE_SET_ADV_DATA_CMD_OPCODE = 0x2008, HCI_LE_SET_SCAN_RSP_DATA_CMD_OPCODE = 0x2009, HCI_LE_SET_ADV_EN_CMD_OPCODE = 0x200A, HCI_LE_SET_SCAN_PARAM_CMD_OPCODE = 0x200B, HCI_LE_SET_SCAN_EN_CMD_OPCODE = 0x200C, HCI_LE_CREATE_CON_CMD_OPCODE = 0x200D, HCI_LE_CREATE_CON_CANCEL_CMD_OPCODE = 0x200E, HCI_LE_RD_WLST_SIZE_CMD_OPCODE = 0x200F, HCI_LE_CLEAR_WLST_CMD_OPCODE = 0x2010, HCI_LE_ADD_DEV_TO_WLST_CMD_OPCODE = 0x2011, HCI_LE_RMV_DEV_FROM_WLST_CMD_OPCODE = 0x2012, HCI_LE_CON_UPDATE_CMD_OPCODE = 0x2013, HCI_LE_SET_HOST_CH_CLASS_CMD_OPCODE = 0x2014, HCI_LE_RD_CHNL_MAP_CMD_OPCODE = 0x2015, HCI_LE_RD_REM_FEATS_CMD_OPCODE = 0x2016, HCI_LE_ENC_CMD_OPCODE = 0x2017, HCI_LE_RAND_CMD_OPCODE = 0x2018, HCI_LE_START_ENC_CMD_OPCODE = 0x2019, HCI_LE_LTK_REQ_REPLY_CMD_OPCODE = 0x201A, HCI_LE_LTK_REQ_NEG_REPLY_CMD_OPCODE = 0x201B, HCI_LE_RD_SUPP_STATES_CMD_OPCODE = 0x201C, HCI_LE_RX_TEST_CMD_OPCODE = 0x201D, HCI_LE_TX_TEST_CMD_OPCODE = 0x201E, HCI_LE_TEST_END_CMD_OPCODE = 0x201F, HCI_LE_REM_CON_PARAM_REQ_REPLY_CMD_OPCODE = 0x2020, HCI_LE_REM_CON_PARAM_REQ_NEG_REPLY_CMD_OPCODE = 0x2021, HCI_LE_SET_DATA_LEN_CMD_OPCODE = 0x2022, HCI_LE_RD_SUGGTED_DFT_DATA_LEN_CMD_OPCODE = 0x2023, HCI_LE_WR_SUGGTED_DFT_DATA_LEN_CMD_OPCODE = 0x2024, HCI_LE_RD_LOC_P256_PUB_KEY_CMD_OPCODE = 0x2025, HCI_LE_GEN_DHKEY_CMD_OPCODE = 0x2026, HCI_LE_ADD_DEV_TO_RSLV_LIST_CMD_OPCODE = 0x2027, HCI_LE_RMV_DEV_FROM_RSLV_LIST_CMD_OPCODE = 0x2028, HCI_LE_CLEAR_RSLV_LIST_CMD_OPCODE = 0x2029, HCI_LE_RD_RSLV_LIST_SIZE_CMD_OPCODE = 0x202A, HCI_LE_RD_PEER_RSLV_ADDR_CMD_OPCODE = 0x202B, HCI_LE_RD_LOC_RSLV_ADDR_CMD_OPCODE = 0x202C, HCI_LE_SET_ADDR_RESOL_EN_CMD_OPCODE = 0x202D, HCI_LE_SET_RSLV_PRIV_ADDR_TO_CMD_OPCODE = 0x202E, HCI_LE_RD_MAX_DATA_LEN_CMD_OPCODE = 0x202F, HCI_LE_RD_PHY_CMD_OPCODE = 0x2030, HCI_LE_SET_DFT_PHY_CMD_OPCODE = 0x2031, HCI_LE_SET_PHY_CMD_OPCODE = 0x2032, HCI_LE_ENH_RX_TEST_CMD_OPCODE = 0x2033, HCI_LE_ENH_TX_TEST_CMD_OPCODE = 0x2034, HCI_LE_SET_ADV_SET_RAND_ADDR_CMD_OPCODE = 0x2035, HCI_LE_SET_EXT_ADV_PARAM_CMD_OPCODE = 0x2036, HCI_LE_SET_EXT_ADV_DATA_CMD_OPCODE = 0x2037, HCI_LE_SET_EXT_SCAN_RSP_DATA_CMD_OPCODE = 0x2038, HCI_LE_SET_EXT_ADV_EN_CMD_OPCODE = 0x2039, HCI_LE_RD_MAX_ADV_DATA_LEN_CMD_OPCODE = 0x203A, HCI_LE_RD_NB_SUPP_ADV_SETS_CMD_OPCODE = 0x203B, HCI_LE_RMV_ADV_SET_CMD_OPCODE = 0x203C, HCI_LE_CLEAR_ADV_SETS_CMD_OPCODE = 0x203D, HCI_LE_SET_PER_ADV_PARAM_CMD_OPCODE = 0x203E, HCI_LE_SET_PER_ADV_DATA_CMD_OPCODE = 0x203F, HCI_LE_SET_PER_ADV_EN_CMD_OPCODE = 0x2040, HCI_LE_SET_EXT_SCAN_PARAM_CMD_OPCODE = 0x2041, HCI_LE_SET_EXT_SCAN_EN_CMD_OPCODE = 0x2042, HCI_LE_EXT_CREATE_CON_CMD_OPCODE = 0x2043, HCI_LE_PER_ADV_CREATE_SYNC_CMD_OPCODE = 0x2044, HCI_LE_PER_ADV_CREATE_SYNC_CANCEL_CMD_OPCODE = 0x2045, HCI_LE_PER_ADV_TERM_SYNC_CMD_OPCODE = 0x2046, HCI_LE_ADD_DEV_TO_PER_ADV_LIST_CMD_OPCODE = 0x2047, HCI_LE_RMV_DEV_FROM_PER_ADV_LIST_CMD_OPCODE = 0x2048, HCI_LE_CLEAR_PER_ADV_LIST_CMD_OPCODE = 0x2049, HCI_LE_RD_PER_ADV_LIST_SIZE_CMD_OPCODE = 0x204A, HCI_LE_RD_TX_PWR_CMD_OPCODE = 0x204B, HCI_LE_RD_RF_PATH_COMP_CMD_OPCODE = 0x204C, HCI_LE_WR_RF_PATH_COMP_CMD_OPCODE = 0x204D, HCI_LE_SET_PRIV_MODE_CMD_OPCODE = 0x204E, HCI_LE_SET_MIN_NUM_USED_CHAN_CMD_OPCODE = 0x204F, ///Debug commands - OGF = 0x3F (spec) HCI_DBG_RD_MEM_CMD_OPCODE = 0xFC01, HCI_DBG_WR_MEM_CMD_OPCODE = 0xFC02, HCI_DBG_DEL_PAR_CMD_OPCODE = 0xFC03, HCI_DBG_ID_FLASH_CMD_OPCODE = 0xFC05, HCI_DBG_ER_FLASH_CMD_OPCODE = 0xFC06, HCI_DBG_WR_FLASH_CMD_OPCODE = 0xFC07, HCI_DBG_RD_FLASH_CMD_OPCODE = 0xFC08, HCI_DBG_RD_PAR_CMD_OPCODE = 0xFC09, HCI_DBG_WR_PAR_CMD_OPCODE = 0xFC0A, HCI_DBG_WLAN_COEX_CMD_OPCODE = 0xFC0B, HCI_DBG_WLAN_COEXTST_SCEN_CMD_OPCODE = 0xFC0D, HCI_DBG_BT_SEND_LMP_CMD_OPCODE = 0xFC0E, HCI_DBG_RD_KE_STATS_CMD_OPCODE = 0xFC10, HCI_DBG_PLF_RESET_CMD_OPCODE = 0xFC11, HCI_DBG_RD_MEM_INFO_CMD_OPCODE = 0xFC12, HCI_DBG_HW_REG_RD_CMD_OPCODE = 0xFC30, HCI_DBG_HW_REG_WR_CMD_OPCODE = 0xFC31, HCI_DBG_SET_BD_ADDR_CMD_OPCODE = 0xFC32, HCI_DBG_SET_TYPE_PUB_CMD_OPCODE = 0xFC33, HCI_DBG_SET_TYPE_RAND_CMD_OPCODE = 0xFC34, HCI_DBG_SET_CRC_CMD_OPCODE = 0xFC35, HCI_DBG_LLCP_DISCARD_CMD_OPCODE = 0xFC36, HCI_DBG_RESET_RX_CNT_CMD_OPCODE = 0xFC37, HCI_DBG_RESET_TX_CNT_CMD_OPCODE = 0xFC38, HCI_DBG_RF_REG_RD_CMD_OPCODE = 0xFC39, HCI_DBG_RF_REG_WR_CMD_OPCODE = 0xFC3A, HCI_DBG_SET_TX_PW_CMD_OPCODE = 0xFC3B, HCI_DBG_RF_SWITCH_CLK_CMD_OPCODE = 0xFC3C, HCI_DBG_RF_WR_DATA_TX_CMD_OPCODE = 0xFC3D, HCI_DBG_RF_RD_DATA_RX_CMD_OPCODE = 0xFC3E, HCI_DBG_RF_CNTL_TX_CMD_OPCODE = 0xFC3F, HCI_DBG_RF_SYNC_P_CNTL_CMD_OPCODE = 0xFC40, HCI_TESTER_SET_LE_PARAMS_CMD_OPCODE = 0xFC40, HCI_DBG_WR_DLE_DFT_VALUE_CMD_OPCODE = 0xFC41, #if (BLE_EMB_PRESENT) #if (BLE_TESTER) HCI_DBG_BLE_TST_LLCP_PT_EN_CMD_OPCODE = 0xFC42, HCI_DBG_BLE_TST_SEND_LLCP_CMD_OPCODE = 0xFC43, #endif // (BLE_TESTER) #if (BLE_AUDIO) HCI_DBG_AUDIO_CONFIGURE_CMD_OPCODE = 0xFC50, HCI_DBG_AUDIO_SET_MODE_CMD_OPCODE = 0xFC51, HCI_DBG_AUDIO_RESET_CMD_OPCODE = 0xFC52, HCI_DBG_AUDIO_SET_POINTER_CMD_OPCODE = 0xFC53, HCI_DBG_AUDIO_ALLOCATE_CMD_OPCODE = 0xFC54, HCI_DBG_AUDIO_GET_VX_CH_CMD_OPCODE = 0xFC55, #endif #endif // (BLE_EMB_PRESENT) #if (RW_DEBUG && BT_EMB_PRESENT) HCI_DBG_BT_DISCARD_LMP_EN_CMD_OPCODE = 0xFC44, #endif //RW_DEBUG && BT_EMB_PRESENT HCI_DBG_MWS_COEX_CMD_OPCODE = 0xFC45, HCI_DBG_MWS_COEXTST_SCEN_CMD_OPCODE = 0xFC46, #if CRYPTO_UT HCI_DBG_TEST_CRYPTO_FUNC_CMD_OPCODE = 0xFC60, #endif //CRYPTO_UT }; /************************************************************************************** ************** HCI EVENTS **************** **************************************************************************************/ ///Event Codes enum hci_evt_code { HCI_INQ_CMP_EVT_CODE = 0x01, HCI_INQ_RES_EVT_CODE = 0x02, HCI_CON_CMP_EVT_CODE = 0x03, HCI_CON_REQ_EVT_CODE = 0x04, HCI_DISC_CMP_EVT_CODE = 0x05, HCI_AUTH_CMP_EVT_CODE = 0x06, HCI_REM_NAME_REQ_CMP_EVT_CODE = 0x07, HCI_ENC_CHG_EVT_CODE = 0x08, HCI_CHG_CON_LK_CMP_EVT_CODE = 0x09, HCI_MASTER_LK_CMP_EVT_CODE = 0x0A, HCI_RD_REM_SUPP_FEATS_CMP_EVT_CODE = 0x0B, HCI_RD_REM_VER_INFO_CMP_EVT_CODE = 0x0C, HCI_QOS_SETUP_CMP_EVT_CODE = 0x0D, HCI_CMD_CMP_EVT_CODE = 0x0E, HCI_CMD_STATUS_EVT_CODE = 0x0F, HCI_HW_ERR_EVT_CODE = 0x10, HCI_FLUSH_OCCURRED_EVT_CODE = 0x11, HCI_ROLE_CHG_EVT_CODE = 0x12, HCI_NB_CMP_PKTS_EVT_CODE = 0x13, HCI_MODE_CHG_EVT_CODE = 0x14, HCI_RETURN_LINK_KEYS_EVT_CODE = 0x15, HCI_PIN_CODE_REQ_EVT_CODE = 0x16, HCI_LK_REQ_EVT_CODE = 0x17, HCI_LK_NOTIF_EVT_CODE = 0x18, HCI_DATA_BUF_OVFLW_EVT_CODE = 0x1A, HCI_MAX_SLOT_CHG_EVT_CODE = 0x1B, HCI_RD_CLK_OFF_CMP_EVT_CODE = 0x1C, HCI_CON_PKT_TYPE_CHG_EVT_CODE = 0x1D, HCI_QOS_VIOL_EVT_CODE = 0x1E, HCI_PAGE_SCAN_REPET_MODE_CHG_EVT_CODE = 0x20, HCI_FLOW_SPEC_CMP_EVT_CODE = 0x21, HCI_INQ_RES_WITH_RSSI_EVT_CODE = 0x22, HCI_RD_REM_EXT_FEATS_CMP_EVT_CODE = 0x23, HCI_SYNC_CON_CMP_EVT_CODE = 0x2C, HCI_SYNC_CON_CHG_EVT_CODE = 0x2D, HCI_SNIFF_SUB_EVT_CODE = 0x2E, HCI_EXT_INQ_RES_EVT_CODE = 0x2F, HCI_ENC_KEY_REFRESH_CMP_EVT_CODE = 0x30, HCI_IO_CAP_REQ_EVT_CODE = 0x31, HCI_IO_CAP_RSP_EVT_CODE = 0x32, HCI_USER_CFM_REQ_EVT_CODE = 0x33, HCI_USER_PASSKEY_REQ_EVT_CODE = 0x34, HCI_REM_OOB_DATA_REQ_EVT_CODE = 0x35, HCI_SP_CMP_EVT_CODE = 0x36, HCI_LINK_SUPV_TO_CHG_EVT_CODE = 0x38, HCI_ENH_FLUSH_CMP_EVT_CODE = 0x39, HCI_USER_PASSKEY_NOTIF_EVT_CODE = 0x3B, HCI_KEYPRESS_NOTIF_EVT_CODE = 0x3C, HCI_REM_HOST_SUPP_FEATS_NOTIF_EVT_CODE = 0x3D, HCI_LE_META_EVT_CODE = 0x3E, HCI_MAX_EVT_MSK_PAGE_1_CODE = 0x40, HCI_SYNC_TRAIN_CMP_EVT_CODE = 0x4F, HCI_SYNC_TRAIN_REC_EVT_CODE = 0x50, HCI_CON_SLV_BCST_REC_EVT_CODE = 0x51, HCI_CON_SLV_BCST_TO_EVT_CODE = 0x52, HCI_TRUNC_PAGE_CMP_EVT_CODE = 0x53, HCI_SLV_PAGE_RSP_TO_EVT_CODE = 0x54, HCI_CON_SLV_BCST_CH_MAP_CHG_EVT_CODE = 0x55, HCI_AUTH_PAYL_TO_EXP_EVT_CODE = 0x57, HCI_MAX_EVT_MSK_PAGE_2_CODE = 0x58, HCI_DBG_META_EVT_CODE = 0xFF, /// LE Events Subcodes HCI_LE_CON_CMP_EVT_SUBCODE = 0x01, HCI_LE_ADV_REPORT_EVT_SUBCODE = 0x02, HCI_LE_CON_UPDATE_CMP_EVT_SUBCODE = 0x03, HCI_LE_RD_REM_FEATS_CMP_EVT_SUBCODE = 0x04, HCI_LE_LTK_REQUEST_EVT_SUBCODE = 0x05, HCI_LE_REM_CON_PARAM_REQ_EVT_SUBCODE = 0x06, HCI_LE_DATA_LEN_CHG_EVT_SUBCODE = 0x07, HCI_LE_RD_LOC_P256_PUB_KEY_CMP_EVT_SUBCODE = 0x08, HCI_LE_GEN_DHKEY_CMP_EVT_SUBCODE = 0x09, HCI_LE_ENH_CON_CMP_EVT_SUBCODE = 0x0A, HCI_LE_DIR_ADV_REP_EVT_SUBCODE = 0x0B, HCI_LE_PHY_UPD_CMP_EVT_SUBCODE = 0x0C, HCI_LE_EXT_ADV_REPORT_EVT_SUBCODE = 0x0D, HCI_LE_PERIODIC_ADV_SYNC_EST_EVT_SUBCODE = 0x0E, HCI_LE_PERIODIC_ADV_REPORT_EVT_SUBCODE = 0x0F, HCI_LE_PERIODIC_ADV_SYNC_LOST_EVT_SUBCODE = 0x10, HCI_LE_SCAN_TIMEOUT_EVT_SUBCODE = 0x11, HCI_LE_ADV_SET_TERMINATED_EVT_SUBCODE = 0x12, HCI_LE_SCAN_REQ_RCVD_EVT_SUBCODE = 0x13, HCI_LE_CH_SEL_ALGO_EVT_SUBCODE = 0x14, /// DBG Events Subcodes #if (BLE_EMB_PRESENT && BLE_TESTER) HCI_DBG_BLE_TST_LLCP_RECV_EVT_SUBCODE = 0x01, #endif // (BLE_EMB_PRESENT && BLE_TESTER) #if (RW_DEBUG) HCI_DBG_ASSERT_ERR_EVT_SUBCODE = 0x02, #endif //(RW_DEBUG) }; /// Event mask page enum enum hci_evt_mask_page { /// page 0 HCI_PAGE_0, /// page 1 HCI_PAGE_1, /// page 2 HCI_PAGE_2, /// Default HCI_PAGE_DFT, /// LE event HCI_PAGE_LE, }; /// HCI ACL data RX packet structure struct hci_ble_acl_data_rx { /// bits[00:11]: Connection handle /// bits[12:13]: Packet boundary flag /// bits[14:15]: Broadcast flag uint16_t conhdl_pb_bc_flag; /// length of the data uint16_t length; /// Memory Pointer address uint32_t buf_ptr; /// Private buffer void *hcibuffer; }; /// HCI ACL data TX packet structure struct hci_ble_acl_data_tx { /// bits[00:11]: Connection handle /// bits[12:13]: Packet boundary flag /// bits[14:15]: Broadcast flag uint16_t conhdl_pb_bc_flag; /// length of the data uint16_t length; /// Memory Pointer address uint32_t buf_ptr; }; #if (BT_EMB_PRESENT) /// HCI ACL data packet structure struct hci_bt_acl_data_tx { /// Buffer element struct bt_em_acl_buf_elt* buf_elt; }; /// HCI ACL data Rx packet structure struct hci_bt_acl_data_rx { /// EM buffer pointer uint16_t buf_ptr; /// Data length + Data Flags (PBF + BF) uint16_t data_len_flags; }; /// HCI Synchronous data packet structure struct hci_bt_sync_data_tx { /// Buffer element struct bt_em_sync_buf_elt* buf_elt; }; /// HCI Synchronous data Rx packet structure struct hci_bt_sync_data_rx { /// EM buffer pointer uint16_t buf_ptr; /// Data length uint8_t data_len; /// Packet status flag uint8_t packet_status_flag; /// Synchronous link identifier uint8_t sync_link_id; }; #endif // (BT_EMB_PRESENT) /* * HCI COMMANDS PARAMETERS (to classify) **************************************************************************************** */ /// HCI basic command structure with connection handle struct hci_basic_conhdl_cmd { /// connection handle uint16_t conhdl; }; /// HCI basic command structure with BD address struct hci_basic_bd_addr_cmd { ///BdAddr struct bd_addr bd_addr; }; /// HCI Accept connection request command structure struct hci_accept_con_req_cmd { ///BdAddr struct bd_addr bd_addr; ///Page Scan Repetition Mode uint8_t role; }; /// HCI Accept synchronous connection request command structure struct hci_accept_sync_con_req_cmd { ///BdAddr struct bd_addr bd_addr; ///Transmit bandwidth uint32_t tx_bw; ///Receive bandwidth uint32_t rx_bw; ///Max latency uint16_t max_lat; ///Voice settings uint16_t vx_set; ///Retransmission effort uint8_t retx_eff; ///Packet type uint16_t pkt_type ; }; /// HCI Enhanced Accept synchronous connection request command structure struct hci_enh_accept_sync_con_cmd { struct bd_addr bd_addr; // BD address uint32_t tx_bw; // Transmit Bandwidth (in B/sec) uint32_t rx_bw; // Receive Bandwidth (in B/sec) uint8_t tx_cod_fmt[5]; // Transmit Coding Format uint8_t rx_cod_fmt[5]; // Receive Coding Format uint16_t tx_cod_fr_sz; // Transmit Codec Frame Size (in B) uint16_t rx_cod_fr_sz; // Receive Codec Frame Size (in B) uint32_t in_bw; // Input Bandwidth (in B/sec) uint32_t out_bw; // Output Bandwidth (in B/sec) uint8_t in_cod_fmt[5]; // Input Coding Format uint8_t out_cod_fmt[5]; // Output Coding Format uint16_t in_cod_data_sz; // Input Coded Data Size (in bits) uint16_t out_cod_data_sz; // Output Coded Data Size (in bits) uint8_t in_data_fmt; // Input PCM Data Format uint8_t out_data_fmt; // Output PCM Data Format uint8_t in_msb_pos; // Input PCM Sample Payload MSB Position (in bits) uint8_t out_msb_pos; // Output PCM Sample Payload MSB Position (in bits) uint8_t in_data_path; // Input Data Path uint8_t out_data_path; // Output Data Path uint8_t in_tr_unit_sz; // Input Transport Unit Size (in bits) uint8_t out_tr_unit_sz; // Output Transport Unit Size (in bits) uint16_t max_lat; // Max Latency (in ms) uint16_t packet_type; // Packet Type uint8_t retx_eff; // Retransmission Effort }; /// HCI reject connection request command structure struct hci_reject_con_req_cmd { ///BdAddr struct bd_addr bd_addr; ///Reason uint8_t reason; }; /// HCI reject synchronous connection request command structure struct hci_reject_sync_con_req_cmd { ///BdAddr struct bd_addr bd_addr; ///Reason uint8_t reason; }; /// HCI link key request reply command structure struct hci_lk_req_reply_cmd { ///BdAddr struct bd_addr bd_addr; ///Key struct ltk key; }; /// HCI link key request reply command structure struct hci_pin_code_req_reply_cmd { ///BdAddr struct bd_addr bd_addr; ///Pin code length uint8_t pin_len; ///Key struct pin_code pin; }; /// HCI switch role command structure struct hci_switch_role_cmd { ///BdAddr struct bd_addr bd_addr; ///Read all flag uint8_t role; }; /// HCI flow specification command parameters structure struct hci_flow_spec_cmd { ///Connection handle uint16_t conhdl; ///Flags uint8_t flags; ///Flow direction uint8_t flow_dir; ///Service type uint8_t serv_type; ///Token rate uint32_t tk_rate; ///Token buffer size uint32_t tk_buf_sz; ///Peak bandwidth uint32_t pk_bw; ///Access latency uint32_t acc_lat; }; /// HCI enhanced flush command parameters structure struct hci_enh_flush_cmd { ///Connection handle uint16_t conhdl; ///Packet Type uint8_t pkt_type; }; /// HCI command complete event structure for the read auto flush TO command struct hci_rd_auto_flush_to_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Flush timeout uint16_t flush_to; }; /// HCI write flush timeout command parameters structure struct hci_wr_auto_flush_to_cmd { ///Connection handle uint16_t conhdl; ///Flush timeout uint16_t flush_to; }; /// HCI change connection packet type command parameters structure struct hci_chg_con_pkt_type_cmd { ///Connection handle uint16_t conhdl; ///Packet type uint16_t pkt_type; }; /// HCI read link policy settings command parameters structure struct hci_rd_link_pol_stg_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Link policy uint16_t lnk_policy; }; /// HCI read link policy settings command parameters structure struct hci_wr_link_pol_stg_cmd { ///Connection handle uint16_t conhdl; ///Link policy uint16_t lnk_policy; }; /// HCI sniff mode request command parameters structure struct hci_sniff_mode_cmd { ///Connection handle uint16_t conhdl; ///Sniff max interval uint16_t max_int; ///Sniff min interval uint16_t min_int; ///Sniff attempt uint16_t attempt; ///Sniff timeout uint16_t timeout; }; /// HCI sniff subrating mode request command parameters structure struct hci_sniff_sub_cmd { ///Connection handle uint16_t conhdl; ///Sniff max latency uint16_t max_lat; ///Minimun remote TO uint16_t min_rem_to; ///Minimun local TO uint16_t min_loc_to; }; /// HCI role discovery complete event parameters structure struct hci_role_discovery_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Role uint8_t role; }; /// HCI read failed contact counter command parameters structure struct hci_rd_fail_contact_cnt_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Fail contact counter uint16_t fail_cnt; }; /// HCI read link quality complete event parameters structure struct hci_rd_link_qual_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Quality type uint8_t quality; }; /// HCI read afh channel map complete event parameters structure struct hci_rd_afh_ch_map_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; /// AFH mode uint8_t afh_mode; /// AFH channel map struct chnl_map afh_map; }; /// HCI read lmp handle complete event parameters structure struct hci_rd_lmp_hdl_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///lmp handle uint8_t lmp_hdl; ///rsvd uint32_t rsvd; }; /// HCI read remote extended features command parameters structure struct hci_rd_rem_ext_feats_cmd { ///Connection handle uint16_t conhdl; ///page number uint8_t pg_nb; }; /// HCI read encryption key size complete event parameters structure struct hci_rd_enc_key_size_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Key size uint8_t key_sz; }; /// HCI read enhanced transmit power command parameters structure struct hci_rd_enh_tx_pwr_lvl_cmd { ///Connection handle uint16_t conhdl; ///Type uint8_t type; }; /// HCI read enhanced transmit power complete event parameters structure struct hci_rd_enh_tx_pwr_lvl_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Transmit power GFSK uint8_t pw_gfsk; ///Transmit power DQPSK uint8_t pw_dqpsk; ///Transmit power 8DPSK uint8_t pw_8dpsk; }; /* * HCI LINK CONTROL COMMANDS PARAMETERS **************************************************************************************** */ /// Format of the message of the Group: LINK_CONTROL_COMMANDS /// HCI Inquiry command parameters structure struct hci_inq_cmd { ///Lap struct lap lap; ///Inquiry Length uint8_t inq_len; ///Number of response uint8_t nb_rsp; }; struct hci_per_inq_mode_cmd { ///Maximum period length uint16_t max_per_len; ///Minimum period length uint16_t min_per_len; ///lap struct lap lap; ///Inquiry length uint8_t inq_len; ///Number of response uint8_t nb_rsp; }; struct hci_create_con_cmd { /// BdAddr struct bd_addr bd_addr; /// Packet Type uint16_t pkt_type; /// Page Scan Repetition Mode uint8_t page_scan_rep_mode; /// Reserved uint8_t rsvd; /** * Clock Offset * * Bits 14-0 : Bits 16-2 of CLKNslave-CLK * Bit 15 : Clock_Offset_Valid_Flag * Invalid Clock Offset = 0 * Valid Clock Offset = 1 */ uint16_t clk_off; /// Allow Switch uint8_t switch_en; }; /// HCI disconnect command structure struct hci_disconnect_cmd { /// connection handle uint16_t conhdl; /// reason uint8_t reason; }; /// HCI master link key command structure struct hci_master_lk_cmd { ///Key flag uint8_t key_flag; }; /// HCI authentication request command parameters structure struct hci_set_con_enc_cmd { ///Connection handle uint16_t conhdl; ///Encryption mode uint8_t enc_en; }; struct hci_rem_name_req_cmd { ///BdAddr struct bd_addr bd_addr; ///Page Scan Repetition Mode uint8_t page_scan_rep_mode; ///Reserved uint8_t rsvd; /** * Clock Offset * * Bits 14-0 : Bits 16-2 of CLKNslave-CLK * Bit 15 : Clock_Offset_Valid_Flag * Invalid Clock Offset = 0 * Valid Clock Offset = 1 */ uint16_t clk_off; }; /// HCI remote name request complete event structure struct hci_rem_name_req_cmp_evt { /// Status uint8_t status; /// BD Addr struct bd_addr bd_addr; /// Name struct device_name name; }; /// HCI setup synchronous connection command structure struct hci_setup_sync_con_cmd { ///Connection handle uint16_t conhdl; ///Transmit bandwidth uint32_t tx_bw; ///Receive bandwidth uint32_t rx_bw; ///Max latency uint16_t max_lat; ///Voice setting uint16_t vx_set; ///Retransmission effort uint8_t retx_eff; ///Packet type uint16_t pkt_type; }; /// HCI setup synchronous connection command structure struct hci_enh_setup_sync_con_cmd { uint16_t conhdl; // Connection Handle uint32_t tx_bw; // Transmit Bandwidth (in B/sec) uint32_t rx_bw; // Receive Bandwidth (in B/sec) uint8_t tx_cod_fmt[5]; // Transmit Coding Format uint8_t rx_cod_fmt[5]; // Receive Coding Format uint16_t tx_cod_fr_sz; // Transmit Codec Frame Size (in B) uint16_t rx_cod_fr_sz; // Receive Codec Frame Size (in B) uint32_t in_bw; // Input Bandwidth (in B/sec) uint32_t out_bw; // Output Bandwidth (in B/sec) uint8_t in_cod_fmt[5]; // Input Coding Format uint8_t out_cod_fmt[5]; // Output Coding Format uint16_t in_cod_data_sz; // Input Coded Data Size (in bits) uint16_t out_cod_data_sz; // Output Coded Data Size (in bits) uint8_t in_data_fmt; // Input PCM Data Format uint8_t out_data_fmt; // Output PCM Data Format uint8_t in_msb_pos; // Input PCM Sample Payload MSB Position (in bits) uint8_t out_msb_pos; // Output PCM Sample Payload MSB Position (in bits) uint8_t in_data_path; // Input Data Path uint8_t out_data_path; // Output Data Path uint8_t in_tr_unit_sz; // Input Transport Unit Size (in bits) uint8_t out_tr_unit_sz; // Output Transport Unit Size (in bits) uint16_t max_lat; // Max Latency (in ms) uint16_t packet_type; // Packet Type uint8_t retx_eff; // Retransmission Effort }; /// HCI io capability request reply command structure struct hci_io_cap_req_reply_cmd { ///BdAddr struct bd_addr bd_addr; ///IO capability uint8_t io_capa; ///OOB data present uint8_t oob_data_pres; ///Authentication requirements uint8_t auth_req; }; /// HCI io capability request negative reply command structure struct hci_io_cap_req_neg_reply_cmd { ///BdAddr struct bd_addr bd_addr; ///Reason uint8_t reason; }; /// HCI user pass key request reply command structure struct hci_user_passkey_req_reply_cmd { ///BdAddr struct bd_addr bd_addr; ///Numeric value uint32_t num_val; }; /// HCI remote oob data request reply command structure struct hci_rem_oob_data_req_reply_cmd { ///BdAddr struct bd_addr bd_addr; ///hash part struct hash oob_c; ///random part struct randomizer oob_r; }; /// HCI send key press notification command structure struct hci_send_keypress_notif_cmd { ///BdAddr struct bd_addr bd_addr; ///Notification type uint8_t notif_type; }; /// HCI truncated page command structure struct hci_trunc_page_cmd { ///BdAddr struct bd_addr bd_addr; /// Page Scan Repetition Mode uint8_t page_scan_rep_mode; /** * Clock Offset * * Bits 14-0 : Bits 16-2 of CLKNslave-CLK * Bit 15 : Clock_Offset_Valid_Flag * Invalid Clock Offset = 0 * Valid Clock Offset = 1 */ uint16_t clk_off; }; /// HCI truncated page cancel command structure struct hci_trunc_page_can_cmd { ///BdAddr struct bd_addr bd_addr; }; /// HCI set connectionless slave broadcast command structure struct hci_set_con_slv_bcst_cmd { /// Enable uint8_t enable; /// LT_ADDR uint8_t lt_addr; /// LPO_Allowed uint8_t lpo_allowed; /// Packet_Type uint16_t packet_type; /// Interval_Min (in slots) uint16_t interval_min; /// Interval_Max (in slots) uint16_t interval_max; /// CSB_supervisionTO (in slots) uint16_t csb_supv_to; }; /// HCI set connectionless slave broadcast command complete event structure struct hci_set_con_slv_bcst_cmd_cmp_evt { /// Status uint8_t status; /// LT_ADDR uint8_t lt_addr; /// Interval (in slots) uint16_t interval; }; /// HCI set connectionless slave broadcast receive command structure struct hci_set_con_slv_bcst_rec_cmd { /// Enable uint8_t enable; /// BD_ADDR struct bd_addr bd_addr; /// LT_ADDR uint8_t lt_addr; /// Interval (in slots) uint16_t interval; /// Clock_Offset (28 bits) - (CLKNslave � CLK) modulo 2^28 uint32_t clock_offset; /// Next_Connectionless_Slave_Broadcast_Clock (28 bits) uint32_t next_csb_clock; /// CSB_supervisionTO (in slots) uint16_t csb_supv_to; /// Remote_Timing_Accuracy (in ppm) uint8_t remote_timing_accuracy; /// Skip uint8_t skip; /// Packet_Type uint16_t packet_type; /// AFH_Channel_Map struct chnl_map afh_ch_map; }; /// HCI set connectionless slave broadcast receive command complete event structure struct hci_set_con_slv_bcst_rec_cmd_cmp_evt { /// Status uint8_t status; /// BD_ADDR struct bd_addr bd_addr; /// LT_ADDR uint8_t lt_addr; }; /// HCI Receive Synchronization Train command structure struct hci_rec_sync_train_cmd { /// BD_ADDR struct bd_addr bd_addr; /// Synchronization_scanTO (in slots) uint16_t sync_scan_to; /// Sync_Scan_Window (in slots) uint16_t sync_scan_win; /// Sync_Scan_Interval (in slots) uint16_t sync_scan_int; }; /// HCI remote oob extended data request reply command structure struct hci_rem_oob_ext_data_req_reply_cmd { ///BdAddr struct bd_addr bd_addr; ///hash part struct hash oob_c_192; ///random part struct randomizer oob_r_192; ///hash part struct hash oob_c_256; ///random part struct randomizer oob_r_256; }; struct hci_le_generate_dh_key_cmd { uint8_t public_key[64]; }; /* * HCI LINK POLICY COMMANDS PARAMETERS **************************************************************************************** */ /// HCI setup quality of service command structure struct hci_qos_setup_cmd { ///Connection handle uint16_t conhdl; ///Flags uint8_t flags; ///Service type uint8_t serv_type; ///Token rate uint32_t tok_rate; ///Peak bandwidth uint32_t pk_bw; ///Latency uint32_t lat; ///Delay variation uint32_t del_var; }; /// HCI command complete event structure for read default link policy command structure struct hci_rd_dft_link_pol_stg_cmd_cmp_evt { ///Status of the command reception uint8_t status; ///Link policy uint16_t link_pol_stg; }; struct hci_wr_dft_link_pol_stg_cmd { ///Link policy uint16_t link_pol_stg; }; /* * HCI CONTROL & BASEBAND COMMANDS PARAMETERS **************************************************************************************** */ /// HCI set event mask command structure struct hci_set_evt_mask_cmd { ///Event Mask struct evt_mask event_mask; }; /// HCI set event filter command structure struct hci_set_evt_filter_cmd { /// Filter type uint8_t filter_type; /// Filters union hci_filter { uint8_t clear_all_filter_reserved; /// Inquiry Result Filter struct inq_res_filter { /// Filter Condition type uint8_t cond_type; /// Filter conditions union hci_inq_filter_cond { /// Reserved value (Inquiry Result Filter - condition type 0x00 has no condition) uint8_t cond_0_reserved; /// Inquiry Result Filter Condition - condition type 0x01 struct inq_res_filter_cond_1 { /// Class_of_Device struct devclass class_of_dev; /// Class_of_Device_Mask struct devclass class_of_dev_msk; } cond_1; /// Inquiry Result Filter Condition - condition type 0x02 struct inq_res_filter_cond_2 { /// BD Address struct bd_addr bd_addr; } cond_2; } cond; } inq_res; /// Connection Setup Filter struct con_set_filter { /// Filter Condition type uint8_t cond_type; /// Filter conditions union hci_con_filter_cond { /// Connection Setup Filter Condition - condition type 0x00 struct con_set_filter_cond_0 { /// Auto_Accept_Flag uint8_t auto_accept; } cond_0; /// Connection Setup Filter Condition - condition type 0x01 struct con_set_filter_cond_1 { /// Class_of_Device struct devclass class_of_dev; /// Class_of_Device_Mask struct devclass class_of_dev_msk; /// Auto_Accept_Flag uint8_t auto_accept; } cond_1; /// Connection Setup Filter Condition - condition type 0x02 struct con_set_filter_cond_2 { /// BD Address struct bd_addr bd_addr; /// Auto_Accept_Flag uint8_t auto_accept; } cond_2; } cond; } con_set; } filter; }; /// HCI command completed event structure for the flush command struct hci_flush_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; }; /// HCI command complete event structure for the Read pin type command struct hci_rd_pin_type_cmd_cmp_evt { ///Status of the command uint8_t status; ///PIN type uint8_t pin_type; }; struct hci_wr_pin_type_cmd { ///PIN type uint8_t pin_type; }; struct hci_rd_stored_lk_cmd { ///BdAddr struct bd_addr bd_addr; ///Read all flag uint8_t rd_all_flag; }; /// HCI command complete event structure for read stored link key command struct hci_rd_stored_lk_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Maximum number of key uint16_t num_key_max; ///Read number of key uint16_t num_key_rd; }; #if BT_EMB_PRESENT struct hci_wr_stored_lk_cmd { /// Number of key to write uint8_t num_key_wr; /// BD Address + Key table struct bd_addr_plus_key link_keys[HCI_MAX_CMD_PARAM_SIZE / sizeof(struct bd_addr_plus_key)]; }; #endif //BT_EMB_PRESENT /// HCI command complete event structure for write stored link key command struct hci_wr_stored_lk_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///number of key written uint8_t num_key_wr; }; struct hci_del_stored_lk_cmd { ///BdAddr struct bd_addr bd_addr; ///Delete all flag uint8_t del_all_flag; }; /// HCI command complete event structure for delete stored link key command struct hci_del_stored_lk_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Read number of key uint16_t num_key_del; }; struct hci_wr_local_name_cmd { ///Name struct device_name name; }; /// HCI command complete event structure for the read local name command struct hci_rd_local_name_cmd_cmp_evt { ///Status of the command uint8_t status; ///Name uint8_t name[BD_NAME_SIZE]; }; /// HCI command complete event structure for the Read connection accept to command struct hci_rd_con_accept_to_cmd_cmp_evt { ///Status of the command uint8_t status; /// Connection accept timeout (in slots) uint16_t con_acc_to; }; struct hci_wr_con_accept_to_cmd { /// Connection accept timeout (in slots) uint16_t con_acc_to; }; /// HCI command complete event structure for the Read page to command struct hci_rd_page_to_cmd_cmp_evt { ///Status of the command uint8_t status; /// Page timeout (in slots) uint16_t page_to; }; struct hci_wr_page_to_cmd { /// Page timeout (in slots) uint16_t page_to; }; /// HCI command complete event structure for the Read scan enable command struct hci_rd_scan_en_cmd_cmp_evt { ///Status of the command uint8_t status; ///Status of the scan enable uint8_t scan_en; }; struct hci_wr_scan_en_cmd { ///Status of the scan enable uint8_t scan_en; }; /// HCI command complete event structure for the Read scan activity command struct hci_rd_page_scan_act_cmd_cmp_evt { ///Status of the command uint8_t status; /// Page scan interval (in slots) uint16_t page_scan_intv; /// Page scan window (in slots) uint16_t page_scan_win; }; struct hci_wr_page_scan_act_cmd { /// Page scan interval (in slots) uint16_t page_scan_intv; /// Page scan window (in slots) uint16_t page_scan_win; }; /// HCI command complete event structure for the Read inquiry scan activity command struct hci_rd_inq_scan_act_cmd_cmp_evt { /// Status of the command uint8_t status; /// Inquiry scan interval (in slots) uint16_t inq_scan_intv; /// Inquiry scan window (in slots) uint16_t inq_scan_win; }; struct hci_wr_inq_scan_act_cmd { /// Inquiry scan interval (in slots) uint16_t inq_scan_intv; /// Inquiry scan window (in slots) uint16_t inq_scan_win; }; /// HCI command complete event structure for the Read authentication command struct hci_rd_auth_en_cmd_cmp_evt { ///Status of the command uint8_t status; ///Value of the authentication uint8_t auth_en; }; struct hci_wr_auth_en_cmd { ///Value of the authentication uint8_t auth_en; }; /// HCI command complete event structure for the read class of device command struct hci_rd_class_of_dev_cmd_cmp_evt { ///Status of the command uint8_t status; ///Class of device struct devclass class_of_dev; }; struct hci_wr_class_of_dev_cmd { ///Class of device struct devclass class_of_dev; }; /// HCI read voice settings complete event struct hci_rd_voice_stg_cmd_cmp_evt { ///Status of the command reception uint8_t status; /// Voice setting uint16_t voice_stg; }; struct hci_wr_voice_stg_cmd { /// voice setting uint16_t voice_stg; }; /// HCI command complete event structure for read number of broadcast retrans command struct hci_rd_nb_bdcst_retx_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Read number of broadcast retransmission uint8_t num_bcst_ret; }; struct hci_wr_nb_bdcst_retx_cmd { ///Read number of broadcast retransmission uint8_t num_bcst_ret; }; /// HCI command complete event structure for the Read Synchronous Flow Control command struct hci_rd_sync_flow_ctrl_en_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Synchronous flow control enable uint8_t sync_flow_ctrl_en; }; struct hci_wr_sync_flow_ctrl_en_cmd { /// Synchronous Flow Control enable uint8_t sync_flow_ctrl_en; }; ///HCI set controller to host flow control command struct hci_set_ctrl_to_host_flow_ctrl_cmd { ///Flow control enable for controller uint8_t flow_cntl; }; ///HCI host buffer size command struct hci_host_buf_size_cmd { ///Host ACL packet length uint16_t acl_pkt_len; ///Host synchronous packet length uint8_t sync_pkt_len; ///Host Total number of ACL packets allowed uint16_t nb_acl_pkts; ///Host total number of synchronous packets allowed uint16_t nb_sync_pkts; }; #if BT_EMB_PRESENT ///HCI host number of completed packets command struct hci_host_nb_cmp_pkts_cmd { ///Number of handles for which the completed packets number is given uint8_t nb_of_hdl; ///Array of connection handles uint16_t con_hdl[MAX_NB_ACTIVE_ACL]; ///Array of number of completed packets values for connection handles. uint16_t nb_comp_pkt[MAX_NB_ACTIVE_ACL]; }; #elif BLE_EMB_PRESENT || BLE_HOST_PRESENT ///HCI host number of completed packets command struct hci_host_nb_cmp_pkts_cmd { ///Number of handles for which the completed packets number is given uint8_t nb_of_hdl; ///Array of connection handles uint16_t con_hdl[BLE_CONNECTION_MAX+1]; // ensure that at least 1 element is present ///Array of number of completed packets values for connection handles. uint16_t nb_comp_pkt[BLE_CONNECTION_MAX+1]; // ensure that at least 1 element is present }; #endif //BLE_EMB_PRESENT || BLE_HOST_PRESENT /// HCI read link supervision timeout command parameters structure struct hci_rd_link_supv_to_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Link supervision timeout uint16_t lsto_val; }; /// HCI write link supervision timeout command parameters structure struct hci_wr_link_supv_to_cmd { ///Connection handle uint16_t conhdl; ///Link supervision timeout uint16_t lsto_val; }; /// HCI command complete event structure for the nb of supported IAC command struct hci_rd_nb_supp_iac_cmd_cmp_evt { ///Status of the command uint8_t status; ///nb_of iac uint8_t nb_iac; }; /// HCI command complete event structure for read current IAC LAP command struct hci_rd_curr_iac_lap_cmd_cmp_evt { ///Status of the command uint8_t status; ///nb of current iac uint8_t nb_curr_iac; ///lap struct lap iac_lap; }; /// HCI write current IAC LAP command structure struct hci_wr_curr_iac_lap_cmd { /// Number of current iac laps uint8_t nb_curr_iac; ///lap struct lap iac_lap[(HCI_MAX_CMD_PARAM_SIZE / BD_ADDR_LAP_LEN) - 1]; }; struct hci_set_afh_host_ch_class_cmd { ///AFH channel map struct chnl_map afh_ch; }; /// HCI command complete event structure for write inquiry scan type command structure struct hci_rd_inq_scan_type_cmd_cmp_evt { /// Status of the command reception uint8_t status; /// Inquiry scan type uint8_t inq_scan_type; }; struct hci_wr_inq_scan_type_cmd { /// Inquiry scan type uint8_t inq_scan_type; }; /// HCI command complete event structure for read inquiry mode command structure struct hci_rd_inq_mode_cmd_cmp_evt { /// Status of the command reception uint8_t status; /// Inquiry mode uint8_t inq_mode; }; struct hci_wr_inq_mode_cmd { /// Inquiry mode uint8_t inq_mode; }; /// HCI command complete event structure for write page scan type command structure struct hci_rd_page_scan_type_cmd_cmp_evt { /// Status of the command reception uint8_t status; /// Page scan type uint8_t page_scan_type; }; struct hci_wr_page_scan_type_cmd { /// Page scan type uint8_t page_scan_type; }; /// HCI command complete event structure for read assessment mode command structure struct hci_rd_afh_ch_assess_mode_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///AFH channel assessment mode uint8_t afh_ch_ass_mode; }; struct hci_wr_afh_ch_assess_mode_cmd { ///AFH channel assessment mode uint8_t afh_ch_ass_mode; }; /// HCI command complete event structure for remote name request cancel command struct hci_rd_ext_inq_rsp_cmd_cmp_evt { ///status uint8_t status; ///FEC required uint8_t fec_req; ///Extended inquiry response struct eir eir; }; struct hci_wr_ext_inq_rsp_cmd { ///FEC required uint8_t fec_req; ///Extended inquiry response struct eir eir; }; /// HCI command complete event structure for remote name request cancel command struct hci_rd_sp_mode_cmd_cmp_evt { ///status uint8_t status; ///Simple pairing mode uint8_t sp_mode; }; struct hci_wr_sp_mode_cmd { ///Simple pairing mode uint8_t sp_mode; }; /// HCI command complete event structure for read oob data command struct hci_rd_loc_oob_data_cmd_cmp_evt { ///status uint8_t status; ///hash part struct hash oob_c; ///random part struct randomizer oob_r; }; /// HCI command complete event structure for read inquiry response transmit power command struct hci_rd_inq_rsp_tx_pwr_lvl_cmd_cmp_evt { ///status uint8_t status; ///TX power uint8_t tx_pwr; }; struct hci_wr_inq_tx_pwr_lvl_cmd { ///TX power int8_t tx_pwr; }; /// HCI command complete event structure for read erroneous data reporting command struct hci_rd_dft_err_data_rep_cmd_cmp_evt { ///status uint8_t status; ///Erroneous data reporting uint8_t err_data_rep; }; struct hci_wr_dft_err_data_rep_cmd { ///Erroneous data reporting uint8_t err_data_rep; }; /// HCI read LE Host Supported complete event struct hci_rd_le_host_supp_cmd_cmp_evt { ///Status uint8_t status; ///LE_Supported_Host uint8_t le_supported_host; ///Simultaneous_LE_Host uint8_t simultaneous_le_host; }; /// HCI write LE Host Supported command struct hci_wr_le_host_supp_cmd { ///LE_Supported_Host uint8_t le_supported_host; ///Simultaneous_LE_Host uint8_t simultaneous_le_host; }; /// HCI Set MWS Channel Parameters command struct hci_set_mws_channel_params_cmd { ///MWS_Channel_Enable uint8_t mws_channel_enable; ///MWS_RX_Center_Frequency uint16_t mws_rx_center_frequency; ///MWS_TX_Center_Frequency uint16_t mws_tx_center_frequency; ///MWS_RX_Channel_Bandwidth uint16_t mws_rx_channel_bandwidth; ///MWS_TX_Channel_Bandwidth uint16_t mws_tx_channel_bandwidth; ///MWS_Channel_Type uint8_t mws_channel_type; }; /// HCI Set External Frame Configuration command struct hci_set_external_frame_config_cmd { /// Ext_Frame_Duration uint16_t ext_fr_duration; /// Ext_Frame_Sync_Assert_Offset int16_t ext_fr_sync_assert_offset; /// Ext_Frame_Sync_Assert_Jitter uint16_t ext_fr_sync_assert_jitter; /// Ext_Frame_Num_Periods uint8_t ext_fr_num_periods; /// Period_Duration[i] uint16_t period_duration[__ARRAY_EMPTY]; /// Period_Type[i] //uint8_t period_type[__ARRAY_EMPTY]; }; /// HCI Set MWS Signaling command struct hci_set_mws_signaling_cmd { ///MWS_RX_Assert_Offset int16_t mws_rx_assert_offset; ///MWS_RX_Assert_Jitter uint16_t mws_rx_assert_jitter; ///MWS_RX_Deassert_Offset int16_t mws_rx_deassert_offset; ///MWS_RX_Deassert_Jitter uint16_t mws_rx_deassert_jitter; ///MWS_TX_Assert_Offset int16_t mws_tx_assert_offset; ///MWS_TX_Assert_Jitter uint16_t mws_tx_assert_jitter; ///MWS_TX_Deassert_Offset int16_t mws_tx_deassert_offset; ///MWS_TX_Deassert_Jitter uint16_t mws_tx_deassert_jitter; ///MWS_Pattern_Assert_Offset int16_t mws_pattern_assert_offset; ///MWS_Pattern_Assert_Jitter uint16_t mws_pattern_assert_jitter; ///MWS_Inactivity_Duration_Assert_Offset int16_t mws_inactivity_duration_assert_offset; ///MWS_Inactivity_Duration_Assert_Jitter uint16_t mws_inactivity_duration_assert_jitter; ///MWS_Scan_Frequency_Assert_Offset int16_t mws_scan_frequency_assert_offset; ///MWS_Scan_Frequency_Assert_Jitter uint16_t mws_scan_frequency_assert_jitter; ///MWS_Priority_Assert_Offset_Request uint16_t mws_priority_assert_offset_request; }; /// HCI Set MWS Signaling command complete event struct hci_set_mws_signaling_cmd_cmp_evt { ///Status uint8_t status; ///Bluetooth_Rx_Priority_Assert_Offset int16_t bt_rx_prio_assert_offset; ///Bluetooth_Rx_Priority_Assert_Jitter uint16_t bt_rx_prio_assert_jitter; ///Bluetooth_Rx_Priority_Deassert_Offset int16_t bt_rx_prio_deassert_offset; ///Bluetooth_Rx_Priority_Deassert_Jitter uint16_t bt_rx_prio_deassert_jitter; ///802_Rx_Priority_Assert_Offset int16_t _802_rx_prio_assert_offset; ///802_Rx_Priority_Assert_Jitter uint16_t _802_rx_prio_assert_jitter; ///802_Rx_Priority_Deassert_Offset int16_t _802_rx_prio_deasssert_offset; ///802_Rx_Priority_Deassert_Jitter uint16_t _802_rx_prio_deassert_jitter; ///Bluetooth_Tx_On_Assert_Offset int16_t bt_tx_on_assert_offset; ///Bluetooth_Tx_On_Assert_Jitter uint16_t bt_tx_on_assert_jitter; ///Bluetooth_Tx_On_Deassert_Offset int16_t bt_tx_on_deassert_offset; ///Bluetooth_Tx_On_Deassert_Jitter uint16_t bt_tx_on_deassert_jitter; ///802_Tx_On_Assert_Offset int16_t _802_tx_on_assert_offset; ///802_Tx_On_Assert_Jitter uint16_t _802_tx_on_assert_jitter; ///802_Tx_On_Deassert_Offset int16_t _802_tx_on_deassert_offset; ///802_Tx_On_Deassert_Jitter uint16_t _802_tx_on_deassert_jitter; }; /// HCI Set MWS Transport Layer command struct hci_set_mws_transport_layer_cmd { ///Transport_Layer uint8_t transport_layer; ///To_MWS_Baud_Rate uint32_t to_mws_baud_rate; ///From_MWS_Baud_Rate uint32_t from_mws_baud_rate; }; /// HCI Set MWS Scan Frequency Table command struct hci_set_mws_scan_freq_table_cmd { ///Num_Scan_Frequencies uint8_t num_scan_frequencies; ///Scan_Frequency_Low[i] uint16_t scan_frequency_low[1/*__ARRAY_EMPTY*/]; ///Scan_Frequency_High[i] uint16_t scan_frequency_high[1/*__ARRAY_EMPTY*/]; }; /// HCI Set MWS Pattern Configuration command struct hci_set_mws_pattern_config_cmd { ///MWS_PATTERN_Index uint8_t mws_pattern_index; ///MWS_PATTERN_NumIntervals uint8_t mws_pattern_num_intervals; ///MWS_PATTERN_IntervalDuration[i] uint16_t mws_pattern_interval_duration[1/*__ARRAY_EMPTY*/]; ///MWS_PATTERN_IntervalType[i] uint8_t mws_pattern_interval_type[1/*__ARRAY_EMPTY*/]; }; /// Hci Get MWS Transport Layer Configuration command complete event struct hci_get_mws_transport_layer_config_cmd_cmp_evt { ///Status uint8_t status; ///Num_Transports uint8_t num_transports; ///Transport_Layer[i] uint8_t transport_layer[1/*__ARRAY_EMPTY*/]; ///Num_Baud_Rates[i] uint8_t num_baud_rates[1/*__ARRAY_EMPTY*/]; ///To_MWS_Baud_Rate[k] uint32_t to_mws_baud_rate[1/*__ARRAY_EMPTY*/]; ///From_MWS_Baud_Rate[k] uint32_t from_mws_baud_rate[1/*__ARRAY_EMPTY*/]; }; /// HCI read Secure Connections Host Support complete event struct hci_rd_sec_con_host_supp_cmd_cmp_evt { ///Status uint8_t status; /// Secure Connections Host Support uint8_t sec_con_host_supp; }; /// HCI write Secure Connections Host Support command struct hci_wr_sec_con_host_supp_cmd { /// Secure Connections Host Support uint8_t sec_con_host_supp; }; /// HCI Set Reserved LT_ADDR command struct hci_set_res_lt_addr_cmd { /// LT_ADDR uint8_t lt_addr; }; /// HCI Set Reserved LT_ADDR command complete event struct hci_set_res_lt_addr_cmd_cmp_evt { /// Status uint8_t status; /// LT_ADDR uint8_t lt_addr; }; /// HCI Delete Reserved LT_ADDR command struct hci_del_res_lt_addr_cmd { /// LT_ADDR uint8_t lt_addr; }; /// HCI Delete Reserved LT_ADDR command complete event struct hci_del_res_lt_addr_cmd_cmp_evt { /// Status uint8_t status; /// LT_ADDR uint8_t lt_addr; }; /// HCI Set Connectionless Slave Broadcast Data command struct hci_set_con_slv_bcst_data_cmd { /// LT_ADDR uint8_t lt_addr; /// Fragment uint8_t fragment; /// Data_Length (in bytes) uint8_t data_length; /// Data uint8_t data[__ARRAY_EMPTY]; }; /// HCI Set Connectionless Slave Broadcast Data command complete event struct hci_set_con_slv_bcst_data_cmd_cmp_evt { /// Status uint8_t status; /// LT_ADDR uint8_t lt_addr; }; /// HCI Read Synchronization Train Parameters command complete event struct hci_rd_sync_train_param_cmd_cmp_evt { /// Status uint8_t status; /// Sync_Train_Interval (in slots) uint16_t sync_train_int; /// synchronization_trainTO (in slots) uint32_t sync_train_to; /// Service_Data uint8_t service_data; }; /// HCI Write Synchronization Train Parameters command struct hci_wr_sync_train_param_cmd { /// Interval_Min (in slots) uint16_t int_min; /// Interval_Max (in slots) uint16_t int_max; /// synchronization_trainTO (in slots) uint32_t sync_train_to; /// Service_Data uint8_t service_data; }; /// HCI Write Synchronization Train Parameters command complete event struct hci_wr_sync_train_param_cmd_cmp_evt { /// Status uint8_t status; /// Sync_Train_Interval (in slots) uint16_t sync_train_int; }; // HCI Synchronization Train Complete event struct hci_sync_train_cmp_evt { /// Status uint8_t status; }; /// HCI read authenticated payload timeout command struct hci_rd_auth_payl_to_cmd { ///Connection handle uint16_t conhdl; }; /// HCI command complete event structure for the Read Authenticated Payload Timeout Command struct hci_rd_auth_payl_to_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Authenticated payload timeout uint16_t auth_payl_to; }; /// HCI command complete event structure for read oob extended data command struct hci_rd_loc_oob_ext_data_cmd_cmp_evt { ///status uint8_t status; ///hash part struct hash oob_c_192; ///random part struct randomizer oob_r_192; ///hash part struct hash oob_c_256; ///random part struct randomizer oob_r_256; }; /// HCI read Extended Page Timeout CC event struct hci_rd_ext_page_to_cmd_cmp_evt { /// Status uint8_t status; /** * Extended Page Timeout measured in Number of Baseband slots. Interval Length = N * 0.625 msec (1 Baseband slot) * Range for N: 0x0000 (default) - 0xFFFF * Time Range: 0 - 40.9 Seconds */ uint16_t ext_page_to; }; /// HCI write Extended Page Timeout struct hci_wr_ext_page_to_cmd { /** * Extended Page Timeout measured in Number of Baseband slots. Interval Length = N * 0.625 msec (1 Baseband slot) * Range for N: 0x0000 (default) - 0xFFFF * Time Range: 0 - 40.9 Seconds */ uint16_t ext_page_to; }; /// HCI read Extended Inquiry Length CC event struct hci_rd_ext_inq_len_cmd_cmp_evt { /// Status uint8_t status; /// Extended Inquiry Length uint16_t ext_inq_len; }; /// HCI write Extended Inquiry Length struct hci_wr_ext_inq_len_cmd { /// Extended Inquiry Length uint16_t ext_inq_len; }; /* * HCI INFORMATIONAL PARAMETERS COMMANDS PARAMETERS **************************************************************************************** */ ///HCI command complete event structure for read local version information struct hci_rd_local_ver_info_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///HCI version number uint8_t hci_ver; ///HCI revision number uint16_t hci_rev; ///LMP version uint8_t lmp_ver; ///manufacturer name uint16_t manuf_name; ///LMP Subversion uint16_t lmp_subver; }; ///HCI command complete event structure for read local supported commands struct hci_rd_local_supp_cmds_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Supported Commands structure struct supp_cmds local_cmds; }; /// HCI command complete event structure for read local supported features command struct hci_rd_local_supp_feats_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Local supported features struct features feats; }; struct hci_rd_local_ext_feats_cmd { ///Page number uint8_t page_nb; }; /// HCI command complete event structure for read local extended features command struct hci_rd_local_ext_feats_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Page number uint8_t page_nb; ///Maximum page number uint8_t page_nb_max; ///Extended LMP features struct features ext_feats; }; ///HCI command complete event structure for the Read Buffer Size Command struct hci_rd_buff_size_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///ACL data packet length controller can receive from host uint16_t hc_data_pk_len; ///Synchronous data packet length controller can receive from host uint8_t hc_sync_pk_len; ///Total number of ACL data packets controller can receive from host uint16_t hc_tot_nb_data_pkts; ///Total number of synchronous data packets controller can receive from host uint16_t hc_tot_nb_sync_pkts; }; ///HCI command complete event structure for read bd address struct hci_rd_bd_addr_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///BD address struct bd_addr local_addr; }; /// HCI command complete event structure for read local supported codecs struct hci_rd_local_supp_codecs_cmd_cmp_evt { /// Status of the command reception uint8_t status; uint8_t nb_supp_codecs; uint8_t nb_supp_vendor_specific_codecs; // ///Supported Codecs structure // struct supp_codecs local_codecs; }; /* * HCI STATUS PARAMETERS COMMANDS PARAMETERS **************************************************************************************** */ /// HCI command complete event structure for read rssi struct hci_rd_rssi_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///RSSI value uint8_t rssi; }; struct hci_rd_clk_cmd { ///Connection handle uint16_t conhdl; ///Which clock uint8_t clk_type; }; /// HCI read clock command structure struct hci_rd_clk_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Connection handle uint16_t conhdl; ///clock uint32_t clk; ///Accuracy uint16_t clk_acc; }; /* * HCI TESTING COMMANDS PARAMETERS **************************************************************************************** */ /// HCI command complete event structure for read loop back mode command struct hci_rd_loopback_mode_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Local supported features uint8_t lb_mode; }; struct hci_wr_loopback_mode_cmd { ///Local supported features uint8_t lb_mode; }; struct hci_wr_sp_dbg_mode_cmd { ///Simple pairing mode uint8_t sp_mode; }; /// * TCI Event subcodes enum tci_evt_subcode { TCI_LMP_TX_EVENT = 0x22, TCI_LMP_RX_EVENT = 0x23, TCI_LC_TX_EVENT = 0x24, TCI_LC_RX_EVENT = 0x25, TCI_BB_TX_EVENT = 0x26, TCI_BB_RX_EVENT = 0x27, TCI_HW_ERROR_EVENT = 0x28, TCI_RADIO_EVENT = 0x30, TCI_INTERRUPT_EVENT = 0x40, }; /// LMP direction #define TCI_LMP_DIR_TX 0 #define TCI_LMP_DIR_RX 1 /// HCI tci lmp exchange event structure struct hci_tci_lmp_evt { ///code uint8_t tci_code; ///length uint8_t evt_len; ///subcode uint8_t subcode; ///evt direction uint8_t direction; ///lmp evt body uint8_t body[17]; }; /* * HCI LE CONTROLLER COMMANDS PARAMETERS **************************************************************************************** */ ///HCI LE Set Event Mask Command parameters structure struct hci_le_set_evt_mask_cmd { ///LE Event Mask struct evt_mask le_mask; }; ///HCI LE Set Random Address Command parameters structure struct hci_le_set_rand_addr_cmd { ///Random address to set struct bd_addr rand_addr; }; ///HCI LE Set Advertising Parameters Command parameters structure struct hci_le_set_adv_param_cmd { ///Minimum interval for advertising uint16_t adv_intv_min; ///Maximum interval for advertising uint16_t adv_intv_max; ///Advertising type uint8_t adv_type; ///Own address type: public=0 / random=1 / rpa_or_pub=2 / rpa_or_rnd=3 uint8_t own_addr_type; ///Peer address type: public=0 / random=1 uint8_t peer_addr_type; ///Peer Bluetooth device address struct bd_addr peer_addr; ///Advertising channel map uint8_t adv_chnl_map; ///Advertising filter policy uint8_t adv_filt_policy; }; ///HCI LE Set Advertising Data Command parameters structure struct hci_le_set_adv_data_cmd { ///Advertising data length uint8_t adv_data_len; ///Advertising data - maximum 31 bytes struct adv_data data; }; ///HCI LE Set Scan Response Data Command parameters structure struct hci_le_set_scan_rsp_data_cmd { ///Scan response data length uint8_t scan_rsp_data_len; ///Scan response data - maximum 31 bytes struct scan_rsp_data data; }; ///HCI LE Set Advertise Enable Command parameters structure struct hci_le_set_adv_en_cmd { ///Advertising enable - 0=disabled, 1=enabled uint8_t adv_en; }; ///HCI LE Set Scan Parameters Command parameters structure struct hci_le_set_scan_param_cmd { ///Scan type - 0=passive / 1=active uint8_t scan_type; ///Scan interval uint16_t scan_intv; ///Scan window size uint16_t scan_window; ///Own address type - public=0 / random=1 / rpa_or_pub=2 / rpa_or_rnd=3 uint8_t own_addr_type; ///Scan filter policy uint8_t scan_filt_policy; }; ///HCI LE Set Scan Enable Command parameters structure struct hci_le_set_scan_en_cmd { ///Scan enable - 0=disabled, 1=enabled uint8_t scan_en; ///Enable for duplicates filtering - 0 =disabled/ 1=enabled uint8_t filter_duplic_en; }; ///HCI LE Create Connection Command parameters structure struct hci_le_create_con_cmd { ///Scan interval (N * 0.625 ms) uint16_t scan_intv; ///Scan window size (N * 0.625 ms) uint16_t scan_window; ///Initiator filter policy uint8_t init_filt_policy; ///Peer address type - public=0 / random=1 / rpa_or_pub=2 / rpa_or_rnd=3 uint8_t peer_addr_type; ///Peer BD address struct bd_addr peer_addr; ///Own address type - public=0 / random=1 / rpa_or_pub=2 / rpa_or_rnd=3 uint8_t own_addr_type; ///Minimum of connection interval (N * 1.25 ms) uint16_t con_intv_min; ///Maximum of connection interval (N * 1.25 ms) uint16_t con_intv_max; ///Connection latency uint16_t con_latency; ///Link supervision timeout uint16_t superv_to; ///Minimum CE length (N * 0.625 ms) uint16_t ce_len_min; ///Maximum CE length (N * 0.625 ms) uint16_t ce_len_max; }; ///HCI LE Add Device to White List Command parameters structure struct hci_le_add_dev_to_wlst_cmd { ///Type of address of the device to be added to the White List - 0=public/1=random uint8_t dev_addr_type; ///Address of device to be added to White List struct bd_addr dev_addr; }; ///HCI LE Remove Device from White List Command parameters structure struct hci_le_rmv_dev_from_wlst_cmd { ///Type of address of the device to be removed from the White List - 0=public/1=random uint8_t dev_addr_type; ///Address of device to be removed from White List struct bd_addr dev_addr; }; ///HCI LE Set Extended Scan Paramaters Command parameters structure struct hci_le_set_ext_scan_param_cmd { ///Own address type public/random/rpa uint8_t own_addr_type; ///Scanning filter policy uint8_t scan_filt_policy; ///Indicates the PHY(s) on which the advertising packets should be received uint8_t scan_phys; ///Paramaters for PHY(s) struct scan_phy_param { ///Scaning Type: passive/active uint8_t scan_type; ///Scan interval (slots) uint16_t scan_intv; ///Scan window size (slots) uint16_t scan_window; } phy[MAX_SCAN_PHYS]; }; ///HCI LE Set Extended Scan Enable Command parameters structure struct hci_le_set_ext_scan_en_cmd { ///Scan enable - 0=disabled, 1=enabled uint8_t scan_en; ///Filter duplicates - 0=disabled, 1=enabled, 2=enabled & reset each scan period uint8_t filter_duplic_en; ///Scan duration (Time=N*10ms) uint16_t duration; ///Scan period (Time=N*1.28sec) uint16_t period; }; ///HCI LE Extended Create Connection Command parameters strucuture struct hci_le_ext_create_con_cmd { ///Initiator filter policy uint8_t init_filter_policy; ///Own address type public/random/rpa uint8_t own_addr_type; ///Peer address type public/random/rpa uint8_t peer_addr_type; ///Peer address struct bd_addr peer_addr; ///Indicates the PHY(s) on which the advertising packets should be received uint8_t init_phys; ///Paramaters for PHY(s) struct init_phy_param { ///Scan interval (N * 0.625 ms) uint16_t scan_interval; ///Scan window size (N * 0.625 ms) uint16_t scan_window; ///Minimum of connection interval (N * 1.25 ms) uint16_t con_intv_min; ///Maximum of connection interval (N * 1.25 ms) uint16_t con_intv_max; ///Connection latency uint16_t con_latency; ///Link supervision timeout uint16_t superv_to; ///Minimum CE length (N * 0.625 ms) uint16_t ce_len_min; ///Maximum CE length (N * 0.625 ms) uint16_t ce_len_max; } phy[MAX_INIT_PHYS]; }; ///HCI LE Periodic Advertising Create Sync Command parameters strucutre struct hci_le_per_adv_create_sync_cmd { ///Filter policy uint8_t filter_policy; ///Advertising SID uint8_t adv_sid; ///Advertising address type uint8_t adv_addr_type; ///Advertiser address struct bd_addr adv_addr; ///max Skip after receive uint16_t skip; ///Sync timeout (Time=N*10ms) uint16_t sync_to; }; ///HCI LE Periodic Advertising Terminate Sync Command parameters structure struct hci_le_per_adv_term_sync_cmd { ///Sync handle uint16_t sync_handle; }; ///HCI LE Add Device to Periodic Advertiser List Command parameters structure struct hci_le_add_dev_to_per_adv_list_cmd { ///Advertiser address type uint8_t adv_addr_type; ///Advertiser address struct bd_addr adv_addr; ///Advertising SID uint8_t adv_sid; }; ///HCI LE Remove Device from Periodic Advertiser List Command parameters structure struct hci_le_rmv_dev_from_per_adv_list_cmd { ///Advertiser address type uint8_t adv_addr_type; ///Advertiser address struct bd_addr adv_addr; ///Advertising SID uint8_t adv_sid; }; ///HCI LE Set Privacy Mode Command parameters structure struct hci_le_set_priv_mode_cmd { ///Peer identity address type uint8_t peer_addr_type; ///Peer identity address struct bd_addr peer_addr; ///Privacy mode uint8_t priv_mode; }; ///HCI LE Set Host Channel Classification Command parameters structure struct hci_le_set_host_ch_class_cmd { ///Channel map struct le_chnl_map chmap; }; ///HCI LE Receiver Test Command parameters structure struct hci_le_rx_test_cmd { ///RX frequency for Rx test uint8_t rx_freq; }; ///HCI LE Transmitter Test Command parameters structure struct hci_le_tx_test_cmd { ///TX frequency for Tx test uint8_t tx_freq; ///TX test data length uint8_t test_data_len; ///TX test payload type - see enum uint8_t pk_payload_type; }; ///HCI LE Encrypt Command parameters structure struct hci_le_enc_cmd { ///Long term key structure struct ltk key; ///Pointer to buffer with plain data to encrypt - 16 bytes uint8_t plain_data[16]; }; /// HCI LE Connection Update Command parameters structure struct hci_le_con_update_cmd { ///Connection Handle uint16_t conhdl; ///Minimum of connection interval (units of 1.25 ms) uint16_t con_intv_min; ///Maximum of connection interval (units of 1.25 ms) uint16_t con_intv_max; ///Connection latency (units of connection event) uint16_t con_latency; ///Link supervision timeout (units of 10 ms) uint16_t superv_to; ///Minimum of CE length (units of 0.625 ms) uint16_t ce_len_min; ///Maximum of CE length (units of 0.625 ms) uint16_t ce_len_max; }; /// HCI LE Start Encryption Command parameters structure struct hci_le_start_enc_cmd { ///Connection handle uint16_t conhdl; ///Random number - 8B struct rand_nb nb; ///Encryption Diversifier uint16_t enc_div; ///Long term key struct ltk ltk; }; /// HCI long term key request reply command parameters structure struct hci_le_ltk_req_reply_cmd { ///Connection handle uint16_t conhdl; ///Long term key struct ltk ltk; }; /// HCI long term key request negative reply command parameters structure struct hci_le_ltk_req_neg_reply_cmd { ///Connection handle uint16_t conhdl; }; /// HCI LE remote connection parameter request reply command parameters structure struct hci_le_rem_con_param_req_reply_cmd { ///Connection handle uint16_t conhdl; ///Interval_Min uint16_t interval_min; ///Interval_Max uint16_t interval_max; ///Latency uint16_t latency; ///Timeout uint16_t timeout; ///Minimum_CE_Length uint16_t min_ce_len; ///Maximum_CE_Length uint16_t max_ce_len; }; /// HCI LE remote connection parameter request negative reply command parameters structure struct hci_le_rem_con_param_req_neg_reply_cmd { ///Connection handle uint16_t conhdl; ///Reason uint8_t reason; }; /// HCI LE Set Data Length Command parameters structure struct hci_le_set_data_len_cmd { ///Connection Handle uint16_t conhdl; ///Preferred maximum number of payload octets that the local Controller should include ///in a single Link Layer Data Channel PDU. uint16_t tx_octets; ///Preferred maximum number of microseconds that the local Controller should use to transmit ///a single Link Layer Data Channel PDU uint16_t tx_time; }; /// HCI LE Read Suggested Default Data Length Command struct hci_le_wr_suggted_dft_data_len_cmd { ///Suggested value for the Controller's maximum transmitted number of payload octets to be used uint16_t suggted_max_tx_octets; ///Suggested value for the Controller's maximum packet transmission time to be used uint16_t suggted_max_tx_time; }; /// HCI LE Add Device to Resolving List Command struct hci_le_add_dev_to_rslv_list_cmd { /// Peer Identity Address Type uint8_t peer_id_addr_type; /// Peer Identity Address struct bd_addr peer_id_addr; /// Peer IRK struct irk peer_irk; /// Local IRK struct irk local_irk; }; /// HCI LE Remove Device From Resolving List Command struct hci_le_rmv_dev_from_rslv_list_cmd { /// Peer Identity Address Type uint8_t peer_id_addr_type; /// Peer Identity Address struct bd_addr peer_id_addr; }; /// HCI LE Read Peer Resolvable Address Command struct hci_le_rd_peer_rslv_addr_cmd { /// Peer Identity Address Type uint8_t peer_id_addr_type; /// Peer Identity Address struct bd_addr peer_id_addr; }; /// HCI LE Read Local Resolvable Address Command struct hci_le_rd_loc_rslv_addr_cmd { /// Peer Identity Address Type uint8_t peer_id_addr_type; /// Peer Identity Address struct bd_addr peer_id_addr; }; /// HCI LE Set Address Resolution Enable Command struct hci_le_set_addr_resol_en_cmd { /// Address Resolution Enable uint8_t enable; }; /// HCI LE Set Resolvable Private Address Timeout Command struct hci_le_set_rslv_priv_addr_to_cmd { /// RPA Timeout uint16_t rpa_timeout; }; /* * HCI EVENTS PARAMETERS **************************************************************************************** */ /// HCI inquiry complete event structure struct hci_inq_cmp_evt { ///Status of the procedure uint8_t status; }; /// HCI Inquiry result event structure (with only 1 result) struct hci_inq_res_evt { ///Number of response uint8_t nb_rsp; ///BdAddr struct bd_addr bd_addr; ///Page Scan Repetition Mode uint8_t page_scan_rep_mode; ///Reserved uint8_t reserved1; ///Reserved uint8_t reserved2; ///class of device struct devclass class_of_dev; ///Clock Offset uint16_t clk_off; }; /// HCI Inquiry result with rssi event structure (with only 1 result) struct hci_inq_res_with_rssi_evt { ///Number of response uint8_t nb_rsp; ///BdAddr struct bd_addr bd_addr; ///Page Scan Repetition Mode uint8_t page_scan_rep_mode; ///Reserved uint8_t reserved1; ///class of device struct devclass class_of_dev; ///Clock Offset uint16_t clk_off; ///Rssi uint8_t rssi; }; /// HCI Extended inquiry result indication structure (with only 1 result) struct hci_ext_inq_res_evt { ///Number of response uint8_t nb_rsp; ///BdAddr struct bd_addr bd_addr; ///Page Scan Repetition Mode uint8_t page_scan_rep_mode; ///Reserved uint8_t reserved1; ///class of device struct devclass class_of_dev; ///Clock Offset uint16_t clk_off; ///RSSi uint8_t rssi; ///Extended inquiry response data struct eir eir; }; /// HCI disconnect complete event structure struct hci_disc_cmp_evt { ///Status of received command uint8_t status; ///Connection Handle uint16_t conhdl; ///Reason for disconnection uint8_t reason; }; /// HCI basic command complete event structure struct hci_basic_cmd_cmp_evt { ///Status of the command reception uint8_t status; }; /// HCI basic command complete event structure with connection handle struct hci_basic_conhdl_cmd_cmp_evt { /// status uint8_t status; /// connection handle uint16_t conhdl; }; /// HCI basic command complete event structure with BD address struct hci_basic_bd_addr_cmd_cmp_evt { ///status uint8_t status; ///BdAddr struct bd_addr bd_addr; }; /// HCI basic event structure with status and BD address struct hci_basic_stat_bd_addr_evt { ///status uint8_t status; ///BdAddr struct bd_addr bd_addr; }; /// HCI basic event including a connection handle as parameter struct hci_basic_conhdl_evt { ///Connection handle uint16_t conhdl; }; /// HCI complete event with status only. struct hci_cmd_stat_event { /// Status of the command reception uint8_t status; }; /// HCI number of packet complete event structure struct hci_nb_cmp_pkts_evt { /// number of handles uint8_t nb_of_hdl; /// connection handle uint16_t conhdl[1]; /// number of completed packets uint16_t nb_comp_pkt[1]; }; /// HCI data buffer overflow event structure struct hci_data_buf_ovflw_evt { ///Link type uint8_t link_type; }; /// HCI Hardware Error Event parameters structure struct hci_hw_err_evt { /// HW error code uint8_t hw_code; }; /// HCI encryption change event structure struct hci_enc_change_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Encryption enabled information uint8_t enc_stat; }; /// HCI encryption key refresh complete event structure struct hci_enc_key_ref_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; }; /// HCI Authenticated Payload Timeout Expired Event structure struct hci_auth_payl_to_exp_evt { ///Connection handle uint16_t conhdl; }; /// HCI command complete event structure for create connection struct hci_con_cmp_evt { /// Status uint8_t status; ///Connection handle uint16_t conhdl; ///Bluetooth Device address struct bd_addr bd_addr; ///Link type uint8_t link_type; ///Encryption state uint8_t enc_en; }; /// HCI command complete event structure for qos setup struct hci_qos_setup_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Flags uint8_t flags; ///Service type uint8_t serv_type; ///Token rate uint32_t tok_rate; ///Peak bandwidth uint32_t pk_bw; ///Latency uint32_t lat; ///Delay variation uint32_t del_var; }; /// HCI flow specification complete event parameters structure struct hci_flow_spec_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Flags uint8_t flags; ///Flow direction uint8_t flow_dir; ///Service type uint8_t serv_type; ///Token rate uint32_t tk_rate; ///Token buffer size uint32_t tk_buf_sz; ///Peak bandwidth uint32_t pk_bw; ///Access latency uint32_t acc_lat; }; /// HCI role change event parameters structure struct hci_role_chg_evt { ///Status uint8_t status; ///BD address struct bd_addr bd_addr; ///New role uint8_t new_role; }; /// HCI complete event structure for the read clock offset command struct hci_rd_clk_off_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Clock offset uint16_t clk_off_val; }; /// HCI event structure for the flush occurred event struct hci_flush_occurred_evt { ///Connection handle uint16_t conhdl; }; /// HCI max slot change event structure struct hci_max_slot_chg_evt { ///Connection handle uint16_t conhdl; ///Max slot uint8_t max_slot; }; /// HCI sniff subrating event parameters structure struct hci_sniff_sub_evt { ///Status. uint8_t status; ///Connection handle uint16_t conhdl; ///Maximum transmit latency uint16_t max_lat_tx; ///Maximum receive latency uint16_t max_lat_rx; ///Minimum remote TO uint16_t min_rem_to; ///Minimum local TO uint16_t min_loc_to; }; /// HCI read remote extended features complete event parameters structure struct hci_rd_rem_ext_feats_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///page number uint8_t pg_nb; ///page number max uint8_t pg_nb_max; ///ext LMP features struct features ext_feats; }; /// HCI read remote extended features complete event parameters structure struct hci_rem_host_supp_feats_notif_evt { ///BD address struct bd_addr bd_addr; ///ext lmp features struct features ext_feats; }; /// HCI command complete event structure for the read remote supported features command struct hci_rd_rem_supp_feats_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Remote features struct features rem_feats; }; /// HCI command complete event structure for the read remote information version command struct hci_rd_rem_ver_info_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///LMP version uint8_t vers; ///Manufacturer name uint16_t compid; ///LMP subversion uint16_t subvers; }; /// HCI encryption change event structure struct hci_enc_chg_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Encryption enabled information uint8_t enc_stat; }; /// HCI mode change event structure struct hci_mode_chg_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Current mode uint8_t cur_mode; /// Interval uint16_t interv; }; /// HCI simple pairing complete event structure struct hci_sp_cmp_evt { ///Status for command reception uint8_t status; ///Bluetooth Device address struct bd_addr bd_addr; }; /// HCI Authentication complete event structure struct hci_auth_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; }; /// HCI change connection link key complete event structure struct hci_chg_con_lk_cmp_evt { ///Status uint8_t status; ///Connection handle uint16_t conhdl; }; /// HCI encryption key refresh complete event structure struct hci_enc_key_refresh_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; }; /// HCI master link key complete event structure struct hci_master_lk_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Key flag uint8_t key_flag; }; /// HCI synchronous link connection complete event structure struct hci_sync_con_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///BD address struct bd_addr bd_addr; ///Link type uint8_t lk_type; ///Transmit interval uint8_t tx_int; ///Retransmission window uint8_t ret_win; ///rx packet length uint16_t rx_pkt_len; ///tx packet length uint16_t tx_pkt_len; ///Air mode uint8_t air_mode; }; /// HCI synchronous connection change event structure struct hci_sync_con_chg_evt { ///Status for command reception uint8_t status; ///Synchronous Connection handle uint16_t sync_conhdl; ///Transmit interval uint8_t tx_int; ///Retransmission window uint8_t ret_win; ///rx packet length uint16_t rx_pkt_len; ///tx packet length uint16_t tx_pkt_len; }; /// HCI connection packet type change event structure struct hci_con_pkt_type_chg_evt { ///Status for command reception uint8_t status; ///Synchronous Connection handle uint16_t sync_conhdl; ///Synchronous packet type uint16_t pkt_type; }; /// HCI link supervision timeout change event structure struct hci_link_supv_to_chg_evt { ///Connection handle uint16_t conhdl; ///Link supervision timeout uint16_t lsto_val; }; /// HCI link key request event structure struct hci_lk_req_evt { ///BD address struct bd_addr bd_addr; }; /// HCI encryption key refresh event structure struct hci_enc_key_refresh_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; }; /// HCI connection request event structure struct hci_con_req_evt { ///BD address struct bd_addr bd_addr; ///Class of device struct devclass classofdev; ///link type uint8_t lk_type; }; /// HCI quality of service violation event structure struct hci_qos_viol_evt { ///Connection handle uint16_t conhdl; }; /// HCI io capability response event structure struct hci_io_cap_rsp_evt { ///BdAddr struct bd_addr bd_addr; ///IO capability uint8_t io_capa; ///OOB data present uint8_t oob_data_pres; ///Authentication requirements uint8_t auth_req; }; /// HCI IO capability response event structure struct hci_io_cap_req_evt { ///BdAddr struct bd_addr bd_addr; }; /// HCI Return link keys event structure struct hci_return_link_keys_evt { ///Number of Keys uint8_t num_keys; ///BdAddr struct bd_addr bd_addr; ///Key struct ltk key; }; /// HCI pin code request event structure struct hci_pin_code_req_evt { ///BdAddr struct bd_addr bd_addr; }; /// HCI user passkey request event structure struct hci_user_passkey_req_evt { ///BdAddr struct bd_addr bd_addr; }; /// HCI user passkey notification event structure struct hci_user_passkey_notif_evt { ///BdAddr struct bd_addr bd_addr; ///Passkey uint32_t passkey; }; /// HCI remote OOB data request event structure struct hci_rem_oob_data_req_evt { ///BdAddr struct bd_addr bd_addr; }; /// HCI user confirmation request event structure struct hci_user_cfm_req_evt { ///BdAddr struct bd_addr bd_addr; ///Passkey uint32_t passkey; }; /// HCI keypress notification event structure struct hci_keypress_notif_evt { ///BdAddr struct bd_addr bd_addr; ///type uint8_t type; }; /// HCI link key notification event structure struct hci_lk_notif_evt { ///BdAddr struct bd_addr bd_addr; ///Key struct ltk key; ///type uint8_t key_type; }; /* * HCI LE META EVENTS PARAMETERS **************************************************************************************** */ // LE event structures /// HCI command complete event structure for the Read Local Supported Features struct hci_le_rd_local_supp_feats_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Local LE supported features struct le_features feats; }; /// HCI command complete event structure for the Read Advertising Channel Tx Power Command struct hci_rd_adv_chnl_tx_pw_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Advertising channel Tx power level int8_t adv_tx_pw_lvl; }; ///HCI command complete event structure for the Read White List Size Command struct hci_le_rd_wlst_size_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///White List size uint8_t wlst_size; }; ///HCI command complete event structure for the Read Buffer Size Command struct hci_le_rd_buff_size_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///ACL data packet length that can be sent from host to controller uint16_t hc_data_pk_len; ///Total number of ACL data packets that can be sent from host to controller. uint8_t hc_tot_nb_data_pkts; }; ///HCI command complete event structure for LE Rand Command struct hci_le_rand_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Random number struct rand_nb nb; }; ///HCI command complete event structure for Read Supported States Command struct hci_rd_supp_states_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///LE supported states response struct le_states states; }; ///HCI command complete event structure for Read Transmit Power Command struct hci_rd_tx_pwr_cmd_cmp_evt { /// Status of the command reception uint8_t status; /// Minimum transmit power uint8_t min_tx_pwr; /// Maximum transmit power uint8_t max_tx_pwr; }; ///HCI command complete event structure for Test End struct hci_test_end_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Number of RX packets - null if TX test was the ended one uint16_t nb_packet_received; }; ///HCI LE Encrypt complete event structure struct hci_le_enc_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Encrypted data to return to command source. uint8_t encrypted_data[ENC_DATA_LEN]; }; #if BLE_EMB_PRESENT || BLE_HOST_PRESENT ///HCI LE advertising report event structure struct hci_le_adv_report_evt { ///LE Subevent code uint8_t subcode; ///Number of advertising reports in this event uint8_t nb_reports; ///Advertising reports structures array struct adv_report adv_rep[BLE_ADV_REPORTS_MAX]; }; ///HCI LE extended advertising report event structure struct hci_le_ext_adv_report_evt { ///LE Subevent code uint8_t subcode; ///Number of advertising reports in this event uint8_t nb_reports; ///Paramaters for each report struct ext_adv_report adv_rep[BLE_ADV_REPORTS_MAX]; }; ///HCI LE periodic advertising sync established event structure struct hci_le_per_adv_sync_est_evt { ///LE Subevent code uint8_t subcode; /// Status of the advertising sync uint8_t status; /// Sync Handle to be used uint16_t sync_handle; /// Advertising SID uint8_t adv_sid; ///Advertising address type: public/random uint8_t adv_addr_type; ///Advertising address value struct bd_addr adv_addr; /// Advertiser PHY uint8_t phy; /// Advertising interval (Time=N*1.25ms) uint16_t interval; /// Advertiser clock accuracy uint8_t adv_ca; }; ///HCI LE periodic advertising report event structure struct hci_le_per_adv_report_evt { ///LE Subevent code uint8_t subcode; /// Sync Handle to be used uint16_t sync_handle; /// Tx Power uint8_t tx_power; /// RSSI uint8_t rssi; /// Data Status uint8_t status; ///Data length in advertising packet uint8_t data_len; ///Data of advertising packet uint8_t data[PER_ADV_DATA_MAX_LEN]; ///Unused uint8_t unused; }; ///HCI LE periodic advertising sync lost event structure struct hci_le_per_adv_sync_lost_evt { ///LE Subevent code uint8_t subcode; /// Sync Handle to be used uint16_t sync_handle; }; ///HCI LE scan timeout event structure struct hci_le_scan_timeout_evt { ///LE Subevent code uint8_t subcode; }; #endif //BLE_EMB_PRESENT || BLE_HOST_PRESENT /// HCI command complete event structure for Read Channel Map Command struct hci_le_rd_chnl_map_cmd_cmp_evt { ///Status of command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Channel map struct le_chnl_map ch_map; }; /// HCI command complete event structure for Long Term Key Request Reply Command struct hci_le_ltk_req_reply_cmd_cmp_evt { ///Status of command reception uint8_t status; ///Connection handle uint16_t conhdl; }; /// HCI command complete event structure for Long Term Key Request Negative Reply Command struct hci_le_ltk_req_neg_reply_cmd_cmp_evt { ///Status of command reception uint8_t status; ///Connection handle uint16_t conhdl; }; /// HCI command complete event structure for LE Read Suggested Default Data Length Command struct hci_le_rd_suggted_dft_data_len_cmd_cmp_evt { ///Status of command reception uint8_t status; ///Host's suggested value for the Controller's maximum transmitted number of payload octets uint16_t suggted_max_tx_octets; ///Host's suggested value for the Controller's maximum packet transmission time uint16_t suggted_max_tx_time; }; /// HCI command complete event structure for LE Read Maximum Data Length Command struct hci_le_rd_max_data_len_cmd_cmp_evt { ///Status of command reception uint8_t status; ///Maximum number of payload octets that the local Controller supports for transmission uint16_t suppted_max_tx_octets; ///Maximum time, in microseconds, that the local Controller supports for transmission uint16_t suppted_max_tx_time; ///Maximum number of payload octets that the local Controller supports for reception uint16_t suppted_max_rx_octets; ///Maximum time, in microseconds, that the local Controller supports for reception uint16_t suppted_max_rx_time; }; /// HCI LE Read Peer Resolvable Address Command Complete Event struct hci_le_rd_peer_rslv_addr_cmd_cmp_evt { ///Status uint8_t status; /// Peer Resolvable Address struct bd_addr peer_rslv_addr; }; /// HCI LE Read Local Resolvable Address Command Complete Event struct hci_le_rd_loc_rslv_addr_cmd_cmp_evt { ///Status uint8_t status; /// Local Resolvable Address struct bd_addr loc_rslv_addr; }; /// HCI LE Read Resolving List Size Command Complete Event struct hci_le_rd_rslv_list_size_cmd_cmp_evt { ///Status uint8_t status; /// Resolving List Size uint8_t size; }; /// HCI write authenticated payload timeout command struct hci_wr_auth_payl_to_cmd { ///Connection handle uint16_t conhdl; ///Authenticated payload timeout (N*10ms) uint16_t auth_payl_to; }; /// HCI command complete event structure for the Write Authenticated Payload Timeout Command struct hci_wr_auth_payl_to_cmd_cmp_evt { /// Status of the command reception uint8_t status; ///Connection handle uint16_t conhdl; }; /// HCI command complete event structure for HCI LE Connection Update Command struct hci_le_con_update_cmp_evt { ///LE Subevent code uint8_t subcode; ///Status of received command uint8_t status; ///Connection handle uint16_t conhdl; ///Connection interval value uint16_t con_interval; ///Connection latency value uint16_t con_latency; ///Supervision timeout uint16_t sup_to; }; /// HCI command complete event structure for create connection struct hci_le_con_cmp_evt { ///LE Subevent code uint8_t subcode; ///Status of received command uint8_t status; ///Connection handle uint16_t conhdl; ///Device role - 0=Master/ 1=Slave uint8_t role; ///Peer address type - 0=public/1=random uint8_t peer_addr_type; ///Peer address struct bd_addr peer_addr; ///Connection interval uint16_t con_interval; ///Connection latency uint16_t con_latency; ///Link supervision timeout uint16_t sup_to; ///Master clock accuracy uint8_t clk_accuracy; }; /// HCI LE read remote used feature command parameters structure struct hci_le_rd_rem_feats_cmd { ///Connection handle uint16_t conhdl; }; /// HCI command complete event structure for HCI LE read remote feature Command struct hci_le_rd_rem_feats_cmd_cmp_evt { ///LE Subevent code uint8_t subcode; ///Status of received command uint8_t status; ///Connection handle uint16_t conhdl; ///Le Features struct le_features le_feats; }; /// HCI command structure for the read transmit power level command struct hci_rd_tx_pwr_lvl_cmd { ///Connection handle uint16_t conhdl; ///Power Level type: current or maximum uint8_t type; }; /// HCI command complete event structure for the read transmit power level command struct hci_rd_tx_pwr_lvl_cmd_cmp_evt { ///Status for command reception uint8_t status; ///Connection handle uint16_t conhdl; ///Value of TX power level uint8_t tx_pow_lvl; }; /// HCI read remote information version command parameters structure struct hci_rd_rem_ver_info_cmd { ///Connection handle uint16_t conhdl; }; /// HCI LE remote connection parameter request event struct hci_le_rem_con_param_req_evt { ///LE Subevent code uint8_t subcode; ///Connection handle uint16_t conhdl; ///Interval_Min uint16_t interval_min; ///Interval_Max uint16_t interval_max; ///Latency uint16_t latency; ///Timeout uint16_t timeout; }; /// HCI command complete event structure for enhance create connection struct hci_le_enh_con_cmp_evt { ///LE Subevent code uint8_t subcode; ///Status of received command uint8_t status; ///Connection handle uint16_t conhdl; ///Device role - 0=Master/ 1=Slave uint8_t role; ///Peer address type - 0=public/1=random uint8_t peer_addr_type; ///Peer address struct bd_addr peer_addr; ///Local Resolvable Private Address struct bd_addr loc_rslv_priv_addr; ///Peer Resolvable Private Address struct bd_addr peer_rslv_priv_addr; ///Connection interval uint16_t con_interval; ///Connection latency uint16_t con_latency; ///Link supervision timeout uint16_t sup_to; ///Master clock accuracy uint8_t clk_accuracy; }; struct hci_generate_dhkey_cmp_evt { ///LE Subevent code uint8_t subcode; ///Status of received command uint8_t status; /// The 32 byte Diffie Helman Key uint8_t dh_key[32]; }; struct hci_rd_local_p256_public_key_cmp_evt { ///LE Subevent code uint8_t subcode; ///Status of received command uint8_t status; /// The 32 byte Diffie Helman Key uint8_t public_key[64]; }; #if BLE_EMB_PRESENT || BLE_HOST_PRESENT /// HCI LE Direct Advertising Report Event struct hci_le_dir_adv_rep_evt { ///LE Subevent code uint8_t subcode; ///Number of reports uint8_t nb_reports; ///Direct Advertising reports structures array struct dir_adv_report adv_rep[BLE_ADV_REPORTS_MAX]; }; #endif //BLE_EMB_PRESENT || BLE_HOST_PRESENT /// HCI command complete event structure for HCI LE read remote used feature Command struct hci_le_ltk_request_evt { ///LE Subevent code uint8_t subcode; ///Connection handle uint16_t conhdl; ///Random number struct rand_nb rand; ///Encryption diversifier uint16_t ediv; }; /// HCI LE META event LE Data Length Change Event struct hci_le_data_len_chg_evt { ///LE Subevent code uint8_t subcode; ///Connection handle uint16_t conhdl; ///The maximum number of payload octets in TX uint16_t max_tx_octets; ///The maximum time that the local Controller will take to TX uint16_t max_tx_time; ///The maximum number of payload octets in RX uint16_t max_rx_octets; ///The maximum time that the local Controller will take to RX uint16_t max_rx_time; }; /// HCI Synchronization Train Received Event struct hci_sync_train_rec_evt { /// Status uint8_t status; /// BD_ADDR struct bd_addr bd_addr; /// Clock_Offset (28 bits) - (CLKNslave - CLK) modulo 2^28 uint32_t clock_offset; /// AFH_Channel_Map struct chnl_map afh_ch_map; /// LT_ADDR uint8_t lt_addr; /// Next_Broadcast_Instant (28 bits) uint32_t next_bcst_instant; /// Connectionless_Slave_Broadcast_Interval (in slots) uint16_t csb_int; /// Service_Data uint8_t service_data; }; /// HCI Connectionless Slave Broadcast Receive Event struct hci_con_slv_bcst_rec_evt { /// BD_ADDR struct bd_addr bd_addr; /// LT_ADDR uint8_t lt_addr; /// CLK (28 bits) uint32_t clk; /// Offset (28 bits) - (CLKNslave - CLK) modulo 2^28 uint32_t offset; /// Receive Status uint8_t receive_status; /// Fragment uint8_t fragment; /// Data_Length (in bytes) uint8_t data_length; /// Data uint8_t data[__ARRAY_EMPTY]; }; /// HCI Connectionless Slave Broadcast Timeout Event struct hci_con_slv_bcst_to_evt { /// BD_ADDR struct bd_addr bd_addr; /// LT_ADDR uint8_t lt_addr; }; /// HCI Connectionless Slave Broadcast Channel Map Change Event struct hci_con_slv_bcst_ch_map_chg_evt { /// Channel_Map struct chnl_map ch_map; }; struct hci_le_generate_dhkey_cmp_evt { ///LE Subevent code uint8_t subcode; uint8_t status; uint8_t dh_key[32]; }; struct hci_le_generate_p256_public_key_cmp_evt { ///LE Subevent code uint8_t subcode; uint8_t status; t_public_key public_key; }; /* * HCI VENDOR SPECIFIC COMMANDS PARAMETERS **************************************************************************************** */ /// Buffer structure struct buffer_tag { /// length of buffer uint8_t length; /// data of 128 bytes length uint8_t data[128]; }; /// Common structure for Command Complete Event of HCI Debug Read Memory/Flash/Param complete event parameters - vendor specific struct hci_dbg_basic_rd_data_cmd_cmp_evt { ///Status uint8_t status; ///buffer structure to return struct buffer_tag buf; }; ///HCI Debug read memory variable command parameters - vendor specific struct hci_dbg_rd_mem_cmd { ///Start address to read uint32_t start_addr; ///Access size uint8_t type; ///Length to read uint8_t length; }; ///HCI Debug write memory variable command parameters - vendor specific struct hci_dbg_wr_mem_cmd { ///Start address to read uint32_t start_addr; ///Access size uint8_t type; ///buffer structure to return struct buffer_tag buf; }; ///HCI Debug delete parameter command parameters - vendor specific struct hci_dbg_del_param_cmd { ///Parameter tag uint16_t param_tag; }; ///HCI Debug erase flash command parameters - vendor specific struct hci_dbg_er_flash_cmd { ///Flash type uint8_t flashtype; ///Start offset address uint32_t startoffset; ///Size to erase uint32_t size; }; ///HCI Debug write flash command parameters - vendor specific struct hci_dbg_wr_flash_cmd { ///Flash type uint8_t flashtype; ///Start offset address uint32_t startoffset; ///buffer structure struct buffer_tag buf; }; ///HCI Debug read flash command parameters - vendor specific struct hci_dbg_rd_flash_cmd { ///Flash type uint8_t flashtype; ///Start offset address uint32_t startoffset; ///Size to read uint8_t size; }; ///HCI Debug read parameter command parameters - vendor specific struct hci_dbg_rd_par_cmd { ///Parameter tag uint16_t param_tag; }; ///HCI Debug read parameters command parameters - vendor specific struct hci_dbg_wr_par_cmd { ///Parameter tag uint16_t param_tag; ///Structure buffer struct buffer_tag buf; }; #if CRYPTO_UT struct hci_dbg_test_crypto_func_cmd { /// Id of Function to be tested uint8_t function; /// Structure buffer struct buffer_tag buf; }; #endif //CRYPTO_UT ///HCI Debug Read Kernel Statistics complete event parameters - vendor specific struct hci_dbg_rd_ke_stats_cmd_cmp_evt { ///Status uint8_t status; ///Max message sent uint8_t max_msg_sent; ///Max message saved uint8_t max_msg_saved; ///Max timer used uint8_t max_timer_used; ///Max heap used uint16_t max_heap_used; ///Max stack used uint16_t max_stack_used; }; /// HCI Debug Read information about memory usage. - vendor specific struct hci_dbg_rd_mem_info_cmd_cmp_evt { ///Status uint8_t status; /// memory size currently used into each heaps. uint16_t mem_used[KE_MEM_BLOCK_MAX]; /// peak of memory usage measured uint32_t max_mem_used; }; ///HCI Debug identify Flash command complete event parameters - vendor specific struct hci_dbg_id_flash_cmd_cmp_evt { ///Status uint8_t status; ///Flash identity uint8_t flash_id; }; ///HCI Debug RF Register read command struct hci_dbg_rf_reg_rd_cmd { /// register address uint16_t addr; }; ///HCI Debug RF Register read command complete event struct hci_dbg_rf_reg_rd_cmd_cmp_evt { /// status uint8_t status; /// register address uint16_t addr; /// register value uint32_t value; }; ///HCI Debug RF Register write command struct hci_dbg_rf_reg_wr_cmd { /// register address uint16_t addr; /// register value uint32_t value; }; ///HCI Debug RF Register write command complete event struct hci_dbg_rf_reg_wr_cmd_cmp_evt { /// status uint8_t status; /// address uint16_t addr; }; ///HCI Debug platform reset command parameters - vendor specific struct hci_dbg_plf_reset_cmd { /// reason uint8_t reason; }; #if (RW_DEBUG && BT_EMB_PRESENT) /// Discard LMP Packets struct hci_dbg_bt_send_lmp_cmd { /// Connection handle uint16_t conhdl; ///buffer structure to return struct buffer_tag buf; }; /// Discard LMP Packets struct hci_dbg_bt_discard_lmp_en_cmd { /// Connection handle uint16_t conhdl; /// Enable/Disable LMP discard (0: disable / 1: enable) uint8_t enable; }; #endif //(RW_DEBUG && BT_EMB_PRESENT) #if (RW_WLAN_COEX) ///HCI Debug wlan coexistence command parameters - vendor specific struct hci_dbg_wlan_coex_cmd { /// State uint8_t state; }; #if (RW_WLAN_COEX_TEST) ///HCI Debug wlan coexistence test scenario command parameters - vendor specific struct hci_dbg_wlan_coextst_scen_cmd { /// Scenario uint32_t scenario; }; #endif //RW_WLAN_COEX_TEST #endif //RW_WLAN_COEX #if (RW_MWS_COEX) ///HCI Debug mws coexistence command parameters - vendor specific struct hci_dbg_mws_coex_cmd { /// State uint8_t state; }; #if (RW_MWS_COEX_TEST) ///HCI Debug mws coexistence test scenario command parameters - vendor specific struct hci_dbg_mws_coextst_scen_cmd { /// Scenario uint32_t scenario; }; #endif //RW_MWS_COEX_TEST #endif //RW_MWS_COEX ///HCI Debug HW Register Read command parameters - vendor specific struct hci_dbg_hw_reg_rd_cmd { /// register address uint16_t reg_addr; }; ///HCI Debug HW Register write command parameters - vendor specific struct hci_dbg_hw_reg_wr_cmd { /// register address uint16_t reg_addr; /// extra parameter uint16_t reserved; /// register value uint32_t reg_value; }; ///HCI Debug HW Register Read Complete event parameters - vendor specific struct hci_dbg_hw_reg_rd_cmd_cmp_evt { /// status uint8_t status; /// register address uint16_t reg_addr; /// register value uint32_t reg_value; }; ///HCI Debug HW Register Write Complete event parameters - vendor specific struct hci_dbg_hw_reg_wr_cmd_cmp_evt { /// status uint8_t status; /// register address uint16_t reg_addr; }; ///HCI Debug write DLE default value command parameters - vendor specific struct hci_dbg_wr_dle_dft_value_cmd { /// Max transmit packet size supported uint16_t suppted_max_tx_octets; /// Max transmit packet time supported uint16_t suppted_max_tx_time; /// Max receive packet size supported uint16_t suppted_max_rx_octets; /// Max receive packet time supported uint16_t suppted_max_rx_time; }; #if (BLE_EMB_PRESENT || BLE_HOST_PRESENT) ///HCI Debug bd address write command parameters - vendor specific struct hci_dbg_set_bd_addr_cmd { ///bd address to set struct bd_addr addr; }; ///HCI Debug crc write command parameters - vendor specific struct hci_dbg_set_crc_cmd { /// Handle pointing to the connection for which CRC has to be modified uint16_t conhdl; /// CRC to set struct crc_init crc; }; ///HCI Debug LLC discard command parameters - vendor specific struct hci_dbg_llcp_discard_cmd { /// Handle pointing to the connection for which LLCP commands have to be discarded uint16_t conhdl; /// Flag indicating if the discarding has to be enabled or disabled uint8_t enable; }; ///HCI Debug reset RX counter command parameters - vendor specific struct hci_dbg_reset_rx_cnt_cmd { /// Handle pointing to the connection for which the counter have to be reseted uint16_t conhdl; }; ///HCI Debug reset TX counter command parameters - vendor specific struct hci_dbg_reset_tx_cnt_cmd { /// Handle pointing to the connection for which the counter have to be reseted uint16_t conhdl; }; ///HCI Debug Set TX Power Level Command parameters struct hci_dbg_set_tx_pw_cmd { /// Connection handle uint16_t conhdl; /// Power level uint8_t pw_lvl; }; ///HCI Debug configure audio command parameters - vendor specific struct hci_dbg_audio_configure_audio_cmd { /// Voice channel to be updated uint8_t voice_channel; /// Configure transmitter size in bytes uint8_t tx_size; /// Configure receiver size in bytes uint8_t rx_size; /// Configure transmitter rate uint8_t tx_rate; /// Configure receiver rate uint8_t rx_rate; /// Configure number of retransmission uint8_t nb_retx; /// Audio link priority uint8_t priority; /// Encryption mode uint8_t mode; /// Channel and mute configuration (@see enum audio_cfg) uint8_t chan_mute_cfg; /// Mute Pattern uint8_t mute_pattern; }; struct hci_dbg_audio_set_pointer_cmd { /// Voice channel to be updated uint8_t voice_channel; /// Rx or Tx selection uint8_t rx_tx_select; /// Tog to be updated uint8_t tog; /// Exchange memory pointer uint16_t em_ptr; }; ///HCI Debug set audio mode command parameters - vendor specific struct hci_audio_set_mode_cmd { /// Voice channel to be updated uint8_t voice_channel; /// Mode uint8_t mode; }; ///HCI Debug set audio mode command parameters - vendor specific struct hci_dbg_audio_reset_cmd { /// Voice channel to be updated uint8_t voice_channel; }; ///HCI Debug set audio mode command parameters - vendor specific struct hci_dbg_audio_allocate_cmd { /// Connection handle uint16_t conhdl; /// Audio mode uint8_t mode; }; ///HCI Debug set audio mode command parameters - vendor specific struct hci_dbg_audio_get_vx_ch_cmd { /// Connection handle uint16_t conhdl; }; ///HCI Tester set LE parameters struct hci_tester_set_le_params_cmd { /// Connection handle uint16_t conhdl; /// Tester features uint8_t tester_feats; /// Preferred periodicity uint8_t pref_period; /// Offset0 uint16_t offset0; /// Offset1 uint16_t offset1; /// Offset2 uint16_t offset2; /// Offset3 uint16_t offset3; /// Offset4 uint16_t offset4; /// Offset5 uint16_t offset5; }; /// HCI BLE Tester: enable LLCP pass through mechanism struct hci_dbg_ble_tst_llcp_pt_en_cmd { /// Connection handle uint16_t conhdl; /// Enable or not LLCP pass through mechanism uint8_t enable; }; /// HCI BLE Tester: send an LLCP PDU struct hci_dbg_ble_tst_send_llcp_cmd { /// Connection handle uint16_t conhdl; /// length of LLCP PDU uint8_t length; /// LLCP PDU data uint8_t data[26]; }; /// HCI DBG Meta Event trigg when LLCP message received with LLCP pass through mechanism struct hci_dbg_ble_tst_llcp_recv_evt { ///DBG Subevent code uint8_t subcode; ///Connection handle uint16_t conhdl; /// length of LLCP message uint8_t length; /// LLCP data uint8_t data[26]; }; #endif //BLE_EMB_PRESENT || BLE_HOST_PRESENT #if (RW_DEBUG) /// HCI DBG Meta Event indicating a SW assertion error struct hci_dbg_assert_err_evt { ///DBG Subevent code uint8_t subcode; /// Line number uint32_t line; /// Param0 uint32_t param0; /// Param1 uint32_t param1; /// File name uint8_t file[__ARRAY_EMPTY]; }; #endif //(RW_DEBUG) /// HCI LE Read PHY command struct hci_le_rd_phy_cmd { /// Connection Handle uint16_t conhdl; }; /// HCI LE Set Default PHY Command struct hci_le_set_dft_phy_cmd { /// Preferred PHYS selection uint8_t all_phys; /// Preferred PHYS for TX uint8_t tx_phys; /// Preferred PHYS for RX uint8_t rx_phys; }; /// HCI LE Set PHY Command struct hci_le_set_phy_cmd { /// Connection Handle uint16_t conhdl; /// Preferred PHYS selection uint8_t all_phys; /// Preferred PHYS for TX uint8_t tx_phys; /// Preferred PHYS for RX uint8_t rx_phys; /// PHY options uint16_t phy_opt; }; /// HCI LE Set Extended Advertising Parameters Command Complete Event struct hci_le_set_ext_adv_param_cmd_cmp_evt { /// Status uint8_t status; /// Selected Tx power uint8_t sel_tx_pwr; }; /// HCI LE Enhanced Receiver Test Command struct hci_le_enh_rx_test_cmd { /// Reception channel value uint8_t channel; /// Reception PHY rate uint8_t phys; /// Modulation index uint8_t modulation_idx; }; /// HCI LE Enhanced Transmitter Test Command struct hci_le_enh_tx_test_cmd { /// Transmit channel value uint8_t channel; /// Length of the data to be transmitted in a packet uint8_t payload_length; /// Type of the data contained in a packet uint8_t payload_type; /// Transmit PHY rate uint8_t phys; }; ///HCI LE Set Advertising Set Random Address Command parameters structure struct hci_le_set_adv_set_rand_addr_cmd { /// Advertising handle uint8_t adv_hdl; /// Advertising random address struct bd_addr rand_addr; }; ///HCI LE Set Extended Advertising Parameters Command parameters structure struct hci_le_set_ext_adv_param_cmd { /// Advertising handle uint8_t adv_hdl; /// Advertising event properties uint16_t adv_evt_properties; /// Primary advertising minimum interval uint8_t prim_adv_intv_min[3]; /// Primary advertising maximum interval uint8_t prim_adv_intv_max[3]; /// Primary advertising channel map uint8_t prim_adv_chnl_map; /// Own address type: public=0 / random=1 / rpa_or_pub=2 / rpa_or_rnd=3 uint8_t own_addr_type; /// Peer address type: public=0 / random=1 uint8_t peer_addr_type; /// Peer Bluetooth device address struct bd_addr peer_addr; /// Advertising filter policy uint8_t adv_filt_policy; /// Advertising Tx power int8_t adv_tx_pwr; /// Primary advertising PHY uint8_t prim_adv_phy; /// Secondary advertising max skip uint8_t sec_adv_max_skip; /// Secondary advertising PHY uint8_t sec_adv_phy; /// Advertising SID uint8_t adv_sid; /// Scan request notification enable uint8_t scan_req_notif_en; }; ///HCI LE Set Extended Advertising Data Command parameters structure struct hci_le_set_ext_adv_data_cmd { /// Advertising handle uint8_t adv_hdl; /** * Operation * 0x00 Intermediate fragment of fragmented extended advertising data * 0x01 First fragment of fragmented extended advertising data * 0x02 Last fragment of fragmented extended advertising data * 0x03 Complete extended advertising data * 0x04 [ID7300_r06] Unchanged data (just update the Advertising DID) * All other values Reserved for future use */ uint8_t operation; /** * Fragment preference * 0x00 The Controller may fragment all Host advertising data * 0x01 The Controller should not fragment nor minimize fragmentation of Host advertising data * All other values Reserved for future use */ uint8_t frag_pref; /// Advertising Data Length (0-252 bytes) uint8_t data_len; /// Advertising data uint8_t data[__ARRAY_EMPTY]; }; ///HCI LE Set Extended Scan Response Data Command parameters structure struct hci_le_set_ext_scan_rsp_data_cmd { /// Advertising handle uint8_t adv_hdl; /** * Operation * 0x00 Intermediate fragment of fragmented extended advertising data * 0x01 First fragment of fragmented extended advertising data * 0x02 Last fragment of fragmented extended advertising data * 0x03 Complete extended advertising data * 0x04 [ID7300_r06] Unchanged data (just update the Advertising DID) * All other values Reserved for future use */ uint8_t operation; /** * Fragment preference * 0x00 The Controller may fragment all Host advertising data * 0x01 The Controller should not fragment nor minimize fragmentation of Host advertising data * All other values Reserved for future use */ uint8_t frag_pref; /// Scan Response Data Length (0-252 bytes) uint8_t data_len; /// Advertising data uint8_t data[__ARRAY_EMPTY]; }; ///HCI LE Set Extended Advertising Enbale Command parameters structure struct hci_le_set_ext_adv_en_cmd { /// Enable uint8_t enable; /// Number of sets (1 - 0x3F) uint8_t nb_sets; /// Advertising handle uint8_t adv_hdl[BLE_ACTIVITY_MAX]; /// Duration (N * 10 ms), 0x0000 No advertising duration. Advertising to continue until the Host disables it. uint16_t duration[BLE_ACTIVITY_MAX]; /// Maximum number of extended advertising events uint8_t max_ext_adv_evt[BLE_ACTIVITY_MAX]; }; ///HCI LE Read Maximum Advertising Data Length Command complete event struct hci_le_rd_max_adv_data_len_cmd_cmp_evt { /// Status uint8_t status; /// Maximum advertising data length uint16_t max_adv_data_len; }; ///HCI LE Remove Advertising Set Command parameters structure struct hci_le_rem_adv_set_cmd { /// Advertising handle uint8_t adv_hdl; }; ///HCI LE Read Number of Supported Advertising Sets Command complete event struct hci_le_rd_nb_supp_adv_sets_cmd_cmp_evt { /// Status uint8_t status; /// Number of supported advertising sets uint8_t nb_supp_adv_sets; }; ///HCI LE Set Periodic Advertising Parameters Command parameters structure struct hci_le_set_per_adv_param_cmd { /// Advertising handle uint8_t adv_hdl; /// Minimum advertising interval for periodic advertising uint16_t adv_intv_min; /// Maximum advertising interval for periodic advertising uint16_t adv_intv_max; /// Advertising properties uint16_t adv_prop; }; ///HCI LE Set Periodic Advertising Data Command parameters structure struct hci_le_set_per_adv_data_cmd { /// Advertising handle uint8_t adv_hdl; /** * Operation * 0x00 Intermediate fragment of fragmented periodic advertising data * 0x01 First fragment of fragmented periodic advertising data * 0x02 Last fragment of fragmented periodic advertising data * 0x03 Complete periodic advertising data * All other values Reserved for future use */ uint8_t operation; /// Advertising Data Length (0-252 bytes) uint8_t data_len; /// Advertising data uint8_t data[__ARRAY_EMPTY]; }; ///HCI LE Set Periodic Advertising Enable Command parameters structure struct hci_le_set_per_adv_en_cmd { /// Enable uint8_t enable; /// Advertising handle uint8_t adv_hdl; }; ///HCI LE Advertising Set Terminated event struct hci_le_adv_set_term_evt { /// LE Subevent code uint8_t subcode; /// Status uint8_t status; /// Advertising handle uint8_t adv_hdl; /// Connection handle uint16_t conhdl; /// Num_Completed_Extended_Advertising_Events uint8_t nb_cmp_ext_adv_evt; }; ///HCI LE Scan Request Received event struct hci_le_scan_req_rcvd_evt { /// LE Subevent code uint8_t subcode; /// Advertising handle uint8_t adv_hdl; /// Scanner address type: public=0 / random=1 / rpa_or_pub=2 / rpa_or_rnd=3 uint8_t scan_addr_type; /// Scanner address struct bd_addr scan_addr; }; ///HCI LE Read Periodic Advertiser List Size Command complete event struct hci_le_rd_per_adv_list_size_cmd_cmp_evt { ///Status uint8_t status; /// Periodic Advertiser List Size uint8_t size; }; ///HCI LE Channel Selection Algorithm event struct hci_le_ch_sel_algo_evt { /// LE Subevent code uint8_t subcode; /// Connection handle uint16_t conhdl; /// Channel selection algorithm uint8_t ch_sel_algo; }; /// HCI LE read PHY Command complete event struct hci_le_rd_phy_cmd_cmp_evt { ///Status of received command uint8_t status; /// Connection Handle uint16_t conhdl; /// Current configured PHY for TX uint8_t tx_phy; /// Current configured PHY for RX uint8_t rx_phy; }; /// HCI command complete event structure for HCI LE PHY Update Command struct hci_le_phy_update_cmp_evt { ///LE Subevent code uint8_t subcode; ///Status of received command uint8_t status; ///Connection handle uint16_t conhdl; ///TX phy chosen uint8_t tx_phy; ///RX phy chosen uint8_t rx_phy; }; /// @} CO_BT #endif // CO_HCI_H_