Files
2026-06-06 16:49:48 +08:00

7284 lines
210 KiB
C

/**
****************************************************************************************
*
* @file co_hci.h
*
* @brief This file contains the HCI Bluetooth defines, enumerations and structures
* definitions for use by all modules in RW stack.
*
* Copyright (C) RivieraWaves 2009-2019
*
****************************************************************************************
*/
#ifndef CO_HCI_H_
#define CO_HCI_H_
/**
****************************************************************************************
* @addtogroup COMMON Common SW Block
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include <stdbool.h> // standard boolean definitions
#include <stddef.h> // standard definitions
#include <stdint.h> // standard integer definitions
#include "rwip_config.h" // IP configuration
#include "co_bt_defines.h" // Common definitions
#include "compiler.h" // compiler definitions
/*
* 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: ISO data message type
#define HCI_ISO_MSG_TYPE 0x05
/******************************************************************************************/
/* ------------------------- 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_FLAGS_LSB = (12),
HCI_ACL_HDR_DATA_FLAGS_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
enum hci_syn_hdr_fields
{
/// bits[00:11]: Connection handle
HCI_SYNC_HDR_HDL_LSB = (0),
HCI_SYNC_HDR_HDL_MASK = (0x0FFF),
/// bits[12:13]: Packet status flag
HCI_SYNC_HDR_PSF_LSB = (12),
HCI_SYNC_HDR_PSF_MASK = (0x3000),
/// bits[14:15]: RFU
HCI_SYNC_HDR_RFU_LSB = (14),
HCI_SYNC_HDR_RFU_MASK = (0xC000),
};
#define HCI_SYNC_HDR_HDL_FLAGS_POS (0)
#define HCI_SYNC_HDR_HDL_FLAGS_LEN (2)
/// 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 251
/// Maximum length of HCI periodic advertising data fragments
#define HCI_PER_ADV_DATA_FRAG_MAX_LEN 252
/// HCI ISO header: handle and flags decoding
enum hci_iso_hdr_fields
{
/// Connection handle (12 bits)
HCI_ISO_HDR_HDL_LSB = (0),
HCI_ISO_HDR_HDL_MASK = (0x0FFF),
/// Packet boundary flag (2 bits)
HCI_ISO_HDR_PB_FLAG_LSB = (12),
HCI_ISO_HDR_PB_FLAG_MASK = (0x3000),
/// Time_Stamp flag (1 bit)
HCI_ISO_HDR_TS_FLAG_POS = (14),
HCI_ISO_HDR_TS_FLAG_BIT = (0x4000),
/// RFU (1 bit)
HCI_ISO_HDR_RFU_FLAG_POS = (0),
HCI_ISO_HDR_RFU_FLAG_BIT = (0x8000),
/// ISO_Data_Load_Length (14 bits)
HCI_ISO_HDR_ISO_DATA_LOAD_LEN_LSB = (0),
HCI_ISO_HDR_ISO_DATA_LOAD_LEN_MASK = (0x3FFF),
/// RFU2 (2 bits)
HCI_ISO_HDR_ISO_RFU2_LSB = (14),
HCI_ISO_HDR_ISO_RFU2_MASK = (0xC000),
};
#define HCI_ISO_HDR_HDL_FLAGS_POS (0)
#define HCI_ISO_HDR_HDL_FLAGS_LEN (2)
/// HCI ISO header: ISO_Data_Load field length
#define HCI_ISO_HDR_ISO_DATA_LOAD_LEN_POS (HCI_ISO_HDR_HDL_FLAGS_LEN)
#define HCI_ISO_HDR_ISO_DATA_LOAD_LEN_LEN (2)
///HCI ACL data packet header length
#define HCI_ISO_HDR_LEN (HCI_ISO_HDR_HDL_FLAGS_LEN + HCI_ISO_HDR_ISO_DATA_LOAD_LEN_LEN)
/// Packet Boundary Flag HCI:5.4.5
#define PB_FLAG_1ST_FRAG 0x00
#define PB_FLAG_CONT_FRAG 0x01
#define PB_FLAG_CMP_FRAG 0x02
#define PB_FLAG_LAST_FRAG 0x03
/// HCI ISO header: handle and flags decoding
enum hci_iso_data_load_fields
{
/// Time_Stamp (32 bits)
HCI_ISO_DATA_LOAD_TIME_STAMP_POS = (0),
HCI_ISO_DATA_LOAD_TIME_STAMP_LSB = (0),
HCI_ISO_DATA_LOAD_TIME_STAMP_MASK = (0xFFFFFFFF),
/// Packet_Sequence_Number (16 bits)
HCI_ISO_DATA_LOAD_PKT_SEQ_NB_POS = (4),
HCI_ISO_DATA_LOAD_PKT_SEQ_NB_LSB = (0),
HCI_ISO_DATA_LOAD_PKT_SEQ_NB_MASK = (0xFFFF),
/// ISO_SDU_Length (12 bits)
HCI_ISO_DATA_LOAD_ISO_SDU_LEN_POS = (6),
HCI_ISO_DATA_LOAD_ISO_SDU_LEN_LSB = (0),
HCI_ISO_DATA_LOAD_ISO_SDU_LEN_MASK = (0x0FFF),
/// RFU (2 bits)
HCI_ISO_DATA_LOAD_RFU_POS = (6),
HCI_ISO_DATA_LOAD_RFU_LSB = (12),
HCI_ISO_DATA_LOAD_RFU_MASK = (0x3000),
/// Packet_Status_Flag (2 bits)
HCI_ISO_DATA_LOAD_PKT_STAT_FLAG_LSB = (14),
HCI_ISO_DATA_LOAD_PKT_STAT_FLAG_MASK = (0xC000),
};
/// HCI ISO_Data_Load - Length of Time_Stamp field
#define HCI_ISO_DATA_LOAD_TIME_STAMP_LEN (4)
/// HCI ISO_Data_Load - Length of Packet Sequence Number field
#define HCI_ISO_DATA_LOAD_PKT_SEQ_NB_LEN (2)
/// HCI ISO_Data_Load - Length of ISO SDU Length and packet status flags field
#define HCI_ISO_DATA_LOAD_ISO_SDU_LEN_LEN (2)
/// HCI ISO_Data_Load - maximum header length
#define HCI_ISO_DATA_LOAD_HDR_LEN_MAX (HCI_ISO_DATA_LOAD_TIME_STAMP_LEN + HCI_ISO_DATA_LOAD_PKT_SEQ_NB_LEN + HCI_ISO_DATA_LOAD_ISO_SDU_LEN_LEN)
/// HCI ISO_Data_Load - Packet Status Flag
enum hci_iso_pkt_stat_flag
{
/// Valid data. The complete ISO_SDU was received correctly
HCI_ISO_PKT_STAT_FLAG_VALID = (0),
/// Possibly invalid data. The contents of the ISO_SDU may contain errors or part of the ISO_SDU may
/// be missing. This is reported as "data with possible errors".
HCI_ISO_PKT_STAT_FLAG_INVALID = (1),
/// Part(s) of the ISO_SDU were not received correctly. This is reported as "lost data".
HCI_ISO_PKT_STAT_FLAG_LOST = (2),
};
///HCI Command header components structure
struct hci_cmd_hdr
{
/// Opcode field
uint16_t opcode;
///Parameter length - the number of bytes of the command parameters
uint8_t parlen;
};
///HCI ACL data packets header structure
struct hci_acl_hdr
{
///Connection handle & Data Flags
uint16_t hdl_flags;
///Data length in number of bytes
uint16_t datalen;
};
///HCI synchronous data packets header structure
struct hci_sync_hdr
{
/// Connection handle & Data Flags
uint16_t conhdl_flags;
/// Data total length in number of bytes
uint8_t data_total_len;
};
///HCI Event header components structure - contains all details possible in an event
struct hci_evt_hdr
{
///Event code
uint8_t code;
///Event parameters length
uint8_t parlen;
};
///HCI ISO data packets header structure
struct hci_iso_hdr
{
/// Connection handle & Data Flags
uint16_t conhdl_flags;
/// ISO Data load length in number of bytes
uint16_t iso_data_load_len;
};
/**************************************************************************************
************** 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.
/*@TRACE*/
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,
HCI_SET_ECO_BASE_INTV_CMD_OPCODE = 0x0C82,
HCI_CONFIG_DATA_PATH_CMD_OPCODE = 0x0C83,
//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_BUF_SIZE_CMD_OPCODE = 0x1005,
HCI_RD_BD_ADDR_CMD_OPCODE = 0x1009,
HCI_RD_DATA_BLOCK_SIZE_CMD_OPCODE = 0x100A,
HCI_RD_LOCAL_SUPP_CODECS_CMD_OPCODE = 0x100B,
HCI_RD_LOCAL_SP_OPT_CMD_OPCODE = 0x100C,
HCI_RD_LOCAL_SUPP_CODECS_V2_CMD_OPCODE = 0x100D,
HCI_RD_LOCAL_SUPP_CODEC_CAP_CMD_OPCODE = 0x100E,
HCI_RD_LOCAL_SUPP_CTRL_DELAY_CMD_OPCODE = 0x100F,
//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,
HCI_WR_SEC_CON_TEST_MODE_CMD_OPCODE = 0x180A,
/// LE Commands Opcodes
HCI_LE_SET_EVT_MASK_CMD_OPCODE = 0x2001,
HCI_LE_RD_BUF_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_EN_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_V1_CMD_OPCODE = 0x201D,
HCI_LE_TX_TEST_V1_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_V1_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_RX_TEST_V2_CMD_OPCODE = 0x2033,
HCI_LE_TX_TEST_V2_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_RX_TEST_V3_CMD_OPCODE = 0x204F,
HCI_LE_TX_TEST_V3_CMD_OPCODE = 0x2050,
HCI_LE_SET_CONLESS_CTE_TX_PARAM_CMD_OPCODE = 0x2051,
HCI_LE_SET_CONLESS_CTE_TX_EN_CMD_OPCODE = 0x2052,
HCI_LE_SET_CONLESS_IQ_SAMPL_EN_CMD_OPCODE = 0x2053,
HCI_LE_SET_CON_CTE_RX_PARAM_CMD_OPCODE = 0x2054,
HCI_LE_SET_CON_CTE_TX_PARAM_CMD_OPCODE = 0x2055,
HCI_LE_CON_CTE_REQ_EN_CMD_OPCODE = 0x2056,
HCI_LE_CON_CTE_RSP_EN_CMD_OPCODE = 0x2057,
HCI_LE_RD_ANTENNA_INF_CMD_OPCODE = 0x2058,
HCI_LE_SET_PER_ADV_REC_EN_CMD_OPCODE = 0x2059,
HCI_LE_PER_ADV_SYNC_TRANSF_CMD_OPCODE = 0x205A,
HCI_LE_PER_ADV_SET_INFO_TRANSF_CMD_OPCODE = 0x205B,
HCI_LE_SET_PER_ADV_SYNC_TRANSF_PARAM_CMD_OPCODE = 0x205C,
HCI_LE_SET_DFT_PER_ADV_SYNC_TRANSF_PARAM_CMD_OPCODE = 0x205D,
HCI_LE_GEN_DHKEY_V2_CMD_OPCODE = 0x205E,
HCI_LE_MOD_SLEEP_CLK_ACC_CMD_OPCODE = 0x205F,
HCI_LE_RD_BUF_SIZE_V2_CMD_OPCODE = 0x2060,
HCI_LE_RD_ISO_TX_SYNC_CMD_OPCODE = 0x2061,
HCI_LE_SET_CIG_PARAMS_CMD_OPCODE = 0x2062,
HCI_LE_SET_CIG_PARAMS_TEST_CMD_OPCODE = 0x2063,
HCI_LE_CREATE_CIS_CMD_OPCODE = 0x2064,
HCI_LE_REMOVE_CIG_CMD_OPCODE = 0x2065,
HCI_LE_ACCEPT_CIS_REQ_CMD_OPCODE = 0x2066,
HCI_LE_REJECT_CIS_REQ_CMD_OPCODE = 0x2067,
HCI_LE_CREATE_BIG_CMD_OPCODE = 0x2068,
HCI_LE_CREATE_BIG_TEST_CMD_OPCODE = 0x2069,
HCI_LE_TERMINATE_BIG_CMD_OPCODE = 0x206A,
HCI_LE_BIG_CREATE_SYNC_CMD_OPCODE = 0x206B,
HCI_LE_BIG_TERMINATE_SYNC_CMD_OPCODE = 0x206C,
HCI_LE_REQ_PEER_SCA_CMD_OPCODE = 0x206D,
HCI_LE_SETUP_ISO_DATA_PATH_CMD_OPCODE = 0x206E,
HCI_LE_REMOVE_ISO_DATA_PATH_CMD_OPCODE = 0x206F,
HCI_LE_ISO_TX_TEST_CMD_OPCODE = 0x2070,
HCI_LE_ISO_RX_TEST_CMD_OPCODE = 0x2071,
HCI_LE_ISO_READ_TEST_COUNTERS_CMD_OPCODE = 0x2072,
HCI_LE_ISO_TEST_END_CMD_OPCODE = 0x2073,
HCI_LE_SET_HOST_FEATURE_CMD_OPCODE = 0x2074,
HCI_LE_RD_ISO_LINK_QUALITY_CMD_OPCODE = 0x2075,
HCI_LE_ENH_RD_TX_PWR_LVL_CMD_OPCODE = 0x2076,
HCI_LE_RD_REMOTE_TX_PWR_LVL_CMD_OPCODE = 0x2077,
HCI_LE_SET_PATH_LOSS_REP_PARAM_CMD_OPCODE = 0x2078,
HCI_LE_SET_PATH_LOSS_REP_EN_CMD_OPCODE = 0x2079,
HCI_LE_SET_TX_POWER_REP_EN_CMD_OPCODE = 0x207A,
HCI_LE_TX_TEST_V4_CMD_OPCODE = 0x207B,
///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_SET_LOCAL_CLOCK_CMD_OPCODE = 0xFC0F,
HCI_DBG_RD_KE_STATS_CMD_OPCODE = 0xFC10,
HCI_DBG_PLF_RESET_CMD_OPCODE = 0xFC11,
HCI_DBG_RD_MEM_INFO_CMD_OPCODE = 0xFC12,
HCI_VS_SET_PREF_SLAVE_LATENCY_CMD_OPCODE = 0xFC13,
HCI_VS_SET_PREF_SLAVE_EVT_DUR_CMD_OPCODE = 0xFC14,
HCI_VS_SET_MAX_RX_SIZE_AND_TIME_CMD_OPCODE = 0xFC15,
HCI_DBG_BLE_REG_RD_CMD_OPCODE = 0xFC30,
HCI_DBG_BLE_REG_WR_CMD_OPCODE = 0xFC31,
HCI_DBG_SEND_LLCP_CMD_OPCODE = 0xFC35,
HCI_DBG_LLCP_DISCARD_CMD_OPCODE = 0xFC36,
HCI_DBG_RF_REG_RD_CMD_OPCODE = 0xFC39,
HCI_DBG_RF_REG_WR_CMD_OPCODE = 0xFC3A,
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,
#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 (BT_READ_PICONET_CLOCK)
HCI_VS_RD_PICONET_CLOCK_CMD_OPCODE = 0xFC50,
#endif // (BT_READ_PICONET_CLOCK)
#if (BLE_ISO_MODE_0)
/// Vendor Specific commands for ISO Mode 0
HCI_VS_MIC_LESS_SET_CMD_OPCODE = 0xFC51,
HCI_VS_SETUP_AM0_DATA_PATH_CMD_OPCODE = 0xFC52,
HCI_VS_REMOVE_AM0_DATA_PATH_CMD_OPCODE = 0xFC53,
HCI_VS_SETUP_AM0_STREAM_CMD_OPCODE = 0xFC54,
HCI_VS_REMOVE_AM0_STREAM_CMD_OPCODE = 0xFC55,
#endif // (BLE_ISO_MODE_0)
/// Debug commands for ISO
HCI_DBG_ISO_SET_PARAM_CMD_OPCODE = 0xFC57,
HCI_VS_SET_ISO_DATA_PATH_TRIGGER_CMD_OPCODE = 0xFC5A,
#if CRYPTO_UT
HCI_DBG_TEST_CRYPTO_FUNC_CMD_OPCODE = 0xFC60,
#endif //CRYPTO_UT
#if RW_DEBUG
HCI_DBG_TEST_SCH_PLAN_SET_CMD_OPCODE = 0xFC61,
HCI_DBG_TEST_SCH_PLAN_REM_CMD_OPCODE = 0xFC62,
HCI_DBG_TEST_SCH_PLAN_CHK_CMD_OPCODE = 0xFC63,
HCI_DBG_TEST_SCH_PLAN_REQ_CMD_OPCODE = 0xFC64,
#endif //RW_DEBUG
#if BLE_IQ_GEN
HCI_DBG_IQGEN_CFG_CMD_OPCODE = 0xFC65,
#endif //BLE_IQ_GEN
#if (AUDIO_SYNC_SUPPORT)
HCI_VS_AUSY_CON_EVT_CNT_GET_CMD_OPCODE = 0xFC66,
HCI_VS_AUSY_EVT_TX_TIME_GET_CMD_OPCODE = 0xFC67,
HCI_VS_AUSY_LAST_RX_TIME_GET_CMD_OPCODE = 0xFC68,
HCI_VS_AUSY_CLOCK_SAMPLE_GET_CMD_OPCODE = 0xFC69,
HCI_VS_AUSY_CLOCK_CONVERT_CMD_OPCODE = 0xFC6A,
HCI_VS_AUSY_CIS_EVT_CTRL_CMD_OPCODE = 0xFC6B,
#endif // (AUDIO_SYNC_SUPPORT)
};
/**************************************************************************************
************** HCI EVENTS ****************
**************************************************************************************/
///Event Codes
/*@TRACE*/
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_SAM_STATUS_CHANGE_EVT_CODE = 0x58,
HCI_MAX_EVT_MSK_PAGE_2_CODE = 0x59,
HCI_DBG_META_EVT_CODE = 0xFF,
};
/*@TRACE*/
enum hci_le_evt_subcode
{
/// 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_PER_ADV_SYNC_EST_EVT_SUBCODE = 0x0E,
HCI_LE_PER_ADV_REPORT_EVT_SUBCODE = 0x0F,
HCI_LE_PER_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,
HCI_LE_CONLESS_IQ_REPORT_EVT_SUBCODE = 0x15,
HCI_LE_CON_IQ_REPORT_EVT_SUBCODE = 0x16,
HCI_LE_CTE_REQ_FAILED_EVT_SUBCODE = 0x17,
HCI_LE_PER_ADV_SYNC_TRANSF_REC_EVT_SUBCODE = 0x18,
HCI_LE_CIS_ESTABLISHED_EVT_SUBCODE = 0x19,
HCI_LE_CIS_REQUEST_EVT_SUBCODE = 0x1A,
HCI_LE_CREATE_BIG_CMP_EVT_SUBCODE = 0x1B,
HCI_LE_TERMINATE_BIG_CMP_EVT_SUBCODE = 0x1C,
HCI_LE_BIG_SYNC_ESTABLISHED_EVT_SUBCODE = 0x1D,
HCI_LE_BIG_SYNC_LOST_EVT_SUBCODE = 0x1E,
HCI_LE_REQ_PEER_SCA_CMP_EVT_SUBCODE = 0x1F,
HCI_LE_PATH_LOSS_THRESHOLD_EVT_SUBCODE = 0x20,
HCI_LE_TX_POWER_REPORTING_EVT_SUBCODE = 0x21,
HCI_LE_BIG_INFO_ADV_REPORT_EVT_SUBCODE = 0x22,
};
/*@TRACE*/
enum hci_vs_evt_subcode
{
#if (RW_DEBUG)
/// DBG Events Subcodes
HCI_DBG_ASSERT_EVT_SUBCODE = 0x02,
#endif //(RW_DEBUG)
#if (BLE_ISOGEN)
/// VS ISO Gen Statistics Status
HCI_VS_ISOGEN_STAT_EVT_SUBCODE = 0x03,
#endif // (BLE_ISOGEN)
#if (AUDIO_SYNC_SUPPORT)
HCI_VS_AUSY_CIS_ESTAB_PARAM_EVT_SUBCODE = 0x04,
#endif // (AUDIO_SYNC_SUPPORT)
HCI_VS_INVALID_EVT_SUBCODE = 0xFF,
};
/// 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,
};
#if (BLE_ISO_PRESENT)
#if (BLE_ISO_MODE_0)
/// Current audio mode
enum iso_am0_ctrl
{
// Stop Audio Mode 0 Stream
ISO_AM0_CRL_DISABLE,
// Start Audio Mode 0 Stream
ISO_AM0_CRL_ENABLE,
};
#endif // (BLE_ISO_MODE_0)
/// Isochronous Channel data path selection
enum iso_dp_type
{
/// ISO over HCI Data Path
ISO_DP_ISOOHCI = 0x00,
/// Data Path direction is disabled
ISO_DP_DISABLE = 0xFF,
// vendor specifics
// @see enum dp_type
// @see enum plf_dp_type
};
/// Isochronous Data Path Direction
enum iso_dp_direction
{
/// Input (Host to Controller)
ISO_DP_INPUT = 0x00,
/// Output (Controller to Host)
ISO_DP_OUTPUT = 0x01,
};
#endif // (BLE_ISO_PRESENT)
/**************************************************************************************
************** HCI MESSAGE STRUCTURES ****************
**************************************************************************************/
/// HCI ACL data packet structure
/*@TRACE*/
struct hci_acl_data
{
/// 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;
};
/// HCI Synchronous data packet structure
/*@TRACE*/
struct hci_sync_data
{
/// bits[00:11]: Connection handle
/// bits[12:13]: Packet status flag
uint16_t conhdl_psf;
/// length of the data
uint8_t length;
/// EM buffer pointer
uint16_t buf_ptr;
};
#if BLE_EMB_PRESENT
#if BLE_ISO_PRESENT
/// ISO_Data_load structure
/*@TRACE*/
struct iso_data_load
{
/// Time_Stamp
uint32_t time_stamp;
/// Packet Sequence Number
uint16_t pkt_seq_nb;
/// length of the ISO SDU
/// bits[00:11]: ISO SDU length
/// bits[12:13]: RFU
/// bits[14:15]: Packet_Status_Flag
uint16_t iso_sdu_length_psf;
/// Pointer to the SDU
uint8_t* iso_sdu_ptr;
};
/// HCI ISO data packet structure
/*@TRACE*/
struct hci_iso_data
{
/// bits[00:11]: Connection handle
/// bits[12:13]: Packet boundary flag
/// bit[14]: Time_Stamp flag
/// bit[15]: RFU
uint16_t conhdl_pbf_tsf;
/// ISO_Data_Load_Length and 2 RFU bits
uint16_t iso_data_load_len;
/// ISO_Data_Load
struct iso_data_load iso_data_load;
};
#endif //BLE_ISO_PRESENT
#endif //BLE_EMB_PRESENT
/*
* HCI COMMANDS PARAMETERS (to classify)
****************************************************************************************
*/
/// HCI basic command structure with connection handle
/*@TRACE
* hci_rd_rssi_cmd = hci_basic_conhdl_cmd
* hci_le_rd_chnl_map_cmd = hci_basic_conhdl_cmd
* hci_le_ltk_req_neg_reply_cmd = hci_basic_conhdl_cmd*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_reject_con_req_cmd
{
///BdAddr
struct bd_addr bd_addr;
///Reason
uint8_t reason;
};
/// HCI reject synchronous connection request command structure
/*@TRACE*/
struct hci_reject_sync_con_req_cmd
{
///BdAddr
struct bd_addr bd_addr;
///Reason
uint8_t reason;
};
/// HCI link key request reply command structure
/*@TRACE*/
struct hci_lk_req_reply_cmd
{
///BdAddr
struct bd_addr bd_addr;
///Key
struct ltk key;
};
/// HCI link key request reply command structure
/*@TRACE*/
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
/*@TRACE*/
struct hci_switch_role_cmd
{
///BdAddr
struct bd_addr bd_addr;
///Read all flag
uint8_t role;
};
/// HCI flow specification command parameters structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_sniff_mode_cmd
{
///Connection handle
uint16_t conhdl;
/// Maximum interval (in slots)
uint16_t max_int;
/// Minimum interval (in slots)
uint16_t min_int;
/// Attempts (number of receive slots) (in slots)
uint16_t attempt;
/// Timeout (number of receive slots) (in slots)
uint16_t timeout;
};
/// HCI sniff subrating mode request command parameters structure
/*@TRACE*/
struct hci_sniff_sub_cmd
{
///Connection handle
uint16_t conhdl;
/// Maximum latency used to calculate the maximum sniff subrate that the remote device may use (in slots)
uint16_t max_lat;
/// Minimum base sniff subrate timeout that the remote device may use (in slots)
uint16_t min_rem_to;
/// Minimum base sniff subrate timeout that the local device may use (in slots)
uint16_t min_loc_to;
};
/// HCI role discovery complete event parameters structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
int8_t pw_gfsk;
///Transmit power DQPSK
int8_t pw_dqpsk;
///Transmit power 8DPSK
int8_t pw_8dpsk;
};
/*
* HCI LINK CONTROL COMMANDS PARAMETERS
****************************************************************************************
*/
/// Format of the message of the Group: LINK_CONTROL_COMMANDS
/// HCI Inquiry command parameters structure
/*@TRACE*/
struct hci_inq_cmd
{
///Lap
struct lap lap;
///Inquiry Length in units of 1.28 s
uint8_t inq_len;
///Number of response
uint8_t nb_rsp;
};
/*@TRACE*/
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 in units of 1.28 s
uint8_t inq_len;
///Number of response
uint8_t nb_rsp;
};
/*@TRACE*/
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
/*@TRACE*/
struct hci_disconnect_cmd
{
/// connection handle
uint16_t conhdl;
/// reason
uint8_t reason;
};
/// HCI master link key command structure
/*@TRACE*/
struct hci_master_lk_cmd
{
///Key flag
uint8_t key_flag;
};
/// HCI authentication request command parameters structure
/*@TRACE*/
struct hci_set_con_enc_cmd
{
///Connection handle
uint16_t conhdl;
///Encryption mode
uint8_t enc_en;
};
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_send_keypress_notif_cmd
{
///BdAddr
struct bd_addr bd_addr;
///Notification type
uint8_t notif_type;
};
/// HCI truncated page command structure
/*@TRACE*/
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
/*@TRACE*/
struct hci_trunc_page_can_cmd
{
///BdAddr
struct bd_addr bd_addr;
};
/// HCI set connectionless slave broadcast command structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
struct hci_le_gen_dhkey_v1_cmd
{
/// Remote P-256 public key
uint8_t public_key[64];
};
/*@TRACE*/
struct hci_le_gen_dhkey_v2_cmd
{
/// Remote P-256 public key
uint8_t public_key[64];
/// Private key type (@see enum priv_key_type)
uint8_t key_type;
};
/*@TRACE*/
struct hci_le_mod_sleep_clk_acc_cmd
{
/// Switch to more or less accurate clock (@see enum clk_acc_action)
uint8_t action;
};
/*
* HCI LINK POLICY COMMANDS PARAMETERS
****************************************************************************************
*/
/// HCI setup quality of service command structure
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
struct hci_set_evt_mask_cmd
{
///Event Mask
struct evt_mask event_mask;
};
/// HCI set event filter command structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_pin_type_cmd_cmp_evt
{
///Status of the command
uint8_t status;
///PIN type
uint8_t pin_type;
};
/*@TRACE*/
struct hci_wr_pin_type_cmd
{
///PIN type
uint8_t pin_type;
};
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
struct hci_wr_local_name_cmd
{
///Name
struct device_name name;
};
/// HCI command complete event structure for the read local name command
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_page_to_cmd_cmp_evt
{
///Status of the command
uint8_t status;
/// Page timeout (in slots)
uint16_t page_to;
};
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_scan_en_cmd_cmp_evt
{
///Status of the command
uint8_t status;
///Status of the scan enable
uint8_t scan_en;
};
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_auth_en_cmd_cmp_evt
{
///Status of the command
uint8_t status;
///Value of the authentication
uint8_t auth_en;
};
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_class_of_dev_cmd_cmp_evt
{
///Status of the command
uint8_t status;
///Class of device
struct devclass class_of_dev;
};
/*@TRACE*/
struct hci_wr_class_of_dev_cmd
{
///Class of device
struct devclass class_of_dev;
};
/// HCI read voice settings complete event
/*@TRACE*/
struct hci_rd_voice_stg_cmd_cmp_evt
{
///Status of the command reception
uint8_t status;
/// Voice setting
uint16_t voice_stg;
};
/*@TRACE*/
struct hci_wr_voice_stg_cmd
{
/// voice setting
uint16_t voice_stg;
};
/// HCI command complete event structure for read number of broadcast retrans command
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
struct hci_set_ctrl_to_host_flow_ctrl_cmd
{
///Flow control enable for controller
uint8_t flow_cntl;
};
///HCI host buffer size command
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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_ACTIVITY_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_ACTIVITY_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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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];
};
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_inq_mode_cmd_cmp_evt
{
/// Status of the command reception
uint8_t status;
/// Inquiry mode
uint8_t inq_mode;
};
/*@TRACE*/
struct hci_wr_inq_mode_cmd
{
/// Inquiry mode
uint8_t inq_mode;
};
/// HCI command complete event structure for write page scan type command structure
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
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;
};
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_sp_mode_cmd_cmp_evt
{
///status
uint8_t status;
///Simple pairing mode
uint8_t sp_mode;
};
/*@TRACE*/
struct hci_wr_sp_mode_cmd
{
///Simple pairing mode
uint8_t sp_mode;
};
/// HCI command complete event structure for read oob data command
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_inq_rsp_tx_pwr_lvl_cmd_cmp_evt
{
///status
uint8_t status;
///TX power
uint8_t tx_pwr;
};
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_dft_err_data_rep_cmd_cmp_evt
{
///status
uint8_t status;
///Erroneous data reporting
uint8_t err_data_rep;
};
/*@TRACE*/
struct hci_wr_dft_err_data_rep_cmd
{
///Erroneous data reporting
uint8_t err_data_rep;
};
/// HCI read LE Host Supported complete event
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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 Durations & Types
struct ext_fr_period period[1/*__ARRAY_EMPTY*/];
};
/// HCI Set MWS Signaling command
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_set_mws_scan_freq_table_cmd
{
///Num_Scan_Frequencies
uint8_t num_scan_frequencies;
///Scan_Frequencys Low & High
struct mws_scan_freq scan_freq[1/*__ARRAY_EMPTY*/];
};
/// HCI Set MWS Pattern Configuration command
/*@TRACE*/
struct hci_set_mws_pattern_config_cmd
{
///MWS_PATTERN_Index
uint8_t mws_pattern_index;
///MWS_PATTERN_NumIntervals
uint8_t num_intervals;
///MWS_PATTERN_Interval Duration & Type
struct mws_pattern_intv intv[1/*__ARRAY_EMPTY*/];
};
/// Hci Get MWS Transport Layer Configuration command complete event
/*@TRACE*/
struct hci_get_mws_transport_layer_config_cmd_cmp_evt
{
///Status
uint8_t status;
///Num_Transports
uint8_t num_transports;
///Transport_Layers
struct mws_transport tran[1/*__ARRAY_EMPTY*/];
};
/// HCI read Secure Connections Host Support complete event
/*@TRACE*/
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
/*@TRACE*/
struct hci_wr_sec_con_host_supp_cmd
{
/// Secure Connections Host Support
uint8_t sec_con_host_supp;
};
/// HCI write Secure Connections Test Mode command
struct hci_wr_sec_con_test_mode_cmd
{
/// Connection handle
uint16_t conhdl;
/// DM1 ACL-U mode
uint8_t dm1_acl_u_mode;
/// eSCO loopback mode
uint8_t esco_loopback_mode;
};
/// HCI write Secure Connections Test Mode complete event
struct hci_wr_sec_con_test_mode_cmd_cmp_evt
{
///Status
uint8_t status;
/// Connection handle
uint16_t conhdl;
};
/// HCI Set Reserved LT_ADDR command
/*@TRACE*/
struct hci_set_res_lt_addr_cmd
{
/// LT_ADDR
uint8_t lt_addr;
};
/// HCI Set Reserved LT_ADDR command complete event
/*@TRACE*/
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
/*@TRACE*/
struct hci_del_res_lt_addr_cmd
{
/// LT_ADDR
uint8_t lt_addr;
};
/// HCI Delete Reserved LT_ADDR command complete event
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_auth_payl_to_cmd
{
///Connection handle
uint16_t conhdl;
};
/// HCI command complete event structure for the Read Authenticated Payload Timeout Command
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_wr_ext_inq_len_cmd
{
/// Extended Inquiry Length
uint16_t ext_inq_len;
};
/// HCI Set Ecosystem Base Interval command
/*@TRACE*/
struct hci_set_eco_base_intv_cmd
{
/// Interval
uint16_t interval;
};
/// HCI Configure Data Path command
/*@TRACE*/
struct hci_config_data_path_cmd
{
/// Data Path Direction
uint8_t data_path_direction;
/// Data Path ID
uint8_t data_path_id;
/// Vendor Specific Config Length (in bytes)
uint8_t vendor_specific_cfg_len;
/// Vendor Specific Config
uint8_t vendor_specific_cfg[__ARRAY_EMPTY];
};
/*
* HCI INFORMATIONAL PARAMETERS COMMANDS PARAMETERS
****************************************************************************************
*/
///HCI command complete event structure for read local version information
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_local_supp_feats_cmd_cmp_evt
{
/// Status of the command reception
uint8_t status;
///Local supported features
struct features feats;
};
/*@TRACE*/
struct hci_rd_local_ext_feats_cmd
{
///Page number
uint8_t page_nb;
};
/// HCI command complete event structure for read local extended features command
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_buf_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
/*@TRACE*/
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
/*@TRACE*/
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 command complete event structure for read local supported codecs v2
/*@TRACE*/
struct hci_rd_local_supp_codecs_v2_cmd_cmp_evt
{
/// Status of the command reception
uint8_t status;
uint8_t num_supp_standard_codecs;
uint8_t num_supp_vendor_specific_codecs;
// ///Supported Codecs structure
// struct supp_codecs local_codecs;
};
/// HCI command complete event structure for read local simple pairing options
struct hci_rd_local_sp_opt_cmd_cmp_evt
{
/// Status of the command reception
uint8_t status;
/// Simple Pairing options (bit 0: Remote public key validation)
uint8_t sp_opt;
/// Maximum Encryption Key Size (in octets)
uint8_t max_enc_key_size;
};
/// HCI Read Local Supported Codec Capabilities command
struct hci_rd_local_supp_codec_cap_cmd
{
/// Codec ID
uint8_t codec_id[CODEC_ID_LEN];
/// Logical Transport Type
uint8_t logical_transport_type;
/// Direction
uint8_t direction;
};
/// HCI command complete event structure for Read Local Supported Codec Capabilities command
struct hci_rd_local_supp_codec_cap_cmd_cmp_evt
{
/// Status of the command reception
uint8_t status;
/// Num Codec Capabilities
uint8_t num_codec_cap;
/// Codec Capability Length [i]
uint8_t codec_cap_len; // TODO: update when the number of codecs is available
/// Codec Capability [i]
uint8_t codec_cap[__ARRAY_EMPTY]; // TODO: update when the number of codecs is available
};
/// HCI Read Local Supported Controller Delay command
struct hci_rd_local_supp_ctrl_delay_cmd
{
/// Codec ID
uint8_t codec_id[CODEC_ID_LEN];
/// Logical Transport Type
uint8_t logical_transport_type;
/// Direction
uint8_t direction;
/// Codec Configuration Length
uint8_t codec_cfg_len;
/// Codec Configuration
uint8_t codec_cfg[__ARRAY_EMPTY];
};
/// HCI command complete event structure for Read Local Supported Controller Delay command
struct hci_rd_local_supp_ctrl_delay_cmd_cmp_evt
{
/// Status of the command reception
uint8_t status;
/// Min Controller Delay
uint8_t min_ctrl_delay[3];
/// Max Controller Delay
uint8_t max_ctrl_delay[3];
};
/*
* HCI STATUS PARAMETERS COMMANDS PARAMETERS
****************************************************************************************
*/
/// HCI command complete event structure for read rssi
/*@TRACE*/
struct hci_rd_rssi_cmd_cmp_evt
{
///Status for command reception
uint8_t status;
///Connection handle
uint16_t conhdl;
///RSSI value
int8_t rssi;
};
/*@TRACE*/
struct hci_rd_clk_cmd
{
///Connection handle
uint16_t conhdl;
///Which clock
uint8_t clk_type;
};
/// HCI read clock command structure
/*@TRACE*/
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
/*@TRACE*/
struct hci_rd_loopback_mode_cmd_cmp_evt
{
/// Status of the command reception
uint8_t status;
///Local supported features
uint8_t lb_mode;
};
/*@TRACE*/
struct hci_wr_loopback_mode_cmd
{
///Local supported features
uint8_t lb_mode;
};
/*@TRACE*/
struct hci_wr_sp_dbg_mode_cmd
{
///Simple pairing mode
uint8_t sp_mode;
};
/*
* HCI LE CONTROLLER COMMANDS PARAMETERS
****************************************************************************************
*/
///HCI LE Set Event Mask Command parameters structure
/*@TRACE*/
struct hci_le_set_evt_mask_cmd
{
///LE Event Mask
struct evt_mask le_mask;
};
///HCI LE Set Random Address Command parameters structure
/*@TRACE*/
struct hci_le_set_rand_addr_cmd
{
///Random address to set
struct bd_addr rand_addr;
};
///HCI LE Set Advertising Parameters Command parameters structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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;
};
///HCI LE Create Connection Command parameters structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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;
///Scan duration (Time=N*10ms) | 0x0000: Scan continuously until explicitly disable
uint16_t duration;
///Scan period (Time=N*1.28sec) | 0x0000: Periodic scanning disabled
uint16_t period;
};
/*@TRACE*/
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;
};
///HCI LE Extended Create Connection Command parameters structure
/*@TRACE*/
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 phy[MAX_INIT_PHYS];
};
///HCI LE Periodic Advertising Create Sync Command parameters structure
/*@TRACE*/
struct hci_le_per_adv_create_sync_cmd
{
/// Options (@see enum per_sync_opt)
uint8_t options;
///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;
/// Sync CTE type (@see enum sync_cte_type)
uint8_t sync_cte_type;
};
///HCI LE Periodic Advertising Terminate Sync Command parameters structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_le_set_host_ch_class_cmd
{
///Channel map
struct le_chnl_map chmap;
};
///HCI LE Receiver Test v1 Command parameters structure
/*@TRACE*/
struct hci_le_rx_test_v1_cmd
{
/// RX channel, range: 0x00 to 0x27
uint8_t rx_channel;
};
///HCI LE Transmitter Test v1 Command parameters structure
/*@TRACE*/
struct hci_le_tx_test_v1_cmd
{
/// TX channel, range: 0x00 to 0x27
uint8_t tx_channel;
/// Length of test data in bytes, range: 0x00 to 0xFF
uint8_t test_data_len;
/**
* Packet payload
* 0x00 PRBS9 sequence "11111111100000111101" (in transmission order) as described in [Vol 6] Part F, Section 4.1.5
* 0x01 Repeated "11110000" (in transmission order) sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x02 Repeated "10101010" (in transmission order) sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x03 PRBS15 sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x04 Repeated "11111111" (in transmission order) sequence
* 0x05 Repeated "00000000" (in transmission order) sequence
* 0x06 Repeated "00001111" (in transmission order) sequence
* 0x07 Repeated "01010101" (in transmission order) sequence
* 0x08-0xFF Reserved for future use
*/
uint8_t pkt_payl;
};
///HCI LE Encrypt Command parameters structure
/*@TRACE*/
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
/*@TRACE*/
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 Enable Encryption Command parameters structure
/*@TRACE*/
struct hci_le_en_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
/*@TRACE*/
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
/*@TRACE*/
struct hci_le_ltk_req_neg_reply_cmd
{
///Connection handle
uint16_t conhdl;
};
/// HCI LE remote connection parameter request reply command parameters structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_le_set_addr_resol_en_cmd
{
/// Address Resolution Enable
uint8_t enable;
};
/// HCI LE Set Resolvable Private Address Timeout Command
/*@TRACE*/
struct hci_le_set_rslv_priv_addr_to_cmd
{
/// RPA Timeout
uint16_t rpa_timeout;
};
/*
* HCI EVENTS PARAMETERS
****************************************************************************************
*/
/// HCI inquiry complete event structure
/*@TRACE*/
struct hci_inq_cmp_evt
{
///Status of the procedure
uint8_t status;
};
/// HCI Inquiry result event structure (with only 1 result)
/*@TRACE*/
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)
/*@TRACE*/
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
int8_t rssi;
};
/// HCI Extended inquiry result indication structure (with only 1 result)
/*@TRACE*/
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
int8_t rssi;
///Extended inquiry response data
struct eir eir;
};
/// HCI disconnect complete event structure
/*@TRACE*/
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
/*@TRACE
* hci_dbg_wr_par_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_dbg_llcp_discard_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_reset_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_set_evt_mask_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_per_adv_en_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_create_con_cancel_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_evt_mask_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_host_ch_class_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_wr_suggted_dft_data_len_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_dft_phy_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_rmv_dev_from_wlst_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_adv_param_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_adv_data_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_scan_rsp_data_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_adv_en_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_scan_param_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_scan_en_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_rand_addr_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_addr_resol_en_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_set_rslv_priv_addr_to_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_rmv_dev_from_rslv_list_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_create_con_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_dbg_plf_reset_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* hci_le_wr_rf_path_comp_cmd_cmp_evt = hci_basic_cmd_cmp_evt
* */
struct hci_basic_cmd_cmp_evt
{
///Status of the command reception
uint8_t status;
};
/// HCI basic command complete event structure with connection handle
/*@TRACE*/
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.
/*@TRACE*/
struct hci_cmd_stat_event
{
/// Status of the command reception
uint8_t status;
};
/// HCI number of packet complete event structure
/*@TRACE*/
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
/*@TRACE*/
struct hci_data_buf_ovflw_evt
{
///Link type
uint8_t link_type;
};
/// HCI Hardware Error Event parameters structure
/*@TRACE*/
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
/*@TRACE
* hci_enc_key_refresh_evt = hci_enc_key_ref_cmp_evt */
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
/*@TRACE*/
struct hci_auth_payl_to_exp_evt
{
///Connection handle
uint16_t conhdl;
};
/// HCI command complete event structure for create connection
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_flush_occurred_evt
{
///Connection handle
uint16_t conhdl;
};
/// HCI max slot change event structure
/*@TRACE*/
struct hci_max_slot_chg_evt
{
///Connection handle
uint16_t conhdl;
///Max slot
uint8_t max_slot;
};
/// HCI sniff subrating event parameters structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_chg_con_lk_cmp_evt
{
///Status
uint8_t status;
///Connection handle
uint16_t conhdl;
};
/// HCI encryption key refresh complete event structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_lk_req_evt
{
///BD address
struct bd_addr bd_addr;
};
/// HCI encryption key refresh event structure
/*@TRACE*/
struct hci_enc_key_refresh_evt
{
///Status for command reception
uint8_t status;
///Connection handle
uint16_t conhdl;
};
/// HCI connection request event structure
/*@TRACE*/
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
/*@TRACE*/
struct hci_qos_viol_evt
{
///Connection handle
uint16_t conhdl;
};
/// HCI io capability response event structure
/*@TRACE*/
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
/*@TRACE*/
struct hci_io_cap_req_evt
{
///BdAddr
struct bd_addr bd_addr;
};
/// HCI Return link keys event structure
/*@TRACE*/
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
/*@TRACE*/
struct hci_pin_code_req_evt
{
///BdAddr
struct bd_addr bd_addr;
};
/// HCI user passkey request event structure
/*@TRACE*/
struct hci_user_passkey_req_evt
{
///BdAddr
struct bd_addr bd_addr;
};
/// HCI user passkey notification event structure
/*@TRACE*/
struct hci_user_passkey_notif_evt
{
///BdAddr
struct bd_addr bd_addr;
///Passkey
uint32_t passkey;
};
/// HCI remote OOB data request event structure
/*@TRACE*/
struct hci_rem_oob_data_req_evt
{
///BdAddr
struct bd_addr bd_addr;
};
/// HCI user confirmation request event structure
/*@TRACE*/
struct hci_user_cfm_req_evt
{
///BdAddr
struct bd_addr bd_addr;
///Passkey
uint32_t passkey;
};
/// HCI keypress notification event structure
/*@TRACE*/
struct hci_keypress_notif_evt
{
///BdAddr
struct bd_addr bd_addr;
///type
uint8_t type;
};
/// HCI link key notification event structure
/*@TRACE*/
struct hci_lk_notif_evt
{
///BdAddr
struct bd_addr bd_addr;
///Key
struct ltk key;
///type
uint8_t key_type;
};
/// HCI SAM status change event strucutre
struct hci_sam_status_change_evt
{
///Connection handle
uint16_t conhdl;
///Local SAM index
uint8_t loc_idx;
///Local SAM TX availability
uint8_t loc_tx_av;
///Local SAM RX availability
uint8_t loc_rx_av;
///Remote SAM index
uint8_t rem_idx;
///Remote SAM TX availability
uint8_t rem_tx_av;
///Remote SAM RX availability
uint8_t rem_rx_av;
};
/*
* HCI LE META EVENTS PARAMETERS
****************************************************************************************
*/
// LE event structures
/// HCI command complete event structure for the Read Local Supported Features
/*@TRACE*/
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
/*@TRACE
* hci_le_rd_adv_chnl_tx_pw_cmd_cmp_evt = hci_rd_adv_chnl_tx_pw_cmd_cmp_evt*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_le_rd_buf_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
/*@TRACE*/
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
/*@TRACE*/
struct hci_le_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 Test End
/*@TRACE
* * hci_le_test_end_cmd_cmp_evt = hci_test_end_cmd_cmp_evt*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE
* hci_le_periodic_adv_sync_est_evt = hci_le_per_adv_sync_est_evt*/
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 (@enum le_phy_value)
uint8_t phy;
/// Advertising interval (Time=N*1.25ms)
uint16_t interval;
/// Advertiser clock accuracy (@see enum SCA)
uint8_t adv_ca;
};
///HCI LE periodic advertising report event structure
/*@TRACE
* hci_le_periodic_adv_report_evt = hci_le_per_adv_report_evt*/
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
int8_t rssi;
/// CTE type
uint8_t cte_type;
/// 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];
};
///HCI LE periodic advertising sync lost event structure
/*@TRACE
* hci_le_periodic_adv_sync_lost_evt = hci_le_per_adv_sync_lost_evt*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_le_rd_rem_feats_cmd
{
///Connection handle
uint16_t conhdl;
};
/// HCI command complete event structure for HCI LE read remote feature Command
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
int8_t tx_pow_lvl;
};
/// HCI read remote information version command parameters structure
/*@TRACE*/
struct hci_rd_rem_ver_info_cmd
{
///Connection handle
uint16_t conhdl;
};
/// HCI LE remote connection parameter request event
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/// Connected LE event
struct hci_le_con_evt
{
///LE Subevent code
uint8_t subcode;
///Connection handle
uint16_t conhdl;
};
/// HCI command complete event structure for HCI LE read remote used feature Command
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_con_slv_bcst_ch_map_chg_evt
{
/// Channel_Map
struct chnl_map ch_map;
};
/*@TRACE*/
struct hci_le_gen_dhkey_cmp_evt
{
///LE Subevent code
uint8_t subcode;
uint8_t status;
uint8_t dh_key[32];
};
/*@TRACE*/
struct hci_le_rd_loc_p256_pub_key_cmp_evt
{
///LE Subevent code
uint8_t subcode;
uint8_t status;
t_public_key public_key;
};
/// HCI command structure for the LE receiver test v3 command
/*@TRACE*/
struct hci_le_rx_test_v3_cmd
{
/// RX channel, range: 0x00 to 0x27
uint8_t rx_channel;
/// PHY (@enum le_phy_value)
uint8_t phy;
/// Modulation index (0: standard | 1: stable)
uint8_t mod_idx;
/// Expected CTE length in 8us units, range: 0x02 to 0x14
uint8_t exp_cte_len;
/// Expected CTE type (0: AOA | 1: AOD-1us | 2: AOD-2us)
uint8_t exp_cte_type;
/// Slot durations (1: 1 us | 2: 2 us)
uint8_t slot_dur;
/// Length of switching pattern (number of antenna IDs in the pattern), range: 0x02 to 0x4B
uint8_t switching_pattern_len;
/// Antenna IDs
uint8_t antenna_id[MAX_SWITCHING_PATTERN_LEN];
};
/// HCI command structure for the LE transmitter test v3 command
/*@TRACE*/
struct hci_le_tx_test_v3_cmd
{
/// TX channel, range: 0x00 to 0x27
uint8_t tx_channel;
/// Length of test data in bytes, range: 0x00 to 0xFF
uint8_t test_data_len;
/**
* Packet payload
* 0x00 PRBS9 sequence "11111111100000111101" (in transmission order) as described in [Vol 6] Part F, Section 4.1.5
* 0x01 Repeated "11110000" (in transmission order) sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x02 Repeated "10101010" (in transmission order) sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x03 PRBS15 sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x04 Repeated "11111111" (in transmission order) sequence
* 0x05 Repeated "00000000" (in transmission order) sequence
* 0x06 Repeated "00001111" (in transmission order) sequence
* 0x07 Repeated "01010101" (in transmission order) sequence
* 0x08-0xFF Reserved for future use
*/
uint8_t pkt_payl;
/// PHY (@enum le_phy_value)
uint8_t phy;
/// CTE length (in 8us unit)
uint8_t cte_len;
/// CTE type (0: AOA | 1: AOD-1us | 2: AOD-2us)
uint8_t cte_type;
/// Length of switching pattern (number of antenna IDs in the pattern)
uint8_t switching_pattern_len;
/// Antenna IDs
uint8_t antenna_id[MAX_SWITCHING_PATTERN_LEN];
};
/// HCI command structure for the LE transmitter test v4 command
/*@TRACE*/
struct hci_le_tx_test_v4_cmd
{
/// TX channel, range: 0x00 to 0x27
uint8_t tx_channel;
/// Length of test data in bytes, range: 0x00 to 0xFF
uint8_t test_data_len;
/**
* Packet payload
* 0x00 PRBS9 sequence "11111111100000111101" (in transmission order) as described in [Vol 6] Part F, Section 4.1.5
* 0x01 Repeated "11110000" (in transmission order) sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x02 Repeated "10101010" (in transmission order) sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x03 PRBS15 sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x04 Repeated "11111111" (in transmission order) sequence
* 0x05 Repeated "00000000" (in transmission order) sequence
* 0x06 Repeated "00001111" (in transmission order) sequence
* 0x07 Repeated "01010101" (in transmission order) sequence
* 0x08-0xFF Reserved for future use
*/
uint8_t pkt_payl;
/// PHY (@enum le_phy_value)
uint8_t phy;
/// CTE length (in 8us unit)
uint8_t cte_len;
/// CTE type (0: AOA | 1: AOD-1us | 2: AOD-2us)
uint8_t cte_type;
/// Length of switching pattern (number of antenna IDs in the pattern)
uint8_t switching_pattern_len;
/// Antenna IDs
uint8_t antenna_id[MAX_SWITCHING_PATTERN_LEN];
/// Transmit power level in dBm (0x7E: minimum | 0x7F: maximum | range: -127 to +20)
int8_t tx_pwr_lvl;
};
/// HCI command structure for the LE set connectionless CTE transmit parameters command
/*@TRACE*/
struct hci_le_set_conless_cte_tx_param_cmd
{
/// Advertising handle
uint8_t adv_hdl;
/// CTE length (in 8us unit)
uint8_t cte_len;
/// CTE type (0: AOA | 1: AOD-1us | 2: AOD-2us)
uint8_t cte_type;
/// CTE count (number of CTEs to transmit in each periodic advertising interval, range 0x01 to 0x10)
uint8_t cte_count;
/// Length of switching pattern (number of antenna IDs in the pattern)
uint8_t switching_pattern_len;
/// Antenna IDs
uint8_t antenna_id[MAX_SWITCHING_PATTERN_LEN];
};
/// HCI command structure for the LE set connectionless CTE transmit enable command
/*@TRACE*/
struct hci_le_set_conless_cte_tx_en_cmd
{
/// Advertising handle
uint8_t adv_hdl;
/// CTE enable
uint8_t cte_en;
};
/// HCI command structure for LE set connectionless IQ sampling enable command
/*@TRACE*/
struct hci_le_set_conless_iq_sampl_en_cmd
{
/// Sync handle
uint16_t sync_hdl;
/// Sampling enable
uint8_t sampl_en;
/// Slot durations (1: 1us | 2: 2us)
uint8_t slot_dur;
/// Max sampled CTEs
uint8_t max_sampl_cte;
/// Length of switching pattern
uint8_t switching_pattern_len;
/// Antenna IDs
uint8_t antenna_id[MAX_SWITCHING_PATTERN_LEN];
};
/// HCI command structure for the LE set connection CTE receive parameters command
/*@TRACE*/
struct hci_le_set_con_cte_rx_param_cmd
{
/// Connection handle
uint16_t conhdl;
/// Sampling enable
uint8_t sampl_en;
/// Slot durations (1: 1us | 2: 2us)
uint8_t slot_dur;
/// Length of switching pattern (number of antenna IDs in the pattern)
uint8_t switching_pattern_len;
/// Antenna IDs
uint8_t antenna_id[MAX_SWITCHING_PATTERN_LEN];
};
/// HCI command structure for the LE set connection CTE transmit parameters command
/*@TRACE*/
struct hci_le_set_con_cte_tx_param_cmd
{
/// Connection handle
uint16_t conhdl;
/// CTE types (bit0: AOA | bit1: AOD-1us | bit2: AOD-2us)
uint8_t cte_types;
/// Length of switching pattern (number of antenna IDs in the pattern)
uint8_t switching_pattern_len;
/// Antenna IDs
uint8_t antenna_id[MAX_SWITCHING_PATTERN_LEN];
};
/// HCI command structure for the LE connection CTE request enable command
/*@TRACE*/
struct hci_le_con_cte_req_en_cmd
{
/// Connection handle
uint16_t conhdl;
/// Enable
uint8_t en;
/// CTE request interval (in number of connection events)
uint16_t cte_req_intv;
/// Requested CTE length (in 8us unit)
uint8_t req_cte_len;
/// Requested CTE type (0: AOA | 1: AOD-1us | 2: AOD-2us)
uint8_t req_cte_type;
};
/// HCI command structure for the LE connection CTE response enable command
/*@TRACE*/
struct hci_le_con_cte_rsp_en_cmd
{
/// Connection handle
uint16_t conhdl;
/// Enable
uint8_t en;
};
/// HCI command structure for LE set connectionless IQ sampling enable command complete event
/*@TRACE*/
struct hci_le_set_conless_iq_sampl_en_cmd_cmp_evt
{
/// Status
uint8_t status;
/// Sync handle
uint16_t sync_hdl;
};
/// HCI command structure for LE read antenna information command complete event
/*@TRACE*/
struct hci_le_rd_antenna_inf_cmd_cmp_evt
{
/// Status
uint8_t status;
/// Supported switching sampling rates
uint8_t supp_switching_sampl_rates;
/// Number of antennae
uint8_t antennae_num;
/// Max length of switching pattern (number of antenna IDs in the pattern)
uint8_t max_switching_pattern_len;
/// Max CTE length
uint8_t max_cte_len;
};
/// HCI command structure for the LE set periodic advertising receive enable command
/*@TRACE*/
struct hci_le_set_per_adv_rec_en_cmd
{
/// Sync handle
uint16_t sync_hdl;
/// Enable
uint8_t en;
};
/// HCI command structure for the LE set periodic advertising receive enable command
/*@TRACE*/
struct hci_le_per_adv_sync_transf_cmd
{
/// Connection handle
uint16_t conhdl;
/// Service data (value provided by the Host)
uint16_t serv_data;
/// Sync handle
uint16_t sync_hdl;
};
/// HCI command structure for the LE Periodic Advertising Set Info Transfer command
/*@TRACE*/
struct hci_le_per_adv_set_info_transf_cmd
{
/// Connection handle
uint16_t conhdl;
/// Service data (value provided by the Host)
uint16_t serv_data;
/// Advertising handle
uint8_t adv_hdl;
};
/// HCI command structure for the LE Set Periodic Advertising Sync Transfer Parameters command
/*@TRACE*/
struct hci_le_set_per_adv_sync_transf_param_cmd
{
/// Connection handle
uint16_t conhdl;
/// Mode (@see enum per_adv_sync_info_rec_mode)
uint8_t mode;
/// The number of periodic advertising packets that can be skipped after a successful receive
uint16_t skip;
/// Sync timeout (Time=N*10ms)
uint16_t sync_to;
/// CTE type (@see enum sync_cte_type)
uint8_t cte_type;
};
/// HCI command structure for the LE Set Default Periodic Advertising Sync Transfer Parameters command
/*@TRACE*/
struct hci_le_set_dft_per_adv_sync_transf_param_cmd
{
/// Mode (@see enum per_adv_sync_info_rec_mode)
uint8_t mode;
/// The number of periodic advertising packets that can be skipped after a successful receive
uint16_t skip;
/// Sync timeout (Time=N*10ms)
uint16_t sync_to;
/// CTE type (@see enum sync_cte_type)
uint8_t cte_type;
};
/// HCI command structure for the LE Periodic Advertising Sync Transfer Received event
/*@TRACE*/
struct hci_le_per_adv_sync_transf_rec_evt
{
/// LE Subevent code
uint8_t subcode;
/// Status
uint8_t status;
/// Connection handle
uint16_t conhdl;
/// Service data (value provided by the Host)
uint16_t serv_data;
/// Sync handle
uint16_t sync_hdl;
/// 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 (@enum le_phy_value)
uint8_t phy;
/// Advertising interval (Time=N*1.25ms)
uint16_t interval;
/// Advertiser clock accuracy (@see enum SCA)
uint8_t adv_ca;
};
/// HCI command structure for the LE enhanced read transmit power level command
/*@TRACE*/
struct hci_le_enh_rd_tx_pwr_lvl_cmd
{
/// Connection handle
uint16_t conhdl;
/// PHY (@see enum le_phy_pwr_value)
uint8_t phy;
};
/// HCI command structure for the LE enhanced read transmit power level command complete event
/*@TRACE*/
struct hci_le_enh_rd_tx_pwr_lvl_cmd_cmp_evt
{
/// Status
uint8_t status;
/// Connection handle
uint16_t conhdl;
/// PHY (@see enum le_phy_pwr_value)
uint8_t phy;
/// Current transmit power level (dBm)
int8_t curr_tx_pwr_lvl;
/// Max transmit power level (dBm)
int8_t max_tx_pwr_lvl;
};
/// HCI command structure for the LE read remote transmit power level command
/*@TRACE*/
struct hci_le_rd_remote_tx_pwr_lvl_cmd
{
/// Connection handle
uint16_t conhdl;
/// PHY (@see le_phy_pwr_value)
uint8_t phy;
};
/// HCI command structure for the LE set path loss reporting parameters command
/*@TRACE*/
struct hci_le_set_path_loss_rep_param_cmd
{
/// Connection handle
uint16_t conhdl;
/// High threshold (dB)
uint8_t hi_thr;
/// High hysteresis (dB)
uint8_t hi_hyst;
/// Low threshold (dB)
uint8_t lo_thr;
/// Low hysteresis (dB)
uint8_t lo_hyst;
/// Min time spent (conn events)
uint16_t min_time;
};
/// HCI command structure for the LE set path loss reporting parameters command complete event
/*@TRACE*/
struct hci_le_set_path_loss_rep_param_cmd_cmp_evt
{
/// Status
uint8_t status;
/// Connection handle
uint16_t conhdl;
};
/// HCI command structure for the LE set path loss reporting enable command
/*@TRACE*/
struct hci_le_set_path_loss_rep_en_cmd
{
/// Connection handle
uint16_t conhdl;
/// Enable (@see enum pwr_report_en)
uint8_t en;
};
/// HCI command structure for the LE set path loss reporting enable command complete event
/*@TRACE*/
struct hci_le_set_path_loss_rep_en_cmd_cmp_evt
{
/// Status
uint8_t status;
/// Connection handle
uint16_t conhdl;
};
/// HCI command structure for the LE set transmit power reporting enable command
/*@TRACE*/
struct hci_le_set_tx_power_rep_en_cmd
{
/// Connection handle
uint16_t conhdl;
/// Local Enable (@see enum pwr_report_en)
uint8_t local_en;
/// Remote Enable (@ see enum pwr_report_en)
uint8_t remote_en;
};
/// HCI command structure for the LE set transmit power reporting enable command complete event
/*@TRACE*/
struct hci_le_set_tx_power_rep_en_cmd_cmp_evt
{
/// Status
uint8_t status;
/// Connection handle
uint16_t conhdl;
};
/// HCI command structure for the LE Path Loss Threshold event
/*@TRACE*/
struct hci_le_path_loss_threshold_evt
{
/// LE Subevent code
uint8_t subcode;
/// Connection handle
uint16_t conhdl;
/// Current path loss (dB)
uint8_t curr_path_loss;
/// Zone entered (@see enum le_path_loss_zone)
uint8_t zone_entered;
};
/// HCI command strucutre for the LE Transmit Power Reporting event
/*@TRACE*/
struct hci_le_tx_power_rep_evt
{
/// LE Subevent code
uint8_t subcode;
/// Status
uint8_t status;
/// Connection handle
uint16_t conhdl;
/// Reason (@see enum pwr_report_reason)
uint8_t reason;
/// PHY (@see enum le_phy_pwr_value)
uint8_t phy;
/// Transmit Power level (dBm)
int8_t tx_pwr;
/// Transmit Power level flags (@see enum pwr_ctrl_flags)
uint8_t flags;
/// Delta (dB)
int8_t delta;
};
/*
* HCI VENDOR SPECIFIC COMMANDS PARAMETERS
****************************************************************************************
*/
/// Buffer structure
/*@TRACE*/
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
/*@TRACE
* hci_dbg_rd_mem_cmd_cmp_evt = hci_dbg_basic_rd_data_cmd_cmp_evt
* hci_dbg_rd_flash_cmd_cmp_evt = hci_dbg_basic_rd_data_cmd_cmp_evt
* hci_dbg_rd_par_cmd_cmp_evt = hci_dbg_basic_rd_data_cmd_cmp_evt
* */
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE
* hci_dbg_del_par_cmd = hci_dbg_del_param_cmd*/
struct hci_dbg_del_param_cmd
{
///Parameter tag
uint16_t param_tag;
};
///HCI Debug erase flash command parameters - vendor specific
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_dbg_rd_par_cmd
{
///Parameter tag
uint16_t param_tag;
};
///HCI Debug read parameters command parameters - vendor specific
/*@TRACE*/
struct hci_dbg_wr_par_cmd
{
///Parameter tag
uint16_t param_tag;
///Structure buffer
struct buffer_tag buf;
};
#if CRYPTO_UT
///HCI Debug Test cryptographic functions command parameters - vendor specific
/*@TRACE*/
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
#if (BT_READ_PICONET_CLOCK)
struct hci_vs_rd_piconet_clock_cmd
{
///Connection handle of the link
uint16_t conhdl;
///Pulse trigger management
uint8_t trig_pulse;
///Clock type (0=native clock, 1=piconet clock of conhndl)
uint8_t clk_type;
};
struct hci_vs_rd_piconet_clock_cmd_cmp_evt
{
/// Status
uint8_t status;
///Connection handle of the link
uint16_t conhdl;
/// Local timestamp(position in half slots)
uint32_t loc_clk_hslt;
/// Local timestamp fractional part (in half us)
uint16_t loc_clk_hus;
/// Piconet timestamp(position in half slots)
uint32_t pic_clk_off_hslt;
/// Piconet bit offset (in half us)
uint16_t pic_bit_off_hus;
};
#endif //(BT_READ_PICONET_CLOCK)
#if RW_DEBUG
///HCI Debug Test scheduling planner set function command parameters - vendor specific
/*@TRACE*/
struct hci_dbg_test_sch_plan_set_cmd
{
/// Activity identifier
uint32_t id;
/// Interval (in half-slots)
uint32_t interval;
/// Offset (in half-slots)
uint32_t offset;
/// Minimum duration (in half-slots)
uint32_t duration_min;
/// Maximum duration (in half-slots)
uint32_t duration_max;
/// Indicate activity is movable
bool mobility_level;
};
///HCI Debug Test scheduling planner set function command complete event parameters - vendor specific
/*@TRACE*/
struct hci_dbg_test_sch_plan_set_cmd_cmp_evt
{
/// Status
uint8_t status;
/// Activity identifier
uint32_t moved_id;
};
///HCI Debug Test scheduling planner remove function command parameters - vendor specific
/*@TRACE*/
struct hci_dbg_test_sch_plan_rem_cmd
{
/// Activity identifier
uint32_t id;
};
///HCI Debug Test scheduling planner check function command parameters - vendor specific
/*@TRACE*/
struct hci_dbg_test_sch_plan_chk_cmd
{
/// Activity identifier
uint32_t id;
/// Interval (in half-slots)
uint32_t interval;
/// Offset (in half-slots)
uint32_t offset;
/// Minimum duration (in half-slots)
uint32_t duration_min;
};
///HCI Debug Test scheduling planner request function command parameters - vendor specific
/*@TRACE*/
struct hci_dbg_test_sch_plan_req_cmd
{
/// Activity identifier
uint32_t id;
/// Minimum interval (in half-slots)
uint32_t interval_min;
/// Maximum interval (in half-slots)
uint32_t interval_max;
/// Minimum duration (in half-slots)
uint32_t duration_min;
/// Maximum duration (in half-slots)
uint32_t duration_max;
/// Period (in half-slots)
uint8_t period;
};
///HCI Debug Test scheduling planner request function command complete event parameters - vendor specific
/*@TRACE*/
struct hci_dbg_test_sch_plan_req_cmd_cmp_evt
{
/// Status
uint8_t status;
/// Interval (in half-slots)
uint32_t interval;
/// Minimum offset (in half-slots)
uint32_t offset_min;
/// Maximum offset (in half-slots)
uint32_t offset_max;
};
#endif //RW_DEBUG
///HCI Debug Read Kernel Statistics complete event parameters - vendor specific
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_dbg_id_flash_cmd_cmp_evt
{
///Status
uint8_t status;
///Flash identity
uint8_t flash_id;
};
///HCI Debug RF Register read command
/*@TRACE*/
struct hci_dbg_rf_reg_rd_cmd
{
/// register address
uint16_t addr;
};
///HCI Debug RF Register read command complete event
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_dbg_plf_reset_cmd
{
/// reason
uint8_t reason;
};
#if (RW_DEBUG && BT_EMB_PRESENT)
/// Send LMP Packets
/*@TRACE*/
struct hci_dbg_bt_send_lmp_cmd
{
/// Connection handle
uint16_t conhdl;
///buffer structure to return
struct buffer_tag buf;
};
/// Discard LMP Packets
/*@TRACE*/
struct hci_dbg_bt_discard_lmp_en_cmd
{
/// Connection handle
uint16_t conhdl;
/// Enable/Disable LMP discard (0: disable / 1: enable)
uint8_t enable;
};
/// Set local clock
/*@TRACE*/
struct hci_dbg_set_local_clock_cmd
{
/// Clock (in half-slots)
uint32_t clock;
};
#endif //(RW_DEBUG && BT_EMB_PRESENT)
#if (RW_WLAN_COEX)
///HCI Debug wlan coexistence command parameters - vendor specific
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_dbg_mws_coextst_scen_cmd
{
/// Scenario
uint32_t scenario;
};
#endif //RW_MWS_COEX_TEST
#endif //RW_MWS_COEX
#if BLE_IQ_GEN
///HCI Debug I&Q samples generator command parameters - vendor specific
/// Maximum number of supported antenna patterns
#define DBG_IQGEN_MAX_ANTENNA (8)
/*@TRACE*/
struct hci_dbg_iqgen_cfg_cmd
{
/// Number of antenna patterns
uint8_t nb_antenna;
/// Antenna switch/sample control
// bit[0]: 0: up-sweep; 1: up-down sweep (internal switching mode)
// bit[1]: 0: 1us intervals; 1: 2us intervals (internal switching mode)
// bit[2]: 0: internal switching mode; 1: baseband switching mode
uint8_t mode;
/// I/Q sample control
struct
{
/// I-sample control
/// 0: up-count from 0x01
/// 1: down-count from 0xFF
/// 2: Fixed value 0x00
/// 3: PRBS pattern
/// 4..0xFF: Fixed value
uint8_t i;
/// Q-sample control
/// 0: up-count from 0x01
/// 1: down-count from 0xFF
/// 2: Fixed value 0x00
/// 3: PRBS pattern
/// 4..0xFF: Fixed value
uint8_t q;
} iq_ctrl[DBG_IQGEN_MAX_ANTENNA];
};
#endif //BLE_IQ_GEN
/// Used to force parameters used for an CIS channel
/*@TRACE*/
struct hci_dbg_iso_set_param_cmd
{
/// Preferred sub event margin between two sub events (IFS + margin)
uint32_t sub_evt_margin;
};
#if (BLE_ISO_MODE_0)
/// HCI VS Mic-Less Set command parameters
/*@TRACE*/
struct hci_vs_mic_less_set_cmd
{
/// Handle that identify an ACL link that is requesting MIC-less mode
uint16_t conhdl;
};
/// HCI VS Setup AM0 Data Path command parameters
struct hci_vs_setup_am0_data_path_cmd
{
/// Channel_Handle to be used to identify an Audio Mode 0 Channel (range 0x0000-0x0EFF)
uint16_t am0_hdl;
/// Data path direction
/// 0x00 Input (Host to Controller)
/// 0x01 Output (Controller to Host)
/// Others Reserved for future use
uint8_t data_path_direction;
/// Data path ID
/// 0x00 HCI
/// 0x01-0xFE Logical_Channel_Number. The meaning of the logical channel is vendor specific.
/// 0xFF Test Mode
uint8_t data_path_id;
/// Controller delay in ms (Range: 0x000000 to 0x3D0900)
uint32_t ctrl_delay;
};
/// HCI VS Remove AM0 Data Path command parameters
struct hci_vs_remove_am0_data_path_cmd
{
/// Channel_Handle to be used to identify an Audio Mode 0 Channel (range 0x0000-0x0EFF)
uint16_t am0_hdl;
/// Bit[0]: Input data path, Bit[1]: Output data path
uint8_t direction;
};
/// HCI VS Setup Audio Mode 0 channel command parameters
/*@TRACE*/
struct hci_vs_setup_am0_stream_cmd
{
/// Handle that identify an ACL link between a Master and a Slave device that is requesting
/// an Audio Mode 0 Channel (range 0x0000-0x0EFF)
uint16_t conhdl;
/// The number of bits in each unit of data received from the Host over the data transport. (Range 0x01 - 0xFB)
uint8_t tx_size;
/// The number of bits in each unit of data sent to the Host over the data transport. (Range 0x01 - 0xFB)
uint8_t rx_size;
};
/// Used to read the maximum size of the data portion of isochronous packets
/// no parameter on command, only need to specify returned parameters
struct hci_vs_setup_am0_stream_cmd_cmp_evt
{
/// 0x00 - Request succeed ; 0x01-0xFF Failed reason
uint8_t status;
/// Handle that identify an ACL link between a Master and a Slave device that is requesting
/// an Audio Mode 0 Channel (range 0x0000-0x0EFF)
uint16_t conhdl;
/// Channel_Handle to be used to identify an Audio Mode 0 Channel (range 0x0000-0x0EFF)
uint16_t am0_hdl;
};
/// Removes existing Audio Mode 0 channel command parameters
/*@TRACE*/
struct hci_vs_remove_am0_stream_cmd
{
/// Channel_Handles used to identify Audio Mode 0 Channel (range 0x0000-0x0EFF)
uint16_t am0_hdl;
};
/// HCI basic command complete event structure with AM0 Channel handle
/*@TRACE*/
struct hci_vs_basic_am0_cmd_cmp_evt
{
/// status
uint8_t status;
/// Channel_Handles used to identify Audio Mode 0 Channel (range 0x0000-0x0EFF)
uint16_t am0_hdl;
};
#endif // (BLE_ISO_MODE_0)
///HCI Debug HW Register Read command parameters - vendor specific
/*@TRACE*/
struct hci_dbg_ble_reg_rd_cmd
{
/// register address
uint16_t reg_addr;
};
///HCI Debug HW Register write command parameters - vendor specific
/*@TRACE*/
struct hci_dbg_ble_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
/*@TRACE*/
struct hci_dbg_ble_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
/*@TRACE*/
struct hci_dbg_ble_reg_wr_cmd_cmp_evt
{
/// status
uint8_t status;
/// register address
uint16_t reg_addr;
};
///HCI Vendor Specific Set Preferred Slave Latency command parameters
/*@TRACE*/
struct hci_vs_set_pref_slave_latency_cmd
{
/// Connection handle
uint16_t conhdl;
/// Preferred latency (in number of connection events)
uint16_t latency;
};
///HCI Vendor Specific Set Preferred Slave event duration command parameters
/*@TRACE*/
struct hci_vs_set_pref_slave_evt_dur_cmd
{
/// Connection handle
uint16_t conhdl;
/// Preferred event duration (N * 0.625 ms)
uint16_t duration;
/// Slave transmits a single packet per connection event (False/True)
uint8_t single_tx;
};
///HCI Vendor Specific Set Maximum RX size and time command parameters
/*@TRACE*/
struct hci_vs_set_max_rx_size_and_time_cmd
{
/// Connection handle
uint16_t conhdl;
/// Maximum RX size (in B)
uint16_t rx_octets;
/// Maximum RX time (in us)
uint16_t rx_time;
};
/// Send LLCP Packets
/*@TRACE*/
struct hci_dbg_send_llcp_cmd
{
/// Connection handle
uint16_t conhdl;
///buffer structure to return
struct buffer_tag buf;
};
///HCI Debug LLC discard command parameters - vendor specific
/*@TRACE*/
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;
};
/// Vendor specific command used to set a periodic trigger
/*@TRACE*/
struct hci_vs_set_iso_data_path_trigger_cmd
{
/// Connection handle
uint16_t conhdl;
/// TX = 0, RX = 1
uint8_t direction;
/// 0 Disable, 1 Enable
uint8_t enable;
/// trigger offset in microseconds
/// for TX direction, trigger offset is applied using SDU at source reference
/// for RX direction, trigger offset is applied using SDU at destination reference (sdu at source + transport latency)
int32_t trigger_offset;
};
#if (RW_DEBUG)
/// HCI DBG Meta Event indicating a SW assertion
//TODO[AAL] exception (associated to HCI_DBG_EVT)
/*@TRACE*/
struct hci_dbg_assert_evt
{
///DBG Subevent code
uint8_t subcode;
/// Assert type (warning/error)
//@trc_ref assert_type
uint8_t type;
/// Line number
uint32_t line;
/// Param0
uint32_t param0;
/// Param1
uint32_t param1;
/// File name
uint8_t file[__ARRAY_EMPTY];
};
#endif //(RW_DEBUG)
#if(BLE_ISOGEN)
/// Event is used to provide statistics about ISO Gen
/*@TRACE*/
struct hci_vs_isogen_stat_evt
{
/// VS Subevent code
uint8_t subcode;
/// ISO Handle of the isochronous channel (Range 0x0000-0x0EFF)
uint16_t iso_hdl;
/// Statistics - Number of transmission attempts
uint32_t nb_tx;
/// Statistics - Number of transmission attempts that succeed
uint32_t nb_tx_ok;
/// Statistics - Number of Not granted packet packets
uint32_t nb_tx_not_granted;
/// Statistics - Number of reception attempt
uint32_t nb_rx;
/// Statistics - Number of reception attempts that succeed
uint32_t nb_rx_ok;
/// Statistics - Number of Not granted packet packets
uint32_t nb_rx_not_granted;
/// Statistics - Number of wrongly received packet (invalid data)
uint32_t nb_rx_data_err;
/// Statistics - Number of CRC Errors
uint32_t nb_rx_crc_err;
/// Statistics - Number of SYNC Errors
uint32_t nb_rx_sync_err;
/// Statistics - Number of received empty packets
uint32_t nb_rx_empty;
};
#endif // (BLE_ISOGEN)
/// HCI LE Read PHY command
/*@TRACE*/
struct hci_le_rd_phy_cmd
{
/// Connection Handle
uint16_t conhdl;
};
/// HCI LE Set Default PHY Command
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
struct hci_le_set_ext_adv_param_cmd_cmp_evt
{
/// Status
uint8_t status;
/// Selected Tx power
int8_t sel_tx_pwr;
};
/// HCI LE Receiver Test v2 Command
/*@TRACE*/
struct hci_le_rx_test_v2_cmd
{
/// RX channel, range: 0x00 to 0x27
uint8_t rx_channel;
/// PHY (@enum le_phy_value)
uint8_t phy;
/// Modulation index (0: standard | 1: stable)
uint8_t mod_idx;
};
/// HCI LE Transmitter Test v2 Command
/*@TRACE*/
struct hci_le_tx_test_v2_cmd
{
/// TX channel, range: 0x00 to 0x27
uint8_t tx_channel;
/// Length of test data in bytes, range: 0x00 to 0xFF
uint8_t test_data_len;
/**
* Packet payload
* 0x00 PRBS9 sequence "11111111100000111101" (in transmission order) as described in [Vol 6] Part F, Section 4.1.5
* 0x01 Repeated "11110000" (in transmission order) sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x02 Repeated "10101010" (in transmission order) sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x03 PRBS15 sequence as described in [Vol 6] Part F, Section 4.1.5
* 0x04 Repeated "11111111" (in transmission order) sequence
* 0x05 Repeated "00000000" (in transmission order) sequence
* 0x06 Repeated "00001111" (in transmission order) sequence
* 0x07 Repeated "01010101" (in transmission order) sequence
* 0x08-0xFF Reserved for future use
*/
uint8_t pkt_payl;
/// PHY (@enum le_phy_value)
uint8_t phy;
};
///HCI LE Set Advertising Set Random Address Command parameters structure
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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];
};
#if BLE_EMB_PRESENT || BLE_HOST_PRESENT
///HCI LE Set Extended Advertising Enable Command parameters structure
/*@TRACE*/
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];
};
#endif //BLE_EMB_PRESENT || BLE_HOST_PRESENT
///HCI LE Read Maximum Advertising Data Length Command complete event
/*@TRACE*/
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
/*@TRACE
* hci_le_rmv_adv_set_cmd = hci_le_rem_adv_set_cmd*/
struct hci_le_rem_adv_set_cmd
{
/// Advertising handle
uint8_t adv_hdl;
};
///HCI LE Read Number of Supported Advertising Sets Command complete event
/*@TRACE*/
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 Read Transmit Power Command complete event
/*@TRACE*/
struct hci_le_rd_tx_pwr_cmd_cmp_evt
{
/// Status
uint8_t status;
/// Minimum TX Power
int8_t min_tx_pwr;
/// Maximum TX Power
int8_t max_tx_pwr;
};
///HCI LE Read RF Path Compensation Command complete event
/*@TRACE*/
struct hci_le_rd_rf_path_comp_cmd_cmp_evt
{
/// Status
uint8_t status;
/// RF TX Path Compensation
int16_t tx_path_comp;
/// RF RX Path Compensation
int16_t rx_path_comp;
};
///HCI LE Write RF Path Compensation Command complete event
/*@TRACE*/
struct hci_le_wr_rf_path_comp_cmd
{
/// RF TX Path Compensation
int16_t tx_path_comp;
/// RF RX Path Compensation
int16_t rx_path_comp;
};
///HCI LE Set Periodic Advertising Parameters Command parameters structure
/*@TRACE*/
struct hci_le_set_per_adv_param_cmd
{
/// Advertising handle
uint8_t adv_hdl;
/// Minimum advertising interval for periodic advertising (units of 1.25 ms)
uint16_t adv_intv_min;
/// Maximum advertising interval for periodic advertising (units of 1.25 ms)
uint16_t adv_intv_max;
/// Advertising properties
uint16_t adv_prop;
};
///HCI LE Set Periodic Advertising Data Command parameters structure
/*@TRACE*/
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
/*@TRACE*/
struct hci_le_set_per_adv_en_cmd
{
/// Enable
uint8_t enable;
/// Advertising handle
uint8_t adv_hdl;
};
///HCI LE Advertising Set Terminated event
/*@TRACE
* hci_le_adv_set_terminated_evt = hci_le_adv_set_term_evt*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
/*@TRACE*/
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
//@trc_ref le_phy_value
uint8_t tx_phy;
/// Current configured PHY for RX
//@trc_ref le_phy_value
uint8_t rx_phy;
};
/// HCI LE PHY Update Complete event
/*@TRACE*/
struct hci_le_phy_upd_cmp_evt
{
///LE Subevent code
uint8_t subcode;
///Status of received command
uint8_t status;
///Connection handle
uint16_t conhdl;
///TX phy chosen
//@trc_ref le_phy_value
uint8_t tx_phy;
///RX phy chosen
//@trc_ref le_phy_value
uint8_t rx_phy;
};
///HCI LE Connectionless IQ Report event
/*@TRACE*/
struct hci_le_conless_iq_report_evt
{
/// LE Subevent code
uint8_t subcode;
/// Sync handle
uint16_t sync_hdl;
/// Data channel index
uint8_t channel_idx;
/// RSSI (in 0.1 dBm)
int16_t rssi;
/// RSSI antenna ID
uint8_t rssi_antenna_id;
/// CTE type (0: AOA | 1: AOD-1us | 2: AOD-2us)
uint8_t cte_type;
/// Slot durations (1: 1us | 2: 2us)
uint8_t slot_dur;
/// Packet status
uint8_t pkt_status;
/// paEventCounter
uint16_t pa_evt_cnt;
/// Sample_count
uint8_t sample_cnt;
/// I/Q sample
struct
{
/// I sample
int8_t i;
/// Q sample
int8_t q;
} iq_sample[MAX_SAMPLE_CNT];
};
///HCI LE Connection IQ Report event
/*@TRACE*/
struct hci_le_con_iq_report_evt
{
/// LE Subevent code
uint8_t subcode;
/// Connection handle
uint16_t conhdl;
/// Rx PHY (@see enum le_phy_value)
uint8_t rx_phy;
/// Data channel index
uint8_t data_channel_idx;
/// RSSI (in 0.1 dBm)
int16_t rssi;
/// RSSI antenna ID
uint8_t rssi_antenna_id;
/// CTE type (0: AOA | 1: AOD-1us | 2: AOD-2us)
uint8_t cte_type;
/// Slot durations (1: 1us | 2: 2us)
uint8_t slot_dur;
/// Packet status
uint8_t pkt_status;
/// connEventCounter
uint16_t con_evt_cnt;
/// Sample_count
uint8_t sample_cnt;
/// I/Q sample
struct
{
/// I sample
int8_t i;
/// Q sample
int8_t q;
} iq_sample[MAX_SAMPLE_CNT];
};
///HCI LE CTE Request Failed event
/*@TRACE*/
struct hci_le_cte_req_failed_evt
{
/// LE Subevent code
uint8_t subcode;
/// Status
uint8_t status;
/// Connection handle
uint16_t conhdl;
};
///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
* - CHAN = Channel
* - REQ = Request
*/
/// Used to read the maximum size of the data portion of ACL data packets and isochronous data packets
/// no parameter on command, only need to specify returned parameters
/*@TRACE*/
struct hci_le_rd_buf_size_v2_cmd_cmp_evt
{
/// 0x00 - Request succeed ; 0x01-0xFF Failed reason
uint8_t status;
/// Maximum length (in octets) of the data portion of each HCI ACL (0x0000: No dedicated LE buffer, 0x0001-0x001A RFU, Range 0x001B-0xFFFF)
uint16_t le_acl_data_packet_length;
/// The total number of HCI ACL data packets that can be stored in the data buffers of the Controller (0x00: No dedicated LE buffer, Range 0x01-0xFF)
uint8_t total_num_le_acl_data_packets;
/// The maximum length (in octets) of the data portion of each HCI ISO data packet (0x0000: No dedicated ISO buffer, Range 0x0001-0xFFFF)
uint16_t iso_data_packet_length;
/// The total number of HCI ISO data packets that can be stored in the ISO buffers of the Controller (0x00: No dedicated ISO buffer, Range 0x01-0xFF)
uint8_t total_num_iso_data_packets;
};
/// Command Complete event of HCI_LE_RD_ISO_TX_SYNC_CMD
/*@TRACE*/
struct hci_le_rd_iso_tx_sync_cmd_cmp_evt
{
/// 0x00 - Command succeeded ; 0x01-0xFF Failed reason
uint8_t status;
/// Connection handle of the CIS or BIS (12 bits meaningful - Range 0x0000-0x0EFF)
uint16_t conhdl;
/// The packet sequence number of an SDU (Range 0x0000-0xFFFF)
uint16_t pkt_seq_nb;
/// The time stamp, in microseconds, of the reference anchor point of a transmitted SDU (Range 0x00000000-0xFFFFFFFF)
uint32_t time_stamp;
/// The time offset, in microseconds, that is associated with a transmitted SDU (Range 0x000000-0xFFFFFF)
uint32_t time_offset;
};
/// Description of CIS parameters
/*@TRACE*/
struct hci_le_cis_param
{
/// Used to identify a Connected Isochronous Stream. (Range 0x00-0xEF)
uint8_t cis_id;
/// Maximum size of an SDU in octets from the master Host (12 bits meaningful - Range 0x000-0xFFF).
uint16_t max_sdu_m2s;
/// Maximum size of an SDU in octets from the master Host (12 bits meaningful - Range 0x000-0xFFF).
uint16_t max_sdu_s2m;
/// Master to slave PHY, bit 0: 1Mbps, bit 1: 2Mbps, bit 2: LE-Coded
uint8_t phy_m2s;
/// Slave to master PHY, bit 0: 1Mbps, bit 1: 2Mbps, bit 2: LE-Coded
uint8_t phy_s2m;
/// Maximum number of times every CIS Data PDU should be retransmitted from the master to slave (range 0x00-0x0F)
uint8_t rtn_m2s;
/// Maximum number of times every CIS Data PDU should be retransmitted from the slave to master (range 0x00-0x0F)
uint8_t rtn_s2m;
};
/// Used by a master Host to set the parameters of all Connected Isochronous Streams associated with a Connected
/// Isochronous Group in the Controller
/*@TRACE*/
struct hci_le_set_cig_params_cmd
{
/// Used to identify the Connected Isochronous Group (range 0x00 to 0xEF).
uint8_t cig_id;
/// Interval in microseconds of periodic SDUs master to slave (20 bits meaningful Range 0x000FF - 0xFFFFF).
uint32_t sdu_interval_m2s;
/// Interval in microseconds of periodic SDUs slave to master (20 bits meaningful Range 0x000FF - 0xFFFFF).
uint32_t sdu_interval_s2m;
/// Slave Clock Accuracy:
/// 0x00: 251 ppm to 500 ppm, 0x01: 151 ppm to 250 ppm, 0x02: 101 ppm to 150 ppm, 0x03: 76 ppm to 100 ppm
/// 0x04: 51 ppm to 75 ppm, 0x05: 31 ppm to 50 ppm, 0x06: 21 ppm to 30 ppm, 0x07: 0 ppm to 20 ppm
uint8_t sca;
/// Scheduling method, 0: Sequential, 1: Interleaved
uint8_t packing;
/// ISOAL Framing mode, 0: Unframed, 1: Framed
uint8_t framing;
/// The maximum time in milliseconds for an SDU to be transported from the master Controller to slave Controller.
/// (range 0x0005 to 0x0FA0)
uint16_t max_trans_latency_m2s;
/// The maximum time in milliseconds for an SDU to be transported from the slave Controller to master Controller.
/// (range 0x0005 to 0x0FA0)
uint16_t max_trans_latency_s2m;
/// Total number of CISs in the CIG being added or modified. (Range 0x01-0x10)
uint8_t cis_count;
/// CIS Parameters
struct hci_le_cis_param params[0x10];
};
/// Command Complete event of HCI_LE_SET_CIG_PARAMS_CMD
/*@TRACE*/
struct hci_le_set_cig_params_cmd_cmp_evt
{
/// 0x00 - The Broadcast Isochronous Group has been completed ; 0x01-0xFF Failed reason
uint8_t status;
/// Used to identify the Connected Isochronous Group. (Range 0x00-0xEF)
uint8_t cig_id;
/// Total number of CISs added or modified by this command (Range 0x01-0x10)
uint8_t cis_count;
/// List of connection handles of CISs in the CIG. The connection handle list order is the same as the list order
/// of the CISs in the command (Range 0x0000-0x0EFF)
uint16_t conhdl[0x10];
};
/// Description of CIS parameters
/*@TRACE*/
struct hci_le_cis_test_param
{
/// Used to identify a Connected Isochronous Stream. (Range 0x00-0xEF)
uint8_t cis_id;
/// Maximum number of subevents in each interval of Connected Isochronous Stream (Range 0x00-0x1F)
uint8_t nse;
/// Maximum size of an SDU in octets from the master Host (12 bits meaningful - Range 0x000-0xFFF).
uint16_t max_sdu_m2s;
/// Maximum size of an SDU in octets from the master Host (12 bits meaningful - Range 0x000-0xFFF).
uint16_t max_sdu_s2m;
/// Maximum size of payload from master Link Layer to slave Link Layer (Range 0x01-0xFB).
uint16_t max_pdu_m2s;
/// Maximum size of payload from slave Link Layer to master Link Layer (Range 0x01-0xFB).
uint16_t max_pdu_s2m;
/// Master to slave PHY, bit 0: 1Mbps, bit 1: 2Mbps, bit 2: LE-Coded
uint8_t phy_m2s;
/// Slave to master PHY, bit 0: 1Mbps, bit 1: 2Mbps, bit 2: LE-Coded
uint8_t phy_s2m;
/// The burst number for master to slave transmission (Range 0x00-0x0F).
/// 0x00 - No isochronous data from the master to the slave
uint8_t bn_m2s;
/// The burst number for slave to master transmission (Range 0x00-0x0F).
/// 0x00 - No isochronous data from the slave to the master
uint8_t bn_s2m;
};
/// Used by a master Host to set the parameters of all Connected Isochronous Streams associated with a Connected
/// Isochronous Group in the Controller
/*@TRACE*/
struct hci_le_set_cig_params_test_cmd
{
/// Used to identify the Connected Isochronous Group. (Range 0x00-0xEF)
uint8_t cig_id;
/// Interval in microseconds of periodic SDUs master to slave (20 bits meaningful Range 0x000FF - 0xFFFFF).
uint32_t sdu_interval_m2s;
/// Interval in microseconds of periodic SDUs slave to master (20 bits meaningful Range 0x000FF - 0xFFFFF).
uint32_t sdu_interval_s2m;
/// The maximum flush timeout for each payload from the master (Range 0x01-0x1F).
uint8_t ft_m2s;
/// The maximum flush timeout for each payload from the slave (Range 0x01-0x1F).
uint8_t ft_s2m;
/// The duration of the isochronous interval in multiples of 1.25 ms (Range 0x0004-0xC80).
uint16_t iso_interval;
/// Slave Clock Accuracy:
/// 0x00: 251 ppm to 500 ppm, 0x01: 151 ppm to 250 ppm, 0x02: 101 ppm to 150 ppm, 0x03: 76 ppm to 100 ppm
/// 0x04: 51 ppm to 75 ppm, 0x05: 31 ppm to 50 ppm, 0x06: 21 ppm to 30 ppm, 0x07: 0 ppm to 20 ppm
uint8_t sca;
/// Scheduling method, 0: Sequential, 1: Interleaved
uint8_t packing;
/// ISOAL Framing mode, 0: Unframed, 1: Framed
uint8_t framing;
/// Total number of CISs in the CIG being added or modified. (Range 0x00-0x10)
uint8_t cis_count;
/// CIS Parameters
struct hci_le_cis_test_param params[0x10];
};
/// Command Complete event of HCI_LE_SET_CIG_PARAMS_TEST_CMD
/*@TRACE*/
struct hci_le_set_cig_params_test_cmd_cmp_evt
{
/// 0x00 - The Broadcast Isochronous Group has been completed ; 0x01-0xFF Failed reason
uint8_t status;
/// Used to identify the Connected Isochronous Group. (Range 0x00-0xEF)
uint8_t cig_id;
/// Total number of CISs added or modified by this command (Range 0x00-0x10)
uint8_t cis_count;
/// List of connection handles of CISs in the CIG. The connection handle list order is the same as the list order
/// of the CISs in the command (Range 0x0000-0x0EFF)
uint16_t conhdl[0x10];
};
/// Create CIS parameter
/*@TRACE*/
struct hci_le_cis_create_param
{
/// Connection handle of Connected Isochronous Stream (Range 0x0000-0x0EFF)
uint16_t cis_conhdl;
/// Connection handle of ACL Link (Range 0x0000-0x0EFF)
uint16_t acl_conhdl;
};
/// Used by the master Host to establish one or more Connected Isochronous Streams using the connections identified
/// by the ACL_Connection_Handle
/*@TRACE*/
struct hci_le_create_cis_cmd
{
/// Total number of CISs to be established. (Range 0x01-0x1F)
uint8_t cis_count;
/// Create CIS Parameters
struct hci_le_cis_create_param params[0x1F];
};
/// Removes all the Connected Isochronous Streams which have previously been set up in the Controller by using the
/// HCI_LE_Set_CIG_Parameters or the HCI_LE_Set_CIG_Parameters_Test command.
/*@TRACE*/
struct hci_le_remove_cig_cmd
{
/// Used to identify the Connected Isochronous Group. (Range 0x00-0xEF)
uint8_t cig_id;
};
/// Command Complete event of HCI_LE_REMOVE_CIG_CMD
/*@TRACE*/
struct hci_le_remove_cig_cmd_cmp_evt
{
/// 0x00 - The HCI_LE_Remove_CIG command succeeded ; 0x01-0xFF Failed reason
uint8_t status;
/// Identifier of a CIG. (Range 0x00-0xEF)
uint8_t cig_id;
};
/// Used by the slave Host to inform the Controller to accept the request for the Connected Isochronous Stream that is
/// identified by the Connection_Handle
/*@TRACE*/
struct hci_le_accept_cis_req_cmd
{
/// Connection handle of the Connected Isochronous Stream (Range: 0x0000-0x0EFF)
uint16_t conhdl;
};
/// Used by the slave Host to reject the request for the Connected Isochronous Stream that is identified by the
/// Connection_Handle
/*@TRACE*/
struct hci_le_reject_cis_req_cmd
{
/// Connection handle of the Connected Isochronous Stream (Range: 0x0000-0x0EFF)
uint16_t conhdl;
/// The reason for rejecting the Connected Isochronous Stream
uint8_t reason;
};
/// Used to transmit data PDUs of one or more Broadcast Isochronous Streams of the Broadcast Isochronous Group
/*@TRACE*/
struct hci_le_create_big_cmd
{
/// BIG_Handle is used to identify the BIS Group. (Range 0x00-0xEF)
uint8_t big_hdl;
/// Used to identify the Periodic Advertising set (Range 0x00-0xEF)
uint8_t adv_hdl;
/// Total number of Broadcast Isochronous Streams in the Broadcast Isochronous Group. (Range 0x01-0x1F)
uint8_t num_bis;
/// Interval of periodic SDUs in microseconds (20 bits meaningful - range 0x000FF-0xFFFFF).
uint32_t sdu_interval;
/// Maximum size of an SDU (12 bits meaningful Range 0x000 to 0xFFF).
uint16_t max_sdu;
/// The maximum time in milliseconds for a SDU to be transported (Range 0x0000-0x0FA0)
uint16_t trans_latency;
/// Number of times every BIS Data PDU should be retransmitted (Range 0x00-0x0F)
uint8_t rtn;
/// PHY, bit 0: 1Mbps, bit 1: 2Mbps, bit 2: LE-Coded
uint8_t phy;
/// Scheduling method, 0: Sequential, 1: Interleaved
uint8_t packing;
/// ISOAL Framing mode, 0: Unframed, 1: Framed
uint8_t framing;
/// 0: Unencrypted, 1: Encrypted
uint8_t encryption;
/// Code used for deriving the session key for encrypting and decrypting payloads of BISs.
uint8_t broadcast_code[KEY_LEN];
};
/// Prepares the CL-Master Controller to set up a new BIG.
/*@TRACE*/
struct hci_le_create_big_test_cmd
{
/// BIG_Handle is used to identify the BIS Group. (Range 0x00-0xEF)
uint8_t big_hdl;
/// Used to identify the Periodic Advertising set (Range 0x00-0xEF)
uint8_t adv_hdl;
/// Total number of Broadcast Isochronous Streams in the Broadcast Isochronous Group. (Range 0x01-0x1F)
uint8_t num_bis;
/// Interval of periodic SDUs in microseconds (20 bits meaningful - range 0x000FF-0xFFFFF).
uint32_t sdu_interval;
/// Isochronous Interval in multiples of 1.25 ms (Range 0x0004-0xC80)
uint16_t iso_interval;
/// Total number of subevents in each interval of each BIS in the BIG (Range 0x01-0x1F)
uint8_t nse;
/// Maximum size of an SDU (12 bits meaningful Range 0x000 to 0xFFF).
uint16_t max_sdu;
/// Maximum size of payload (Range 0x01-0xFB)
uint16_t max_pdu;
/// PHY, bit 0: 1Mbps, bit 1: 2Mbps, bit 2: LE-Coded
uint8_t phy;
/// Scheduling method, 0: Sequential, 1: Interleaved
uint8_t packing;
/// ISOAL Framing mode, 0: Unframed, 1: Framed
uint8_t framing;
/// Number of new payloads in each interval for each Broadcast Isochronous Stream (Burst Number) (Range 0x01-0x07)
uint8_t bn;
/// Number of times the scheduled payload(s) should be transmitted (Range 0x01-0x0F)
uint8_t irc;
/// Isochronous Interval spacing of payloads transmitted in the Pre_Transmission_Subevents (Range 0x00-0x0F)
uint8_t pto;
/// 0: Unencrypted, 1: Encrypted
uint8_t encryption;
/// Code used for encrypting or decrypting payloads of an encrypted Broadcast Isochronous Stream
uint8_t broadcast_code[KEY_LEN];
};
/// Terminate transmission of all Broadcast Isochronous Streams of a Broadcast Isochronous Group or to cancel
/// the process of creating a Broadcast Isochronous Group
/*@TRACE*/
struct hci_le_terminate_big_cmd
{
/// BIG_Handle is used to identify the BIS Group. (Range 0x00-0xEF)
uint8_t big_hdl;
/// Termination reason
uint8_t reason;
};
/// Used to synchronize and receive PDUs from one or more Broadcast Isochronous Streams within a Broadcast Isochronous
/// Group.
/*@TRACE*/
struct hci_le_big_create_sync_cmd
{
/// BIG_Handle is used to identify the BIS Group. (Range 0x00-0xEF)
uint8_t big_hdl;
/// Used to identify the periodic advertising set (Range 0x0000-0x0EFF)
uint16_t sync_hdl;
/// 0: Unencrypted, 1: Encrypted
uint8_t encryption;
/// 128-bit code used for deriving the session key for decrypting payloads of encrypted BISs.
uint8_t broadcast_code[16];
/// Maximum number of subevents that should be used to receive data payloads in each isochronous interval (0x00-0xFF)
/// 0x00 - The Controller can schedule reception of any number of subevents up to NSE
uint8_t mse;
/// Synchronization timeout for a Broadcast Isochronous Group (step 10ms, range 0x000A-0x4000)
uint16_t big_sync_timeout;
/// Total number of BISs to synchronize. (Range 0x01-0x1F)
uint8_t num_bis;
/// List of indices of BISs (bis_id Range 0x01-0x1F)
uint8_t bis_id[0x1F];
};
/// Stop synchronization with Broadcast Isochronous Streams or to cancel the process of synchronization to Broadcast Isochronous Streams
/*@TRACE*/
struct hci_le_big_terminate_sync_cmd
{
/// BIG_Handle is used to identify the BIS Group. (Range 0x00-0xEF)
uint8_t big_hdl;
};
/// Command Complete event of HCI_LE_BIG_TERMINATE_SYNC_CMD
/*@TRACE*/
struct hci_le_big_terminate_sync_cmd_cmp_evt
{
/// 0x00 - Command succeeded ; 0x01-0xFF Failed reason
uint8_t status;
/// BIG_Handle is used to identify the BIS Group. (Range 0x00-0xEF)
uint8_t big_hdl;
};
/// Stop synchronization with Broadcast Isochronous Streams or to cancel the process of synchronization to Broadcast Isochronous Streams
/*@TRACE*/
struct hci_le_req_peer_sca_cmd
{
/// Connection handle of the CIS or BIS (12 bits meaningful - Range 0x0000-0x0EFF)
uint16_t conhdl;
};
/// The command is used to identify and create the isochronous data path between the Host and the Controller.
/// It can also be used to configure a codec for each data path.
/*@TRACE*/
struct hci_le_setup_iso_data_path_cmd
{
/// Connection handle of a CIS or BIS. (Range 0x0000-0x0EFF)
uint16_t conhdl;
/// Data path direction
/// 0x00 Input (Host to Controller)
/// 0x01 Output (Controller to Host)
/// Others Reserved for future use
uint8_t data_path_direction;
/// Data path ID
/// 0x00 HCI
/// 0x01-0xFE Logical_Channel_Number. The meaning of the logical channel is vendor specific.
/// 0xFF Reserved for future use
uint8_t data_path_id;
/// Codec ID (5 octets)
uint8_t codec_id[CODEC_ID_LEN];
/// Controller delay in ms (Range: 0x000000 to 0x3D0900)
uint32_t ctrl_delay;
/// Codec configuration length
uint8_t codec_cfg_len;
/// Codec configuration
uint8_t codec_cfg[__ARRAY_EMPTY];
};
/// Command Complete event of HCI_LE_SETUP_ISO_DATA_PATH_CMD
/*@TRACE*/
struct hci_le_setup_iso_data_path_cmd_cmp_evt
{
/// 0x00 - Command succeeded ; 0x01-0xFF Failed reason
uint8_t status;
/// Connection handle of the CIS or BIS (12 bits meaningful - Range 0x0000-0x0EFF)
uint16_t conhdl;
};
/// The command remove the data path between the Host and Controller and vice versa.
/*@TRACE*/
struct hci_le_remove_iso_data_path_cmd
{
/// Connection handle of a CIS or BIS. (Range 0x0000-0x0EFF)
uint16_t conhdl;
/// Bit[0]: Input data path, Bit[1]: Output data path
uint8_t direction;
};
/// Command Complete event of HCI_LE_REMOVE_ISO_DATA_PATH_CMD
/*@TRACE*/
struct hci_le_remove_iso_data_path_cmd_cmp_evt
{
/// 0x00 - Command succeeded ; 0x01-0xFF Failed reason
uint8_t status;
/// Connection handle of the CIS or BIS (12 bits meaningful - Range 0x0000-0x0EFF)
uint16_t conhdl;
};
/// Used to configure an established CIS or BIS specified by the Connection_Handle parameter, and transmit test payloads which are generated by the Controller.
/*@TRACE*/
struct hci_le_iso_tx_test_cmd
{
/// Connection handle of the CIS or BIS (12 bits meaningful - Range 0x0000-0x0EFF)
uint16_t conhdl;
/// 0x00: Zero length payload 0x01: Variable length payload 0x02: Maximum length payload
/// All other values: RFU
uint8_t payload_type;
};
/// Used to configure an established CIS or a synchronized BIG specified by the Connection_Handle parameter to receive payloads.
/*@TRACE*/
struct hci_le_iso_rx_test_cmd
{
/// Connection handle of the CIS or BIS. (Range 0x0000-0x0EFF)
uint16_t conhdl;
/// 0x00: Zero length payload 0x01: Variable length payload 0x02: Maximum length payload
/// All other values: RFU
uint8_t payload_type;
};
/// Used to read the test counters in the Controller which are configured in ISO Receive Test mode for a CIS or BIS specified by the Connection_Handle.
/*@TRACE*/
struct hci_le_iso_read_test_counters_cmd
{
/// Connection handle of the CIS or BIS. (Range 0x0000-0x0EFF)
uint16_t conhdl;
};
/// Command Complete event of HCI_LE_ISO_READ_TEST_COUNTERS_CMD
/*@TRACE*/
struct hci_le_iso_read_test_counters_cmd_cmp_evt
{
/// 0x00 - Command succeeded ; 0x01-0xFF Failed reason
uint8_t status;
/// Connection handle of the CIS or BIS (12 bits meaningful - Range 0x0000-0x0EFF)
uint16_t conhdl;
/// Number in the Received_Packet_Count (0xXXXXXXXX)
uint32_t received_packet_count;
/// Number in the Missed_Packet_Count (0xXXXXXXXX)
uint32_t missed_packet_count;
/// Number in the Failed_Packet_Count (0xXXXXXXXX)
uint32_t failed_packet_count;
};
/// Used to terminate the ISO Transmit and/or Receive Test mode for a CIS or BIS specified by the Connection_Handle parameter but does not terminate the CIS or BIS.
/*@TRACE*/
struct hci_le_iso_test_end_cmd
{
/// Connection handle of the CIS or BIS. (Range 0x0000-0x0EFF)
uint16_t conhdl;
};
/// Command Complete event of HCI_LE_ISO_TEST_END_CMD
/*@TRACE*/
struct hci_le_iso_test_end_cmd_cmp_evt
{
/// 0x00 - Command succeeded ; 0x01-0xFF Failed reason
uint8_t status;
/// Connection handle of the CIS or BIS (12 bits meaningful - Range 0x0000-0x0EFF)
uint16_t conhdl;
/// Number in the Received_Packet_Count (0xXXXXXXXX)
uint32_t received_packet_count;
/// Number in the Missed_Packet_Count (0xXXXXXXXX)
uint32_t missed_packet_count;
/// Number in the Failed_Packet_Count (0xXXXXXXXX)
uint32_t failed_packet_count;
};
/// Returns the values of various counters related to link quality that are associated with the isochronous stream specified by the Connection_Handle parameter.
/*@TRACE*/
struct hci_le_rd_iso_link_quality_cmd
{
/// Connection handle of the CIS or BIS. (Range 0x0000-0x0EFF)
uint16_t conhdl;
};
/// Used by the Host to set or clear a bit of the feature controlled by the Host in the Link Layer FeatureSet stored in the Controller.
struct hci_le_set_host_feature_cmd
{
/// Bit position in the FeatureSet. (Range 0x00-0x3F)
uint8_t bit_number;
/// Bit value. (0x00: feature disabled 0x01: feature enabled All other values: RFU)
uint8_t bit_value;
};
/// Command Complete event of HCI_LE_RD_ISO_LINK_QUALITY_CMD
/*@TRACE*/
struct hci_le_rd_iso_link_quality_cmd_cmp_evt
{
/// 0x00 - Command succeeded ; 0x01-0xFF Failed reason
uint8_t status;
/// Connection handle of the CIS or BIS (12 bits meaningful - Range 0x0000-0x0EFF)
uint16_t conhdl;
/// Value of the Tx_UnACKed_Packets counter (0xXXXXXXXX)
uint32_t tx_unacked_packets;
/// Value of the Tx_Flushed_Packets counter (0xXXXXXXXX)
uint32_t tx_flushed_packets;
/// Value of the Tx_Last_Subevent_Packets counter (0xXXXXXXXX)
uint32_t tx_last_subevent_packets;
/// Value of the Retransmitted_Packets counter (0xXXXXXXXX)
uint32_t retransmitted_packets;
/// Value of the CRC_Error_Packets counter (0xXXXXXXXX)
uint32_t crc_error_packets;
/// Value of the Rx_Unreceived_Packets counter (0xXXXXXXXX)
uint32_t rx_unreceived_packets;
/// Value of the Duplicate_Packets counter (0xXXXXXXXX)
uint32_t duplicate_packets;
};
/**************************************************************************************
************** HCI EVENT TRUCTURES ****************
**************************************************************************************/
/// Basic LE event sutrcture
/*@TRACE*/
struct hci_le_basic_evt
{
/// LE Subevent code
uint8_t subcode;
};
/// Event indicates that the Connected Isochronous Stream with the Connection_Handle has been established.
/*@TRACE*/
struct hci_le_cis_established_evt
{
///LE Subevent code
uint8_t subcode;
/// 0x00 - The Broadcast Isochronous Group has been completed ; 0x01-0xFF Failed reason
uint8_t status;
/// Connection handle of the Connected Isochronous Stream (Range: 0x0000-0x0EFF)
uint16_t conhdl;
/// The CIG synchronization delay time in microseconds
uint32_t cig_sync_delay;
/// The CIS synchronization delay time in microseconds
uint32_t cis_sync_delay;
/// The maximum time, in microseconds, for transmission of SDUs of all CISes from master to slave
/// (range 0x0000EA to 0x7FFFFF)
uint32_t trans_latency_m2s;
/// The maximum time, in microseconds, for transmission of SDUs of all CISes from slave to master
/// (range 0x0000EA to 0x7FFFFF)
uint32_t trans_latency_s2m;
/// Master to slave PHY, 0x01: 1Mbps, 0x02: 2Mbps, 0x03: LE-Coded
uint8_t phy_m2s;
/// Slave to master PHY, 0x01: 1Mbps, 0x02: 2Mbps, 0x03: LE-Coded
uint8_t phy_s2m;
/// Maximum number of subevents in each isochronous event (Range: 0x01-0x1E)
uint8_t nse;
/// The burst number for master to slave transmission (0x00: no isochronous data from the master to the slave, range 0x01-0x0F)
uint8_t bn_m2s;
/// The burst number for slave to master transmission (0x00: no isochronous data from the slave to the master, range 0x01-0x0F)
uint8_t bn_s2m;
/// The flush timeout, in multiples of the ISO_Interval, for each payload sent from the master to the slave (Range: 0x01-0x1F)
uint8_t ft_m2s;
/// The flush timeout, in multiples of the ISO_Interval, for each payload sent from the slave to the master (Range: 0x01-0x1F)
uint8_t ft_s2m;
/// Maximum size, in octets, of the payload from master to slave (Range: 0x00-0xFB)
uint16_t max_pdu_m2s;
/// Maximum size, in octets, of the payload from slave to master (Range: 0x00-0xFB)
uint16_t max_pdu_s2m;
/// ISO interval (1.25ms unit, range: 5ms to 4s)
uint16_t iso_interval;
};
/// Event indicates that the Connected Isochronous Stream with the Connection_Handle has been established.
/*@TRACE*/
struct hci_le_cis_request_evt
{
///LE Subevent code
uint8_t subcode;
/// Connection handle of the ACL (Range: 0x0000-0x0EFF)
uint16_t acl_conhdl;
/// Connection handle of the Connected Isochronous Stream (Range: 0x0000-0x0EFF)
uint16_t cis_conhdl;
/// Used to identify the Connected Isochronous Group. (Range 0x00-0xEF)
uint8_t cig_id;
/// Used to identify a Connected Isochronous Stream. (Range 0x00-0xEF)
uint8_t cis_id;
};
/// Event Generated in the Isochronous Broadcaster when all the Broadcast Isochronous Streams in the Group are being
/// transmitted
/*@TRACE*/
struct hci_le_create_big_cmp_evt
{
///LE Subevent code
uint8_t subcode;
/// 0x00 - The Broadcast Isochronous Group has been completed ; 0x01-0xFF Failed reason
uint8_t status;
/// BIG_Handle is used to identify the BIS Group. (Range 0x00-0xEF)
uint8_t big_hdl;
/// Transmission delay time in microseconds of all BISs in the BIG (in us range 0x0000EA-0x7FFFFF)
uint32_t big_sync_delay;
/// The maximum delay time, in microseconds, for transmission of SDUs of all BISes (in us range 0x0000EA-0x7FFFFF)
uint32_t big_trans_latency;
/// PHY used, bit 0: 1Mbps, bit 1: 2Mbps, bit 2: LE-Coded
uint8_t phy;
/// The number of subevents in each BIS event in the BIG, range 0x01-0x1E
uint8_t nse;
/// The number of new payloads in each BIS event, range 0x01-0x07
uint8_t bn;
/// Offset used for pre-transmissions, range 0x00-0x0F
uint8_t pto;
/// The number of times a payload is transmitted in a BIS event, range 0x01-0x0F
uint8_t irc;
/// Maximum size of the payload in octets, range 0x00-0xFB
uint16_t max_pdu;
/// ISO interval (1.25ms unit, range: 5ms to 4s)
uint16_t iso_interval;
/// Total number of BISs in the BIG (Range 0x01-0x1F)
uint8_t num_bis;
/// The connection handles of the BISs (Range 0x0000-0x0EFF)
uint16_t conhdl[0x1F];
};
/// Event is generated when transmissions of all the Broadcast Isochronous Streams in the Broadcast Isochronous Group
/// are terminated
/*@TRACE*/
struct hci_le_terminate_big_cmp_evt
{
///LE Subevent code
uint8_t subcode;
/// BIG_Handle is used to identify the BIS Group. (Range 0x00-0xEF)
uint8_t big_hdl;
/// Reason for termination (0xXX)
uint8_t reason;
};
/// Event is generated in a scanning device when the Controller has synchronized with the requested Broadcast
/// Isochronous Streams.
/*@TRACE*/
struct hci_le_big_sync_est_evt
{
///LE Subevent code
uint8_t subcode;
/// 0x00 - The Broadcast Isochronous Group has been completed ; 0x01-0xFF Failed reason
uint8_t status;
/// BIG_Handle is used to identify the BIS Group. (Range 0x00-0xEF)
uint8_t big_hdl;
/// The maximum delay time, in microseconds, for transmission of SDUs of all BISes (in us range 0x0000EA-0x7FFFFF)
uint32_t big_trans_latency;
/// The number of subevents in each BIS event in the BIG, range 0x01-0x1E
uint8_t nse;
/// The number of new payloads in each BIS event, range 0x01-0x07
uint8_t bn;
/// Offset used for pre-transmissions, range 0x00-0x0F
uint8_t pto;
/// The number of times a payload is transmitted in a BIS event, range 0x01-0x0F
uint8_t irc;
/// Maximum size of the payload in octets, range 0x00-0xFB
uint16_t max_pdu;
/// ISO interval (1.25ms unit, range: 5ms to 4s)
uint16_t iso_interval;
/// Total number of BISs in the BIG (Range 0x01-0x1F)
uint8_t num_bis;
/// The connection handles of the BISs (Range 0x0000-0x0EFF)
uint16_t conhdl[0x1F];
};
/// Event indicates that the Controller has not received any payload from any Broadcast Isochronous Stream within a
/// Broadcast Isochronous Group to which it was synchronized within the timeout period (BIS_Sync_Timeout).
/*@TRACE*/
struct hci_le_big_sync_lost_evt
{
///LE Subevent code
uint8_t subcode;
/// BIG_Handle is used to identify the BIS Group. (Range 0x00-0xEF)
uint8_t big_hdl;
/// Reason of synchronization to BIG termination
uint8_t reason;
};
/// Event indicates that the HCI_LE_Request_Peer_SCA command has been completed.
/*@TRACE*/
struct hci_le_req_peer_sca_cmp_evt
{
///LE Subevent code
uint8_t subcode;
/// 0x00 - The Peer_Clock_Accuracy parameter is successfully received ; 0x01-0xFF Failed reason
uint8_t status;
/// Connection handle of the ACL (12 bits meaningful Range 0x0000-0x0EFF)
uint16_t conhdl;
/// Peer clock accuracy (@see enum SCA)
uint8_t peer_clock_accuracy;
};
/// Event is generated in a scanning device when the Controller has received an advertising PDU that contained a BIGInfo field.
/*@TRACE*/
struct hci_le_big_info_adv_report_evt
{
///LE Subevent code
uint8_t subcode;
/// Sync_Handle identifying the periodic advertising train (Range 0x0000-0x0EFF)
uint16_t sync_hdl;
/// Value of the Num_BIS subfield of the BIGInfo field (Range 0x01-0x1F)
uint8_t num_bis;
/// Value of the NSE subfield of the BIGInfo field (Range 0x01-0x1F)
uint8_t nse;
/// Value of the ISO_Interval subfield of the BIGInfo field (0xXXXX)
uint16_t iso_interval;
/// Value of the BN subfield of the BIGInfo field (Range 0x01-0x07)
uint8_t bn;
/// Value of the PTO subfield of the BIGInfo field (Range 0x00-0x0F)
uint8_t pto;
/// Value of the IRC subfield of the BIGInfo field (Range 0x01-0x0F)
uint8_t irc;
/// Value of the Max_PDU subfield of the BIGInfo field (Range 0x0000-0x00FB)
uint16_t max_pdu;
/// Value of the SDU_Interval subfield of the BIGInfo field (Range 0x0000FF-0x0FFFFF)
uint8_t sdu_interval[3];
/// Value of the Max_SDU subfield of the BIGInfo field (Range 0x0000-0x0FFF)
uint16_t max_sdu;
/// Value of the PHY subfield of the BIGInfo field (0x01: 1M, 0x02: 2M, 0x03: Coded, All other values: RFU)
uint8_t phy;
/// Value of the Framing subfield of the BIGInfo field (0x00: Unframed, 0x01: Framed, All other values: RFU)
uint8_t framing;
/// Value of the Encryption subfield of the BIGInfo field (0x00: Unencrypted, 0x01: Encrypted, All other values: RFU)
uint8_t encryption;
};
/// @} CO_BT
#endif // CO_HCI_H_