xref: /btstack/src/btstack_ltv_builder.h (revision a36ca8dc904f7fa0f8c0925f1e6a3e1580c3e990)
1*a36ca8dcSMatthias Ringwald /*
2*a36ca8dcSMatthias Ringwald  * Copyright (C) 2024 BlueKitchen GmbH
3*a36ca8dcSMatthias Ringwald  *
4*a36ca8dcSMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
5*a36ca8dcSMatthias Ringwald  * modification, are permitted provided that the following conditions
6*a36ca8dcSMatthias Ringwald  * are met:
7*a36ca8dcSMatthias Ringwald  *
8*a36ca8dcSMatthias Ringwald  * 1. Redistributions of source code must retain the above copyright
9*a36ca8dcSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
10*a36ca8dcSMatthias Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
11*a36ca8dcSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
12*a36ca8dcSMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
13*a36ca8dcSMatthias Ringwald  * 3. Neither the name of the copyright holders nor the names of
14*a36ca8dcSMatthias Ringwald  *    contributors may be used to endorse or promote products derived
15*a36ca8dcSMatthias Ringwald  *    from this software without specific prior written permission.
16*a36ca8dcSMatthias Ringwald  * 4. Any redistribution, use, or modification is done solely for
17*a36ca8dcSMatthias Ringwald  *    personal benefit and not for any commercial purpose or for
18*a36ca8dcSMatthias Ringwald  *    monetary gain.
19*a36ca8dcSMatthias Ringwald  *
20*a36ca8dcSMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
21*a36ca8dcSMatthias Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*a36ca8dcSMatthias Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23*a36ca8dcSMatthias Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BLUEKITCHEN
24*a36ca8dcSMatthias Ringwald  * GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25*a36ca8dcSMatthias Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26*a36ca8dcSMatthias Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27*a36ca8dcSMatthias Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28*a36ca8dcSMatthias Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29*a36ca8dcSMatthias Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
30*a36ca8dcSMatthias Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31*a36ca8dcSMatthias Ringwald  * SUCH DAMAGE.
32*a36ca8dcSMatthias Ringwald  *
33*a36ca8dcSMatthias Ringwald  * Please inquire about commercial licensing options at
34*a36ca8dcSMatthias Ringwald  * [email protected]
35*a36ca8dcSMatthias Ringwald  *
36*a36ca8dcSMatthias Ringwald  */
37*a36ca8dcSMatthias Ringwald 
38*a36ca8dcSMatthias Ringwald /**
39*a36ca8dcSMatthias Ringwald  *  @brief TODO
40*a36ca8dcSMatthias Ringwald  */
41*a36ca8dcSMatthias Ringwald 
42*a36ca8dcSMatthias Ringwald #ifndef BTSTACK_LTV_BUILDER_H
43*a36ca8dcSMatthias Ringwald #define BTSTACK_LTV_BUILDER_H
44*a36ca8dcSMatthias Ringwald 
45*a36ca8dcSMatthias Ringwald #include <stdint.h>
46*a36ca8dcSMatthias Ringwald 
47*a36ca8dcSMatthias Ringwald #if defined __cplusplus
48*a36ca8dcSMatthias Ringwald extern "C" {
49*a36ca8dcSMatthias Ringwald #endif
50*a36ca8dcSMatthias Ringwald 
51*a36ca8dcSMatthias Ringwald 
52*a36ca8dcSMatthias Ringwald /* API_START */
53*a36ca8dcSMatthias Ringwald 
54*a36ca8dcSMatthias Ringwald typedef struct {
55*a36ca8dcSMatthias Ringwald     uint8_t * buffer;
56*a36ca8dcSMatthias Ringwald     uint16_t size;
57*a36ca8dcSMatthias Ringwald     uint16_t len_pos;
58*a36ca8dcSMatthias Ringwald     uint16_t write_pos;
59*a36ca8dcSMatthias Ringwald } btstack_ltv_builder_context_t;
60*a36ca8dcSMatthias Ringwald 
61*a36ca8dcSMatthias Ringwald /**
62*a36ca8dcSMatthias Ringwald  * @brief Initialize Length/Tag/Value builder with buffer and size for 8-bit tag and length fields
63*a36ca8dcSMatthias Ringwald  *
64*a36ca8dcSMatthias Ringwald  * @param context
65*a36ca8dcSMatthias Ringwald  * @param buffer
66*a36ca8dcSMatthias Ringwald  * @param size
67*a36ca8dcSMatthias Ringwald  */
68*a36ca8dcSMatthias Ringwald void btstack_ltv_builder_init(btstack_ltv_builder_context_t * context, uint8_t * buffer, uint16_t size);
69*a36ca8dcSMatthias Ringwald 
70*a36ca8dcSMatthias Ringwald /**
71*a36ca8dcSMatthias Ringwald  * @brief Query remaining space in buffer
72*a36ca8dcSMatthias Ringwald  *
73*a36ca8dcSMatthias Ringwald  * @param context
74*a36ca8dcSMatthias Ringwald  * @return number of bytes that can be added
75*a36ca8dcSMatthias Ringwald  */
76*a36ca8dcSMatthias Ringwald uint16_t btstack_ltv_builder_remaining_space(btstack_ltv_builder_context_t * context);
77*a36ca8dcSMatthias Ringwald 
78*a36ca8dcSMatthias Ringwald /**
79*a36ca8dcSMatthias Ringwald  * @brief Get constructed event length
80*a36ca8dcSMatthias Ringwald  * @param context
81*a36ca8dcSMatthias Ringwald  * @return number of bytes in event
82*a36ca8dcSMatthias Ringwald  */
83*a36ca8dcSMatthias Ringwald uint16_t btstack_ltv_builder_get_length(btstack_ltv_builder_context_t * context);
84*a36ca8dcSMatthias Ringwald 
85*a36ca8dcSMatthias Ringwald /**
86*a36ca8dcSMatthias Ringwald  * @brief Add tag
87*a36ca8dcSMatthias Ringwald  * @param context
88*a36ca8dcSMatthias Ringwald  * @return number of bytes in event
89*a36ca8dcSMatthias Ringwald  */
90*a36ca8dcSMatthias Ringwald void btstack_ltv_builder_add_tag(btstack_ltv_builder_context_t * context, uint8_t tag);
91*a36ca8dcSMatthias Ringwald 
92*a36ca8dcSMatthias Ringwald /**
93*a36ca8dcSMatthias Ringwald  * @bbrief Add uint8_t to current tag
94*a36ca8dcSMatthias Ringwald  * @param context
95*a36ca8dcSMatthias Ringwald  * @param value
96*a36ca8dcSMatthias Ringwald  */
97*a36ca8dcSMatthias Ringwald void btstack_ltv_builder_add_08(btstack_ltv_builder_context_t * context, uint8_t value);
98*a36ca8dcSMatthias Ringwald 
99*a36ca8dcSMatthias Ringwald /**
100*a36ca8dcSMatthias Ringwald  * @bbrief Add uint16_t value to current tag
101*a36ca8dcSMatthias Ringwald  * @param context
102*a36ca8dcSMatthias Ringwald  * @param value
103*a36ca8dcSMatthias Ringwald  */
104*a36ca8dcSMatthias Ringwald void btstack_ltv_builder_add_little_endian_16(btstack_ltv_builder_context_t * context, uint16_t value);
105*a36ca8dcSMatthias Ringwald 
106*a36ca8dcSMatthias Ringwald /**
107*a36ca8dcSMatthias Ringwald  * @bbrief Add 24 bit from uint32_t byte to current tag
108*a36ca8dcSMatthias Ringwald  * @param context
109*a36ca8dcSMatthias Ringwald  * @param value
110*a36ca8dcSMatthias Ringwald  */
111*a36ca8dcSMatthias Ringwald void btstack_ltv_builder_add_little_endian_24(btstack_ltv_builder_context_t * context, uint32_t value);
112*a36ca8dcSMatthias Ringwald 
113*a36ca8dcSMatthias Ringwald /**
114*a36ca8dcSMatthias Ringwald  * @bbrief Add uint32_t to current tag
115*a36ca8dcSMatthias Ringwald  * @param context
116*a36ca8dcSMatthias Ringwald  * @param value
117*a36ca8dcSMatthias Ringwald  */
118*a36ca8dcSMatthias Ringwald void btstack_ltv_builder_add_little_endian_32(btstack_ltv_builder_context_t * context, uint32_t value);
119*a36ca8dcSMatthias Ringwald 
120*a36ca8dcSMatthias Ringwald /**
121*a36ca8dcSMatthias Ringwald  * @bbrief Add byte sequence to current tag
122*a36ca8dcSMatthias Ringwald  * @param context
123*a36ca8dcSMatthias Ringwald  * @param value
124*a36ca8dcSMatthias Ringwald  */
125*a36ca8dcSMatthias Ringwald void btstack_ltv_builder_add_bytes(btstack_ltv_builder_context_t * context, const uint8_t * data, uint16_t length);
126*a36ca8dcSMatthias Ringwald 
127*a36ca8dcSMatthias Ringwald /**
128*a36ca8dcSMatthias Ringwald  * @bbrief Add string to current tag
129*a36ca8dcSMatthias Ringwald  * @param context
130*a36ca8dcSMatthias Ringwald  * @param value
131*a36ca8dcSMatthias Ringwald  */
132*a36ca8dcSMatthias Ringwald void btstack_ltv_builder_add_string(btstack_ltv_builder_context_t * context, const char * text);
133*a36ca8dcSMatthias Ringwald 
134*a36ca8dcSMatthias Ringwald #if defined __cplusplus
135*a36ca8dcSMatthias Ringwald }
136*a36ca8dcSMatthias Ringwald #endif
137*a36ca8dcSMatthias Ringwald #endif // BTSTACK_LTV_BUILDER_H
138