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_dual_msgchannel.h
Go to the documentation of this file.
1
41
#ifndef RTE_DUAL_MSGCHANNEL_H
42
#define RTE_DUAL_MSGCHANNEL_H
43
44
#include <stdint.h>
45
46
#include "
rte/redundancy/checksum/rte_checksum.h
"
47
#include "
rte/oal/netlink/rte_netlink.h
"
48
#include "
rte/utils/status/rte_status.h
"
49
#include "
rte/utils/types/rte_types.h
"
50
51
#ifdef __cplusplus
52
extern
"C"
{
53
#endif
54
58
#define RTE_DUAL_MSGCHANNEL_MAX_PAYLOAD 248U
59
67
typedef
struct
rte_dual_msgchannel_s
68
{
69
rte_netlink_handle_t
link
;
70
uint32_t
sender_id
;
71
uint32_t
expected_peer_id
;
72
uint32_t
next_sequence
;
73
uint32_t
expected_sequence
;
74
bool
resync_on_sequence_error
;
75
}
rte_dual_msgchannel_t
;
76
78
typedef
struct
rte_dual_msgchannel_config_s
79
{
85
rte_netlink_handle_t
link
;
88
uint32_t
sender_id
;
92
uint32_t
expected_peer_id
;
93
}
rte_dual_msgchannel_config_t
;
94
105
rte_status_t
rte_dual_msgchannel_set_resync_on_sequence_error
(
rte_dual_msgchannel_t
*channel,
bool
enable);
106
114
rte_status_t
rte_dual_msgchannel_init
(
rte_dual_msgchannel_t
*channel,
115
const
rte_dual_msgchannel_config_t
*config);
116
137
rte_status_t
rte_dual_msgchannel_send
(
rte_dual_msgchannel_t
*channel,
138
const
uint8_t *payload,
139
uint8_t payload_size,
140
rte_duration_ms_t
timeout_ms,
141
uint32_t *out_sequence);
142
171
rte_status_t
rte_dual_msgchannel_receive
(
rte_dual_msgchannel_t
*channel,
172
uint8_t *out_payload,
173
uint8_t payload_max_size,
174
rte_duration_ms_t
timeout_ms,
175
uint8_t *out_payload_size,
176
uint32_t *out_sequence);
177
190
rte_status_t
rte_dual_msgchannel_reset_sequence
(
rte_dual_msgchannel_t
*channel);
191
192
#ifdef __cplusplus
193
}
194
#endif
195
196
#endif
/* RTE_DUAL_MSGCHANNEL_H */
197
rte_dual_msgchannel_receive
rte_status_t rte_dual_msgchannel_receive(rte_dual_msgchannel_t *channel, uint8_t *out_payload, uint8_t payload_max_size, rte_duration_ms_t timeout_ms, uint8_t *out_payload_size, uint32_t *out_sequence)
Receives one frame over config->link, blocking at most timeout_ms, verifies its CRC-64 and sequence c...
Definition
rte_dual_msgchannel.c:81
rte_dual_msgchannel_reset_sequence
rte_status_t rte_dual_msgchannel_reset_sequence(rte_dual_msgchannel_t *channel)
Resets both sequence counters to 0. Intended to be called by the caller (typically rte_dual_channel_t...
Definition
rte_dual_msgchannel.c:149
rte_dual_msgchannel_init
rte_status_t rte_dual_msgchannel_init(rte_dual_msgchannel_t *channel, const rte_dual_msgchannel_config_t *config)
Initializes a rte_dual_msgchannel_t: starts both sequence counters at 0.
Definition
rte_dual_msgchannel.c:20
rte_dual_msgchannel_set_resync_on_sequence_error
rte_status_t rte_dual_msgchannel_set_resync_on_sequence_error(rte_dual_msgchannel_t *channel, bool enable)
Turns sequence resynchronisation on or off (default off after init).
Definition
rte_dual_msgchannel.c:162
rte_dual_msgchannel_send
rte_status_t rte_dual_msgchannel_send(rte_dual_msgchannel_t *channel, const uint8_t *payload, uint8_t payload_size, rte_duration_ms_t timeout_ms, uint32_t *out_sequence)
Wraps payload in a rte_vital_message_t (this channel's own sender_id and next sequence_number) and se...
Definition
rte_dual_msgchannel.c:38
rte_netlink_handle_t
struct rte_netlink_impl_s * rte_netlink_handle_t
Opaque handle to an established link, returned by rte_netlink_open().
Definition
rte_netlink.h:58
rte_status_t
rte_status_t
Common result/status codes.
Definition
rte_status.h:27
rte_duration_ms_t
uint32_t rte_duration_ms_t
Definition
rte_types.h:27
rte_checksum.h
Checksum and CRC utilities for data integrity in redundant systems.
rte_netlink.h
OS Abstraction Layer - Point-to-point network link service.
rte_status.h
Common status/error codes returned by every Safe API Framework function. Shared across all OS Abstrac...
rte_types.h
Common fixed-width types and the caller-owned-storage handle pattern used by every OAL service (see A...
rte_dual_msgchannel_config_t
Configuration for rte_dual_msgchannel_init().
Definition
rte_dual_msgchannel.h:79
rte_dual_msgchannel_config_t::expected_peer_id
uint32_t expected_peer_id
Definition
rte_dual_msgchannel.h:92
rte_dual_msgchannel_config_t::link
rte_netlink_handle_t link
Definition
rte_dual_msgchannel.h:85
rte_dual_msgchannel_config_t::sender_id
uint32_t sender_id
Definition
rte_dual_msgchannel.h:88
rte_dual_msgchannel_t
One rte_dual_msgchannel_t instance's state. Caller-owned storage (REQ-DUAL-MSGCHANNEL-001); opaque in...
Definition
rte_dual_msgchannel.h:68
rte_dual_msgchannel_t::link
rte_netlink_handle_t link
Definition
rte_dual_msgchannel.h:69
rte_dual_msgchannel_t::expected_peer_id
uint32_t expected_peer_id
Definition
rte_dual_msgchannel.h:71
rte_dual_msgchannel_t::next_sequence
uint32_t next_sequence
Definition
rte_dual_msgchannel.h:72
rte_dual_msgchannel_t::sender_id
uint32_t sender_id
Definition
rte_dual_msgchannel.h:70
rte_dual_msgchannel_t::resync_on_sequence_error
bool resync_on_sequence_error
Definition
rte_dual_msgchannel.h:74
rte_dual_msgchannel_t::expected_sequence
uint32_t expected_sequence
Definition
rte_dual_msgchannel.h:73
include
rte
redundancy
dual
rte_dual_msgchannel.h
Generated by
1.18.0