Safe API Framework 0.1.0 build 384e6ae
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Loading...
Searching...
No Matches
main.c File Reference

Multi-Site Geographic Redundancy Example. More...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include "redundancy_multi_site.h"
Include dependency graph for main.c:

Go to the source code of this file.

Data Structures

struct  train_state_t

Macros

#define TRAIN_COUNT   (sizeof(trains) / sizeof(trains[0]))

Functions

static train_command_t channel_a_compute (const train_state_t *train)
static train_command_t channel_b_compute (const train_state_t *train)
static void simulate_movement (train_state_t *train)
int main (int argc, char *argv[])

Variables

static train_state_t trains []

Detailed Description

Multi-Site Geographic Redundancy Example.

Demonstrates realistic railway architecture with two geographic sites:

WEST (Online/Active):

  • Channel A: CPU0 computes train commands
  • Channel B: CPU1 verifies channel A (2oo2 voting)
  • Channel C: Service channel (printf results, logging)
  • Produces actual control commands

EAST (Standby):

  • Mirrors WEST channels A, B for synchronization
  • Maintains own 2oo2 voting state
  • Ready to take over if WEST fails
  • Can be switched manually for maintenance

Scenario: ERTMS Radio Block Centre with dual sites

  • West RBC (Madrid): Primary processing
  • East RBC (Barcelona): Backup, can failover
  • Heartbeat every 50ms between sites
  • On 3 missed heartbeats → automatic failover

Definition in file main.c.

Macro Definition Documentation

◆ TRAIN_COUNT

#define TRAIN_COUNT   (sizeof(trains) / sizeof(trains[0]))

Definition at line 52 of file main.c.

Function Documentation

◆ channel_a_compute()

train_command_t channel_a_compute ( const train_state_t * train)
static

Definition at line 58 of file main.c.

◆ channel_b_compute()

train_command_t channel_b_compute ( const train_state_t * train)
static

Definition at line 101 of file main.c.

◆ simulate_movement()

void simulate_movement ( train_state_t * train)
static

Definition at line 132 of file main.c.

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 157 of file main.c.

Variable Documentation

◆ trains

train_state_t trains[]
static
Initial value:
= {
{ .train_id = 101, .position = 500, .last_position = 500 },
{ .train_id = 102, .position = 2500, .last_position = 2500 },
{ .train_id = 103, .position = 7500, .last_position = 7500 },
}

Definition at line 46 of file main.c.