1 /* btp_bap_broadcast.h - Bluetooth BAP Tester */ 2 3 /* 4 * Copyright (c) 2023 Codecoup 5 * 6 * SPDX-License-Identifier: Apache-2.0 7 */ 8 9 #include <zephyr/bluetooth/audio/cap.h> 10 11 #include "btp_bap_audio_stream.h" 12 13 struct btp_bap_broadcast_stream { 14 struct btp_bap_audio_stream audio_stream; 15 struct bt_audio_codec_cfg codec_cfg; 16 uint8_t bis_id; 17 uint8_t subgroup_id; 18 bool bis_synced; 19 uint8_t source_id; 20 bool in_use; 21 bool already_sent; 22 }; 23 24 /* According to BT spec, a Broadcast Source can configure and establish one or more BIGs, 25 * each containing one or more BISes that are used to transport broadcast Audio Streams. 26 * For each BIG, the Broadcast Source shall generate a Broadcast_ID. 27 * For the time being, let's treat broadcast source as one BIG. 28 */ 29 struct btp_bap_broadcast_remote_source { 30 bt_addr_le_t address; 31 uint32_t broadcast_id; 32 struct btp_bap_broadcast_stream streams[CONFIG_BT_BAP_BROADCAST_SNK_STREAM_COUNT]; 33 struct bt_bap_stream *sink_streams[CONFIG_BT_BAP_BROADCAST_SNK_STREAM_COUNT]; 34 struct bt_bap_broadcast_sink *sink; 35 struct bt_bap_qos_cfg qos; 36 /* BIS Index bitfield read from Base */ 37 uint32_t bis_index_bitfield; 38 /* BIS Index bitfield read from sync request */ 39 uint32_t requested_bis_sync; 40 bool assistant_request; 41 uint8_t sink_broadcast_code[BT_ISO_BROADCAST_CODE_SIZE]; 42 const struct bt_bap_scan_delegator_recv_state *sink_recv_state; 43 }; 44 45 struct btp_bap_broadcast_local_source { 46 bool allocated; 47 uint8_t source_id; 48 struct bt_le_ext_adv *ext_adv; 49 uint32_t broadcast_id; 50 struct bt_bap_qos_cfg qos; 51 struct btp_bap_broadcast_stream streams[CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT]; 52 struct bt_audio_codec_cfg subgroup_codec_cfg[CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT]; 53 uint8_t stream_count; 54 struct bt_data per_adv_local; 55 /* Only for BTP BAP commands */ 56 struct bt_bap_broadcast_source *bap_broadcast; 57 /* Only for BTP CAP commands */ 58 struct bt_cap_broadcast_source *cap_broadcast; 59 }; 60 61 int btp_bap_broadcast_init(void); 62 struct btp_bap_broadcast_local_source *btp_bap_broadcast_local_source_from_src_id_get( 63 uint32_t source_id); 64 uint8_t btp_bap_broadcast_local_source_idx_get(struct btp_bap_broadcast_local_source *source); 65 struct btp_bap_broadcast_stream *btp_bap_broadcast_stream_alloc( 66 struct btp_bap_broadcast_local_source *source); 67 68 uint8_t btp_bap_broadcast_source_setup(const void *cmd, uint16_t cmd_len, 69 void *rsp, uint16_t *rsp_len); 70 uint8_t btp_bap_broadcast_source_setup_v2(const void *cmd, uint16_t cmd_len, 71 void *rsp, uint16_t *rsp_len); 72 uint8_t btp_bap_broadcast_source_release(const void *cmd, uint16_t cmd_len, 73 void *rsp, uint16_t *rsp_len); 74 uint8_t btp_bap_broadcast_adv_start(const void *cmd, uint16_t cmd_len, 75 void *rsp, uint16_t *rsp_len); 76 uint8_t btp_bap_broadcast_adv_stop(const void *cmd, uint16_t cmd_len, 77 void *rsp, uint16_t *rsp_len); 78 uint8_t btp_bap_broadcast_source_start(const void *cmd, uint16_t cmd_len, 79 void *rsp, uint16_t *rsp_len); 80 uint8_t btp_bap_broadcast_source_stop(const void *cmd, uint16_t cmd_len, 81 void *rsp, uint16_t *rsp_len); 82 uint8_t btp_bap_broadcast_sink_setup(const void *cmd, uint16_t cmd_len, 83 void *rsp, uint16_t *rsp_len); 84 uint8_t btp_bap_broadcast_sink_release(const void *cmd, uint16_t cmd_len, 85 void *rsp, uint16_t *rsp_len); 86 uint8_t btp_bap_broadcast_scan_start(const void *cmd, uint16_t cmd_len, 87 void *rsp, uint16_t *rsp_len); 88 uint8_t btp_bap_broadcast_scan_stop(const void *cmd, uint16_t cmd_len, 89 void *rsp, uint16_t *rsp_len); 90 uint8_t btp_bap_broadcast_sink_sync(const void *cmd, uint16_t cmd_len, 91 void *rsp, uint16_t *rsp_len); 92 uint8_t btp_bap_broadcast_sink_stop(const void *cmd, uint16_t cmd_len, 93 void *rsp, uint16_t *rsp_len); 94 uint8_t btp_bap_broadcast_sink_bis_sync(const void *cmd, uint16_t cmd_len, 95 void *rsp, uint16_t *rsp_len); 96 uint8_t btp_bap_broadcast_discover_scan_delegators(const void *cmd, uint16_t cmd_len, 97 void *rsp, uint16_t *rsp_len); 98 uint8_t btp_bap_broadcast_assistant_scan_start(const void *cmd, uint16_t cmd_len, 99 void *rsp, uint16_t *rsp_len); 100 uint8_t btp_bap_broadcast_assistant_scan_stop(const void *cmd, uint16_t cmd_len, 101 void *rsp, uint16_t *rsp_len); 102 uint8_t btp_bap_broadcast_assistant_add_src(const void *cmd, uint16_t cmd_len, 103 void *rsp, uint16_t *rsp_len); 104 uint8_t btp_bap_broadcast_assistant_remove_src(const void *cmd, uint16_t cmd_len, 105 void *rsp, uint16_t *rsp_len); 106 uint8_t btp_bap_broadcast_assistant_modify_src(const void *cmd, uint16_t cmd_len, 107 void *rsp, uint16_t *rsp_len); 108 uint8_t btp_bap_broadcast_assistant_set_broadcast_code(const void *cmd, uint16_t cmd_len, 109 void *rsp, uint16_t *rsp_len); 110 uint8_t btp_bap_broadcast_assistant_send_past(const void *cmd, uint16_t cmd_len, 111 void *rsp, uint16_t *rsp_len); 112