23 if ((channel == NULL) || (config == NULL) || (config->
link == NULL))
39 const uint8_t *payload,
42 uint32_t *out_sequence)
51 if ((payload == NULL) && (payload_size != 0U))
57 (
size_t)payload_size);
72 if (out_sequence != NULL)
83 uint8_t payload_max_size,
85 uint8_t *out_payload_size,
86 uint32_t *out_sequence)
91 if ((channel == NULL) || (out_payload == NULL) || (out_payload_size == NULL) || (payload_max_size == 0U))
140 if (out_sequence != NULL)
rte_status_t rte_checksum_vital_message_verify(const rte_vital_message_t *msg, uint32_t expected_sequence, uint8_t *payload_out, size_t payload_max_size, uint8_t *payload_size_out)
Verify vital channel message and extract payload.
rte_status_t rte_checksum_vital_message_create(rte_vital_message_t *msg_out, uint32_t sender_id, uint32_t sequence, const uint8_t *payload, size_t payload_size)
Create vital channel message with CRC.
rte_status_t rte_checksum_crc64_verify(const uint8_t *data, size_t size, rte_crc64_t expected_crc, rte_checksum_result_t *result_out)
Verify CRC-64 of data against stored value.
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...
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...
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.
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).
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...
rte_status_t rte_netlink_send(rte_netlink_handle_t handle, const void *message, size_t message_size, rte_duration_ms_t timeout_ms)
Sends one fixed-size message, blocking at most timeout_ms.
rte_status_t rte_netlink_receive(rte_netlink_handle_t handle, void *out_message, size_t buffer_size, rte_duration_ms_t timeout_ms)
Receives one fixed-size message, blocking at most timeout_ms.
rte_status_t
Common result/status codes.
@ RTE_STATUS_INVALID_PARAM
@ RTE_STATUS_DATA_CORRUPTION
@ RTE_STATUS_HARDWARE_FAULT
uint32_t rte_duration_ms_t
"Channel" layer of ADR-020: one EN 50159-defended message channel over one already-open rte_netlink_h...
Checksum result for validation.
Configuration for rte_dual_msgchannel_init().
uint32_t expected_peer_id
rte_netlink_handle_t link
One rte_dual_msgchannel_t instance's state. Caller-owned storage (REQ-DUAL-MSGCHANNEL-001); opaque in...
rte_netlink_handle_t link
uint32_t expected_peer_id
bool resync_on_sequence_error
uint32_t expected_sequence
Vital channel message with integrated CRC-64.