23 if ((channel == NULL) || (config == NULL) || (config->
link == NULL))
38 const uint8_t *payload,
41 uint32_t *out_sequence)
50 if ((payload == NULL) && (payload_size != 0U))
56 (
size_t)payload_size);
71 if (out_sequence != NULL)
82 uint8_t payload_max_size,
84 uint8_t *out_payload_size,
85 uint32_t *out_sequence)
90 if ((channel == NULL) || (out_payload == NULL) || (out_payload_size == NULL) || (payload_max_size == 0U))
126 if (out_sequence != NULL)
sapi_status_t sapi_checksum_vital_message_verify(const sapi_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.
sapi_status_t sapi_checksum_vital_message_create(sapi_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.
sapi_status_t sapi_dual_msgchannel_send(sapi_dual_msgchannel_t *channel, const uint8_t *payload, uint8_t payload_size, sapi_duration_ms_t timeout_ms, uint32_t *out_sequence)
Wraps payload in a sapi_vital_message_t (this channel's own sender_id and next sequence_number) and s...
sapi_status_t sapi_dual_msgchannel_init(sapi_dual_msgchannel_t *channel, const sapi_dual_msgchannel_config_t *config)
Initializes a sapi_dual_msgchannel_t: starts both sequence counters at 0.
sapi_status_t sapi_dual_msgchannel_reset_sequence(sapi_dual_msgchannel_t *channel)
Resets both sequence counters to 0. Intended to be called by the caller (typically sapi_dual_channel_...
sapi_status_t sapi_dual_msgchannel_receive(sapi_dual_msgchannel_t *channel, uint8_t *out_payload, uint8_t payload_max_size, sapi_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...
sapi_status_t sapi_netlink_send(sapi_netlink_handle_t handle, const void *message, size_t message_size, sapi_duration_ms_t timeout_ms)
Sends one fixed-size message, blocking at most timeout_ms.
sapi_status_t sapi_netlink_receive(sapi_netlink_handle_t handle, void *out_message, size_t buffer_size, sapi_duration_ms_t timeout_ms)
Receives one fixed-size message, blocking at most timeout_ms.
sapi_status_t
Common result/status codes.
@ SAPI_STATUS_HARDWARE_FAULT
@ SAPI_STATUS_INVALID_PARAM
uint32_t sapi_duration_ms_t
"Channel" layer of ADR-020: one EN 50159-defended message channel over one already-open sapi_netlink_...
Configuration for sapi_dual_msgchannel_init().
uint32_t expected_peer_id
sapi_netlink_handle_t link
One sapi_dual_msgchannel_t instance's state. Caller-owned storage (REQ-DUAL-MSGCHANNEL-001); opaque i...
sapi_netlink_handle_t link
uint32_t expected_sequence
uint32_t expected_peer_id
Vital channel message with integrated CRC-64.