Safe API Framework
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Toggle main menu visibility
Loading...
Searching...
No Matches
sapi_cross_comparator.h
Go to the documentation of this file.
1
16
17
#ifndef SAPI_CROSS_COMPARATOR_H
18
#define SAPI_CROSS_COMPARATOR_H
19
20
#include <stdint.h>
21
#include <stdbool.h>
22
#include <stddef.h>
23
24
#include "
safeapi/utils/status/sapi_status.h
"
25
#include "
safeapi/redundancy/channel_link/sapi_channel.h
"
26
#include "
safeapi/redundancy/voter/sapi_voter.h
"
27
28
#ifdef __cplusplus
29
extern
"C"
{
30
#endif
31
35
typedef
struct
{
37
uint32_t
channel_timeout_ms
;
40
sapi_voter_compare_fn
compare
;
42
void
*
compare_context
;
44
bool
log_disagreements
;
49
bool
trigger_safestate_on_disagreement
;
53
void (*
on_disagreement
)(
void
*context,
sapi_voting_result_t
result);
55
void
*
disagreement_context
;
56
}
sapi_cross_comparator_config_t
;
57
59
#define SAPI_CROSS_COMPARATOR_MAX_MESSAGE_SIZE 256U
60
65
typedef
struct
{
66
sapi_cross_comparator_config_t
config;
67
sapi_channel_t
*channel_a;
68
sapi_channel_t
*channel_b;
69
uint32_t registered_count;
70
uint32_t total_disagreements;
71
bool
initialized;
72
}
sapi_cross_comparator_storage_t
;
73
75
typedef
sapi_cross_comparator_storage_t
sapi_cross_comparator_t
;
76
88
sapi_status_t
sapi_cross_comparator_init
(
sapi_cross_comparator_storage_t
*storage,
89
const
sapi_cross_comparator_config_t
*config);
90
109
sapi_status_t
sapi_cross_comparator_register_channel
(
sapi_cross_comparator_t
*cmp,
110
sapi_channel_t
*channel);
111
144
sapi_status_t
sapi_cross_comparator_execute
(
sapi_cross_comparator_t
*cmp,
size_t
data_size,
145
sapi_voting_result_t
*result,
146
void
*out_data,
size_t
*out_size);
147
160
sapi_status_t
sapi_cross_comparator_get_aggregated_health
(
const
sapi_cross_comparator_t
*cmp,
161
uint32_t *healthy_count,
162
uint32_t *total_disagreements);
163
171
sapi_status_t
sapi_cross_comparator_destroy
(
sapi_cross_comparator_t
*cmp);
172
173
#ifdef __cplusplus
174
}
175
#endif
176
178
179
#endif
/* SAPI_CROSS_COMPARATOR_H */
sapi_status_t
sapi_status_t
Common result/status codes.
Definition
sapi_status.h:27
sapi_channel_t
sapi_channel_storage_t sapi_channel_t
Opaque handle to a vital channel instance.
Definition
sapi_channel.h:127
sapi_cross_comparator_get_aggregated_health
sapi_status_t sapi_cross_comparator_get_aggregated_health(const sapi_cross_comparator_t *cmp, uint32_t *healthy_count, uint32_t *total_disagreements)
Aggregated health across both registered channels.
Definition
sapi_cross_comparator.c:199
sapi_cross_comparator_init
sapi_status_t sapi_cross_comparator_init(sapi_cross_comparator_storage_t *storage, const sapi_cross_comparator_config_t *config)
Initializes a cross-comparator with zero registered channels.
Definition
sapi_cross_comparator.c:30
sapi_cross_comparator_t
sapi_cross_comparator_storage_t sapi_cross_comparator_t
Opaque handle to a cross-comparator instance.
Definition
sapi_cross_comparator.h:75
sapi_cross_comparator_destroy
sapi_status_t sapi_cross_comparator_destroy(sapi_cross_comparator_t *cmp)
Destroys a cross-comparator instance.
Definition
sapi_cross_comparator.c:240
sapi_cross_comparator_register_channel
sapi_status_t sapi_cross_comparator_register_channel(sapi_cross_comparator_t *cmp, sapi_channel_t *channel)
Registers one already-initialized channel (channel A, then B).
Definition
sapi_cross_comparator.c:57
sapi_cross_comparator_execute
sapi_status_t sapi_cross_comparator_execute(sapi_cross_comparator_t *cmp, size_t data_size, sapi_voting_result_t *result, void *out_data, size_t *out_size)
Receives from both registered channels and compares them.
Definition
sapi_cross_comparator.c:96
sapi_voting_result_t
sapi_voting_result_t
Outcome of one sapi_voter_receive() call.
Definition
sapi_voter.h:45
sapi_voter_compare_fn
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_channel.h
A single redundant "channel": an opaque transport handle plus send/receive callbacks,...
sapi_status.h
Common status/error codes returned by every Safe API Framework function. Shared across all OS Abstrac...
sapi_voter.h
N-way voting across registered sapi_channel_t links (2oo2/2oo3/NMR).
sapi_cross_comparator_config_t
Configuration for sapi_cross_comparator_init().
Definition
sapi_cross_comparator.h:35
sapi_cross_comparator_config_t::compare
sapi_voter_compare_fn compare
Definition
sapi_cross_comparator.h:40
sapi_cross_comparator_config_t::log_disagreements
bool log_disagreements
Definition
sapi_cross_comparator.h:44
sapi_cross_comparator_config_t::disagreement_context
void * disagreement_context
Definition
sapi_cross_comparator.h:55
sapi_cross_comparator_config_t::on_disagreement
void(*) on_disagreement(void *context, sapi_voting_result_t result)
Definition
sapi_cross_comparator.h:53
sapi_cross_comparator_config_t::compare_context
void * compare_context
Definition
sapi_cross_comparator.h:42
sapi_cross_comparator_config_t::channel_timeout_ms
uint32_t channel_timeout_ms
Definition
sapi_cross_comparator.h:37
sapi_cross_comparator_config_t::trigger_safestate_on_disagreement
bool trigger_safestate_on_disagreement
Definition
sapi_cross_comparator.h:49
sapi_cross_comparator_storage_t
Storage for one cross-comparator instance (opaque to caller). No dynamic memory.
Definition
sapi_cross_comparator.h:65
include
safeapi
redundancy
cross_comparator
sapi_cross_comparator.h
Generated by
1.18.0