Safe API Framework 0.1.0 build 384e6ae
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Loading...
Searching...
No Matches
rte_voter.h
Go to the documentation of this file.
1
23
24#ifndef RTE_VOTER_H
25#define RTE_VOTER_H
26
27#include <stdint.h>
28#include <stdbool.h>
29#include <stddef.h>
30
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
50
64
82typedef bool (*rte_voter_compare_fn)(const void *a, const void *b, size_t size, void *user_ctx);
83
130
132#define RTE_VOTER_MAX_CHANNELS 8U
133
135#define RTE_VOTER_MAX_MESSAGE_SIZE 256U
136
140typedef struct {
141 rte_voter_config_t config;
143 uint32_t channel_count;
144 uint32_t total_disagreements;
145 bool initialized;
147
150
167
187
206rte_status_t rte_voter_send(rte_voter_t *voter, const void *data, size_t data_size);
207
247rte_status_t rte_voter_receive(rte_voter_t *voter, void *data, size_t data_size,
248 rte_voting_result_t *result, size_t *bytes_received);
249
288rte_status_t rte_voter_vote_buffers(rte_voter_t *voter, const void *const *buffers, uint32_t buffer_count,
289 size_t data_size, rte_voting_result_t *result, void *out_data,
290 size_t *out_size);
291
305 uint32_t *healthy_count,
306 uint32_t *total_disagreements);
307
318uint32_t rte_voter_get_channel_count(const rte_voter_t *voter);
319
328rte_channel_t *rte_voter_get_channel(const rte_voter_t *voter, uint32_t index);
329
351rte_channel_t *rte_voter_get_channel_by_name(const rte_voter_t *voter, const char *name);
352
364
365#ifdef __cplusplus
366}
367#endif
368
370
371#endif /* RTE_VOTER_H */
rte_safestate_level_t
Safe-state severity levels (ADR-004 section 2.1).
uint16_t rte_safestate_reason_t
Diagnostic reason code accompanying a safe-state transition.
rte_status_t
Common result/status codes.
Definition rte_status.h:27
rte_voter_storage_t rte_voter_t
Opaque handle to a voter instance.
Definition rte_voter.h:149
rte_status_t rte_voter_get_aggregated_health(const rte_voter_t *voter, uint32_t *healthy_count, uint32_t *total_disagreements)
Aggregated health across every registered channel.
Definition rte_voter.c:603
#define RTE_VOTER_MAX_CHANNELS
Maximum number of channels a single voter can register.
Definition rte_voter.h:132
rte_status_t rte_voter_register_channel(rte_voter_t *voter, rte_channel_t *channel)
Registers one already-initialized channel with this voter.
Definition rte_voter.c:240
rte_channel_t * rte_voter_get_channel(const rte_voter_t *voter, uint32_t index)
Direct access to one registered channel, by index.
Definition rte_voter.c:627
rte_voting_strategy_t
Voting strategy: how many registered channels must agree.
Definition rte_voter.h:42
rte_status_t rte_voter_destroy(rte_voter_t *voter)
Destroys a voter instance.
Definition rte_voter.c:656
rte_status_t rte_voter_vote_buffers(rte_voter_t *voter, const void *const *buffers, uint32_t buffer_count, size_t data_size, rte_voting_result_t *result, void *out_data, size_t *out_size)
N-way vote on caller-collected buffers, without any registered-channel I/O (ADR-039's N-way cross-com...
Definition rte_voter.c:480
rte_voting_result_t
Outcome of one rte_voter_receive() call.
Definition rte_voter.h:54
rte_status_t rte_voter_send(rte_voter_t *voter, const void *data, size_t data_size)
Broadcasts data to every registered, healthy channel.
Definition rte_voter.c:269
uint32_t rte_voter_get_channel_count(const rte_voter_t *voter)
Number of channels currently registered with this voter.
Definition rte_voter.c:622
rte_channel_t * rte_voter_get_channel_by_name(const rte_voter_t *voter, const char *name)
Direct access to one registered channel, by name (e.g. "ChannelAtoB") - the name each channel was giv...
Definition rte_voter.c:636
bool(*) rte_voter_compare_fn(const void *a, const void *b, size_t size, void *user_ctx)
Optional custom comparison callback.
Definition rte_voter.h:82
rte_status_t rte_voter_init(rte_voter_storage_t *storage, const rte_voter_config_t *config)
Initializes a voter with zero registered channels.
Definition rte_voter.c:201
rte_status_t rte_voter_receive(rte_voter_t *voter, void *data, size_t data_size, rte_voting_result_t *result, size_t *bytes_received)
Receives from every registered, healthy channel and votes.
Definition rte_voter.c:331
@ RTE_VOTING_NMR
Definition rte_voter.h:48
@ RTE_VOTING_2OO3
Definition rte_voter.h:46
@ RTE_VOTING_2OO2
Definition rte_voter.h:44
@ RTE_VOTING_AGREED
Definition rte_voter.h:56
@ RTE_VOTING_INSUFFICIENT_QUORUM
Definition rte_voter.h:62
@ RTE_VOTING_DISAGREED
Definition rte_voter.h:58
@ RTE_VOTING_TIMEOUT
Definition rte_voter.h:60
A single redundant "channel": an opaque transport handle plus send/receive callbacks,...
Safe-state transitions and checked assertions (ADR-004).
Common status/error codes returned by every Safe API Framework function. Shared across all OS Abstrac...
Configuration for rte_voter_init().
Definition rte_voter.h:87
rte_safestate_level_t safestate_level
Definition rte_voter.h:113
rte_voter_compare_fn compare
Definition rte_voter.h:96
void * disagreement_context
Definition rte_voter.h:128
uint32_t quorum_size
Definition rte_voter.h:92
uint32_t channel_timeout_ms
Definition rte_voter.h:94
rte_safestate_reason_t safestate_reason
Definition rte_voter.h:115
void * compare_context
Definition rte_voter.h:98
void(*) on_disagreement(void *context, rte_voting_result_t result)
Definition rte_voter.h:126
rte_voting_strategy_t voting_strategy
Definition rte_voter.h:89
Storage for one voter instance (opaque to caller). No dynamic memory.
Definition rte_voter.h:140