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