|
Safe API Framework 0.1.0 build 384e6ae
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
|
Data Structures | |
| struct | rte_state_field_t |
| struct | rte_state_transfer_registry_t |
Macros | |
| #define | RTE_STATE_TRANSFER_MAX_FIELDS 8U |
Typedefs | |
| typedef 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.g. a field whose live in-memory struct has compiler-inserted padding this module's default raw memcpy would transfer verbatim (uninitialized bytes), or whose wire form is genuinely smaller than its live struct (index/count fields the wire form omits). Must write EXACTLY the field's registered size bytes to out - the same fixed-size contract rte_state_transfer_encode()'s own offset bookkeeping already assumes for a plain (non-callback) field. | |
| typedef 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 into *data. | |
Functions | |
| rte_status_t | rte_state_transfer_registry_init (rte_state_transfer_registry_t *registry) |
| Initializes an empty registry. | |
| 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. | |
| 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 memcpy - see rte_state_field_t's own doc for when this is needed (e.g. a field whose live struct has padding, or a wire form narrower than its live representation). | |
| 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() need. | |
| 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, back-to-back with no padding. | |
| 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. | |
| #define RTE_STATE_TRANSFER_MAX_FIELDS 8U |
Largest number of fields one registry can hold.
Definition at line 45 of file rte_state_transfer.h.
| typedef 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.g. a field whose live in-memory struct has compiler-inserted padding this module's default raw memcpy would transfer verbatim (uninitialized bytes), or whose wire form is genuinely smaller than its live struct (index/count fields the wire form omits). Must write EXACTLY the field's registered size bytes to out - the same fixed-size contract rte_state_transfer_encode()'s own offset bookkeeping already assumes for a plain (non-callback) field.
| [in] | data | The field's own live data pointer, as registered. |
| [out] | out | Destination for exactly size encoded bytes. |
| [in] | size | The field's own registered size (the exact byte count to write - NOT necessarily sizeof(*data)). |
Definition at line 64 of file rte_state_transfer.h.
| typedef 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 into *data.
Definition at line 72 of file rte_state_transfer.h.
| rte_status_t rte_state_transfer_registry_init | ( | rte_state_transfer_registry_t * | registry | ) |
Initializes an empty registry.
| [out] | registry | Must not be NULL. |
Definition at line 8 of file rte_state_transfer.c.
| 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.
| [in,out] | registry | Must not be NULL. |
| [in] | name | May be NULL (diagnostic only). |
| [in] | data | Must not be NULL. |
| [in] | size | Must be > 0. |
Definition at line 18 of file rte_state_transfer.c.
| 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 memcpy - see rte_state_field_t's own doc for when this is needed (e.g. a field whose live struct has padding, or a wire form narrower than its live representation).
| [in,out] | registry | Must not be NULL. |
| [in] | name | May be NULL (diagnostic only). |
| [in] | data | Must not be NULL. |
| [in] | size | The field's exact encoded byte count. Must be > 0. |
| [in] | encode_fn | Must not be NULL. |
| [in] | decode_fn | Must not be NULL. |
Definition at line 24 of file rte_state_transfer.c.
| 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() need.
| [in] | registry | Must not be NULL. |
Definition at line 56 of file rte_state_transfer.c.
| 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, back-to-back with no padding.
| [in] | registry | Must not be NULL. |
| [out] | out | Destination buffer. Must not be NULL. |
| [in] | out_size | Usable size of out; must be >= rte_state_transfer_encoded_size(registry). |
| [out] | out_len | Receives the number of bytes actually written (== rte_state_transfer_encoded_size(registry) on success). May be NULL. |
Definition at line 72 of file rte_state_transfer.c.
| 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.
| [in] | registry | Must not be NULL. |
| [in] | in | Source buffer. Must not be NULL. |
| [in] | in_len | Usable size of in; must be >= rte_state_transfer_encoded_size(registry). |
Definition at line 110 of file rte_state_transfer.c.