15#ifndef _LE_AUDIO_TX_H_
16#define _LE_AUDIO_TX_H_
18#include <zephyr/net_buf.h>
19#include <zephyr/sys/atomic.h>
20#include <zephyr/bluetooth/audio/audio.h>
21#include <zephyr/bluetooth/audio/bap.h>
22#include <zephyr/bluetooth/audio/cap.h>
36#define HCI_ISO_BUF_PER_CHAN 2
38#if defined(CONFIG_BT_ISO_MAX_CIG) && defined(CONFIG_BT_ISO_MAX_BIG)
39#define GROUP_MAX (CONFIG_BT_ISO_MAX_BIG + CONFIG_BT_ISO_MAX_CIG)
40#elif defined(CONFIG_BT_ISO_MAX_CIG)
41#define GROUP_MAX CONFIG_BT_ISO_MAX_CIG
42#elif defined(CONFIG_BT_ISO_MAX_BIG)
43#define GROUP_MAX CONFIG_BT_ISO_MAX_BIG
45#error Neither CIG nor BIG defined
48#if (defined(CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT) && defined(CONFIG_BT_BAP_UNICAST))
49#define SUBGROUP_MAX (1 + CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT)
50#elif (defined(CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT) && !defined(CONFIG_BT_BAP_UNICAST))
51#define SUBGROUP_MAX CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT
56#define TX_STREAMS_MAX CONFIG_BT_ISO_MAX_CHAN
58#define TX_BUF_NUM (TX_STREAMS_MAX * HCI_ISO_BUF_PER_CHAN)
91#define BT_LE_AUDIO_TX_DEFINE(name) \
92 NET_BUF_POOL_FIXED_DEFINE(name##_cfg_buf, TX_BUF_NUM, \
93 BT_ISO_SDU_BUF_SIZE(CONFIG_BT_ISO_TX_MTU), \
94 CONFIG_BT_CONN_TX_USER_DATA_SIZE, NULL); \
95 static struct bt_le_audio_tx_ctx name##_ctx = { \
96 .iso_tx_pool = &name##_cfg_buf, \
98 static struct bt_le_audio_tx_ctx *name = &name##_ctx
100#define BT_LE_AUDIO_TX_DEFINE_INDEXED(name, group_idx, subgroup_idx) \
101 NET_BUF_POOL_FIXED_DEFINE(name##_##group_idx##_##subgroup_idx##_buf, TX_BUF_NUM, \
102 BT_ISO_SDU_BUF_SIZE(CONFIG_BT_ISO_TX_MTU), \
103 CONFIG_BT_CONN_TX_USER_DATA_SIZE, NULL); \
104 static struct bt_le_audio_tx_ctx name##_##group_idx##_##subgroup_idx##_ctx = { \
105 .iso_tx_pool = &name##_##group_idx##_##subgroup_idx##_buf, \
107 __unused static struct bt_le_audio_tx_ctx *name##_##group_idx##_##subgroup_idx = \
108 &name##_##group_idx##_##subgroup_idx##_ctx
Globally accessible audio related defines.
int bt_le_audio_tx_stream_started(struct bt_le_audio_tx_ctx *ctx, struct stream_index stream_idx)
Initializes per-stream TX bookkeeping when a stream enters streaming state.
int bt_le_audio_tx_send(struct bt_le_audio_tx_ctx *ctx, struct net_buf const *const audio_frame, struct le_audio_tx_info *tx, uint8_t num_tx)
Sends N channels of synchronized audio data to the controller.
int bt_le_audio_tx_stream_sent(struct bt_le_audio_tx_ctx *ctx, struct stream_index stream_idx)
Releases one outstanding TX pool allocation for the provided stream.
int bt_le_audio_tx_init(struct bt_le_audio_tx_ctx *ctx, bool is_clock_master)
Initializes the TX path context and shared ISO flush worker.
#define TX_STREAMS_MAX
Definition bt_le_audio_tx.h:56
bool is_ble_clock_master
Definition bt_le_audio_tx.h:86
struct net_buf_pool * iso_tx_pool
Definition bt_le_audio_tx.h:69
bool ts_ctlr_esti_us_valid
Definition bt_le_audio_tx.h:73
bool ts_last_us_valid
Definition bt_le_audio_tx.h:84
uint32_t ts_ctlr_real_us_last
Definition bt_le_audio_tx.h:75
uint32_t ts_last_us
Definition bt_le_audio_tx.h:83
uint32_t subsequent_rapid_corrections
Definition bt_le_audio_tx.h:79
uint32_t ts_ctlr_esti_us
Definition bt_le_audio_tx.h:72
int64_t corr_diff_us
Definition bt_le_audio_tx.h:81
enum tx_data_status last_data_status
Definition bt_le_audio_tx.h:88
uint32_t ts_last_correction
Definition bt_le_audio_tx.h:77
struct tx_inf tx_info_arr[CONFIG_BT_ISO_MAX_CHAN]
Definition bt_le_audio_tx.h:70
Definition bt_le_audio_tx.h:68
struct bt_cap_stream * cap_stream
Definition bt_le_audio_tx.h:30
struct stream_index idx
Definition bt_le_audio_tx.h:29
uint8_t audio_location
Definition bt_le_audio_tx.h:31
Definition bt_le_audio_tx.h:28
Stream index structure for identifying audio streams.
Definition le_audio.h:75
struct bt_iso_tx_info iso_tx
Definition bt_le_audio_tx.h:62
bool hci_wrn_printed
Definition bt_le_audio_tx.h:65
atomic_t iso_tx_pool_alloc
Definition bt_le_audio_tx.h:64
struct bt_iso_tx_info iso_tx_readback
Definition bt_le_audio_tx.h:63
uint16_t iso_conn_handle
Definition bt_le_audio_tx.h:61
Definition bt_le_audio_tx.h:60
tx_data_status
Definition zbus_common.h:52