Bluetooth: Add HCI PDU definitions for ISO channels
This adds the HCI commands and events defined as per Bluetooth 5.2 specification. Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
parent
1972f0b7f4
commit
4948b594da
1 changed files with 346 additions and 0 deletions
|
@ -59,6 +59,45 @@ struct bt_hci_acl_hdr {
|
|||
} __packed;
|
||||
#define BT_HCI_ACL_HDR_SIZE 4
|
||||
|
||||
#define BT_ISO_START 0x00
|
||||
#define BT_ISO_CONT 0x01
|
||||
#define BT_ISO_SINGLE 0x02
|
||||
#define BT_ISO_END 0x03
|
||||
|
||||
#define bt_iso_handle(h) ((h) & 0x0fff)
|
||||
#define bt_iso_flags(h) ((h) >> 12)
|
||||
#define bt_iso_flags_pb(f) (f & 0x0003)
|
||||
#define bt_iso_flags_ts(f) ((f >> 2) & 0x0001)
|
||||
#define bt_iso_pack_flags(pb, ts) ((pb & 0x0003) | ((ts & 0x0001) << 2))
|
||||
#define bt_iso_handle_pack(h, pb, ts) \
|
||||
((h) | (bt_iso_pack_flags(pb, ts) << 12))
|
||||
|
||||
#define BT_ISO_DATA_VALID 0x00
|
||||
#define BT_ISO_DATA_INVALID 0x01
|
||||
#define BT_ISO_DATA_NOP 0x02
|
||||
|
||||
#define bt_iso_pkt_len(h) ((h) & 0x3fff)
|
||||
#define bt_iso_pkt_flags(h) ((h) >> 14)
|
||||
#define bt_iso_pkt_len_pack(h, f) ((h) | ((f) << 14))
|
||||
|
||||
struct bt_hci_iso_data_hdr {
|
||||
uint16_t sn;
|
||||
uint16_t slen;
|
||||
} __packed;
|
||||
#define BT_HCI_ISO_DATA_HDR_SIZE 4
|
||||
|
||||
struct bt_hci_iso_ts_data_hdr {
|
||||
uint32_t ts;
|
||||
struct bt_hci_iso_data_hdr data;
|
||||
} __packed;
|
||||
#define BT_HCI_ISO_TS_DATA_HDR_SIZE 8
|
||||
|
||||
struct bt_hci_iso_hdr {
|
||||
uint16_t handle;
|
||||
uint16_t len;
|
||||
} __packed;
|
||||
#define BT_HCI_ISO_HDR_SIZE 4
|
||||
|
||||
struct bt_hci_cmd_hdr {
|
||||
uint16_t opcode;
|
||||
uint8_t param_len;
|
||||
|
@ -145,6 +184,24 @@ struct bt_hci_cmd_hdr {
|
|||
BT_LE_FEAT_BIT_EXT_ADV)
|
||||
#define BT_FEAT_LE_EXT_PER_ADV(feat) BT_LE_FEAT_TEST(feat, \
|
||||
BT_LE_FEAT_BIT_PER_ADV)
|
||||
#define BT_FEAT_LE_CIS_MASTER(feat) BT_LE_FEAT_TEST(feat, \
|
||||
BT_LE_FEAT_BIT_CIS_MASTER)
|
||||
#define BT_FEAT_LE_CIS_SLAVE(feat) BT_LE_FEAT_TEST(feat, \
|
||||
BT_LE_FEAT_BIT_CIS_SLAVE)
|
||||
#define BT_FEAT_LE_ISO_BROADCASTER(feat) BT_LE_FEAT_TEST(feat, \
|
||||
BT_LE_FEAT_BIT_ISO_BROADCASTER)
|
||||
#define BT_FEAT_LE_SYNC_RECEIVER(feat) BT_LE_FEAT_TEST(feat, \
|
||||
BT_LE_FEAT_BIT_SYNC_RECEIVER)
|
||||
#define BT_FEAT_LE_ISO_CHANNELS(feat) BT_LE_FEAT_TEST(feat, \
|
||||
BT_LE_FEAT_BIT_ISO_CHANNELS)
|
||||
|
||||
#define BT_FEAT_LE_CIS(feat) (BT_FEAT_LE_CIS_MASTER(feat) | \
|
||||
BT_FEAT_LE_CIS_SLAVE(feat))
|
||||
#define BT_FEAT_LE_BIS(feat) (BT_FEAT_LE_ISO_BROADCASTER(feat) | \
|
||||
BT_FEAT_LE_SYNC_RECEIVER(feat))
|
||||
#define BT_FEAT_LE_ISO(feat) (BT_FEAT_LE_CIS(feat) | \
|
||||
BT_FEAT_LE_BIS(feat))
|
||||
|
||||
/* LE States */
|
||||
#define BT_LE_STATES_SLAVE_CONN_ADV(states) (states & 0x0000004000000000)
|
||||
|
||||
|
@ -1277,6 +1334,213 @@ struct bt_hci_cp_le_set_privacy_mode {
|
|||
uint8_t mode;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_READ_BUFFER_SIZE_V2 BT_OP(BT_OGF_LE, 0x0060)
|
||||
struct bt_hci_rp_le_read_buffer_size_v2 {
|
||||
uint8_t status;
|
||||
uint16_t acl_mtu;
|
||||
uint8_t acl_max_pkt;
|
||||
uint16_t iso_mtu;
|
||||
uint8_t iso_max_pkt;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_READ_ISO_TX_SYNC BT_OP(BT_OGF_LE, 0x0061)
|
||||
struct bt_hci_cp_le_read_iso_tx_sync {
|
||||
uint16_t handle;
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_rp_le_read_iso_tx_sync {
|
||||
uint8_t status;
|
||||
uint16_t handle;
|
||||
uint16_t seq;
|
||||
uint32_t timestamp;
|
||||
uint8_t offset[3];
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_SET_CIG_PARAMS BT_OP(BT_OGF_LE, 0x0062)
|
||||
struct bt_hci_cis_params {
|
||||
uint8_t cis_id;
|
||||
uint16_t m_sdu;
|
||||
uint16_t s_sdu;
|
||||
uint8_t m_phy;
|
||||
uint8_t s_phy;
|
||||
uint8_t m_rtn;
|
||||
uint8_t s_rtn;
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_cp_le_set_cig_params {
|
||||
uint8_t cig_id;
|
||||
uint8_t m_interval[3];
|
||||
uint8_t s_interval[3];
|
||||
uint8_t sca;
|
||||
uint8_t packing;
|
||||
uint8_t framing;
|
||||
uint16_t m_latency;
|
||||
uint16_t s_latency;
|
||||
uint8_t num_cis;
|
||||
struct bt_hci_cis_params cis[0];
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_rp_le_set_cig_params {
|
||||
uint8_t status;
|
||||
uint8_t cig_id;
|
||||
uint8_t num_handles;
|
||||
uint16_t handle[0];
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_SET_CIG_PARAMS_TEST BT_OP(BT_OGF_LE, 0x0063)
|
||||
|
||||
#define BT_HCI_OP_LE_CREATE_CIS BT_OP(BT_OGF_LE, 0x0064)
|
||||
struct bt_hci_cis {
|
||||
uint16_t cis_handle;
|
||||
uint16_t acl_handle;
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_cp_le_create_cis {
|
||||
uint8_t num_cis;
|
||||
struct bt_hci_cis cis[0];
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_REMOVE_CIG BT_OP(BT_OGF_LE, 0x0065)
|
||||
struct bt_hci_cp_le_remove_cig {
|
||||
uint8_t cig_id;
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_rp_le_remove_cig {
|
||||
uint8_t status;
|
||||
uint8_t cig_id;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_ACCEPT_CIS BT_OP(BT_OGF_LE, 0x0066)
|
||||
struct bt_hci_cp_le_accept_cis {
|
||||
uint16_t handle;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_REJECT_CIS BT_OP(BT_OGF_LE, 0x0067)
|
||||
struct bt_hci_cp_le_reject_cis {
|
||||
uint16_t handle;
|
||||
uint8_t reason;
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_rp_le_reject_cis {
|
||||
uint8_t status;
|
||||
uint16_t handle;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_CREATE_BIG BT_OP(BT_OGF_LE, 0x0068)
|
||||
struct bt_hci_cp_le_create_big {
|
||||
uint8_t big_handle;
|
||||
uint8_t adv_handle;
|
||||
uint8_t num_bis;
|
||||
uint8_t sdu_interval[3];
|
||||
uint16_t max_sdu;
|
||||
uint16_t max_latency;
|
||||
uint8_t rtn;
|
||||
uint8_t phy;
|
||||
uint8_t packing;
|
||||
uint8_t framing;
|
||||
uint8_t encryption;
|
||||
uint8_t bcode[16];
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_CREATE_BIG_TEST BT_OP(BT_OGF_LE, 0x0069)
|
||||
|
||||
#define BT_HCI_OP_LE_TERMINATE_BIG BT_OP(BT_OGF_LE, 0x006a)
|
||||
struct bt_hci_cp_le_terminate_big {
|
||||
uint8_t big_handle;
|
||||
uint8_t reason;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_BIG_CREATE_SYNC BT_OP(BT_OGF_LE, 0x006b)
|
||||
struct bt_hci_cp_le_big_create_sync {
|
||||
uint8_t big_handle;
|
||||
uint16_t sync_handle;
|
||||
uint8_t encryption;
|
||||
uint8_t bcode[16];
|
||||
uint8_t mse;
|
||||
uint16_t sync_timeout;
|
||||
uint8_t num_bis;
|
||||
uint8_t bis[0];
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_BIG_TERMINATE_SYNC BT_OP(BT_OGF_LE, 0x006c)
|
||||
struct bt_hci_cp_le_big_terminate_sync {
|
||||
uint8_t big_handle;
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_rp_le_big_terminate_sync {
|
||||
uint8_t status;
|
||||
uint8_t big_handle;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_REQ_PEER_SC BT_OP(BT_OGF_LE, 0x006d)
|
||||
struct bt_hci_cp_le_req_peer_sca {
|
||||
uint16_t handle;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_SETUP_ISO_PATH BT_OP(BT_OGF_LE, 0x006e)
|
||||
struct bt_hci_cp_le_setup_iso_path {
|
||||
uint16_t handle;
|
||||
uint8_t path_dir;
|
||||
uint8_t path_id;
|
||||
uint8_t coding_format;
|
||||
uint16_t company_id;
|
||||
uint16_t vendor_id;
|
||||
uint8_t controller_delay[3];
|
||||
uint8_t codec_config_len;
|
||||
uint8_t codec_config[0];
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_rp_le_setup_iso_path {
|
||||
uint8_t status;
|
||||
uint16_t handle;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_REMOVE_ISO_PATH BT_OP(BT_OGF_LE, 0x006f)
|
||||
struct bt_hci_cp_le_remove_iso_path {
|
||||
uint16_t handle;
|
||||
uint8_t path_dir;
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_rp_le_remove_iso_path {
|
||||
uint8_t status;
|
||||
uint16_t handle;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_ISO_TRANSMIT_TEST BT_OP(BT_OGF_LE, 0x0070)
|
||||
|
||||
#define BT_HCI_OP_LE_ISO_RECEIVE_TEST BT_OP(BT_OGF_LE, 0x0071)
|
||||
|
||||
#define BT_HCI_OP_LE_ISO_READ_TEST_COUNTERS BT_OP(BT_OGF_LE, 0x0072)
|
||||
|
||||
#define BT_HCI_OP_LE_ISO_TEST_END BT_OP(BT_OGF_LE, 0x0073)
|
||||
|
||||
#define BT_HCI_OP_LE_SET_HOST_FEATURE BT_OP(BT_OGF_LE, 0x0074)
|
||||
struct bt_hci_cp_le_set_host_feature {
|
||||
uint8_t bit_number;
|
||||
uint8_t bit_value;
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_rp_le_set_host_feature {
|
||||
uint8_t status;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_OP_LE_READ_ISO_LINK_QUALITY BT_OP(BT_OGF_LE, 0x0075)
|
||||
struct bt_hci_cp_le_read_iso_link_quality {
|
||||
uint16_t handle;
|
||||
} __packed;
|
||||
|
||||
struct bt_hci_rp_le_read_iso_link_quality {
|
||||
uint8_t status;
|
||||
uint16_t handle;
|
||||
uint32_t tx_unacked_packets;
|
||||
uint32_t tx_flushed_packets;
|
||||
uint32_t tx_last_subevent_packets;
|
||||
uint32_t retransmitted_packets;
|
||||
uint32_t crc_error_packets;
|
||||
uint32_t rx_unreceived_packets;
|
||||
uint32_t duplicate_packets;
|
||||
} __packed;
|
||||
|
||||
/* Event definitions */
|
||||
|
||||
#define BT_HCI_EVT_UNKNOWN 0x00
|
||||
|
@ -1711,6 +1975,83 @@ struct bt_hci_evt_le_chan_sel_algo {
|
|||
uint8_t chan_sel_algo;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_EVT_LE_CIS_ESTABLISHED 0x19
|
||||
struct bt_hci_evt_le_cis_established {
|
||||
uint8_t status;
|
||||
uint16_t conn_handle;
|
||||
uint8_t cig_sync_delay[3];
|
||||
uint8_t cis_sync_delay[3];
|
||||
uint8_t m_latency[3];
|
||||
uint8_t s_latency[3];
|
||||
uint8_t m_phy;
|
||||
uint8_t s_phy;
|
||||
uint8_t nse;
|
||||
uint8_t m_bn;
|
||||
uint8_t s_bn;
|
||||
uint8_t m_ft;
|
||||
uint8_t s_ft;
|
||||
uint16_t m_max_pdu;
|
||||
uint16_t s_max_pdu;
|
||||
uint16_t interval;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_EVT_LE_CIS_REQ 0x1a
|
||||
struct bt_hci_evt_le_cis_req {
|
||||
uint16_t acl_handle;
|
||||
uint16_t cis_handle;
|
||||
uint8_t cig_id;
|
||||
uint8_t cis_id;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_EVT_LE_BIG_COMPLETE 0x1b
|
||||
struct bt_hci_evt_le_big_complete {
|
||||
uint8_t status;
|
||||
uint8_t big_handle;
|
||||
uint8_t sync_delay[3];
|
||||
uint8_t latency[3];
|
||||
uint8_t phy;
|
||||
uint8_t nse;
|
||||
uint8_t bn;
|
||||
uint8_t pto;
|
||||
uint8_t irc;
|
||||
uint16_t max_pdu;
|
||||
uint8_t num_bis;
|
||||
uint16_t handle[0];
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_EVT_LE_BIG_TERMINATE 0x1c
|
||||
struct bt_hci_evt_le_big_terminate {
|
||||
uint8_t big_handle;
|
||||
uint8_t reason;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_EVT_LE_BIG_SYNC_ESTABLISHED 0x1d
|
||||
struct bt_hci_evt_le_big_sync_established {
|
||||
uint8_t status;
|
||||
uint8_t big_handle;
|
||||
uint8_t latency[3];
|
||||
uint8_t nse;
|
||||
uint8_t bn;
|
||||
uint8_t pto;
|
||||
uint8_t irc;
|
||||
uint16_t max_pdu;
|
||||
uint8_t num_bis;
|
||||
uint16_t handle[0];
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_EVT_LE_BIG_SYNC_LOST 0x1e
|
||||
struct bt_hci_evt_le_big_sync_lost {
|
||||
uint8_t big_handle;
|
||||
uint8_t reason;
|
||||
} __packed;
|
||||
|
||||
#define BT_HCI_EVT_LE_REQ_PEER_SCA_COMPLETE 0x1f
|
||||
struct bt_hci_evt_le_req_peer_sca_complete {
|
||||
uint8_t status;
|
||||
uint16_t handle;
|
||||
uint8_t sca;
|
||||
} __packed;
|
||||
|
||||
/* Event mask bits */
|
||||
|
||||
#define BT_EVT_BIT(n) (1ULL << (n))
|
||||
|
@ -1790,6 +2131,11 @@ struct bt_hci_evt_le_chan_sel_algo {
|
|||
#define BT_EVT_MASK_LE_ADV_SET_TERMINATED BT_EVT_BIT(17)
|
||||
#define BT_EVT_MASK_LE_SCAN_REQ_RECEIVED BT_EVT_BIT(18)
|
||||
#define BT_EVT_MASK_LE_CHAN_SEL_ALGO BT_EVT_BIT(19)
|
||||
#define BT_EVT_MASK_LE_CIS_ESTABLISHED BT_EVT_BIT(24)
|
||||
#define BT_EVT_MASK_LE_CIS_REQ BT_EVT_BIT(25)
|
||||
#define BT_EVT_MASK_LE_BIG_COMPLETE BT_EVT_BIT(26)
|
||||
#define BT_EVT_MASK_LE_BIG_SYNC_LOST BT_EVT_BIT(27)
|
||||
#define BT_EVT_MASK_LE_REQ_PEER_SCA_COMPLETE BT_EVT_BIT(28)
|
||||
|
||||
/** Allocate a HCI command buffer.
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue