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