xref: /btstack/src/le-audio/broadcast_audio_uri_builder.h (revision c1b6583a190ace9247a1f81941d6be4382eb4f1e)
1 /*
2  * Copyright (C) 2024 BlueKitchen GmbH
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the copyright holders nor the names of
14  *    contributors may be used to endorse or promote products derived
15  *    from this software without specific prior written permission.
16  * 4. Any redistribution, use, or modification is done solely for
17  *    personal benefit and not for any commercial purpose or for
18  *    monetary gain.
19  *
20  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BLUEKITCHEN
24  * GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
30  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  *
33  * Please inquire about commercial licensing options at
34  * [email protected]
35  *
36  */
37 
38 /**
39  *  @brief TODO
40  */
41 
42 #ifndef BROADCAST_AUDIO_URI_BUILDER_H
43 #define BROADCAST_AUDIO_URI_BUILDER_H
44 
45 #include <stdint.h>
46 #include "btstack_bool.h"
47 #include "bluetooth.h"
48 
49 #if defined __cplusplus
50 extern "C" {
51 #endif
52 
53 typedef struct {
54     uint8_t * buffer;
55     uint16_t  size;
56     uint16_t len;
57 } broadcast_audio_uri_builder_t;
58 
59 /**
60  * Initialize Broadcast Audio URI builder
61  * @param builder
62  * @param buffer to setup BASE
63  * @param size of buffer
64  */
65 void broadcast_audio_uri_builder_init(broadcast_audio_uri_builder_t * builder, uint8_t * buffer, uint16_t size);
66 
67 /**
68  * @brief Query remaining space in buffer
69  * @param builder
70  * @return size
71  */
72 uint16_t broadcast_audio_uri_builder_get_remaining_space(const broadcast_audio_uri_builder_t * builder);
73 
74 /**
75  * Get Size of Broadcast Audio URI
76  * @param builder
77  * @return size
78  */
79 uint16_t broadcast_audio_uri_builder_get_size(const broadcast_audio_uri_builder_t * builder);
80 
81 /**
82  * Append bytes
83  * @param builder
84  * @param data
85  * @param len
86  * @return true if there was sufficient space in the underlying buffer
87  */
88 bool broadcast_audio_uri_builder_append_bytes(broadcast_audio_uri_builder_t * builder, const uint8_t * data, uint16_t len);
89 
90 /**
91  * Append String
92  * @param builder
93  * @param text as utf-8
94  * @return true if there was sufficient space in the underlying buffer
95  */
96 bool broadcast_audio_uri_builder_append_string(broadcast_audio_uri_builder_t * builder, const char * text);
97 
98 /**
99  * Append Broadcast Name (BN) base64 encoded
100  * @param builder
101  * @param broadcast_name
102  * @return
103  */
104 bool broadcast_audio_uri_builder_append_broadcast_name(broadcast_audio_uri_builder_t * builder, const char * broadcast_name);
105 
106 /**
107  * Append Advertiser Address Type
108  * @param builder
109  * @param advertiser_address_type
110  * @return
111  */
112 bool broadcast_audio_uri_builder_append_advertiser_address_type(broadcast_audio_uri_builder_t * builder, bd_addr_type_t advertiser_address_type);
113 
114 /**
115  * Append Advertiser Address
116  * @param builder
117  * @param advertiser_address_type
118  * @return
119  */
120 bool broadcast_audio_uri_builder_append_advertiser_address(broadcast_audio_uri_builder_t * builder, bd_addr_t advertiser_address);
121 
122 /**
123  * Append Broadcast ID
124  * @param builder
125  * @param Broadcast ID (24 bit)
126  * @return
127  */
128 bool broadcast_audio_uri_builder_append_broadcast_id(broadcast_audio_uri_builder_t * builder, uint32_t broadcast_id);
129 
130 /**
131  * Append Broadcast ID
132  * @param builder
133  * @param Broadcast Code (128 bit)
134  * @return
135  */
136 bool broadcast_audio_uri_builder_append_broadcast_code(broadcast_audio_uri_builder_t * builder, const uint8_t * broadcast_code);
137 
138 /**
139  * Append Standard Quality
140  * @param builder
141  * @param advertiser_address_type
142  * @return
143  */
144 bool broadcast_audio_uri_builder_append_standard_quality(broadcast_audio_uri_builder_t * builder, bool standard_quality);
145 
146 /**
147  * Append High Quality
148  * @param builder
149  * @param advertiser_address_type
150  * @return
151  */
152 bool broadcast_audio_uri_builder_append_high_quality(broadcast_audio_uri_builder_t * builder, bool high_quality);
153 
154 /**
155  * Append Vendor Specific data
156  * @param builder
157  * @param vendor_id
158  * @param data
159  * @param data_len
160  * @return
161  */
162 bool broadcast_audio_uri_builder_append_vendor_specific(broadcast_audio_uri_builder_t * builder, uint16_t vendor_id, const uint8_t * data, uint16_t data_len);
163 
164 /**
165  * Append Advertising SID
166  * @param builder
167  * @param advertising_sid
168  * @return
169  */
170 bool broadcast_audio_uri_builder_append_advertising_sid(broadcast_audio_uri_builder_t * builder, uint8_t advertising_sid);
171 
172 /**
173  * Append PA Interval
174  * @param builder
175  * @param pa_interval
176  * @return
177  */
178 bool broadcast_audio_uri_builder_append_pa_interval(broadcast_audio_uri_builder_t * builder, uint16_t pa_interval);
179 
180 /**
181  * Append Num Subgroups
182  * @param builder
183  * @param num_subgroups
184  * @return
185  */
186 bool broadcast_audio_uri_builder_append_num_subgroups(broadcast_audio_uri_builder_t * builder, uint8_t num_subgroups);
187 
188 /**
189  * Append BIS_Sync
190  * @param builder
191  * @param Broadcast ID (24 bit)
192  * @return
193  */
194 bool broadcast_audio_uri_builder_append_bis_sync(broadcast_audio_uri_builder_t * builder, uint32_t bis_sync);
195 
196 /**
197  * Append SG Number of BISes
198  * @param builder
199  * @param sg_number_of_bises
200  * @return
201  */
202 bool broadcast_audio_uri_builder_append_sg_number_of_bises(broadcast_audio_uri_builder_t * builder, uint32_t sg_number_of_bises);
203 
204 /**
205  * Append SG_Metadata
206  * @param builder
207  * @param metadata
208  * @param metadata_len
209  * @return
210  */
211 bool broadcast_audio_uri_builder_append_sg_metadata(broadcast_audio_uri_builder_t * builder, const uint8_t * metadata, uint16_t metadata_len);
212 
213 /**
214  * Append Public Broadcast Announcement Metadata
215  * @param builder
216  * @param metadata
217  * @param metadata_len
218  * @return
219  */
220 bool broadcast_audio_uri_builder_append_public_broadcast_announcement_metadata(broadcast_audio_uri_builder_t * builder, const uint8_t * metadata, uint16_t metadata_len);
221 
222 #if defined __cplusplus
223 }
224 #endif
225 #endif // BROADCAST_AUDIO_URI_BUILDER_H
226