15c0702eaSMatthias Ringwald /* 25c0702eaSMatthias Ringwald * Copyright (C) 2022 BlueKitchen GmbH 35c0702eaSMatthias Ringwald * 45c0702eaSMatthias Ringwald * Redistribution and use in source and binary forms, with or without 55c0702eaSMatthias Ringwald * modification, are permitted provided that the following conditions 65c0702eaSMatthias Ringwald * are met: 75c0702eaSMatthias Ringwald * 85c0702eaSMatthias Ringwald * 1. Redistributions of source code must retain the above copyright 95c0702eaSMatthias Ringwald * notice, this list of conditions and the following disclaimer. 105c0702eaSMatthias Ringwald * 2. Redistributions in binary form must reproduce the above copyright 115c0702eaSMatthias Ringwald * notice, this list of conditions and the following disclaimer in the 125c0702eaSMatthias Ringwald * documentation and/or other materials provided with the distribution. 135c0702eaSMatthias Ringwald * 3. Neither the name of the copyright holders nor the names of 145c0702eaSMatthias Ringwald * contributors may be used to endorse or promote products derived 155c0702eaSMatthias Ringwald * from this software without specific prior written permission. 165c0702eaSMatthias Ringwald * 175c0702eaSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 185c0702eaSMatthias Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 195c0702eaSMatthias Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 205c0702eaSMatthias Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BLUEKITCHEN 215c0702eaSMatthias Ringwald * GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 225c0702eaSMatthias Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 235c0702eaSMatthias Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 245c0702eaSMatthias Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 255c0702eaSMatthias Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 265c0702eaSMatthias Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 275c0702eaSMatthias Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 285c0702eaSMatthias Ringwald * SUCH DAMAGE. 295c0702eaSMatthias Ringwald * 305c0702eaSMatthias Ringwald */ 315c0702eaSMatthias Ringwald 325c0702eaSMatthias Ringwald /** 335c0702eaSMatthias Ringwald * @title Broadcast Audio Source Endpoint AD Builder 345c0702eaSMatthias Ringwald */ 355c0702eaSMatthias Ringwald 36*0f7e8caeSMatthias Ringwald #ifndef LE_AUDIO_BASE_BUILDER_H 37*0f7e8caeSMatthias Ringwald #define LE_AUDIO_BASE_BUILDER_H 385c0702eaSMatthias Ringwald 395c0702eaSMatthias Ringwald #include <stdint.h> 405c0702eaSMatthias Ringwald 415c0702eaSMatthias Ringwald #if defined __cplusplus 425c0702eaSMatthias Ringwald extern "C" { 435c0702eaSMatthias Ringwald #endif 445c0702eaSMatthias Ringwald 455c0702eaSMatthias Ringwald typedef struct { 465c0702eaSMatthias Ringwald uint8_t * buffer; 475c0702eaSMatthias Ringwald uint16_t size; 485c0702eaSMatthias Ringwald uint16_t len; 495c0702eaSMatthias Ringwald uint16_t subgroup_offset; 505c0702eaSMatthias Ringwald uint16_t bis_offset; 51*0f7e8caeSMatthias Ringwald } le_audio_base_builder_t; 525c0702eaSMatthias Ringwald 535c0702eaSMatthias Ringwald /** 545c0702eaSMatthias Ringwald * Initialize BASE 555c0702eaSMatthias Ringwald * @param builder 565c0702eaSMatthias Ringwald * @param buffer to setup BASE 575c0702eaSMatthias Ringwald * @param size of buffer 585c0702eaSMatthias Ringwald * @param presentation_delay_us 595c0702eaSMatthias Ringwald */ 60*0f7e8caeSMatthias Ringwald void le_audio_base_builder_init(le_audio_base_builder_t * builder, uint8_t * buffer, uint16_t size, uint32_t presentation_delay_us); 615c0702eaSMatthias Ringwald 625c0702eaSMatthias Ringwald /** 635c0702eaSMatthias Ringwald * Add subgroup to current BASE 645c0702eaSMatthias Ringwald * @param builder 655c0702eaSMatthias Ringwald * @param codec_id of 5 bytes 665c0702eaSMatthias Ringwald * @param codec_specific_configuration_length 675c0702eaSMatthias Ringwald * @param codec_specific_configuration 685c0702eaSMatthias Ringwald * @param metadata_length 695c0702eaSMatthias Ringwald * @param metadata 705c0702eaSMatthias Ringwald */ 71*0f7e8caeSMatthias Ringwald void le_audio_base_builder_add_subgroup(le_audio_base_builder_t * builder, 725c0702eaSMatthias Ringwald const uint8_t * codec_id, 735c0702eaSMatthias Ringwald uint8_t codec_specific_configuration_length, const uint8_t * codec_specific_configuration, 745c0702eaSMatthias Ringwald uint8_t metadata_length, const uint8_t * metadata); 755c0702eaSMatthias Ringwald 765c0702eaSMatthias Ringwald /** 775c0702eaSMatthias Ringwald * Add BIS to current BASE 785c0702eaSMatthias Ringwald * @param builder 795c0702eaSMatthias Ringwald * @param bis_index 805c0702eaSMatthias Ringwald * @param codec_specific_configuration_length 815c0702eaSMatthias Ringwald * @param codec_specific_configuration 825c0702eaSMatthias Ringwald */ 83*0f7e8caeSMatthias Ringwald void le_audio_base_builder_add_bis(le_audio_base_builder_t * builder, 845c0702eaSMatthias Ringwald uint8_t bis_index, 855c0702eaSMatthias Ringwald uint8_t codec_specific_configuration_length, 865c0702eaSMatthias Ringwald const uint8_t * codec_specific_configuration); 875c0702eaSMatthias Ringwald 885c0702eaSMatthias Ringwald /** 895c0702eaSMatthias Ringwald * Get Size of BASE for Periodic Advertising 905c0702eaSMatthias Ringwald * @param builder 915c0702eaSMatthias Ringwald * @return 925c0702eaSMatthias Ringwald */ 93*0f7e8caeSMatthias Ringwald uint16_t le_audio_base_builder_get_ad_data_size(const le_audio_base_builder_t * builder); 945c0702eaSMatthias Ringwald 955c0702eaSMatthias Ringwald #if defined __cplusplus 965c0702eaSMatthias Ringwald } 975c0702eaSMatthias Ringwald #endif 985c0702eaSMatthias Ringwald 99*0f7e8caeSMatthias Ringwald #endif // LE_AUDIO_BASE_BUILDER_H 100