Files
stair56e_uart/component/ble/modules/common/api/co_llcp.h
T
2024-07-12 15:19:46 +08:00

1060 lines
28 KiB
C

/**
****************************************************************************************
*
* @file co_llcp.h
*
* @brief This file contains the LLCP Bluetooth defines, enumerations and structures
* definitions for use by all modules in RW stack.
*
* Copyright (C) RivieraWaves 2009-2015
*
****************************************************************************************
*/
#ifndef CO_LLCP_H_
#define CO_LLCP_H_
/**
****************************************************************************************
* @addtogroup CO_BT
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "co_bt.h"
/*
* DEFINES
****************************************************************************************
*/
#define LLCP_OPCODE_MASK (0xFF)
#define LLCP_OPCODE_POS (0)
/*
* TYPE DEFINITIONS
****************************************************************************************
*/
/// Control packet op_code
/*@TRACE*/
enum co_llcp_op_code
{
LL_CONNECTION_UPDATE_IND_OPCODE = 0x00,
LL_CHANNEL_MAP_IND_OPCODE = 0x01,
LL_TERMINATE_IND_OPCODE = 0x02,
LL_ENC_REQ_OPCODE = 0x03,
LL_ENC_RSP_OPCODE = 0x04,
LL_START_ENC_REQ_OPCODE = 0x05,
LL_START_ENC_RSP_OPCODE = 0x06,
LL_UNKNOWN_RSP_OPCODE = 0x07,
LL_FEATURE_REQ_OPCODE = 0x08,
LL_FEATURE_RSP_OPCODE = 0x09,
LL_PAUSE_ENC_REQ_OPCODE = 0x0A,
LL_PAUSE_ENC_RSP_OPCODE = 0x0B,
LL_VERSION_IND_OPCODE = 0x0C,
LL_REJECT_IND_OPCODE = 0x0D,
LL_SLAVE_FEATURE_REQ_OPCODE = 0x0E,
LL_CONNECTION_PARAM_REQ_OPCODE = 0x0F,
LL_CONNECTION_PARAM_RSP_OPCODE = 0x10,
LL_REJECT_EXT_IND_OPCODE = 0x11,
LL_PING_REQ_OPCODE = 0x12,
LL_PING_RSP_OPCODE = 0x13,
LL_LENGTH_REQ_OPCODE = 0x14,
LL_LENGTH_RSP_OPCODE = 0x15,
LL_PHY_REQ_OPCODE = 0x16,
LL_PHY_RSP_OPCODE = 0x17,
LL_PHY_UPDATE_IND_OPCODE = 0x18,
LL_MIN_USED_CHANNELS_IND_OPCODE = 0x19,
LL_CTE_REQ_OPCODE = 0x1A,
LL_CTE_RSP_OPCODE = 0x1B,
LL_PER_SYNC_IND_OPCODE = 0x1C,
LL_CLK_ACC_REQ_OPCODE = 0x1D,
LL_CLK_ACC_RSP_OPCODE = 0x1E,
/// Request creation of CIS
LL_CIS_REQ_OPCODE = 0x1F,
/// Response to CIS Request with Slave parameters
LL_CIS_RSP_OPCODE = 0x20,
/// Issued by the Master to establish the CIS with a Slave.
LL_CIS_IND_OPCODE = 0x21,
/// Terminate the CIS channel associated with the Stream_ID and Channel_ID fields
LL_CIS_TERMINATE_IND_OPCODE = 0x22,
LL_PWR_CTRL_REQ_OPCODE = 0x23,
LL_PWR_CTRL_RSP_OPCODE = 0x24,
LL_PWR_CHANGE_IND_OPCODE = 0x25,
/// Opcode length
LL_OPCODE_MAX_OPCODE,
LL_OPCODE_DEBUG = 0xFF,
};
/// LLCP PDU lengths (including op_code)
enum co_llcp_length
{
LL_CONNECTION_UPDATE_IND_LEN = 12,
LL_CHANNEL_MAP_IND_LEN = 8,
LL_TERMINATE_IND_LEN = 2,
LL_ENC_REQ_LEN = 23,
LL_ENC_RSP_LEN = 13,
LL_START_ENC_REQ_LEN = 1,
LL_START_ENC_RSP_LEN = 1,
LL_UNKNOWN_RSP_LEN = 2,
LL_FEATURE_REQ_LEN = 9,
LL_FEATURE_RSP_LEN = 9,
LL_PAUSE_ENC_REQ_LEN = 1,
LL_PAUSE_ENC_RSP_LEN = 1,
LL_VERSION_IND_LEN = 6,
LL_REJECT_IND_LEN = 2,
LL_SLAVE_FEATURE_REQ_LEN = 9,
LL_REJECT_EXT_IND_LEN = 3,
LL_CONNECTION_PARAM_REQ_LEN = 24,
LL_CONNECTION_PARAM_RSP_LEN = 24,
LL_PING_REQ_LEN = 1,
LL_PING_RSP_LEN = 1,
LL_LENGTH_REQ_LEN = 9,
LL_LENGTH_RSP_LEN = 9,
LL_PHY_REQ_LEN = 3,
LL_PHY_RSP_LEN = 3,
LL_PHY_UPDATE_IND_LEN = 5,
LL_MIN_USED_CHANNELS_IND_LEN = 3,
LL_CTE_REQ_LEN = 2,
LL_CTE_RSP_LEN = 1,
LL_PER_SYNC_IND_LEN = 35,
LL_CLK_ACC_REQ_LEN = 2,
LL_CLK_ACC_RSP_LEN = 2,
LL_CIS_REQ_LEN = 36,
LL_CIS_RSP_LEN = 9,
LL_CIS_IND_LEN = 16,
LL_CIS_TERMINATE_IND_LEN = 4,
LL_PWR_CTRL_REQ_LEN = 4,
LL_PWR_CTRL_RSP_LEN = 5,
LL_PWR_CHANGE_IND_LEN = 5,
LL_PDU_LENGTH_MAX = 36,
};
/// BIG Control packet op_code
/*@TRACE*/
enum co_big_op_code
{
/// Channel map update
BIG_CHANNEL_MAP_IND_OPCODE,
/// Termination indication
BIG_TERMINATE_IND_OPCODE,
/// Opcode length
BIG_OPCODE_MAX_OPCODE,
};
/// BIG PDU lengths (including op_code)
enum co_bis_length
{
BIG_CHANNEL_MAP_IND_LEN = 8,
BIG_TERMINATE_IND_LEN = 4,
BIG_PDU_LENGTH_MAX = 8
};
/// PDU lengths
enum co_pdu_length
{
PDU_SCAN_REQ_LEN = 12,
PDU_CON_REQ_LEN = 34,
PDU_CON_RSP_LEN = 14,
};
/// Bit field definitions for BN field sent over the air
/// 7 6 5 4 3 2 1 0
/// +----+----+----+----+----+----+----+----+
/// | BN_S2M | BN_M2S |
/// +----+----+----+----+----+----+----+----+
enum co_llcp_cis_bn_field
{
/// BN Master to Slave
LLCP_CIS_BN_M2S_LSB = 0,
LLCP_CIS_BN_M2S_MASK = (0x0F),
/// BN Slave to Master
LLCP_CIS_BN_S2M_LSB = 4,
LLCP_CIS_BN_S2M_MASK = (0xF0),
};
/// Bit field definitions for combination of advertising Set ID, advertiser address type and sleep clock accuracy in LL_PER_SYNC_IND
/// 7 6 5 4 3 2 1 0
/// +----+----+----+-------+----+----+----+----+
/// | SCA | AType | SID |
/// +----+----+----+-------+----+----+----+----+
enum co_llcp_sid_atype_sca
{
/// Advertising SID
LLCP_PER_SYNC_IND_SID_LSB = 0,
LLCP_PER_SYNC_IND_SID_MASK = (0x0F),
/// Advertiser address type
LLCP_PER_SYNC_IND_ATYPE_POS = 4,
LLCP_PER_SYNC_IND_ATYPE_BIT = (0x10),
/// Sleep clock accuracy (@see enum SCA)
LLCP_PER_SYNC_IND_SCA_LSB = 5,
LLCP_PER_SYNC_IND_SCA_MASK = (0xE0),
};
/*
* MESSAGES
****************************************************************************************
*/
/// LL_DEFAULT structure (for packet with no parameter)
/*@TRACE
* @NO_PAD
*/
struct ll_default
{
/// op_code
uint8_t op_code;
};
/// LL_CONNECTION_UPDATE_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_connection_update_ind
{
/// op_code
uint8_t op_code;
/// window size (units of 1.25 ms)
uint8_t win_size;
/// window offset (units of 1.25 ms)
uint16_t win_off;
/// interval (units of 1.25 ms)
uint16_t interv;
/// connection latency (unit of connection event)
uint16_t latency;
/// link supervision timeout (unit of 10 ms)
uint16_t timeout;
/// instant (unit of connection event)
uint16_t instant;
};
/// LL_CHANNEL_MAP_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_channel_map_ind
{
/// op_code
uint8_t op_code;
/// channel mapping
struct le_chnl_map ch_map;
/// instant
uint16_t instant;
};
/// LL_TERMINATE_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_terminate_ind
{
/// op_code
uint8_t op_code;
/// termination code
uint8_t err_code;
};
/// LL_ENC_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_enc_req
{
/// op_code
uint8_t op_code;
/// random value
struct rand_nb rand;
/// ediv
uint16_t ediv;
/// skdm
struct sess_k_div_x skdm;
/// ivm
struct init_vect ivm;
};
/// LL_ENC_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_enc_rsp
{
/// op_code
uint8_t op_code;
/// skds
struct sess_k_div_x skds;
/// ivs
struct init_vect ivs;
};
/// LL_START_ENC_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_start_enc_req
{
/// op_code
uint8_t op_code;
};
/// LL_START_ENC_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_start_enc_rsp
{
/// op_code
uint8_t op_code;
};
/// LL_UNKNOWN_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_unknown_rsp
{
/// op_code
uint8_t op_code;
/// unknown type
uint8_t unk_type;
};
/// LL_FEATURE_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_feature_req
{
/// op_code
uint8_t op_code;
/// le features
struct le_features feats;
};
/// LL_FEATURE_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_feature_rsp
{
/// op_code
uint8_t op_code;
/// le features
struct le_features feats;
};
/// LL_PAUSE_ENC_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_pause_enc_req
{
/// op_code
uint8_t op_code;
};
/// LL_PAUSE_ENC_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_pause_enc_rsp
{
/// op_code
uint8_t op_code;
};
/// LL_VERSION_IND structure
/*@TRACE
* @NO_PAD
*/
struct ll_version_ind
{
/// op_code
uint8_t op_code;
/// version
uint8_t vers;
/// company id
uint16_t compid;
/// sub version
uint16_t subvers;
};
/// LL_REJECT_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_reject_ind
{
/// op_code
uint8_t op_code;
/// reject reason
uint8_t err_code;
};
/// LL_SLAVE_FEATURE_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_slave_feature_req
{
/// op_code
uint8_t op_code;
/// le features
struct le_features feats;
};
/// LL_CONNECTION_PARAM_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_connection_param_req
{
/// op_code
uint8_t op_code;
/// minimum value of connInterval (units of 1.25 ms)
uint16_t interval_min;
/// maximum value of connInterval (units of 1.25 ms)
uint16_t interval_max;
/// connSlaveLatency value (unit of connection event)
uint16_t latency;
/// connSupervisionTimeout value (unit of 10 ms)
uint16_t timeout;
/// preferred periodicity (units of 1.25 ms)
uint8_t pref_period;
/// ReferenceConnEventCount (unit of connection event)
uint16_t ref_con_event_count;
/// Offset0 (units of 1.25 ms)
uint16_t offset0;
/// Offset1 (units of 1.25 ms)
uint16_t offset1;
/// Offset2 (units of 1.25 ms)
uint16_t offset2;
/// Offset3 (units of 1.25 ms)
uint16_t offset3;
/// Offset4 (units of 1.25 ms)
uint16_t offset4;
/// Offset5 (units of 1.25 ms)
uint16_t offset5;
};
/// LL_CONNECTION_PARAM_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_connection_param_rsp
{
/// op_code
uint8_t op_code;
/// minimum value of connInterval (units of 1.25 ms)
uint16_t interval_min;
/// maximum value of connInterval (units of 1.25 ms)
uint16_t interval_max;
/// connSlaveLatency value (unit of connection event)
uint16_t latency;
/// connSupervisionTimeout value (unit of 10 ms)
uint16_t timeout;
/// preferred periodicity (units of 1.25 ms)
uint8_t pref_period;
/// ReferenceConnEventCount (unit of connection event)
uint16_t ref_con_event_count;
/// Offset0 (units of 1.25 ms)
uint16_t offset0;
/// Offset1 (units of 1.25 ms)
uint16_t offset1;
/// Offset2 (units of 1.25 ms)
uint16_t offset2;
/// Offset3 (units of 1.25 ms)
uint16_t offset3;
/// Offset4 (units of 1.25 ms)
uint16_t offset4;
/// Offset5 (units of 1.25 ms)
uint16_t offset5;
};
/// LL_REJECT_EXT_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_reject_ext_ind
{
/// op_code
uint8_t op_code;
/// rejected op_code
uint8_t rej_op_code;
/// reject reason
uint8_t err_code;
};
/// LL_PING_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_ping_req
{
/// op_code
uint8_t op_code;
};
/// LL_PING_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_ping_rsp
{
/// op_code
uint8_t op_code;
};
/// LL_LENGTH_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_length_req
{
/// op_code
uint8_t op_code;
/// The max size in reception (unit of byte)
uint16_t max_rx_octets;
/// The max time in reception (unit of microsecond)
uint16_t max_rx_time;
/// The max size in transmission (unit of byte)
uint16_t max_tx_octets;
/// The max time in transmission (unit of microsecond)
uint16_t max_tx_time;
};
/// LL_LENGTH_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_length_rsp
{
/// op_code
uint8_t op_code;
/// The max size in reception (unit of byte)
uint16_t max_rx_octets;
/// The max time in reception (unit of microsecond)
uint16_t max_rx_time;
/// The max size in transmission (unit of byte)
uint16_t max_tx_octets;
/// The max time in transmission (unit of microsecond)
uint16_t max_tx_time;
};
/// LL_PHY_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_phy_req
{
/// op_code
uint8_t op_code;
/// Tx phy selection
uint8_t tx_phys;
/// Rx phy selection
uint8_t rx_phys;
};
/// LL_PHY_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_phy_rsp
{
/// op_code
uint8_t op_code;
/// Tx phy selection
uint8_t tx_phys;
/// Rx phy selection
uint8_t rx_phys;
};
/// LL_PHY_UPDATE_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_phy_update_ind
{
/// op_code
uint8_t op_code;
/// master to slave phy selected
uint8_t m_to_s_phy;
/// slave to master phy selected
uint8_t s_to_m_phy;
/// Instant
uint16_t instant;
};
/// LL_MIN_USED_CHANNELS_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_min_used_channels_ind
{
/// op_code
uint8_t op_code;
/// PHY(s) for which the slave has a minimum number of used channels requirement
uint8_t phys;
/// minimum number of channels to be used on the specified PHY
uint8_t min_used_ch;
};
/**
* CTE length and type bit field definition
*
* | 5 bits | 1b | 2 bits |
* | MinCTELenReq | RFU | CTETypeReq |
*
* - MinCTELenReq: minimum CTE length (x 8us)
* - CTETypeReq: 0-AoA, 1-AoD_1us, 2-AoD_2us, 3-RFU
*/
enum cte_len_type
{
CTE_TYPE_REQ_MASK = 0xC0,
CTE_TYPE_REQ_LSB = 6,
MIN_CTE_LEN_REQ_MASK = 0x1F,
MIN_CTE_LEN_REQ_LSB = 0,
};
/// LL_CTE_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_cte_req
{
/// op_code
uint8_t op_code;
/// CTE length and type (@see enum cte_len_type)
uint8_t cte_len_type;
};
/// LL_PER_SYNC_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_per_sync_ind
{
/// op_code
uint8_t op_code;
/// ID (provided by the Host)
uint16_t id;
/// Sync Info (Vol 6, Part B, 2.3.4.6.SyncInfo field)
uint8_t sync_info[18];
/// Connection event counter
uint16_t con_evt_cnt;
/// Last periodic advertising event counter
uint16_t last_pa_evt_cnt;
/// Advertising Set ID, advertiser address type and sleep clock accuracy
uint8_t sid_atype_sca;
/// Periodic advertising PHY (@see enum le_phy_mask)
uint8_t phy;
/// Periodic advertiser address
struct bd_addr adva;
/// Sync Connection event counter
uint16_t sync_con_evt_cnt;
};
/// LL_CLK_ACC_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_clk_acc_req
{
/// op_code
uint8_t op_code;
/// SCA (@see enum SCA)
uint8_t sca;
};
/// LL_CLK_ACC_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_clk_acc_rsp
{
/// op_code
uint8_t op_code;
/// SCA (@see enum SCA)
uint8_t sca;
};
/// LL_CIS_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_cis_req
{
/// op_code
uint8_t op_code;
/// Identifier of the Connected Isochronous Group
uint8_t cig_id;
/// Identifier of the Connected Isochronous Stream
uint8_t cis_id;
/// Physical Channel Info Master to Slave PHY
uint8_t phy_m2s;
/// Physical Channel Info Slave to Master PHY
uint8_t phy_s2m;
/// bit[0:11] shall be set to the maximum SDU size in octets from the master Host.
/// bit[15] Framed shall be 0 if the CIS uses unframed data PDUs and 1 if it uses framed PDUs
uint16_t max_sdu_m2s;
/// bit[0:11] shall be set to the maximum SDU size in octets from the slave Host.
uint16_t max_sdu_s2m;
/// bit[0:19] shall be set to the time in microseconds between two consecutive SDUs from the master Host.
uint32_t sdu_interval_m2s;
/// bit[0:19] Shall be set to the time in microseconds between two consecutive SDUs from the slave Host.
uint32_t sdu_interval_s2m;
/// Max Payload Size: Master to Slave (value between 0 and 251) (in bytes)
uint16_t max_pdu_m2s;
/// Max Payload Size: Slave to Master (value between 0 and 251) (in bytes)
uint16_t max_pdu_s2m;
/// Number of Sub Event (value between 1 and 31)
uint8_t nse;
/// bit[0:24] Sub interval in microseconds (Range 400us - ISO Interval)
uint32_t sub_interval;
/// Burst number: Number of new packet per channel interval
/// bit[0:3] : Master to Slave Burst number The range shall be 0 to 15
/// bit[4:7] : Slave to Master Burst number The range shall be 0 to 15
uint8_t bn;
/// Master to Slave Flush timeout (value between 1 and 255)
uint8_t ft_m2s;
/// Slave to Master Flush timeout (value between 1 and 255)
uint8_t ft_s2m;
/// Time between two consecutive Connected Isochronous Stream anchor points - 1.25ms step.
/// The Iso_Interval field shall be between 4 and 3200 (i.e. 5ms to 4s).
uint16_t iso_interval;
/// bit[0:23] Minimum time in microseconds between the start of the connection event with the
/// connection event counter = connEventCount and the first CIS anchor point.
/// It shall have a value between 500µs and connInterval
uint32_t cis_offset_min;
/// bit[0:23] Maximum time in microseconds between the start of the connection event with the
/// connection event counter = connEventCount and the first CIS anchor point.
/// It shall have a value between CIS_Offset_Min and connInterval.
uint32_t cis_offset_max;
/// Reference point where the Offset_Min and Offset_Max are applied to determine the first CIS anchor point.
/// It be set to a connection event counter value that meets the requirement
/// currEvent - 2^14 < connEventCount < currEvent + 2^14 (modulo 65536), where currEvent is the counter value for
/// the connection event where the LL_CIS_REQ PDU is being transmitted (or retransmitted).
uint16_t conn_event_cnt;
};
/// CIS Request Bit Field parameters
enum ll_cis_req_bf
{
/// bit[15] - Frame mode in max_sdu_m2s parameter
BLE_CIS_FRAME_MODE_BIT = 0x8000,
BLE_CIS_FRAME_MODE_POS = 15,
/// bit[0:11] - Maximum SDU size
BLE_CIS_MAX_SDU_MASK = 0x0FFF,
BLE_CIS_MAX_SDU_LSB = 0,
/// bit[0:19] - SDU Interval
BLE_CIS_SDU_INTERVAL_MASK = 0x0FFFFF,
BLE_CIS_SDU_INTERVAL_LSB = 0,
};
/// LL_CIS_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_cis_rsp
{
/// op_code
uint8_t op_code;
/// bit[0:23] Minimum time in microseconds between the start of the connection event with the
/// connection event counter = connEventCount and the first CIS anchor point.
/// It shall have a value between 400µs and connInterval
uint32_t cis_offset_min;
/// bit[0:23] Maximum time in microseconds between the start of the connection event with the
/// connection event counter = connEventCount and the first CIS anchor point.
/// It shall have a value between CIS_Offset_Min and connInterval.
uint32_t cis_offset_max;
/// Event counter of the ACL event from which the Ch_Offset_Min and the Ch_Offset_Max are referenced
uint16_t conn_event_cnt;
};
/// LL_CIS_UPDATE_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_cis_ind
{
/// op_code
uint8_t op_code;
/// Access Address field is the number used to identify the CIS channel.
uint32_t aa;
/// bit[0:23] Time in microseconds from the start of the ACL connection event referenced by the connEventCount to the first
/// CIS anchor point.
uint32_t cis_offset;
/// bit[0:23] Time in microseconds from the first anchor point of the Stream being set up to the CIG Synchronization point
/// in the same isochronous interval. The CIS_Synchronization_Delay is calculated by the master for each CIS
/// separately, and sent to the slave in the LL_CIS_IND when establishing the CIS.
/// The slave uses the CIS_Synchronization_Delay parameter to determine the CIG Synchronization point.
uint32_t cig_sync_delay;
/// bit[0:23] Time reference when all CIS events are completed. The CIG Synchronization point is at the end of the last
/// sub-event of the last CIS in the CIG in an Iso_Interval. The CIG_Synchronization_Delay is the time in
/// microseconds between the start of the first subevent of the first CIS in the CIG and the
/// CIG Synchronization point
uint32_t cis_sync_delay;
/// Reference point where the CIS_Offset is applied to determine the first CIS anchor point.
/// The connEventCount shall be set to a connection event counter value that meets the requirement
/// currEvent – 2^14 < connEventCount < currEvent + 2^14 (modulo 65536), where currEvent is the counter value
/// for the connection event where the LL_CIS_IND PDU is being transmitted (or retransmitted).
uint16_t conn_event_cnt;
};
/// LL_CIS_TERMINATE_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_cis_terminate_ind
{
/// op_code
uint8_t op_code;
/// Identifier of the Connected Isochronous Group
uint8_t cig_id;
/// Identifier of the Connected Isochronous Stream
uint8_t cis_id;
/// Reason for CIS termination
uint8_t err_code;
};
/// LL_PWR_CTRL_REQ structure.
/*@TRACE
* @NO_PAD
*/
struct ll_pwr_ctrl_req
{
/// op_code
uint8_t op_code;
/// PHY mask for which the request is being made
uint8_t phy_mask;
///The requested change in the recipiant's transmit power level (in dBs)
int8_t delta;
/// The senders transmit power level for the PHY indicated (in dBs)
int8_t tx_pwr;
};
/// LL_PWR_CTRL_RSP structure.
/*@TRACE
* @NO_PAD
*/
struct ll_pwr_ctrl_rsp
{
/// op_code
uint8_t op_code;
/// bf (@see enum pwr_ctrl_flags)
uint8_t flags;
/// The actual change in the sender's transmit power level (in dBs)
int8_t delta;
/// The senders transmit power level for the PHY indicated (in dBs)
int8_t tx_pwr;
/// The maximum acceptable power reduction of peer device
uint8_t apr;
};
/// LL_PWR_CHANGE_IND structure.
/*@TRACE
* @NO_PAD
*/
struct ll_pwr_change_ind
{
/// op_code
uint8_t op_code;
/// PHY(s) mask for which the power level has changed
uint8_t phy_mask;
/// bf (@see enum pwr_ctrl_flags)
uint8_t flags;
/// The change in the sender's transmit power level (in dBs)
int8_t delta;
/// The senders transmit power level for the PHY(s) indicated (in dBs)
int8_t tx_pwr;
};
/// LLCP pdu format
/*@TRACE
@trc_ref co_llcp_op_code
*/
union llcp_pdu
{
/// op_code
uint8_t op_code;
//@trc_union op_code == LL_CONNECTION_UPDATE_IND_OPCODE
struct ll_connection_update_ind con_update_ind;
//@trc_union op_code == LL_CHANNEL_MAP_IND_OPCODE
struct ll_channel_map_ind channel_map_ind;
//@trc_union op_code == LL_TERMINATE_IND_OPCODE
struct ll_terminate_ind terminate_ind;
//@trc_union op_code == LL_ENC_REQ_OPCODE
struct ll_enc_req enc_req;
//@trc_union op_code == LL_ENC_RSP_OPCODE
struct ll_enc_rsp enc_rsp;
//@trc_union op_code == LL_START_ENC_REQ_OPCODE
struct ll_start_enc_req start_enc_req;
//@trc_union op_code == LL_START_ENC_RSP_OPCODE
struct ll_start_enc_rsp start_enc_rsp;
//@trc_union op_code == LL_UNKNOWN_RSP_OPCODE
struct ll_unknown_rsp unknown_rsp;
//@trc_union op_code == LL_FEATURE_REQ_OPCODE
struct ll_feature_req feats_req;
//@trc_union op_code == LL_FEATURE_RSP_OPCODE
struct ll_feature_rsp feats_rsp;
//@trc_union op_code == LL_PAUSE_ENC_REQ_OPCODE
struct ll_pause_enc_req pause_enc_req;
//@trc_union op_code == LL_PAUSE_ENC_RSP_OPCODE
struct ll_pause_enc_rsp pause_enc_rsp;
//@trc_union op_code == LL_VERSION_IND_OPCODE
struct ll_version_ind vers_ind;
//@trc_union op_code == LL_REJECT_IND_OPCODE
struct ll_reject_ind reject_ind;
//@trc_union op_code == LL_SLAVE_FEATURE_REQ_OPCODE
struct ll_slave_feature_req slave_feature_req;
//@trc_union op_code == LL_CONNECTION_PARAM_REQ_OPCODE
struct ll_connection_param_req con_param_req;
//@trc_union op_code == LL_CONNECTION_PARAM_RSP_OPCODE
struct ll_connection_param_rsp con_param_rsp;
//@trc_union op_code == LL_REJECT_EXT_IND_OPCODE
struct ll_reject_ext_ind reject_ind_ext;
//@trc_union op_code == LL_PING_REQ_OPCODE
struct ll_ping_req ping_req;
//@trc_union op_code == LL_PING_RSP_OPCODE
struct ll_ping_rsp ping_rsp;
//@trc_union op_code == LL_LENGTH_REQ_OPCODE
struct ll_length_req length_req;
//@trc_union op_code == LL_LENGTH_RSP_OPCODE
struct ll_length_rsp length_rsp;
//@trc_union op_code == LL_PHY_REQ_OPCODE
struct ll_phy_req phy_req;
//@trc_union op_code == LL_PHY_RSP_OPCODE
struct ll_phy_rsp phy_rsp;
//@trc_union op_code == LL_PHY_UPDATE_IND_OPCODE
struct ll_phy_update_ind phy_upd_ind;
//@trc_union op_code == LL_MIN_USED_CHANNELS_IND_OPCODE
struct ll_min_used_channels_ind min_used_channels_ind;
//@trc_union op_code == LL_CLK_ACC_REQ_OPCODE
struct ll_clk_acc_req clk_acc_req;
//@trc_union op_code == LL_CLK_ACC_RSP_OPCODE
struct ll_clk_acc_rsp clk_acc_rsp;
//@trc_union op_code == LL_PER_SYNC_IND_OPCODE
struct ll_per_sync_ind per_sync_ind;
//@trc_union op_code == LL_CIS_REQ_OPCODE
struct ll_cis_req cis_req;
//@trc_union op_code == LL_CIS_RSP_OPCODE
struct ll_cis_rsp cis_rsp;
//@trc_union op_code == LL_CIS_IND_OPCODE
struct ll_cis_ind cis_ind;
//@trc_union op_code == LL_CIS_TERMINATE_IND_OPCODE
struct ll_cis_terminate_ind cis_terminate_ind;
//@trc_union op_code == LL_PWR_CTRL_REQ_OPCODE
struct ll_pwr_ctrl_req pwr_ctrl_req;
//@trc_union op_code == LL_PWR_CTRL_RSP_OPCODE
struct ll_pwr_ctrl_rsp pwr_ctrl_rsp;
//@trc_union op_code == LL_PWR_CHANGE_IND_OPCODE
struct ll_pwr_change_ind pwr_change_ind;
};
/// BIG_CHANNEL_MAP_IND structure.
/*@TRACE
* @NO_PAD
*/
struct big_channel_map_ind
{
/// op_code
uint8_t op_code;
/// channel mapping
struct le_chnl_map ch_map;
/// BIG Event Count (Instant)
uint16_t evt_cnt;
};
/// BIG_TERMINATE_IND structure.
/*@TRACE
* @NO_PAD
*/
struct big_terminate_ind
{
/// op_code
uint8_t op_code;
/// termination code
uint8_t err_code;
/// BIG Event Count (Instant)
uint16_t evt_cnt;
};
/// BIS PDU format
/*@TRACE
@trc_ref co_big_op_code
*/
union big_pdu
{
/// op_code
uint8_t op_code;
//@trc_union op_code == BIG_CHANNEL_MAP_IND_OPCODE
struct big_channel_map_ind channel_map_ind;
//@trc_union op_code == BIG_TERMINATE_IND_OPCODE
struct big_terminate_ind terminate_ind;
};
/// @} CO_BT
#endif // CO_LLCP_H_