From 45bdff15097e45269ac03372f9e4a90274cc078d Mon Sep 17 00:00:00 2001 From: Wolfgang Puffitsch Date: Mon, 25 Jan 2021 17:15:44 +0100 Subject: [PATCH] Bluetooth: controller: Add CIS-related LL control PDU types Add definitions for LL_CIS_REQ, LL_CIS_RSP, and LL_CIS_IND PDUs. Signed-off-by: Wolfgang Puffitsch --- subsys/bluetooth/controller/ll_sw/pdu.h | 71 +++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/subsys/bluetooth/controller/ll_sw/pdu.h b/subsys/bluetooth/controller/ll_sw/pdu.h index 01013a185d8..6a7c8d9a9af 100644 --- a/subsys/bluetooth/controller/ll_sw/pdu.h +++ b/subsys/bluetooth/controller/ll_sw/pdu.h @@ -432,6 +432,10 @@ enum pdu_data_llctrl_type { PDU_DATA_LLCTRL_TYPE_PHY_RSP = 0x17, PDU_DATA_LLCTRL_TYPE_PHY_UPD_IND = 0x18, PDU_DATA_LLCTRL_TYPE_MIN_USED_CHAN_IND = 0x19, + PDU_DATA_LLCTRL_TYPE_CIS_REQ = 0x1F, + PDU_DATA_LLCTRL_TYPE_CIS_RSP = 0x20, + PDU_DATA_LLCTRL_TYPE_CIS_IND = 0x21, + PDU_DATA_LLCTRL_TYPE_CIS_TERMINATE_IND = 0x22, }; struct pdu_data_llctrl_conn_update_ind { @@ -584,6 +588,69 @@ struct pdu_data_llctrl_min_used_chans_ind { uint8_t min_used_chans; } __packed; +struct pdu_data_llctrl_cis_req { + uint8_t cig_id; + uint8_t cis_id; + uint8_t c_phy; + uint8_t p_phy; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + uint16_t c_max_sdu:12; + uint16_t rfu0:3; + uint16_t framed:1; + uint16_t p_max_sdu:12; + uint16_t rfu1:4; +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + uint16_t framed:1; + uint16_t rfu0:3; + uint16_t c_max_sdu:12; + uint16_t rfu1:4; + uint16_t p_max_sdu:12; +#else +#error "Unsupported endianness" +#endif + uint8_t c_sdu_interval[3]; + uint8_t p_sdu_interval[3]; + uint16_t c_max_pdu; + uint16_t p_max_pdu; + uint8_t nse; + uint8_t sub_interval[3]; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + uint8_t c_bn:4; + uint8_t p_bn:4; +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + uint8_t p_bn:4; + uint8_t c_bn:4; +#else +#error "Unsupported endianness" +#endif + uint8_t c_ft; + uint8_t p_ft; + uint16_t iso_interval; + uint8_t cis_offset_min[3]; + uint8_t cis_offset_max[3]; + uint16_t conn_event_count; +} __packed; + +struct pdu_data_llctrl_cis_rsp { + uint8_t cis_offset_min[3]; + uint8_t cis_offset_max[3]; + uint16_t conn_event_count; +} __packed; + +struct pdu_data_llctrl_cis_ind { + uint32_t aa; + uint8_t cis_offset[3]; + uint8_t cig_sync_delay[3]; + uint8_t cis_sync_delay[3]; + uint16_t conn_event_count; +} __packed; + +struct pdu_data_llctrl_cis_terminate_ind { + uint8_t cig_id; + uint8_t cis_id; + uint8_t error_code; +} __packed; + struct pdu_data_llctrl { uint8_t opcode; union { @@ -613,6 +680,10 @@ struct pdu_data_llctrl { struct pdu_data_llctrl_phy_rsp phy_rsp; struct pdu_data_llctrl_phy_upd_ind phy_upd_ind; struct pdu_data_llctrl_min_used_chans_ind min_used_chans_ind; + struct pdu_data_llctrl_cis_req cis_req; + struct pdu_data_llctrl_cis_rsp cis_rsp; + struct pdu_data_llctrl_cis_ind cis_ind; + struct pdu_data_llctrl_cis_terminate_ind cis_terminate_ind; } __packed; } __packed;