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
14
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
32
36 uint64_t time;
38 struct net_buf_simple buf;
39};
40
60
62struct tdf_parsed {
64 uint64_t time;
66 uint16_t tdf_id;
68 uint8_t tdf_len;
71 union {
73 uint8_t tdf_num;
74 struct {
76 uint8_t num;
78 };
79 union {
81 uint32_t period;
83 uint16_t base_idx;
84 };
86 void *data;
87};
88
116
124#define TDF_TYPE(tdf_id) _##tdf_id##_TYPE
125
146#define TDF_ADD(state, tdf_id, tdf_num, base_time, period, data) \
147 tdf_add(state, tdf_id, sizeof(TDF_TYPE(tdf_id)), tdf_num, base_time, period, data); \
148 do { \
149 __maybe_unused const TDF_TYPE(tdf_id) *_data = data; \
150 } while (0)
151
157static inline void tdf_buffer_state_reset(struct tdf_buffer_state *state)
158{
159 net_buf_simple_reset(&state->buf);
160 state->time = 0;
161}
162
181int tdf_add_core(struct tdf_buffer_state *state, uint16_t tdf_id, uint8_t tdf_len, uint8_t tdf_num,
182 uint64_t time, uint32_t idx_period, const void *data, enum tdf_data_format format);
183
200static inline int tdf_add(struct tdf_buffer_state *state, uint16_t tdf_id, uint8_t tdf_len,
201 uint8_t tdf_num, uint64_t time, uint32_t period, const void *data)
202{
203 enum tdf_data_format format =
205
206 return tdf_add_core(state, tdf_id, tdf_len, tdf_num, time, period, data, format);
207}
208
216static inline void tdf_parse_start(struct tdf_buffer_state *state, const void *data, size_t size)
217{
218 /* While net_buf_simple as a generic object can modify the provided data pointer,
219 * the tdf_parse functions only use read-only functions (net_buf_simple_pull_*).
220 */
221 net_buf_simple_init_with_data(&state->buf, (void *)data, size);
222 state->time = 0;
223}
224
235int tdf_parse(struct tdf_buffer_state *state, struct tdf_parsed *parsed);
236
248static inline int tdf_parse_find_in_buf(const void *data, size_t size, uint16_t tdf_id,
249 struct tdf_parsed *parsed)
250{
251 struct tdf_buffer_state state;
252
253 tdf_parse_start(&state, data, size);
254 while (tdf_parse(&state, parsed) == 0) {
255 if (parsed->tdf_id == tdf_id) {
256 return 0;
257 }
258 }
259 return -ENOMEM;
260}
261
272int tdf_parse_diff_reconstruct(const struct tdf_parsed *parsed, void *output, uint8_t idx);
273
277
278#ifdef __cplusplus
279}
280#endif
281
282#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_buffer_state_reset(struct tdf_buffer_state *state)
Reset a tdf_buffer_state struct.
Definition tdf.h:157
static void tdf_parse_start(struct tdf_buffer_state *state, const void *data, size_t size)
Initialise TDF parsing state.
Definition tdf.h:216
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_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:200
static int tdf_parse_find_in_buf(const 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:248
int tdf_parse(struct tdf_buffer_state *state, struct tdf_parsed *parsed)
Parse the next TDF from a memory buffer.
tdf_data_format
Format of the data in a TDF.
Definition tdf.h:42
tdf_flags
Flags in the TDF header ID field.
Definition tdf.h:90
@ TDF_DATA_FORMAT_INVALID
Start of invalid range.
Definition tdf.h:56
@ TDF_DATA_FORMAT_IDX_ARRAY
Array based on sample indices.
Definition tdf.h:48
@ TDF_DATA_FORMAT_DIFF_ARRAY_32_16
32 bit data, 16 bit diffs
Definition tdf.h:54
@ TDF_DATA_FORMAT_DIFF_PRECOMPUTED
Data is already in [base, diff...] form.
Definition tdf.h:58
@ TDF_DATA_FORMAT_DIFF_ARRAY_16_8
16 bit data, 8 bit diffs
Definition tdf.h:50
@ TDF_DATA_FORMAT_DIFF_ARRAY_32_8
32 bit data, 8 bit diffs
Definition tdf.h:52
@ TDF_DATA_FORMAT_TIME_ARRAY
Time array with period.
Definition tdf.h:46
@ TDF_DATA_FORMAT_SINGLE
Single sample.
Definition tdf.h:44
@ TDF_TIMESTAMP_ABSOLUTE
Absolute timestamp.
Definition tdf.h:94
@ TDF_ID_MASK
Mask of TDF ID bits.
Definition tdf.h:114
@ TDF_TIMESTAMP_MASK
Mask of timestamp flag bits.
Definition tdf.h:110
@ TDF_TIMESTAMP_EXTENDED_RELATIVE
24 bit signed timestamp offset from the previous TDF
Definition tdf.h:98
@ TDF_ARRAY_NONE
Not an array.
Definition tdf.h:100
@ TDF_ARRAY_MASK
Mask of array flag bits.
Definition tdf.h:112
@ TDF_ARRAY_IDX
Array based on sample indices.
Definition tdf.h:106
@ TDF_TIMESTAMP_NONE
No timestamp.
Definition tdf.h:92
@ TDF_ARRAY_DIFF
Array of diffs from a base value.
Definition tdf.h:104
@ TDF_ARRAY_TIME
Time array with period.
Definition tdf.h:102
@ TDF_FLAGS_MASK
Mask of all flag bits.
Definition tdf.h:108
@ TDF_TIMESTAMP_RELATIVE
16 bit timestamp offset from the previous TDF
Definition tdf.h:96
State of a TDF buffer being written or parsed.
Definition tdf.h:34
struct net_buf_simple buf
Buffer information.
Definition tdf.h:38
uint64_t time
Current buffer time.
Definition tdf.h:36
Parsed TDF information.
Definition tdf.h:62
uint16_t base_idx
Index of first sample for TDF_DATA_FORMAT_IDX_ARRAY.
Definition tdf.h:83
uint32_t period
Time period between TDFs.
Definition tdf.h:81
uint8_t tdf_len
Length of single TDF.
Definition tdf.h:68
struct tdf_parsed::@174203020250377216043314372074130255201272235077::@316122104116273337103362246063271340134267304051 diff_info
uint8_t tdf_num
Number of TDFs.
Definition tdf.h:73
uint16_t tdf_id
TDF ID.
Definition tdf.h:66
void * data
TDF data.
Definition tdf.h:86
uint64_t time
TDF time (0 for none)
Definition tdf.h:64
uint8_t num
Number of diffs.
Definition tdf.h:76
enum tdf_data_format data_type
Data format.
Definition tdf.h:70