Safe API Framework
0.1.0 build 384e6ae
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Toggle main menu visibility
Loading...
Searching...
No Matches
rte_state_transfer.h
Go to the documentation of this file.
1
33
#ifndef RTE_STATE_TRANSFER_H
34
#define RTE_STATE_TRANSFER_H
35
36
#include <stdint.h>
37
#include <stddef.h>
38
#include "
rte/utils/status/rte_status.h
"
39
40
#ifdef __cplusplus
41
extern
"C"
{
42
#endif
43
45
#define RTE_STATE_TRANSFER_MAX_FIELDS 8U
46
64
typedef
rte_status_t
(*
rte_state_field_encode_fn
)(
const
void
*data, uint8_t *out,
size_t
size);
65
72
typedef
rte_status_t
(*
rte_state_field_decode_fn
)(
void
*data,
const
uint8_t *in,
size_t
size);
73
75
typedef
struct
{
79
const
char
*
name
;
84
void
*
data
;
91
size_t
size
;
93
rte_state_field_encode_fn
encode_fn
;
97
rte_state_field_decode_fn
decode_fn
;
98
}
rte_state_field_t
;
99
101
typedef
struct
{
102
rte_state_field_t
fields[
RTE_STATE_TRANSFER_MAX_FIELDS
];
103
uint32_t field_count;
104
}
rte_state_transfer_registry_t
;
105
111
rte_status_t
rte_state_transfer_registry_init
(
rte_state_transfer_registry_t
*registry);
112
124
rte_status_t
rte_state_transfer_register_field
(
rte_state_transfer_registry_t
*registry,
125
const
char
*name,
void
*data,
size_t
size);
126
143
rte_status_t
rte_state_transfer_register_field_ex
(
rte_state_transfer_registry_t
*registry,
144
const
char
*name,
void
*data,
size_t
size,
145
rte_state_field_encode_fn
encode_fn,
146
rte_state_field_decode_fn
decode_fn);
147
154
size_t
rte_state_transfer_encoded_size
(
const
rte_state_transfer_registry_t
*registry);
155
169
rte_status_t
rte_state_transfer_encode
(
const
rte_state_transfer_registry_t
*registry,
170
uint8_t *out,
size_t
out_size,
size_t
*out_len);
171
185
rte_status_t
rte_state_transfer_decode
(
const
rte_state_transfer_registry_t
*registry,
186
const
uint8_t *in,
size_t
in_len);
187
188
#ifdef __cplusplus
189
}
190
#endif
191
192
#endif
/* RTE_STATE_TRANSFER_H */
rte_status_t
rte_status_t
Common result/status codes.
Definition
rte_status.h:27
rte_state_transfer_register_field
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.
Definition
rte_state_transfer.c:18
RTE_STATE_TRANSFER_MAX_FIELDS
#define RTE_STATE_TRANSFER_MAX_FIELDS
Definition
rte_state_transfer.h:45
rte_state_field_encode_fn
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...
Definition
rte_state_transfer.h:64
rte_state_transfer_decode
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.
Definition
rte_state_transfer.c:110
rte_state_field_decode_fn
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...
Definition
rte_state_transfer.h:72
rte_state_transfer_encode
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,...
Definition
rte_state_transfer.c:72
rte_state_transfer_encoded_size
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()...
Definition
rte_state_transfer.c:56
rte_state_transfer_register_field_ex
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...
Definition
rte_state_transfer.c:24
rte_state_transfer_registry_init
rte_status_t rte_state_transfer_registry_init(rte_state_transfer_registry_t *registry)
Initializes an empty registry.
Definition
rte_state_transfer.c:8
rte_status.h
Common status/error codes returned by every Safe API Framework function. Shared across all OS Abstrac...
rte_state_field_t
Definition
rte_state_transfer.h:75
rte_state_field_t::name
const char * name
Definition
rte_state_transfer.h:79
rte_state_field_t::size
size_t size
Definition
rte_state_transfer.h:91
rte_state_field_t::encode_fn
rte_state_field_encode_fn encode_fn
Definition
rte_state_transfer.h:93
rte_state_field_t::decode_fn
rte_state_field_decode_fn decode_fn
Definition
rte_state_transfer.h:97
rte_state_field_t::data
void * data
Definition
rte_state_transfer.h:84
rte_state_transfer_registry_t
Definition
rte_state_transfer.h:101
include
rte
redundancy
state_transfer
rte_state_transfer.h
Generated by
1.18.0