1*5c0702eaSMatthias Ringwald /* 2*5c0702eaSMatthias Ringwald * Copyright (C) 2022 BlueKitchen GmbH 3*5c0702eaSMatthias Ringwald * 4*5c0702eaSMatthias Ringwald * Redistribution and use in source and binary forms, with or without 5*5c0702eaSMatthias Ringwald * modification, are permitted provided that the following conditions 6*5c0702eaSMatthias Ringwald * are met: 7*5c0702eaSMatthias Ringwald * 8*5c0702eaSMatthias Ringwald * 1. Redistributions of source code must retain the above copyright 9*5c0702eaSMatthias Ringwald * notice, this list of conditions and the following disclaimer. 10*5c0702eaSMatthias Ringwald * 2. Redistributions in binary form must reproduce the above copyright 11*5c0702eaSMatthias Ringwald * notice, this list of conditions and the following disclaimer in the 12*5c0702eaSMatthias Ringwald * documentation and/or other materials provided with the distribution. 13*5c0702eaSMatthias Ringwald * 3. Neither the name of the copyright holders nor the names of 14*5c0702eaSMatthias Ringwald * contributors may be used to endorse or promote products derived 15*5c0702eaSMatthias Ringwald * from this software without specific prior written permission. 16*5c0702eaSMatthias Ringwald * 17*5c0702eaSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 18*5c0702eaSMatthias Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19*5c0702eaSMatthias Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 20*5c0702eaSMatthias Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BLUEKITCHEN 21*5c0702eaSMatthias Ringwald * GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 22*5c0702eaSMatthias Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 23*5c0702eaSMatthias Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 24*5c0702eaSMatthias Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 25*5c0702eaSMatthias Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26*5c0702eaSMatthias Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 27*5c0702eaSMatthias Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28*5c0702eaSMatthias Ringwald * SUCH DAMAGE. 29*5c0702eaSMatthias Ringwald * 30*5c0702eaSMatthias Ringwald */ 31*5c0702eaSMatthias Ringwald 32*5c0702eaSMatthias Ringwald /** 33*5c0702eaSMatthias Ringwald * @title Broadcast Audio Source Endpoint AD Builder 34*5c0702eaSMatthias Ringwald */ 35*5c0702eaSMatthias Ringwald 36*5c0702eaSMatthias Ringwald #ifndef BASE_BUILDER_H 37*5c0702eaSMatthias Ringwald #define BASE_BUILDER_H 38*5c0702eaSMatthias Ringwald 39*5c0702eaSMatthias Ringwald #include <stdint.h> 40*5c0702eaSMatthias Ringwald #include "btstack_lc3.h" 41*5c0702eaSMatthias Ringwald 42*5c0702eaSMatthias Ringwald #if defined __cplusplus 43*5c0702eaSMatthias Ringwald extern "C" { 44*5c0702eaSMatthias Ringwald #endif 45*5c0702eaSMatthias Ringwald 46*5c0702eaSMatthias Ringwald typedef struct { 47*5c0702eaSMatthias Ringwald uint8_t * buffer; 48*5c0702eaSMatthias Ringwald uint16_t size; 49*5c0702eaSMatthias Ringwald uint16_t len; 50*5c0702eaSMatthias Ringwald uint16_t subgroup_offset; 51*5c0702eaSMatthias Ringwald uint16_t bis_offset; 52*5c0702eaSMatthias Ringwald } base_builder_t; 53*5c0702eaSMatthias Ringwald 54*5c0702eaSMatthias Ringwald /** 55*5c0702eaSMatthias Ringwald * Initialize BASE 56*5c0702eaSMatthias Ringwald * @param builder 57*5c0702eaSMatthias Ringwald * @param buffer to setup BASE 58*5c0702eaSMatthias Ringwald * @param size of buffer 59*5c0702eaSMatthias Ringwald * @param presentation_delay_us 60*5c0702eaSMatthias Ringwald */ 61*5c0702eaSMatthias Ringwald void le_audio_base_builder_init(base_builder_t * builder, uint8_t * buffer, uint16_t size, uint32_t presentation_delay_us); 62*5c0702eaSMatthias Ringwald 63*5c0702eaSMatthias Ringwald /** 64*5c0702eaSMatthias Ringwald * Add subgroup to current BASE 65*5c0702eaSMatthias Ringwald * @param builder 66*5c0702eaSMatthias Ringwald * @param codec_id of 5 bytes 67*5c0702eaSMatthias Ringwald * @param codec_specific_configuration_length 68*5c0702eaSMatthias Ringwald * @param codec_specific_configuration 69*5c0702eaSMatthias Ringwald * @param metadata_length 70*5c0702eaSMatthias Ringwald * @param metadata 71*5c0702eaSMatthias Ringwald */ 72*5c0702eaSMatthias Ringwald void le_audio_base_builder_add_subgroup(base_builder_t * builder, 73*5c0702eaSMatthias Ringwald const uint8_t * codec_id, 74*5c0702eaSMatthias Ringwald uint8_t codec_specific_configuration_length, const uint8_t * codec_specific_configuration, 75*5c0702eaSMatthias Ringwald uint8_t metadata_length, const uint8_t * metadata); 76*5c0702eaSMatthias Ringwald 77*5c0702eaSMatthias Ringwald /** 78*5c0702eaSMatthias Ringwald * Add BIS to current BASE 79*5c0702eaSMatthias Ringwald * @param builder 80*5c0702eaSMatthias Ringwald * @param bis_index 81*5c0702eaSMatthias Ringwald * @param codec_specific_configuration_length 82*5c0702eaSMatthias Ringwald * @param codec_specific_configuration 83*5c0702eaSMatthias Ringwald */ 84*5c0702eaSMatthias Ringwald void le_audio_base_builder_add_bis(base_builder_t * builder, 85*5c0702eaSMatthias Ringwald uint8_t bis_index, 86*5c0702eaSMatthias Ringwald uint8_t codec_specific_configuration_length, 87*5c0702eaSMatthias Ringwald const uint8_t * codec_specific_configuration); 88*5c0702eaSMatthias Ringwald 89*5c0702eaSMatthias Ringwald /** 90*5c0702eaSMatthias Ringwald * Get Size of BASE for Periodic Advertising 91*5c0702eaSMatthias Ringwald * @param builder 92*5c0702eaSMatthias Ringwald * @return 93*5c0702eaSMatthias Ringwald */ 94*5c0702eaSMatthias Ringwald uint16_t le_audio_base_builder_get_ad_data_size(const base_builder_t * builder); 95*5c0702eaSMatthias Ringwald 96*5c0702eaSMatthias Ringwald #if defined __cplusplus 97*5c0702eaSMatthias Ringwald } 98*5c0702eaSMatthias Ringwald #endif 99*5c0702eaSMatthias Ringwald 100*5c0702eaSMatthias Ringwald #endif // BASE_BUILDER_H 101