xref: /btstack/src/le-audio/le_audio_base_builder.h (revision 0f7e8cae038aa9786ac66a32580f63137ad93b7f)
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