19 const char *name,
void *data,
size_t size)
25 const char *name,
void *data,
size_t size,
31 if ((registry == NULL) || (data == NULL) || (size == 0U))
38 if ((encode_fn == NULL) != (decode_fn == NULL))
46 slot = ®istry->fields[registry->field_count];
52 registry->field_count++;
65 for (i = 0U; i < registry->field_count; i++)
67 total += registry->fields[i].
size;
73 uint8_t *out,
size_t out_size,
size_t *out_len)
78 if ((registry == NULL) || (out == NULL))
86 for (i = 0U; i < registry->field_count; i++)
101 offset += field->
size;
111 const uint8_t *in,
size_t in_len)
116 if ((registry == NULL) || (in == NULL))
124 for (i = 0U; i < registry->field_count; i++)
139 offset += field->
size;
rte_status_t
Common result/status codes.
@ RTE_STATUS_INVALID_PARAM
@ RTE_STATUS_RESOURCE_EXHAUSTED
rte_status_t rte_state_transfer_register_field(rte_state_transfer_registry_t *registry, const char *name, void *data, size_t size)
Registers one field. Order matters - encode()/decode() pack/unpack in registration order.
#define RTE_STATE_TRANSFER_MAX_FIELDS
rte_status_t(*) rte_state_field_encode_fn(const void *data, uint8_t *out, size_t size)
Optional custom wire encoder for one field, registered via rte_state_transfer_register_field_ex() - e...
rte_status_t rte_state_transfer_decode(const rte_state_transfer_registry_t *registry, const uint8_t *in, size_t in_len)
Inverse of encode(): overwrites every registered field's live value from in, in registration order.
rte_status_t(*) rte_state_field_decode_fn(void *data, const uint8_t *in, size_t size)
Inverse of rte_state_field_encode_fn - must consume EXACTLY size bytes from in and write the result i...
rte_status_t rte_state_transfer_encode(const rte_state_transfer_registry_t *registry, uint8_t *out, size_t out_size, size_t *out_len)
Packs every registered field's current live value into out, in registration order,...
size_t rte_state_transfer_encoded_size(const rte_state_transfer_registry_t *registry)
Total encoded size (sum of every registered field's size) - the minimum buffer size encode()/decode()...
rte_status_t rte_state_transfer_register_field_ex(rte_state_transfer_registry_t *registry, const char *name, void *data, size_t size, rte_state_field_encode_fn encode_fn, rte_state_field_decode_fn decode_fn)
Registers one field with a custom wire encoder/decoder pair instead of this module's default raw memc...
rte_status_t rte_state_transfer_registry_init(rte_state_transfer_registry_t *registry)
Initializes an empty registry.
Thin, MISRA-visible wrappers over the three raw memory-block primitives (fill/copy/compare) every oth...
static void rte_mem_copy(void *dest, const void *src, size_t count)
Copies count bytes from src to dest - the one sanctioned call site for libc memcpy() in this framewor...
static void rte_mem_set(void *dest, int value, size_t count)
Fills count bytes starting at dest with value - the one sanctioned call site for libc memset() in thi...
Declarative registry of application state that must survive a STANDBY -> ONLINE promotion (RCA/OCORA ...
rte_state_field_encode_fn encode_fn
rte_state_field_decode_fn decode_fn