SafeAPI RBC 2oo2 Generic Application
IL/CTC route and train logic for the safeAPIRBC2oo2 reference RBC
Loading...
Searching...
No Matches
ab_ga_ertms_il_types.h
1
9
10#ifndef RBC_IL_TYPES_H
11#define RBC_IL_TYPES_H
12
13#include "../rbc_ertms_types.h"
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19#define RBC_IL_MAX_ROUTE_SECTIONS 16U
20#define RBC_IL_MAX_ROUTE_POINTS 8U
21#define RBC_IL_MAX_OVERLAP_LEN 1000U
22
23/* ========================================================================= */
24/* Interlocking Route States & Definitions */
25/* ========================================================================= */
26
27typedef enum rbc_il_route_state_e
28{
29 RBC_IL_ROUTE_STATE_FREE = 0,
30 RBC_IL_ROUTE_STATE_REQUESTED = 1,
31 RBC_IL_ROUTE_STATE_RESERVED = 2,
32 RBC_IL_ROUTE_STATE_LOCKED = 3,
33 RBC_IL_ROUTE_STATE_CLEARED_PROCEED = 4,
34 RBC_IL_ROUTE_STATE_OCCUPIED = 5,
35 RBC_IL_ROUTE_STATE_CANCELLED_EMERGENCY= 6
36} rbc_il_route_state_t;
37
38typedef struct rbc_il_route_info_s
39{
40 rbc_nid_route_t route_id;
41 rbc_il_route_state_t state;
42 rbc_nid_signal_t entry_signal;
43 rbc_nid_signal_t exit_signal;
44 rbc_distance_m_t route_length_m;
45 bool flank_protection_ok;
46 bool overlap_locked;
47 rbc_distance_m_t overlap_length_m;
48 uint8_t section_count;
49 rbc_nid_section_t sections[RBC_IL_MAX_ROUTE_SECTIONS];
51
52/* ========================================================================= */
53/* Track Section Status (Axle Counter / Track Circuit) */
54/* ========================================================================= */
55
56typedef enum rbc_il_section_state_e
57{
58 RBC_IL_SECTION_CLEAR = 0,
59 RBC_IL_SECTION_OCCUPIED = 1,
60 RBC_IL_SECTION_DISTURBED = 2,
61 RBC_IL_SECTION_OUT_OF_ORDER = 3
62} rbc_il_section_state_t;
63
64typedef struct rbc_il_section_status_s
65{
66 rbc_nid_section_t section_id;
67 rbc_il_section_state_t state;
68 rbc_timestamp_ms_t last_state_change_ms;
70
71/* ========================================================================= */
72/* Point / Switch Status */
73/* ========================================================================= */
74
75typedef enum rbc_il_point_position_e
76{
77 RBC_IL_POINT_NORMAL_LEFT = 0,
78 RBC_IL_POINT_REVERSE_RIGHT = 1,
79 RBC_IL_POINT_MOVING = 2,
80 RBC_IL_POINT_OUT_OF_ORDER = 3
81} rbc_il_point_position_t;
82
83typedef struct rbc_il_point_status_s
84{
85 rbc_nid_point_t point_id;
86 rbc_il_point_position_t position;
87 bool is_locked;
89
90/* ========================================================================= */
91/* Signal Aspect */
92/* ========================================================================= */
93
94typedef enum rbc_il_signal_aspect_e
95{
96 RBC_IL_SIGNAL_ASPECT_STOP = 0,
97 RBC_IL_SIGNAL_ASPECT_PROCEED = 1,
98 RBC_IL_SIGNAL_ASPECT_PROCEED_RESTRICTED = 2,
99 RBC_IL_SIGNAL_ASPECT_WARNING = 3,
100 RBC_IL_SIGNAL_ASPECT_SHUNTING = 4
101} rbc_il_signal_aspect_t;
102
103typedef struct rbc_il_signal_status_s
104{
105 rbc_nid_signal_t signal_id;
106 rbc_il_signal_aspect_t aspect;
108
109/* ========================================================================= */
110/* Level Crossing Status */
111/* ========================================================================= */
112
113typedef enum rbc_il_lx_state_e
114{
115 RBC_IL_LX_OPEN = 0,
116 RBC_IL_LX_CLOSING = 1,
117 RBC_IL_LX_CLOSED_PROTECTED = 2,
118 RBC_IL_LX_FAULT = 3
119} rbc_il_lx_state_t;
120
121typedef struct rbc_il_lx_status_s
122{
123 rbc_nid_lx_t lx_id;
124 rbc_il_lx_state_t state;
126
127#ifdef __cplusplus
128}
129#endif
130
131#endif /* RBC_IL_TYPES_H */