8#include "rte/utils/lifecycle/rte_lifecycle.h"
9#include "rte/utils/notify/rte_notify.h"
10#include "rte/oal/log/rte_log.h"
48 rte_status_t lifecycle_status;
52 return RTE_STATUS_INVALID_PARAM;
54 lifecycle_status = rte_lifecycle_check_setup_allowed();
55 if (lifecycle_status != RTE_STATUS_OK)
57 return lifecycle_status;
61 return RTE_STATUS_RESOURCE_EXHAUSTED;
71 rte_status_t lifecycle_status;
75 return RTE_STATUS_INVALID_PARAM;
77 lifecycle_status = rte_lifecycle_check_setup_allowed();
78 if (lifecycle_status != RTE_STATUS_OK)
80 return lifecycle_status;
84 return RTE_STATUS_RESOURCE_EXHAUSTED;
101 "train %u: no GA shunting validator registered - refusing SH",
102 (
unsigned int)train_id);
112 "validator #%u refused SH for train %u",
113 (
unsigned int)i, (
unsigned int)train_id);
122 uint32_t nid_lrbg = 0U;
124 bool connected_any =
false;
125 uint32_t connected_count = 0U;
130 "train %u not currently connected - skipping route connect",
131 (
unsigned int)train_id);
137 "train %u has not reported a position yet (nid_lrbg=0) - skipping",
138 (
unsigned int)train_id);
143 "train %u at nid_lrbg=%u: checking every tracked route for a connect",
144 (
unsigned int)train_id, (
unsigned int)nid_lrbg);
148 uint16_t route_id = db->
routes[i].
id;
158 connected_any =
true;
160 "route %u already connected to train %u - no-op",
161 (
unsigned int)route_id, (
unsigned int)train_id);
166 "route %u already connected to train %u - skipping for train %u",
168 (
unsigned int)train_id);
176 "route %u -> train %u: no GA validator approved - not connecting",
177 (
unsigned int)route_id, (
unsigned int)train_id);
186 connected_any =
true;
189 "connected route %u to train %u (at nid_lrbg=%u)",
190 (
unsigned int)route_id, (
unsigned int)train_id,
191 (
unsigned int)nid_lrbg);
196 "route %u -> train %u: ab_gp_db_route_connect_train() refused",
197 (
unsigned int)route_id, (
unsigned int)train_id);
201 if (connected_count > 0U)
204 "train %u: %u route(s) newly connected this pass (holds %s)",
205 (
unsigned int)train_id, (
unsigned int)connected_count,
206 connected_any ?
"at least one route" :
"no route");
211 "train %u: %u route(s) newly connected this pass (holds %s)",
212 (
unsigned int)train_id, (
unsigned int)connected_count,
213 connected_any ?
"at least one route" :
"no route");
216 return connected_any;
248 "route %u -> train %u: no GA route validator registered - denying",
249 (
unsigned int)route_id, (
unsigned int)train_id);
259 "validator #%u rejected route %u -> train %u",
260 (
unsigned int)i, (
unsigned int)route_id, (
unsigned int)train_id);
267 "route %u -> train %u: all %u registered validator(s) approved",
268 (
unsigned int)route_id, (
unsigned int)train_id,
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 ...
RTE_DECLARE_CALLBACK_LIST(ab_gp_db_route_context_list_t, ab_gp_route_context_notify_fn, AB_GP_DB_MAX_ROUTE_CONTEXT_SUBSCRIBERS)
bool ab_gp_logic_connect_route_for_train(ab_gp_db_t *db, uint8_t train_id)
Connects one train's own currently-reported route to it: looks up which route the balise at db->train...
static ab_gp_logic_route_validator_list_t g_validators
bool ab_gp_logic_shunting_allowed(uint8_t train_id)
Asks every registered shunting validator about train_id.
static ab_gp_logic_shunting_validator_list_t g_shunting_validators
static bool route_validators_all_agree(uint16_t route_id, uint8_t train_id)
void ab_gp_logic_connect_routes_and_trains(ab_gp_db_t *db)
THE cyclic sweep: calls ab_gp_logic_connect_route_for_train() for every currently-connected train (ab...
A/B's own RBC decision logic - today's slice: connect a train's currently-reported route to that trai...
#define AB_GP_LOGIC_MAX_ROUTE_VALIDATORS
#define AB_GP_LOGIC_MAX_SHUNTING_VALIDATORS
bool ab_gp_train_is_connected(const ab_gp_db_t *db, uint8_t train_id)
A/B's own train lifecycle handling against db/'s runtime table.
#define RTE_EXAMPLE_MAX_ROUTES
#define RTE_EXAMPLE_MAX_TRAINS
#define RTE_LOG_WRITE_EVENT_F(level, site, cycle, source, dest, type, info_fmt,...)
bool ab_gp_train_get_last_position(const ab_gp_db_t *db, uint8_t train_id, uint32_t *out_nid_lrbg)
bool(*) ab_gp_logic_shunting_validator_fn(void *context, uint8_t train_id)
rte_status_t ab_gp_ga_register_shunting_validator(ab_gp_logic_shunting_validator_fn fn, void *context)
bool(*) ab_gp_logic_route_validator_fn(void *context, uint16_t route_id, uint8_t train_id)
rte_status_t ab_gp_ga_register_init(ab_gp_logic_route_validator_fn fn, void *context)
ab_gp_db_route_t routes[RTE_EXAMPLE_MAX_ROUTES]