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