15#ifndef INFUSE_SDK_INCLUDE_INFUSE_TDF_TDF_H_
16#define INFUSE_SDK_INCLUDE_INFUSE_TDF_TDF_H_
20#include <zephyr/net_buf.h>
36 struct net_buf_simple
buf;
110#define TDF_TYPE(tdf_id) _##tdf_id##_TYPE
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); \
135 __maybe_unused const TDF_TYPE(tdf_id) *_data = data; \
145 net_buf_simple_reset(&state->
buf);
168 uint64_t time, uint32_t idx_period,
const void *data,
enum tdf_data_format format);
187 uint8_t tdf_num, uint64_t time, uint32_t period,
const void *data)
192 return tdf_add_core(state, tdf_id, tdf_len, tdf_num, time, period, data, format);
204 net_buf_simple_init_with_data(&state->
buf, data, size);
241 if (parsed->
tdf_id == tdf_id) {
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
struct net_buf_simple buf
Buffer information.
Definition tdf.h:36
uint64_t time
Current buffer time.
Definition tdf.h:34
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