1 /* btp_bap_unicast.h - Bluetooth BAP Tester */ 2 3 /* 4 * Copyright (c) 2023 Codecoup 5 * Copyright (c) 2024 Nordic Semiconductor ASA 6 * 7 * SPDX-License-Identifier: Apache-2.0 8 */ 9 10 #include <stdbool.h> 11 #include <stddef.h> 12 #include <stdint.h> 13 14 #include <zephyr/autoconf.h> 15 #include <zephyr/bluetooth/addr.h> 16 #include <zephyr/bluetooth/audio/audio.h> 17 #include <zephyr/bluetooth/audio/bap.h> 18 #include <zephyr/bluetooth/audio/cap.h> 19 #include <zephyr/sys/util.h> 20 21 #include "btp_bap_audio_stream.h" 22 23 #define BTP_BAP_UNICAST_MAX_SNK_STREAMS_COUNT MIN(CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT, \ 24 CONFIG_BT_ASCS_MAX_ASE_SNK_COUNT) 25 #define BTP_BAP_UNICAST_MAX_SRC_STREAMS_COUNT MIN(CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT, \ 26 CONFIG_BT_ASCS_MAX_ASE_SRC_COUNT) 27 #define BTP_BAP_UNICAST_MAX_STREAMS_COUNT BTP_BAP_UNICAST_MAX_SNK_STREAMS_COUNT + \ 28 BTP_BAP_UNICAST_MAX_SRC_STREAMS_COUNT 29 #define BTP_BAP_UNICAST_MAX_END_POINTS_COUNT CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT + \ 30 CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT 31 32 struct btp_bap_unicast_group { 33 struct bt_bap_qos_cfg qos[CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT]; 34 struct bt_bap_unicast_group *cig; 35 uint8_t cig_id; 36 bool in_use; 37 }; 38 39 struct btp_bap_unicast_stream { 40 struct btp_bap_audio_stream audio_stream; 41 uint8_t ase_id; 42 uint8_t conn_id; 43 uint8_t cig_id; 44 uint8_t cis_id; 45 struct bt_audio_codec_cfg codec_cfg; 46 bool already_sent; 47 bool in_use; 48 }; 49 50 struct btp_bap_unicast_connection { 51 bt_addr_le_t address; 52 struct btp_bap_unicast_stream streams[BTP_BAP_UNICAST_MAX_STREAMS_COUNT]; 53 size_t configured_sink_stream_count; 54 size_t configured_source_stream_count; 55 struct bt_bap_ep *end_points[BTP_BAP_UNICAST_MAX_END_POINTS_COUNT]; 56 size_t end_points_count; 57 }; 58 59 int btp_bap_unicast_init(void); 60 struct btp_bap_unicast_connection *btp_bap_unicast_conn_get(size_t conn_index); 61 int btp_bap_unicast_group_create(uint8_t cig_id, struct btp_bap_unicast_group **out_unicast_group); 62 struct btp_bap_unicast_group *btp_bap_unicast_group_find(uint8_t cig_id); 63 struct bt_bap_ep *btp_bap_unicast_end_point_find(struct btp_bap_unicast_connection *conn, 64 uint8_t ase_id); 65 struct btp_bap_unicast_stream *btp_bap_unicast_stream_find(struct btp_bap_unicast_connection *conn, 66 uint8_t ase_id); 67 struct btp_bap_unicast_stream *btp_bap_unicast_stream_alloc( 68 struct btp_bap_unicast_connection *conn); 69 void btp_bap_unicast_stream_free(struct btp_bap_unicast_stream *stream); 70 71 uint8_t btp_bap_discover(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len); 72 73 uint8_t btp_ascs_configure_codec(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len); 74 uint8_t btp_ascs_configure_qos(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len); 75 uint8_t btp_ascs_enable(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len); 76 uint8_t btp_ascs_receiver_start_ready(const void *cmd, uint16_t cmd_len, 77 void *rsp, uint16_t *rsp_len); 78 uint8_t btp_ascs_receiver_stop_ready(const void *cmd, uint16_t cmd_len, 79 void *rsp, uint16_t *rsp_len); 80 uint8_t btp_ascs_disable(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len); 81 uint8_t btp_ascs_release(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len); 82 uint8_t btp_ascs_update_metadata(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len); 83 uint8_t btp_ascs_add_ase_to_cis(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len); 84 uint8_t btp_ascs_preconfigure_qos(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len); 85