RTE RBC 2oo2 Reference Application 0.1.0 build 0006685
SIL 4 2oo2 Dual-Site Fault-Tolerant ERTMS Radio Block Centre Reference Architecture
Loading...
Searching...
No Matches
ab_gp_db.h
Go to the documentation of this file.
1
32#ifndef RTE_EXAMPLE_AB_GP_DB_H
33#define RTE_EXAMPLE_AB_GP_DB_H
34
35#include <stdbool.h>
36#include <stdint.h>
37
38#include "rte/utils/status/rte_status.h"
39
41
51#ifndef AB_GP_DB_ROUTE_IL_STATUS_T_DEFINED
52#define AB_GP_DB_ROUTE_IL_STATUS_T_DEFINED
60#endif
61
65typedef struct
66{
67 uint16_t id;
68 uint16_t start_signal;
69 uint16_t end_signal;
70 bool occupied;
75 uint32_t route_type;
83 uint8_t train_id;
86 uint32_t route_fsm_state;
94
98typedef struct
99{
100 uint8_t nid_engine;
106 bool has_ma;
107
110 uint8_t route_count;
111
112 uint32_t last_nid_lrbg;
120
130#ifndef AB_GP_DB_T_DEFINED
131#define AB_GP_DB_T_DEFINED
137#endif
138
158
173bool ab_gp_db_route_connect_train(ab_gp_db_t *db, uint16_t route_id, uint8_t train_id);
174
182bool ab_gp_db_route_disconnect_train(ab_gp_db_t *db, uint16_t route_id);
184
197
199bool ab_gp_db_route_exists(const ab_gp_db_t *db, uint16_t route_id);
200
212bool ab_gp_db_route_add(ab_gp_db_t *db, uint16_t route_id, uint16_t start_signal, uint16_t end_signal);
213
221bool ab_gp_db_route_remove(ab_gp_db_t *db, uint16_t route_id);
222
223/* ab_gp_db_route_get_status()/_get_used_in_ma()/_get_type() - REMOVED
224 * (later session, on direct request - "it will be enough if GA can
225 * getTrainContext/getRouteContext; setters stay separate since they
226 * require validation"): every one of these is now a field on the ONE
227 * ab_gp_db_get_route_context() snapshot below (dead in GP itself too -
228 * zero internal callers, they existed purely for GA). */
229
233bool ab_gp_db_route_set_status(ab_gp_db_t *db, uint16_t route_id, ab_gp_db_route_il_status_t status);
234
240bool ab_gp_db_route_set_type(ab_gp_db_t *db, uint16_t route_id, uint32_t route_type);
241
247bool ab_gp_db_route_set_fsm_state(ab_gp_db_t *db, uint16_t route_id, uint32_t fsm_state);
248uint32_t ab_gp_db_route_get_fsm_state(const ab_gp_db_t *db, uint16_t route_id);
249
253uint8_t ab_gp_db_route_get_count(const ab_gp_db_t *db);
254
258bool ab_gp_db_route_get_by_index(const ab_gp_db_t *db, uint8_t index, uint16_t *out_route_id,
259 uint16_t *out_start_signal, uint16_t *out_end_signal,
260 uint8_t *out_train_id, bool *out_used_in_ma);
261
265bool ab_gp_db_train_is_connected(const ab_gp_db_t *db, uint8_t train_id);
266
270bool ab_gp_db_train_get_routes(const ab_gp_db_t *db, uint8_t train_id,
271 uint16_t out_routes[RTE_EXAMPLE_MAX_ROUTES_PER_TRAIN],
272 uint8_t *out_count);
274
275
301
307#ifndef AB_GP_ROUTE_UPDATE_TYPE_T_DEFINED
308#define AB_GP_ROUTE_UPDATE_TYPE_T_DEFINED
321#endif
322
328#ifndef AB_GP_ROUTE_CONTEXT_T_DEFINED
329#define AB_GP_ROUTE_CONTEXT_T_DEFINED
342#endif
343
344#ifndef AB_GP_DB_ROUTE_NOTIFY_FN_DEFINED
345#define AB_GP_DB_ROUTE_NOTIFY_FN_DEFINED
353typedef void (*ab_gp_route_context_notify_fn)(const void *context, const ab_gp_route_context_t *ctx,
354 ab_gp_route_update_type_t update_type);
355#endif
356
358#define AB_GP_DB_MAX_ROUTE_CONTEXT_SUBSCRIBERS 4U
359
365
377bool ab_gp_db_get_route_context(const ab_gp_db_t *db, uint16_t route_id, ab_gp_route_context_t *out_ctx);
379
384
394rte_status_t ab_gp_db_encode(const ab_gp_db_t *db, uint8_t *out_bytes, uint32_t out_capacity, uint32_t *out_written);
395
404rte_status_t ab_gp_db_decode(ab_gp_db_t *db, const uint8_t *in_bytes, uint32_t in_size);
405
407
408#endif /* RTE_EXAMPLE_AB_GP_DB_H */
409
bool ab_gp_db_get_route_context(const ab_gp_db_t *db, uint16_t route_id, ab_gp_route_context_t *out_ctx)
One-shot pull equivalent of the push notification above - the SAME snapshot-building logic (real impl...
Definition ab_gp_db.c:323
bool ab_gp_db_route_disconnect_train(ab_gp_db_t *db, uint16_t route_id)
Reverses ab_gp_db_route_connect_train(): clears the route's own used_in_ma/train_id and removes it fr...
Definition ab_gp_db.c:197
bool ab_gp_db_train_is_connected(const ab_gp_db_t *db, uint8_t train_id)
Checks if a train has an active connection session in the DB.
Definition ab_gp_db.c:435
rte_status_t ab_gp_db_register_route_context_notify(ab_gp_route_context_notify_fn fn, const void *context)
Definition ab_gp_db.c:25
bool ab_gp_db_route_set_fsm_state(ab_gp_db_t *db, uint16_t route_id, uint32_t fsm_state)
Get/set the per-route FSM state (ab_ga_route_state_t, raw uint32_t - GA owns the value space,...
Definition ab_gp_db.c:347
rte_status_t ab_gp_db_decode(ab_gp_db_t *db, const uint8_t *in_bytes, uint32_t in_size)
Decodes the full route and train database from a deterministic wire format.
Definition ab_gp_db.c:557
bool ab_gp_db_route_connect_train(ab_gp_db_t *db, uint16_t route_id, uint8_t train_id)
Connects route_id to train_id: appends the route to that train's own route_ids[] and marks the route ...
Definition ab_gp_db.c:150
bool ab_gp_db_train_get_routes(const ab_gp_db_t *db, uint8_t train_id, uint16_t out_routes[RTE_EXAMPLE_MAX_ROUTES_PER_TRAIN], uint8_t *out_count)
Retrieves routes currently allocated to a train.
Definition ab_gp_db.c:444
bool ab_gp_db_route_remove(ab_gp_db_t *db, uint16_t route_id)
Removes a tracked route from db->routes[], freeing its slot.
Definition ab_gp_db.c:291
uint8_t ab_gp_db_route_get_count(const ab_gp_db_t *db)
Returns total number of active routes currently in the GP database.
Definition ab_gp_db.c:375
bool ab_gp_db_route_set_type(ab_gp_db_t *db, uint16_t route_id, uint32_t route_type)
Definition ab_gp_db.c:335
rte_status_t ab_gp_db_encode(const ab_gp_db_t *db, uint8_t *out_bytes, uint32_t out_capacity, uint32_t *out_written)
Encodes the full route and train database into a deterministic wire format.
Definition ab_gp_db.c:474
bool ab_gp_db_route_add(ab_gp_db_t *db, uint16_t route_id, uint16_t start_signal, uint16_t end_signal)
Adds a new route to db->routes[]. New entry starts fully idle: occupied=false, il_status=AB_GP_DB_ROU...
Definition ab_gp_db.c:258
bool ab_gp_db_route_exists(const ab_gp_db_t *db, uint16_t route_id)
Definition ab_gp_db.c:253
bool ab_gp_db_route_get_by_index(const ab_gp_db_t *db, uint8_t index, uint16_t *out_route_id, uint16_t *out_start_signal, uint16_t *out_end_signal, uint8_t *out_train_id, bool *out_used_in_ma)
Retrieves route snapshot by table index for GA/GP route list synchronization.
Definition ab_gp_db.c:395
bool ab_gp_db_route_set_status(ab_gp_db_t *db, uint16_t route_id, ab_gp_db_route_il_status_t status)
Definition ab_gp_db.c:310
uint32_t ab_gp_db_route_get_fsm_state(const ab_gp_db_t *db, uint16_t route_id)
Definition ab_gp_db.c:359
void(*) ab_gp_route_context_notify_fn(const void *context, const ab_gp_route_context_t *ctx, ab_gp_route_update_type_t update_type)
Definition ab_gp_db.h:353
ab_gp_db_route_il_status_t
Definition ab_gp_db.h:54
@ AB_GP_DB_ROUTE_IL_STATUS_LOCKED
Definition ab_gp_db.h:58
@ AB_GP_DB_ROUTE_IL_STATUS_UNKNOWN
Definition ab_gp_db.h:55
@ AB_GP_DB_ROUTE_IL_STATUS_RESERVED
Definition ab_gp_db.h:57
@ AB_GP_DB_ROUTE_IL_STATUS_FREE
Definition ab_gp_db.h:56
ab_gp_route_update_type_t
Definition ab_gp_db.h:310
@ AB_ROUTE_STATUS_CHANGED
Definition ab_gp_db.h:312
@ AB_ROUTE_CONNECTED
Definition ab_gp_db.h:313
@ AB_ROUTE_DISCONNECTED
Definition ab_gp_db.h:315
@ AB_ROUTE_ADDED
Definition ab_gp_db.h:311
#define RTE_EXAMPLE_MAX_ROUTES_PER_TRAIN
#define RTE_EXAMPLE_MAX_ROUTES
#define RTE_EXAMPLE_MAX_TRAINS
ab_gp_db_route_il_status_t
One track section A/B's simplified layout knows about.
Definition ab_gp_db.h:66
uint16_t start_signal
Definition ab_gp_db.h:68
ab_gp_db_route_il_status_t il_status
Definition ab_gp_db.h:74
uint16_t end_signal
Definition ab_gp_db.h:69
uint8_t train_id
Definition ab_gp_db.h:83
uint32_t route_type
Definition ab_gp_db.h:75
uint32_t route_fsm_state
Definition ab_gp_db.h:86
uint16_t id
Definition ab_gp_db.h:67
ab_gp_db_route_t routes[RTE_EXAMPLE_MAX_ROUTES]
Definition ab_gp_db.h:135
ab_gp_db_train_t trains[RTE_EXAMPLE_MAX_TRAINS]
Definition ab_gp_db.h:134
One train A/B's simplified database knows about.
Definition ab_gp_db.h:99
uint8_t nid_engine
Definition ab_gp_db.h:100
uint8_t route_count
Definition ab_gp_db.h:110
uint16_t route_ids[RTE_EXAMPLE_MAX_ROUTES_PER_TRAIN]
Definition ab_gp_db.h:108
uint32_t last_nid_lrbg
Definition ab_gp_db.h:112
ab_gp_db_route_il_status_t il_status
Definition ab_gp_db.h:335