Safe API Framework
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Loading...
Searching...
No Matches
sapi_dual_frames.h File Reference

Layer-2 (DualChannel-owned) frame kind/header definitions for ADR-020 - shared between sapi_dual_channel.h and sapi_dual_negotiator.h so both can refer to the same wire structs without either depending on the other (sapi_dual_channel_t has no knowledge of sapi_dual_negotiator_t at all; the negotiator is the one-directional dependent - see ADR-020 section 3 and this module's own README note on ownership direction). More...

#include <stdint.h>
#include "safeapi/redundancy/dual/sapi_dual_types.h"
Include dependency graph for sapi_dual_frames.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  sapi_dual_frame_header_t
 Common 4-byte header prefixing every Layer-2 frame; kept a fixed 4 bytes (not just 1) so the fields that follow in sapi_dual_ack_frame_t/sapi_dual_state_frame_t stay naturally aligned. More...
struct  sapi_dual_ack_frame_t
 SAPI_DUAL_FRAME_KIND_ACK payload. More...
struct  sapi_dual_state_frame_t
 SAPI_DUAL_FRAME_KIND_STATE payload - sapi_dual_negotiator_t's own periodic beacon. More...
struct  sapi_dual_heartbeat_frame_t
 SAPI_DUAL_FRAME_KIND_HEARTBEAT payload - connection maintenance heartbeat. More...

Enumerations

enum  sapi_dual_frame_kind_t { SAPI_DUAL_FRAME_KIND_DATA = 0 , SAPI_DUAL_FRAME_KIND_ACK = 1 , SAPI_DUAL_FRAME_KIND_STATE = 2 , SAPI_DUAL_FRAME_KIND_HEARTBEAT = 3 }
 Which kind of Layer-2 frame a given Layer-1 payload holds. Stored as the first byte of every sapi_dual_channel_t frame so DATA, ACK, and STATE traffic sharing the same redundant links can never be misinterpreted as each other. More...

Detailed Description

Layer-2 (DualChannel-owned) frame kind/header definitions for ADR-020 - shared between sapi_dual_channel.h and sapi_dual_negotiator.h so both can refer to the same wire structs without either depending on the other (sapi_dual_channel_t has no knowledge of sapi_dual_negotiator_t at all; the negotiator is the one-directional dependent - see ADR-020 section 3 and this module's own README note on ownership direction).

These structs travel inside a Layer-1 sapi_vital_message_t's own 248-byte payload (sapi_dual_msgchannel.h) - i.e. every field here is additional, application/protocol-meaning defense layered on top of Layer 1's transport-integrity defense (sequence/sender/timestamp/CRC), not a replacement for it. See ADR-020 section 1.

Definition in file sapi_dual_frames.h.