Tagged Data Format API .
More...
|
#define | TDF_TYPE(tdf_id) |
| Get type associated with a given TDF ID.
|
|
#define | TDF_ADD(state, tdf_id, tdf_num, base_time, period, data) |
| Type safe wrapper around tdf_add.
|
|
|
enum | tdf_data_format {
TDF_DATA_FORMAT_SINGLE
, TDF_DATA_FORMAT_TIME_ARRAY
, TDF_DATA_FORMAT_IDX_ARRAY
, TDF_DATA_FORMAT_DIFF_ARRAY_16_8
,
TDF_DATA_FORMAT_DIFF_ARRAY_32_8
, TDF_DATA_FORMAT_DIFF_ARRAY_32_16
, TDF_DATA_FORMAT_INVALID
, TDF_DATA_FORMAT_DIFF_PRECOMPUTED = 0x80
} |
|
enum | tdf_flags {
TDF_TIMESTAMP_NONE = 0x0000
, TDF_TIMESTAMP_ABSOLUTE = 0x4000
, TDF_TIMESTAMP_RELATIVE = 0x8000
, TDF_TIMESTAMP_EXTENDED_RELATIVE = 0xC000
,
TDF_ARRAY_NONE = 0x0000
, TDF_ARRAY_TIME = 0x1000
, TDF_ARRAY_DIFF = 0x2000
, TDF_ARRAY_IDX = 0x3000
,
TDF_FLAGS_MASK = 0xF000
, TDF_TIMESTAMP_MASK = 0xC000
, TDF_ARRAY_MASK = 0x3000
, TDF_ID_MASK = 0x0FFF
} |
|
|
static void | tdf_buffer_state_reset (struct tdf_buffer_state *state) |
| Reset a tdf_buffer_state struct.
|
|
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.
|
|
static void | tdf_parse_start (struct tdf_buffer_state *state, void *data, size_t size) |
| Initialise TDF parsing state.
|
|
int | tdf_parse (struct tdf_buffer_state *state, struct tdf_parsed *parsed) |
| Parse the next TDF from a memory buffer.
|
|
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.
|
|
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.
|
|
Tagged Data Format API .
◆ TDF_ADD
#define TDF_ADD |
( |
| state, |
|
|
| tdf_id, |
|
|
| tdf_num, |
|
|
| base_time, |
|
|
| period, |
|
|
| data ) |
#include <infuse/tdf/tdf.h>
Value: tdf_add(state, tdf_id,
sizeof(
TDF_TYPE(tdf_id)), tdf_num, base_time, period, data); \
do { \
__maybe_unused
const TDF_TYPE(tdf_id) *_data = data; \
} while (0)
#define TDF_TYPE(tdf_id)
Get type associated with a given TDF ID.
Definition tdf.h:110
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
Type safe wrapper around tdf_add.
Adds compile-time validation that the passed pointer matches the type associated with tdf_id.
- Note
- Only works for TDF types without trailing variable length arrays
- Parameters
-
state | Pointer to current buffer state |
tdf_id | TDF sensor ID |
tdf_num | Number of TDFs to try to add |
base_time | Epoch time associated with the first TDF. 0 for no timestamp. |
period | Epoch time between tdfs when tdf_num > 0. |
data | TDF data |
- Return values
-
>0 | Number of TDFs successfully added to buffer |
-EINVAL | Invalid arguments |
-ENOSPC | TDF too large to ever fit on buffer |
-ENOMEM | Insufficient space to add any TDFs to buffer |
◆ TDF_TYPE
#define TDF_TYPE |
( |
| tdf_id | ) |
|
#include <infuse/tdf/tdf.h>
Value:
Get type associated with a given TDF ID.
- Parameters
-
- Return values
-
Associated | tdf struct type |
◆ tdf_data_format
#include <infuse/tdf/tdf.h>
Enumerator |
---|
TDF_DATA_FORMAT_SINGLE | Single sample.
|
TDF_DATA_FORMAT_TIME_ARRAY | Time array with period.
|
TDF_DATA_FORMAT_IDX_ARRAY | Array based on sample indicies.
|
TDF_DATA_FORMAT_DIFF_ARRAY_16_8 | 16 bit data, 8 bit diffs
|
TDF_DATA_FORMAT_DIFF_ARRAY_32_8 | 32 bit data, 8 bit diffs
|
TDF_DATA_FORMAT_DIFF_ARRAY_32_16 | 32 bit data, 16 bit diffs
|
TDF_DATA_FORMAT_INVALID | Start of invalid range.
|
TDF_DATA_FORMAT_DIFF_PRECOMPUTED | Data is already in [base, diff...] form.
|
◆ tdf_flags
#include <infuse/tdf/tdf.h>
Enumerator |
---|
TDF_TIMESTAMP_NONE | Timestamp flags.
|
TDF_TIMESTAMP_ABSOLUTE | |
TDF_TIMESTAMP_RELATIVE | |
TDF_TIMESTAMP_EXTENDED_RELATIVE | |
TDF_ARRAY_NONE | Special flags.
|
TDF_ARRAY_TIME | |
TDF_ARRAY_DIFF | |
TDF_ARRAY_IDX | |
TDF_FLAGS_MASK | Masks.
|
TDF_TIMESTAMP_MASK | |
TDF_ARRAY_MASK | |
TDF_ID_MASK | |
◆ tdf_add()
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 ) |
|
inlinestatic |
#include <infuse/tdf/tdf.h>
Add TDFs to memory buffer.
- Parameters
-
state | Pointer to current buffer state |
tdf_id | TDF sensor ID |
tdf_len | Length of a single TDF |
tdf_num | Number of TDFs to try to add |
time | Epoch time associated with the first TDF. 0 for no timestamp. |
period | Epoch time between tdfs when tdf_num > 0. |
data | TDF data |
- Return values
-
>0 | Number of TDFs successfully added to buffer |
-EINVAL | Invalid arguments |
-ENOSPC | TDF too large to ever fit on buffer |
-ENOMEM | Insufficient space to add any TDFs to buffer |
◆ tdf_add_core()
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 ) |
#include <infuse/tdf/tdf.h>
Add TDFs to memory buffer with an explicit format.
- Parameters
-
state | Pointer to current buffer state |
tdf_id | TDF sensor ID |
tdf_len | Length of a single TDF |
tdf_num | Number of TDFs to try to add |
time | Epoch time associated with the first TDF. 0 for no timestamp. |
idx_period | Index of first sample if format == TDF_DATA_FORMAT_IDX_ARRAY Epoch time between tdfs when tdf_num > 0 otherwise. |
data | TDF data |
format | Data encoding format |
- Return values
-
>0 | Number of TDFs successfully added to buffer |
-EINVAL | Invalid arguments |
-ENOSPC | TDF too large to ever fit on buffer |
-ENOMEM | Insufficient space to add any TDFs to buffer |
◆ tdf_buffer_state_reset()
◆ tdf_parse()
#include <infuse/tdf/tdf.h>
Parse the next TDF from a memory buffer.
- Parameters
-
state | TDF parsing state |
parsed | Pointer to output TDF information |
- Return values
-
0 | on successful parse |
-EINVAL | on invalid TDF |
-ENOMEM | on no more TDFs |
◆ tdf_parse_diff_reconstruct()
int tdf_parse_diff_reconstruct |
( |
const struct tdf_parsed * | parsed, |
|
|
void * | output, |
|
|
uint8_t | idx ) |
#include <infuse/tdf/tdf.h>
Reconstruct the original TDF from a parsed TDF_ARRAY_DIFF.
- Parameters
-
parsed | Parsed TDF from tdf_parse |
output | Output location to construct TDF into |
idx | Index of the TDF to reconstruct (0 == base, 1 == apply diff[0], etc) |
- Return values
-
0 | On success |
-EINVAL | On invalid argument |
◆ tdf_parse_find_in_buf()
static int tdf_parse_find_in_buf |
( |
void * | data, |
|
|
size_t | size, |
|
|
uint16_t | tdf_id, |
|
|
struct tdf_parsed * | parsed ) |
|
inlinestatic |
#include <infuse/tdf/tdf.h>
Find the first instance of a specific TDF in a memory buffer.
- Parameters
-
data | Pointer to TDF memory buffer |
size | Size of TDF memory buffer |
tdf_id | TDF ID to search for |
parsed | Storage for TDF info |
- Return values
-
0 | On success |
-ENOMEM | If buffer consumed without finding the TDF |
◆ tdf_parse_start()
static void tdf_parse_start |
( |
struct tdf_buffer_state * | state, |
|
|
void * | data, |
|
|
size_t | size ) |
|
inlinestatic |
#include <infuse/tdf/tdf.h>
Initialise TDF parsing state.
- Parameters
-
state | State to initialise |
data | Pointer to TDF memory buffer |
size | Size of TDF memory buffer |