Safe API Framework
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Loading...
Searching...
No Matches
sapi_voter.h
Go to the documentation of this file.
1
15
16#ifndef SAPI_VOTER_H
17#define SAPI_VOTER_H
18
19#include <stdint.h>
20#include <stdbool.h>
21#include <stddef.h>
22
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
41
55
73typedef bool (*sapi_voter_compare_fn)(const void *a, const void *b, size_t size, void *user_ctx);
74
109
111#define SAPI_VOTER_MAX_CHANNELS 8U
112
114#define SAPI_VOTER_MAX_MESSAGE_SIZE 256U
115
119typedef struct {
120 sapi_voter_config_t config;
122 uint32_t channel_count;
123 uint32_t total_disagreements;
124 bool initialized;
126
129
146
166
185sapi_status_t sapi_voter_send(sapi_voter_t *voter, const void *data, size_t data_size);
186
225sapi_status_t sapi_voter_receive(sapi_voter_t *voter, void *data, size_t data_size,
226 sapi_voting_result_t *result, size_t *bytes_received);
227
241 uint32_t *healthy_count,
242 uint32_t *total_disagreements);
243
254uint32_t sapi_voter_get_channel_count(const sapi_voter_t *voter);
255
264sapi_channel_t *sapi_voter_get_channel(const sapi_voter_t *voter, uint32_t index);
265
282sapi_channel_t *sapi_voter_get_channel_by_name(const sapi_voter_t *voter, const char *name);
283
295
296#ifdef __cplusplus
297}
298#endif
299
301
302#endif /* SAPI_VOTER_H */
sapi_status_t
Common result/status codes.
Definition sapi_status.h:27
sapi_status_t sapi_voter_destroy(sapi_voter_t *voter)
Destroys a voter instance.
Definition sapi_voter.c:465
sapi_voter_storage_t sapi_voter_t
Opaque handle to a voter instance.
Definition sapi_voter.h:128
sapi_voting_result_t
Outcome of one sapi_voter_receive() call.
Definition sapi_voter.h:45
uint32_t sapi_voter_get_channel_count(const sapi_voter_t *voter)
Number of channels currently registered with this voter.
Definition sapi_voter.c:431
sapi_status_t sapi_voter_register_channel(sapi_voter_t *voter, sapi_channel_t *channel)
Registers one already-initialized channel with this voter.
Definition sapi_voter.c:136
sapi_channel_t * sapi_voter_get_channel(const sapi_voter_t *voter, uint32_t index)
Direct access to one registered channel, by index.
Definition sapi_voter.c:436
sapi_channel_t * sapi_voter_get_channel_by_name(const sapi_voter_t *voter, const char *name)
Direct access to one registered channel, by name (e.g. "ChannelAtoB") - the name each channel was giv...
Definition sapi_voter.c:445
sapi_status_t sapi_voter_send(sapi_voter_t *voter, const void *data, size_t data_size)
Broadcasts data to every registered, healthy channel.
Definition sapi_voter.c:165
sapi_status_t sapi_voter_init(sapi_voter_storage_t *storage, const sapi_voter_config_t *config)
Initializes a voter with zero registered channels.
Definition sapi_voter.c:97
bool(*) sapi_voter_compare_fn(const void *a, const void *b, size_t size, void *user_ctx)
Optional custom comparison callback.
Definition sapi_voter.h:73
sapi_status_t sapi_voter_receive(sapi_voter_t *voter, void *data, size_t data_size, sapi_voting_result_t *result, size_t *bytes_received)
Receives from every registered, healthy channel and votes.
Definition sapi_voter.c:227
#define SAPI_VOTER_MAX_CHANNELS
Maximum number of channels a single voter can register.
Definition sapi_voter.h:111
sapi_status_t sapi_voter_get_aggregated_health(const sapi_voter_t *voter, uint32_t *healthy_count, uint32_t *total_disagreements)
Aggregated health across every registered channel.
Definition sapi_voter.c:412
sapi_voting_strategy_t
Voting strategy: how many registered channels must agree.
Definition sapi_voter.h:33
@ SAPI_VOTING_DISAGREED
Definition sapi_voter.h:49
@ SAPI_VOTING_INSUFFICIENT_QUORUM
Definition sapi_voter.h:53
@ SAPI_VOTING_TIMEOUT
Definition sapi_voter.h:51
@ SAPI_VOTING_AGREED
Definition sapi_voter.h:47
@ SAPI_VOTING_2OO3
Definition sapi_voter.h:37
@ SAPI_VOTING_NMR
Definition sapi_voter.h:39
@ SAPI_VOTING_2OO2
Definition sapi_voter.h:35
A single redundant "channel": an opaque transport handle plus send/receive callbacks,...
Common status/error codes returned by every Safe API Framework function. Shared across all OS Abstrac...
Configuration for sapi_voter_init().
Definition sapi_voter.h:78
sapi_voter_compare_fn compare
Definition sapi_voter.h:87
bool trigger_safestate_on_disagreement
Definition sapi_voter.h:98
sapi_voting_strategy_t voting_strategy
Definition sapi_voter.h:80
void(*) on_disagreement(void *context, sapi_voting_result_t result)
Definition sapi_voter.h:105
uint32_t channel_timeout_ms
Definition sapi_voter.h:85
void * disagreement_context
Definition sapi_voter.h:107
Storage for one voter instance (opaque to caller). No dynamic memory.
Definition sapi_voter.h:119