7#include "rte/oal/memory/rte_mem_util.h"
90 const ab_site_ga_route_layout_t *layout;
97 layout = ab_site_ga_get_route(route_id);
109 const ab_site_ga_route_layout_t *layout;
116 layout = ab_site_ga_get_route(route_id);
127 uint32_t v_maxtrain_kmh,
129 uint8_t m_loadinggauge,
131 uint32_t timestamp_ms)
146 uint32_t v_train_kmh,
150 uint32_t timestamp_ms)
254 uint8_t nid_textmessage,
256 uint8_t q_textconfirm,
271 uint8_t nid_textmessage,
272 uint32_t timestamp_ms)
284 uint16_t target_nid_c,
285 uint16_t target_nid_rbc,
286 uint64_t target_nid_radio,
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.
bool ab_gp_ertms_remove_tsr(uint8_t train_id, uint8_t nid_tsr)
Removes an active Temporary Speed Restriction (Packet 66) for a train path.
bool ab_gp_ertms_add_tsr(uint8_t train_id, uint8_t nid_tsr, uint32_t v_tsr_kmh, uint32_t d_start_m, uint32_t d_end_m)
Adds a Temporary Speed Restriction (Packet 65) for a train path.
ab_gp_ertms_train_context_t * ab_gp_ertms_engine_get_train_context(uint8_t train_id)
Retrieves the ERTMS procedure context for a given train slot.
bool ab_gp_ertms_handle_text_ack(uint8_t train_id, uint8_t nid_textmessage, uint32_t timestamp_ms)
Handles driver acknowledgement of a text message (Msg 146/158).
bool ab_gp_ertms_calc_ma_for_route(uint8_t train_id, uint16_t route_id, uint32_t ma_seq)
Computes a Movement Authority for a train on a given route.
bool ab_gp_ertms_complete_handover(uint8_t train_id)
Completes the RBC handover procedure for a train.
static ab_gp_ertms_train_context_t s_train_contexts[RTE_EXAMPLE_MAX_TRAINS]
bool ab_gp_ertms_request_shunting(uint8_t train_id)
Requests shunting authorization for a train.
bool ab_gp_ertms_update_train_position(uint8_t train_id, uint32_t nid_lrbg, uint32_t d_lrbg_m, rbc_q_dirlrbg_t q_dirlrbg, uint32_t v_train_kmh, uint32_t m_mode, uint32_t m_level, uint32_t cycle, uint32_t timestamp_ms)
Updates train position and evaluates segment/route occupancy.
bool ab_gp_ertms_revoke_emergency_stop(uint8_t train_id, uint8_t nid_em)
Revokes an active emergency stop for a train.
bool ab_gp_ertms_validate_train_data(uint8_t train_id, uint32_t l_train_m, uint32_t v_maxtrain_kmh, uint8_t m_axleload, uint8_t m_loadinggauge, bool m_airtight, uint32_t timestamp_ms)
Validates train characteristics against site route topology.
bool ab_gp_ertms_authorize_shunting(uint8_t train_id, bool authorized)
Authorizes or rejects shunting mode for a train.
void ab_gp_ertms_engine_init(ab_gp_db_t *db)
Initializes the ERTMS procedure engine and all train contexts.
bool ab_gp_ertms_trigger_emergency_stop(uint8_t train_id, bool is_conditional, uint8_t nid_em, uint32_t d_ref_m, uint32_t d_es_m)
Triggers an emergency stop (UES or CES) for a train.
bool ab_gp_ertms_extend_ma_for_route(uint8_t train_id, uint16_t route_id)
Extends an existing Movement Authority with an additional route.
bool ab_gp_ertms_send_text_message(uint8_t train_id, uint8_t nid_textmessage, uint8_t q_textclass, uint8_t q_textconfirm, uint32_t duration_s, const char *text, rbc_packet_72_text_message_t *out_p72)
Sends a Driver Text Message (Packet 72) to a train.
bool ab_gp_ertms_announce_handover(uint8_t train_id, uint16_t target_nid_c, uint16_t target_nid_rbc, uint64_t target_nid_radio, uint32_t d_rbctr_m)
Announces an RBC handover transition order (Packet 131) for a train.
bool ab_gp_ertms_terminate_mission(uint8_t train_id, ab_gp_db_t *db)
Handles End of Mission teardown for a train.
void ab_gp_ertms_engine_step(ab_gp_db_t *db, uint32_t cycle, uint32_t timestamp_ms, uint32_t elapsed_ms)
Executes one cyclic evaluation of all active ERTMS train procedures.
Unified ERTMS Subset-026 Chapter 5 Operational Procedure Orchestrator.
bool ab_gp_proc_emergency_stop_revoke(ab_gp_ertms_train_context_t *ctx, uint8_t nid_em)
Revokes an active Emergency Stop (Msg 18) once hazard is cleared.
bool ab_gp_proc_emergency_stop_issue_ues(ab_gp_ertms_train_context_t *ctx, uint8_t nid_em)
Issues an Unconditional Emergency Stop (UES - Msg 16) to the train.
bool ab_gp_proc_emergency_stop_issue_ces(ab_gp_ertms_train_context_t *ctx, uint8_t nid_em, uint32_t d_ref_m, uint32_t d_emergencystop_m)
Issues a Conditional Emergency Stop (CES - Msg 15) to the train.
bool ab_gp_proc_eom_handle(ab_gp_ertms_train_context_t *ctx, ab_gp_db_t *db)
Handles inbound End of Mission notification (Msg 150).
void ab_gp_proc_handover_init(ab_gp_ertms_train_context_t *ctx)
Initializes handover context for a train slot.
bool ab_gp_proc_handover_announce(ab_gp_ertms_train_context_t *ctx, uint16_t target_nid_c, uint16_t target_nid_rbc, uint64_t target_nid_radio, uint32_t d_rbctr_m)
Announces an upcoming boundary transition to a neighboring RBC.
bool ab_gp_proc_handover_complete(ab_gp_ertms_train_context_t *ctx)
Completes the handover and marks session transferred.
bool ab_gp_proc_ma_extend(ab_gp_ertms_train_context_t *ctx, const ab_site_ga_route_layout_t *additional_route)
Extends an existing Movement Authority with an additional connected route.
bool ab_gp_proc_ma_compute(ab_gp_ertms_train_context_t *ctx, const ab_site_ga_route_layout_t *route, uint32_t ma_seq)
Computes and grants a new Movement Authority based on site track layout.
bool ab_gp_proc_position_update(ab_gp_ertms_train_context_t *ctx, uint32_t nid_lrbg, uint32_t d_lrbg_m, rbc_q_dirlrbg_t q_dirlrbg, uint32_t v_train_kmh, uint32_t m_mode, uint32_t m_level, uint32_t cycle, uint32_t timestamp_ms)
Processes an inbound Position Report (Msg 136 + Packet 0).
bool ab_gp_proc_session_check_timeout(ab_gp_ertms_train_context_t *ctx, uint32_t elapsed_ms, uint32_t timeout_limit_ms, ab_gp_db_t *db)
Supervises the communication contact timer (T_NVCONTACT).
bool ab_gp_proc_session_handle_termination(ab_gp_ertms_train_context_t *ctx, ab_gp_db_t *db)
Handles session termination (Msg 156 / Msg 41).
void ab_gp_proc_session_init(ab_gp_ertms_train_context_t *ctx, uint8_t train_id, uint32_t nid_engine)
Initializes the ERTMS procedure context for a train slot.
bool ab_gp_proc_shunting_request(ab_gp_ertms_train_context_t *ctx)
Handles inbound Shunting Request (Msg 130).
bool ab_gp_proc_shunting_authorize(ab_gp_ertms_train_context_t *ctx, bool authorized)
Authorizes or rejects shunting mode for the train.
bool ab_gp_proc_text_message_handle_ack(ab_gp_ertms_train_context_t *ctx, uint8_t nid_textmessage, uint32_t timestamp_ms)
Handles driver acknowledgement of a text message (Msg 146 / Msg 158).
void ab_gp_proc_text_message_init(ab_gp_ertms_train_context_t *ctx)
Initializes text message tracking for a train context.
bool ab_gp_proc_text_message_send(ab_gp_ertms_train_context_t *ctx, uint8_t nid_textmessage, uint8_t q_textclass, uint8_t q_textconfirm, uint32_t duration_s, const char *text, rbc_packet_72_text_message_t *out_p72)
Dispatches a plain text message to the driver DMI (Subset-026 ยง5.12 / Packet 72).
bool ab_gp_proc_train_data_validate(ab_gp_ertms_train_context_t *ctx, uint32_t l_train_m, uint32_t v_maxtrain_kmh, uint8_t m_axleload, uint8_t m_loadinggauge, bool m_airtight, uint32_t timestamp_ms)
Validates inbound Train Data (Msg 129 + Packet 11) against site topology limits.
bool ab_gp_proc_tsr_remove(ab_gp_ertms_train_context_t *ctx, uint8_t nid_tsr)
Removes an active Temporary Speed Restriction from the train's path.
bool ab_gp_proc_tsr_add(ab_gp_ertms_train_context_t *ctx, uint8_t nid_tsr, uint32_t v_tsr_kmh, uint32_t d_start_m, uint32_t d_end_m)
Adds a new Temporary Speed Restriction to the train's supervised path.
void ab_gp_proc_tsr_init(ab_gp_ertms_train_context_t *ctx)
Initializes the TSR records for a train context.
#define RTE_EXAMPLE_ERTMS_CONTACT_TIMEOUT_MS
#define RTE_EXAMPLE_MAX_TRAINS
rbc_q_dirlrbg_t
Balise Group Orientation (Q_DIRLRBG) Subset-026 Section 7.5.1.16: 0 = Reverse 1 = Nominal 2 = Unknown...
@ AB_GP_ERTMS_SESSION_IDLE
Complete ERTMS state and procedure context for one train slot.
ab_gp_ertms_session_state_t session_state