Infuse-IoT SDK API 0.0.1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
tdf.h
Go to the documentation of this file.
1
15#ifndef INFUSE_SDK_INCLUDE_INFUSE_TDF_TDF_H_
16#define INFUSE_SDK_INCLUDE_INFUSE_TDF_TDF_H_
17
18#include <stdint.h>
19
20#include <zephyr/net_buf.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
34 uint64_t time;
36 struct net_buf_simple buf;
37};
38
57
58struct tdf_parsed {
60 uint64_t time;
62 uint16_t tdf_id;
64 uint8_t tdf_len;
67 union {
69 uint8_t tdf_num;
70 struct {
72 uint8_t num;
74 };
75 union {
77 uint32_t period;
79 uint16_t base_idx;
80 };
82 void *data;
83};
84
102
110#define TDF_TYPE(tdf_id) _##tdf_id##_TYPE
111
132#define TDF_ADD(state, tdf_id, tdf_num, base_time, period, data) \
133 tdf_add(state, tdf_id, sizeof(TDF_TYPE(tdf_id)), tdf_num, base_time, period, data); \
134 do { \
135 __maybe_unused const TDF_TYPE(tdf_id) *_data = data; \
136 } while (0)
137
143static inline void tdf_buffer_state_reset(struct tdf_buffer_state *state)
144{
145 net_buf_simple_reset(&state->buf);
146 state->time = 0;
147}
148
167int tdf_add_core(struct tdf_buffer_state *state, uint16_t tdf_id, uint8_t tdf_len, uint8_t tdf_num,
168 uint64_t time, uint32_t idx_period, const void *data, enum tdf_data_format format);
169
186static inline int tdf_add(struct tdf_buffer_state *state, uint16_t tdf_id, uint8_t tdf_len,
187 uint8_t tdf_num, uint64_t time, uint32_t period, const void *data)
188{
189 enum tdf_data_format format =
191
192 return tdf_add_core(state, tdf_id, tdf_len, tdf_num, time, period, data, format);
193}
194
202static inline void tdf_parse_start(struct tdf_buffer_state *state, void *data, size_t size)
203{
204 net_buf_simple_init_with_data(&state->buf, data, size);
205 state->time = 0;
206}
207
218int tdf_parse(struct tdf_buffer_state *state, struct tdf_parsed *parsed);
219
231static inline int tdf_parse_find_in_buf(void *data, size_t size, uint16_t tdf_id,
232 struct tdf_parsed *parsed)
233{
234 struct tdf_buffer_state state;
235
236 tdf_parse_start(&state, data, size);
237 while (true) {
238 if (tdf_parse(&state, parsed) < 0) {
239 return -ENOMEM;
240 }
241 if (parsed->tdf_id == tdf_id) {
242 return 0;
243 }
244 }
245 return -ENOMEM;
246}
247
258int tdf_parse_diff_reconstruct(const struct tdf_parsed *parsed, void *output, uint8_t idx);
259
264#ifdef __cplusplus
265}
266#endif
267
268#endif /* INFUSE_SDK_INCLUDE_INFUSE_TDF_TDF_H_ */
int tdf_parse_diff_reconstruct(const struct tdf_parsed *parsed, void *output, uint8_t idx)
Reconstruct the original TDF from a parsed TDF_ARRAY_DIFF.
static void tdf_parse_start(struct tdf_buffer_state *state, void *data, size_t size)
Initialise TDF parsing state.
Definition tdf.h:202
static void tdf_buffer_state_reset(struct tdf_buffer_state *state)
Reset a tdf_buffer_state struct.
Definition tdf.h:143
int tdf_add_core(struct tdf_buffer_state *state, uint16_t tdf_id, uint8_t tdf_len, uint8_t tdf_num, uint64_t time, uint32_t idx_period, const void *data, enum tdf_data_format format)
Add TDFs to memory buffer with an explicit format.
static int tdf_parse_find_in_buf(void *data, size_t size, uint16_t tdf_id, struct tdf_parsed *parsed)
Find the first instance of a specific TDF in a memory buffer.
Definition tdf.h:231
static int tdf_add(struct tdf_buffer_state *state, uint16_t tdf_id, uint8_t tdf_len, uint8_t tdf_num, uint64_t time, uint32_t period, const void *data)
Add TDFs to memory buffer.
Definition tdf.h:186
int tdf_parse(struct tdf_buffer_state *state, struct tdf_parsed *parsed)
Parse the next TDF from a memory buffer.
tdf_data_format
Definition tdf.h:39
tdf_flags
Definition tdf.h:85
@ TDF_DATA_FORMAT_INVALID
Start of invalid range.
Definition tdf.h:53
@ TDF_DATA_FORMAT_IDX_ARRAY
Array based on sample indicies.
Definition tdf.h:45
@ TDF_DATA_FORMAT_DIFF_ARRAY_32_16
32 bit data, 16 bit diffs
Definition tdf.h:51
@ TDF_DATA_FORMAT_DIFF_PRECOMPUTED
Data is already in [base, diff...] form.
Definition tdf.h:55
@ TDF_DATA_FORMAT_DIFF_ARRAY_16_8
16 bit data, 8 bit diffs
Definition tdf.h:47
@ TDF_DATA_FORMAT_DIFF_ARRAY_32_8
32 bit data, 8 bit diffs
Definition tdf.h:49
@ TDF_DATA_FORMAT_TIME_ARRAY
Time array with period.
Definition tdf.h:43
@ TDF_DATA_FORMAT_SINGLE
Single sample.
Definition tdf.h:41
@ TDF_TIMESTAMP_ABSOLUTE
Definition tdf.h:88
@ TDF_ID_MASK
Definition tdf.h:100
@ TDF_TIMESTAMP_MASK
Definition tdf.h:98
@ TDF_TIMESTAMP_EXTENDED_RELATIVE
Definition tdf.h:90
@ TDF_ARRAY_NONE
Special flags.
Definition tdf.h:92
@ TDF_ARRAY_MASK
Definition tdf.h:99
@ TDF_ARRAY_IDX
Definition tdf.h:95
@ TDF_TIMESTAMP_NONE
Timestamp flags.
Definition tdf.h:87
@ TDF_ARRAY_DIFF
Definition tdf.h:94
@ TDF_ARRAY_TIME
Definition tdf.h:93
@ TDF_FLAGS_MASK
Masks.
Definition tdf.h:97
@ TDF_TIMESTAMP_RELATIVE
Definition tdf.h:89
Definition tdf.h:32
struct net_buf_simple buf
Buffer information.
Definition tdf.h:36
uint64_t time
Current buffer time.
Definition tdf.h:34
Definition tdf.h:58
uint16_t base_idx
Index of first sample for TDF_DATA_FORMAT_IDX_ARRAY.
Definition tdf.h:79
uint32_t period
Time period between TDFs.
Definition tdf.h:77
uint8_t tdf_len
Length of single TDF.
Definition tdf.h:64
uint8_t tdf_num
Number of TDFs.
Definition tdf.h:69
uint16_t tdf_id
TDF ID.
Definition tdf.h:62
void * data
TDF data.
Definition tdf.h:82
uint64_t time
TDF time (0 for none)
Definition tdf.h:60
uint8_t num
Number of diffs.
Definition tdf.h:72
struct tdf_parsed::@64::@68 diff_info
enum tdf_data_format data_type
Data format.
Definition tdf.h:66