1 /* btp_cap.h - Bluetooth tester headers */
2 
3 /*
4  * Copyright (c) 2023 Codecoup
5  *
6  * SPDX-License-Identifier: Apache-2.0
7  */
8 
9 #include <stdint.h>
10 
11 #include <zephyr/bluetooth/addr.h>
12 #include <zephyr/bluetooth/audio/audio.h>
13 #include <zephyr/bluetooth/iso.h>
14 #include <zephyr/sys/util_macro.h>
15 
16 /* CAP commands */
17 #define BTP_CAP_READ_SUPPORTED_COMMANDS		0x01
18 struct btp_cap_read_supported_commands_rp {
19 	uint8_t data[0];
20 } __packed;
21 
22 #define BTP_CAP_DISCOVER			0x02
23 struct btp_cap_discover_cmd {
24 	bt_addr_le_t address;
25 } __packed;
26 
27 #define BTP_CAP_UNICAST_SETUP_ASE		0x03
28 struct btp_cap_unicast_setup_ase_cmd {
29 	bt_addr_le_t address;
30 	uint8_t ase_id;
31 	uint8_t cis_id;
32 	uint8_t cig_id;
33 	uint8_t coding_format;
34 	uint16_t vid;
35 	uint16_t cid;
36 	uint8_t sdu_interval[3];
37 	uint8_t framing;
38 	uint16_t max_sdu;
39 	uint8_t retransmission_num;
40 	uint16_t max_transport_latency;
41 	uint8_t presentation_delay[3];
42 	uint8_t cc_ltvs_len;
43 	uint8_t metadata_ltvs_len;
44 	uint8_t ltvs[0];
45 } __packed;
46 
47 #define BTP_CAP_UNICAST_AUDIO_START		0x04
48 struct btp_cap_unicast_audio_start_cmd {
49 	uint8_t cig_id;
50 	uint8_t set_type;
51 } __packed;
52 #define BTP_CAP_UNICAST_AUDIO_START_SET_TYPE_AD_HOC	0x00
53 #define BTP_CAP_UNICAST_AUDIO_START_SET_TYPE_CSIP	0x01
54 
55 #define BTP_CAP_UNICAST_AUDIO_UPDATE		0x05
56 struct btp_cap_unicast_audio_update_cmd {
57 	uint8_t stream_count;
58 	uint8_t update_data[0];
59 } __packed;
60 struct btp_cap_unicast_audio_update_data {
61 	bt_addr_le_t address;
62 	uint8_t ase_id;
63 	uint8_t metadata_ltvs_len;
64 	uint8_t metadata_ltvs[0];
65 } __packed;
66 
67 #define BTP_CAP_UNICAST_AUDIO_STOP		0x06
68 struct btp_cap_unicast_audio_stop_cmd {
69 	uint8_t cig_id;
70 	uint8_t flags;
71 } __packed;
72 #define BTP_CAP_UNICAST_AUDIO_STOP_FLAG_RELEASE BIT(0)
73 
74 #define BTP_CAP_BROADCAST_SOURCE_SETUP_STREAM	0x07
75 struct btp_cap_broadcast_source_setup_stream_cmd {
76 	uint8_t source_id;
77 	uint8_t subgroup_id;
78 	uint8_t coding_format;
79 	uint16_t vid;
80 	uint16_t cid;
81 	uint8_t cc_ltvs_len;
82 	uint8_t metadata_ltvs_len;
83 	uint8_t ltvs[0];
84 } __packed;
85 
86 #define BTP_CAP_BROADCAST_SOURCE_SETUP_SUBGROUP	0x08
87 struct btp_cap_broadcast_source_setup_subgroup_cmd {
88 	uint8_t source_id;
89 	uint8_t subgroup_id;
90 	uint8_t coding_format;
91 	uint16_t vid;
92 	uint16_t cid;
93 	uint8_t cc_ltvs_len;
94 	uint8_t metadata_ltvs_len;
95 	uint8_t ltvs[0];
96 } __packed;
97 
98 #define BTP_CAP_BROADCAST_SOURCE_SETUP		0x09
99 struct btp_cap_broadcast_source_setup_cmd {
100 	uint8_t source_id;
101 	uint8_t broadcast_id[3];
102 	uint8_t sdu_interval[3];
103 	uint8_t framing;
104 	uint16_t max_sdu;
105 	uint8_t retransmission_num;
106 	uint16_t max_transport_latency;
107 	uint8_t presentation_delay[3];
108 	uint8_t flags;
109 	uint8_t broadcast_code[BT_ISO_BROADCAST_CODE_SIZE];
110 } __packed;
111 struct btp_cap_broadcast_source_setup_rp {
112 	uint8_t source_id;
113 	uint32_t gap_settings;
114 	uint8_t broadcast_id[BT_AUDIO_BROADCAST_ID_SIZE];
115 } __packed;
116 #define BTP_CAP_BROADCAST_SOURCE_SETUP_FLAG_ENCRYPTION		BIT(0)
117 #define BTP_CAP_BROADCAST_SOURCE_SETUP_FLAG_SUBGROUP_CODEC	BIT(1)
118 
119 #define BTP_CAP_BROADCAST_SOURCE_RELEASE	0x0a
120 struct btp_cap_broadcast_source_release_cmd {
121 	uint8_t source_id;
122 } __packed;
123 
124 #define BTP_CAP_BROADCAST_ADV_START		0x0b
125 struct btp_cap_broadcast_adv_start_cmd {
126 	uint8_t source_id;
127 } __packed;
128 
129 #define BTP_CAP_BROADCAST_ADV_STOP		0x0c
130 struct btp_cap_broadcast_adv_stop_cmd {
131 	uint8_t source_id;
132 } __packed;
133 
134 #define BTP_CAP_BROADCAST_SOURCE_START		0x0d
135 struct btp_cap_broadcast_source_start_cmd {
136 	uint8_t source_id;
137 } __packed;
138 
139 #define BTP_CAP_BROADCAST_SOURCE_STOP		0x0e
140 struct btp_cap_broadcast_source_stop_cmd {
141 	uint8_t source_id;
142 } __packed;
143 
144 #define BTP_CAP_BROADCAST_SOURCE_UPDATE		0x0f
145 struct btp_cap_broadcast_source_update_cmd {
146 	uint8_t source_id;
147 	uint8_t metadata_ltvs_len;
148 	uint8_t metadata_ltvs[0];
149 } __packed;
150 
151 /* CAP events */
152 #define BTP_CAP_EV_DISCOVERY_COMPLETED		0x80
153 struct btp_cap_discovery_completed_ev {
154 	bt_addr_le_t address;
155 	uint8_t status;
156 } __packed;
157 #define BTP_CAP_DISCOVERY_STATUS_SUCCESS	0x00
158 #define BTP_CAP_DISCOVERY_STATUS_FAILED		0x01
159 
160 #define BTP_CAP_EV_UNICAST_START_COMPLETED	0x81
161 struct btp_cap_unicast_start_completed_ev {
162 	uint8_t cig_id;
163 	uint8_t status;
164 } __packed;
165 #define BTP_CAP_UNICAST_START_STATUS_SUCCESS	0x00
166 #define BTP_CAP_UNICAST_START_STATUS_FAILED	0x01
167 
168 #define BTP_CAP_EV_UNICAST_STOP_COMPLETED	0x82
169 struct btp_cap_unicast_stop_completed_ev {
170 	uint8_t cig_id;
171 	uint8_t status;
172 } __packed;
173 #define BTP_CAP_UNICAST_STOP_STATUS_SUCCESS	0x00
174 #define BTP_CAP_UNICAST_STOP_STATUS_FAILED	0x01
175