/* TA_EmergencyStop::ES_Build_Acknowledgement */
void ES_Build_Acknowledgement_TA_EmergencyStop(
  /* TA_EmergencyStop::ES_Build_Acknowledgement::nid_em */NID_EM nid_em,
  /* TA_EmergencyStop::ES_Build_Acknowledgement::t_train */T_TRAIN t_train,
  /* TA_EmergencyStop::ES_Build_Acknowledgement::trainProps */trainProperties_T_TrainPosition_Types_Pck *trainProps,
  /* TA_EmergencyStop::ES_Build_Acknowledgement::packet0 */PT0_PositionReport_T_Packet_TrainTypes_Pkg *packet0,
  /* TA_EmergencyStop::ES_Build_Acknowledgement::packet1 */PT1_PositionReport_2BG_T_Packet_TrainTypes_Pkg *packet1,
  /* TA_EmergencyStop::ES_Build_Acknowledgement::receivedMsg16 */kcg_bool receivedMsg16,
  /* TA_EmergencyStop::ES_Build_Acknowledgement::cesAccepted */kcg_bool cesAccepted,
  /* TA_EmergencyStop::ES_Build_Acknowledgement::updateEOA */kcg_bool updateEOA,
  /* TA_EmergencyStop::ES_Build_Acknowledgement::message147 */Radio_TrainTrack_Message_T_TM_transitional *message147)
{
  static Q_EMERGENCYSTOP tmp;
  
  (*message147).present = kcg_true;
  kcg_copy_PT0_PositionReport_T_Packet_TrainTypes_Pkg(
    &(*message147).packets.p0,
    packet0);
  kcg_copy_PT1_PositionReport_2BG_T_Packet_TrainTypes_Pkg(
    &(*message147).packets.p1,
    packet1);
  kcg_copy_PT3_OnboardTelephoneNumbers_T_Packet_TrainTypes_Pkg(
    &(*message147).packets.p3,
    (PT3_OnboardTelephoneNumbers_T_Packet_TrainTypes_Pkg *)
      &cPT3_OBUTelephoneNumber_MA_Request);
  kcg_copy_PT4_ErrorReporting_T_Packet_TrainTypes_Pkg(
    &(*message147).packets.p4,
    (PT4_ErrorReporting_T_Packet_TrainTypes_Pkg *)
      &cPT4_ErrorReporting_MA_Request);
  kcg_copy_PT5_TrainRunningNumber_Packet_TrainTypes_Pkg(
    &(*message147).packets.p5,
    (PT5_TrainRunningNumber_Packet_TrainTypes_Pkg *)
      &cPT5_TrainRunningNumber_MA_Request);
  kcg_copy_PT9_Level23_TransitionInformation_T_Packet_TrainTypes_Pkg(
    &(*message147).packets.p9,
    (PT9_Level23_TransitionInformation_T_Packet_TrainTypes_Pkg *)
      &cPT9_Level23_MA_Request);
  kcg_copy_PT11_ValidatedTrainData_T_Packet_TrainTypes_Pkg(
    &(*message147).packets.p11,
    (PT11_ValidatedTrainData_T_Packet_TrainTypes_Pkg *)
      &cPT11_ValidateTrainData_MA_Request);
  if (receivedMsg16) {
    tmp = Q_EMERGENCYSTOP_Unconditional_Emergency_Stop_accepted;
  }
  else if (cesAccepted) {
    if (updateEOA) {
      tmp =
        Q_EMERGENCYSTOP_Conditional_Emergency_Stop_accepted_with_update_of_EOA;
    }
    else {
      tmp =
        Q_EMERGENCYSTOP_Conditional_Emergency_Stop_accepted_with_no_update_of_EOA;
    }
  }
  else {
    tmp = Q_EMERGENCYSTOP_Emergency_stop;
  }
  (*message147).header.present = kcg_true;
  (*message147).header.nid_message = 147;
  (*message147).header.t_train = t_train;
  (*message147).header.nid_engine = (*trainProps).nid_engine;
  (*message147).header.xQ_MARQSTREASON = cQ_MARQSREASON_NONE_TA_EmergencyStop;
  (*message147).header.xT_TRAIN = t_train;
  (*message147).header.xNID_EM = nid_em;
  (*message147).header.xQ_EMERGENCYSTOP = tmp;
  (*message147).header.xNID_TEXTMESSAGE =
    cNID_TEXTMESSAGE_NONE_TA_EmergencyStop;
}
/* MA_Request::Build_MA_request */
void Build_MA_request_MA_Request(
  /* MA_Request::Build_MA_request::trackDescrDeleted */kcg_bool trackDescrDeleted,
  /* MA_Request::Build_MA_request::trainProps */trainProperties_T_TrainPosition_Types_Pck *trainProps,
  /* MA_Request::Build_MA_request::packet0 */PT0_PositionReport_T_Packet_TrainTypes_Pkg *packet0,
  /* MA_Request::Build_MA_request::packet1 */PT1_PositionReport_2BG_T_Packet_TrainTypes_Pkg *packet1,
  /* MA_Request::Build_MA_request::t_train */T_TRAIN t_train,
  outC_Build_MA_request_MA_Request *outC)
{
  outC->_L83 = t_train;
  kcg_copy_PT9_Level23_TransitionInformation_T_Packet_TrainTypes_Pkg(
    &outC->_L82,
    (PT9_Level23_TransitionInformation_T_Packet_TrainTypes_Pkg *)
      &cPT9_Level23_MA_Request);
  kcg_copy_PT5_TrainRunningNumber_Packet_TrainTypes_Pkg(
    &outC->_L81,
    (PT5_TrainRunningNumber_Packet_TrainTypes_Pkg *)
      &cPT5_TrainRunningNumber_MA_Request);
  kcg_copy_PT4_ErrorReporting_T_Packet_TrainTypes_Pkg(
    &outC->_L80,
    (PT4_ErrorReporting_T_Packet_TrainTypes_Pkg *)
      &cPT4_ErrorReporting_MA_Request);
  kcg_copy_PT3_OnboardTelephoneNumbers_T_Packet_TrainTypes_Pkg(
    &outC->_L79,
    (PT3_OnboardTelephoneNumbers_T_Packet_TrainTypes_Pkg *)
      &cPT3_OBUTelephoneNumber_MA_Request);
  kcg_copy_PT11_ValidatedTrainData_T_Packet_TrainTypes_Pkg(
    &outC->_L78,
    (PT11_ValidatedTrainData_T_Packet_TrainTypes_Pkg *)
      &cPT11_ValidateTrainData_MA_Request);
  kcg_copy_PT0_PositionReport_T_Packet_TrainTypes_Pkg(&outC->_L61, packet0);
  kcg_copy_PT1_PositionReport_2BG_T_Packet_TrainTypes_Pkg(&outC->_L62, packet1);
  kcg_copy_PT0_PositionReport_T_Packet_TrainTypes_Pkg(
    &outC->_L77.p0,
    &outC->_L61);
  kcg_copy_PT1_PositionReport_2BG_T_Packet_TrainTypes_Pkg(
    &outC->_L77.p1,
    &outC->_L62);
  kcg_copy_PT3_OnboardTelephoneNumbers_T_Packet_TrainTypes_Pkg(
    &outC->_L77.p3,
    &outC->_L79);
  kcg_copy_PT4_ErrorReporting_T_Packet_TrainTypes_Pkg(
    &outC->_L77.p4,
    &outC->_L80);
  kcg_copy_PT5_TrainRunningNumber_Packet_TrainTypes_Pkg(
    &outC->_L77.p5,
    &outC->_L81);
  kcg_copy_PT9_Level23_TransitionInformation_T_Packet_TrainTypes_Pkg(
    &outC->_L77.p9,
    &outC->_L82);
  kcg_copy_PT11_ValidatedTrainData_T_Packet_TrainTypes_Pkg(
    &outC->_L77.p11,
    &outC->_L78);
  outC->_L60 = kcg_true;
  outC->_L26 = kcg_true;
  outC->_L27 = 132;
  kcg_copy_trainProperties_T_TrainPosition_Types_Pck(&outC->_L30, trainProps);
  outC->_L31 = outC->_L30.nid_engine;
  outC->_L33 = trackDescrDeleted;
  outC->_L35 = Q_MARQSTREASON_Track_description_deleted;
  outC->_L34 = Q_MARQSTREASON_Start_selected_by_driver;
  if (outC->_L33) {
    outC->_L32 = outC->_L35;
  }
  else {
    outC->_L32 = outC->_L34;
  }
  outC->_L56 = cNid_em_MA_Request;
  outC->_L57 = cQemergencyStop_MA_Request;
  outC->_L58 = cNidTextMessage_MA_Request;
  outC->_L54.present = outC->_L26;
  outC->_L54.nid_message = outC->_L27;
  outC->_L54.t_train = outC->_L83;
  outC->_L54.nid_engine = outC->_L31;
  outC->_L54.xQ_MARQSTREASON = outC->_L32;
  outC->_L54.xT_TRAIN = outC->_L83;
  outC->_L54.xNID_EM = outC->_L56;
  outC->_L54.xQ_EMERGENCYSTOP = outC->_L57;
  outC->_L54.xNID_TEXTMESSAGE = outC->_L58;
  outC->_L59.present = outC->_L60;
  kcg_copy_Radio_TrainTrack_Header_T_Radio_Types_Pkg(
    &outC->_L59.header,
    &outC->_L54);
  kcg_copy_outPackets_T_Common_Types_Pkg(&outC->_L59.packets, &outC->_L77);
  kcg_copy_Radio_TrainTrack_Message_T_Radio_Types_Pkg(
    &outC->message132,
    &outC->_L59);
}
/* MoRC_Pck::MoRC_Main_v2 */
void MoRC_Main_v2_MoRC_Pck(
  /* MoRC_Pck::MoRC_Main_v2::msg_in */ msgFromTrack_T_RCM_MsgTypes_Pkg *msg_in,
  /* MoRC_Pck::MoRC_Main_v2::eventsAndPhases */ obuEventsAndPhases_T_RCM_Session_Types_Pkg *eventsAndPhases,
  /* MoRC_Pck::MoRC_Main_v2::atPowerUpRadioNetworkID */ P45_RadioNetworkRegistration_T_Packet_Types_Pkg *atPowerUpRadioNetworkID,
  /* MoRC_Pck::MoRC_Main_v2::newRadioNetworkIDFromDriver */ P45_RadioNetworkRegistration_T_Packet_Types_Pkg *newRadioNetworkIDFromDriver,
  /* MoRC_Pck::MoRC_Main_v2::mode */ M_MODE mode,
  /* MoRC_Pck::MoRC_Main_v2::level */ M_LEVEL level,
  /* MoRC_Pck::MoRC_Main_v2::mobileRegistrationContext */ mobileRegistrationContext_T_RCM_Types_Pkg *mobileRegistrationContext,
  /* MoRC_Pck::MoRC_Main_v2::mobileConnectionContext */ mobileConnectionContext_T_RCM_Types_Pkg *mobileConnectionContext,
  /* MoRC_Pck::MoRC_Main_v2::currentTime */ T_internal_Type_Obu_BasicTypes_Pkg currentTime,
  /* MoRC_Pck::MoRC_Main_v2::reset */ kcg_bool reset,
  /* MoRC_Pck::MoRC_Main_v2::t_train */ T_TRAIN t_train,
  /* MoRC_Pck::MoRC_Main_v2::configData */ morc_configData_T_RCM_Session_Types_Pkg *configData,
  outC_MoRC_Main_v2_MoRC_Pck *outC)
{
  /* MoRC_Pck::MoRC_Main_v2 */
  static sessionCmd_T_RCM_Session_Types_Pkg tmp3;
  /* MoRC_Pck::MoRC_Main_v2 */
  static m38_initiationOfACommunicationSession_T_RCM_MsgTypes_Pkg tmp2;
  /* MoRC_Pck::MoRC_Main_v2 */
  static m39_AckOfTerminationOfACommunicationSession_T_RCM_MsgTypes_Pkg tmp1;
  /* MoRC_Pck::MoRC_Main_v2 */
  static m32_RBC_RIU_SystemVersion_T_RCM_MsgTypes_Pkg tmp;
  /* MoRC_Pck::MoRC_Main_v2::p42_sessionManagement */
  static p42_sessionManagement_T_RCM_MsgTypes_Pkg p42_sessionManagement;
  /* MoRC_Pck::MoRC_Main_v2::_L10 */
  static kcg_bool _L10;
  /* MoRC_Pck::MoRC_Main_v2::_L14 */
  static mobileConnectionContext_T_RCM_Types_Pkg _L14;
  /* MoRC_Pck::MoRC_Main_v2::_L26 */
  static mobileRegistrationContext_T_RCM_Types_Pkg _L26;
  /* MoRC_Pck::MoRC_Main_v2::_L27 */
  static sessionStatus_T_RCM_Session_Types_Pkg _L27;
  
  /* 2 */ dec_p42_RCM_Utils_Pkg_decoders(msg_in, &p42_sessionManagement);
  /* last_init_ck_registrationStatus_l */ if (outC->init) {
    kcg_copy_mobileConnectionContext_T_RCM_Types_Pkg(
      &_L14,
      (mobileConnectionContext_T_RCM_Types_Pkg *)
        &cNoConnectionContext_RCM_Types_Pkg);
    kcg_copy_sessionStatus_T_RCM_Session_Types_Pkg(
      &_L27,
      (sessionStatus_T_RCM_Session_Types_Pkg *)
        &cNoSessionStatus_RCM_Session_Types_Pkg);
    outC->init = kcg_false;
    kcg_copy_mobileRegistrationContext_T_RCM_Types_Pkg(
      &_L26,
      (mobileRegistrationContext_T_RCM_Types_Pkg *)
        &cNoMobileRegistrationContext_RCM_Types_Pkg);
  }
  else {
    kcg_copy_mobileConnectionContext_T_RCM_Types_Pkg(
      &_L14,
      &outC->connectionStatus_l);
    kcg_copy_sessionStatus_T_RCM_Session_Types_Pkg(
      &_L27,
      &outC->sessionStatus_l);
    kcg_copy_mobileRegistrationContext_T_RCM_Types_Pkg(
      &_L26,
      &outC->registrationStatus_l);
  }
  /* 1 */
  initiateTerminatingSession_v2_MoRC_Pck_Subfunc_Pkg(
    &p42_sessionManagement,
    eventsAndPhases,
    mode,
    &_L27,
    currentTime,
    reset,
    (*configData).maxWaitingTimeUntilTerminationOrderReceived,
    (*configData).noOfRetriesUntilTerminationOrderIsReceived,
    &outC->Context_1);
  outC->sendAPositionReport = outC->Context_1.sendAPositionReport;
  /* 1 */ dec_m38_RCM_Utils_Pkg_decoders(msg_in, &tmp2);
  /* 1 */
  initiateSession_v2_MoRC_Pck_Subfunc_Pkg(
    mode,
    kcg_false,
    eventsAndPhases,
    &p42_sessionManagement,
    &tmp2,
    &_L26,
    &_L14,
    &_L27,
    (sessionStatus_T_RCM_Session_Types_Pkg *)
      &cNoSessionStatus_RCM_Session_Types_Pkg,
    (*configData).nid_radio_shortNumberStoredOnboard,
    &tmp3);
  /* 1 */ dec_m39_RCM_Utils_Pkg_decoders(msg_in, &tmp1);
  /* 1 */ dec_m32_RCM_Utils_Pkg_decoders(msg_in, kcg_true, &tmp);
  /* 1 */
  sessionSequencer_v2_MoRC_Pck_Subfunc_Pkg(
    &tmp3,
    &p42_sessionManagement,
    &tmp1,
    &tmp,
    &_L14,
    outC->Context_1.initiateTermination,
    currentTime,
    reset,
    (*configData).noOfRetriesOfSendingTerminationMessage,
    (*configData).maxWaitingTimeForAckMessageReceived,
    &outC->_1_Context_1);
  outC->msgToTrackTriggers.m155_initiationOfACommunicationSession =
    outC->_1_Context_1.send_m155_initiationOfACommunicationSession;
  outC->msgToTrackTriggers.m156_terminationOfACommunicationSession =
    outC->_1_Context_1.send_m156_TerminationOfCommunicationSession;
  outC->msgToTrackTriggers.m159_sessionEstablished =
    outC->_1_Context_1.send_m159_sessionEstablishedReport;
  outC->msgToTrackTriggers.m154_noCompatibleVersionSupported =
    outC->_1_Context_1.send_m154_noCompatibleVersionSupported;
  outC->infomDriverNoCompatibleVersionSupported =
    outC->_1_Context_1.infomDriverNoCompatibleVersionSupported;
  kcg_copy_sessionStatus_T_RCM_Session_Types_Pkg(
    &outC->sessionStatus_l,
    &outC->_1_Context_1.sessionStatus);
  kcg_copy_sessionStatus_T_RCM_Session_Types_Pkg(
    &outC->status.session,
    &outC->sessionStatus_l);
  /* 1 */
  requestRadioConnectionSetupFromOBU_v2_MoRC_Pck_Subfunc_Pkg(
    mode,
    eventsAndPhases,
    &outC->_1_Context_1.p42_SessionManagement_out,
    &outC->sessionStatus_l,
    &_L26,
    &_L14,
    outC->_1_Context_1.requestSafeRadioConnectionSetup,
    outC->_1_Context_1.requestReleaseOfSafeRadioConnection,
    currentTime,
    reset,
    (*configData).maxTimeToMaintainCommSession,
    (*configData).noOfTriesToEstablishASafeRadioConnection,
    &outC->_2_Context_1);
  /* 1 */
  connectingToTheRBC_v2_MoRC_Pck_Subfunc_Pkg(
    &outC->_2_Context_1.connectionCmd,
    mobileConnectionContext,
    &_L26,
    &outC->mobileConnectionCmd,
    &outC->connectionStatus_l,
    &_L10);
  kcg_copy_mobileConnectionContext_T_RCM_Types_Pkg(
    &outC->status.connection,
    &outC->connectionStatus_l);
  /* 1 */
  registeringToTheRadioNetwork_v2_MoRC_Pck_Subfunc_Pkg(
    atPowerUpRadioNetworkID,
    newRadioNetworkIDFromDriver,
    msg_in,
    level,
    eventsAndPhases,
    &outC->sessionStatus_l,
    &outC->connectionStatus_l,
    mobileRegistrationContext,
    reset,
    &(*configData).radioNetworkID_Default,
    &outC->_3_Context_1);
  outC->memorizeTheLastRadioNetworkID =
    outC->_3_Context_1.memorizeTheLastRadioNetworkID;
  kcg_copy_P45_RadioNetworkRegistration_T_Packet_Types_Pkg(
    &outC->lastReceivedRadioNetworkID,
    &outC->_3_Context_1.lastReceivedRadioNetworkID);
  kcg_copy_mobileRegistrationCmd_T_RCM_Types_Pkg(
    &outC->mobileRegistrationCmd,
    &outC->_3_Context_1.mobileRegistrationCmd);
  kcg_copy_mobileRegistrationContext_T_RCM_Types_Pkg(
    &outC->registrationStatus_l,
    &outC->_3_Context_1.mobileRegistrationStatus);
  kcg_copy_mobileRegistrationContext_T_RCM_Types_Pkg(
    &outC->status.registration,
    &outC->registrationStatus_l);
  outC->rejectOrderToContactRBC_or_RIU = _L10 |
    outC->_3_Context_1.rejectOrderToContactRBC_or_RIU;
  /* 1 */
  safeRadioConnectionIndication_v2_MoRC_Pck_Subfunc_Pkg(
    &outC->mobileConnectionCmd,
    &outC->connectionStatus_l,
    eventsAndPhases,
    currentTime,
    reset,
    (*configData).connectionStatusTimerInterval,
    &outC->_4_Context_1);
  kcg_copy_safeRadioConnectionIndication_T_RCM_Session_Types_Pkg(
    &outC->safeRadioIndication,
    &outC->_4_Context_1.indication);
  /* ck_m155_initiationOfACommunicationSession */ if (outC->_1_Context_1.send_m155_initiationOfACommunicationSession) {
    /* 4 */
    genMsgToRBC_MoRC_Pck_Coder_Pkg(
      kcg_true,
      co155_Initiation_of_a_communication_session_Id_Pkg,
      t_train,
      0,
      (*configData).nid_engine,
      &outC->msgToRBC);
  }
  else /* ck_anon_activ */ if (outC->_1_Context_1.send_m156_TerminationOfCommunicationSession) {
    /* 3 */
    genMsgToRBC_MoRC_Pck_Coder_Pkg(
      kcg_true,
      co156_Termination_of_a_communication_session_Id_Pkg,
      t_train,
      0,
      (*configData).nid_engine,
      &outC->msgToRBC);
  }
  else /* ck_anon_activ */ if (outC->_1_Context_1.send_m159_sessionEstablishedReport) {
    /* 2 */
    genMsgToRBC_MoRC_Pck_Coder_Pkg(
      kcg_true,
      co159_Session_established_Id_Pkg,
      t_train,
      0,
      (*configData).nid_engine,
      &outC->msgToRBC);
    kcg_copy_PT3_OnboardTelephoneNumbers_T_Packet_TrainTypes_Pkg(
      &outC->msgToRBC.packets.p3,
      &(*configData).onboardPhoneNumbers);
  }
  else /* ck_anon_activ */ if (outC->_1_Context_1.send_m154_noCompatibleVersionSupported) {
    /* 1 */
    genMsgToRBC_MoRC_Pck_Coder_Pkg(
      kcg_true,
      co154_No_Compatible_Version_Support_Id_Pkg,
      t_train,
      0,
      (*configData).nid_engine,
      &outC->msgToRBC);
  }
  else {
    kcg_copy_msgToTrack_T_RCM_MsgTypes_Pkg(
      &outC->msgToRBC,
      (msgToTrack_T_RCM_MsgTypes_Pkg *) &cNoMessageToRBC_MoRC_Pck);
  }
  outC->notReady = outC->_1_Context_1.notReady |
    !kcg_comp_mobileConnectionContext_T_RCM_Types_Pkg(
      &_L14,
      &outC->connectionStatus_l) |
    !kcg_comp_mobileRegistrationContext_T_RCM_Types_Pkg(
      &_L26,
      &outC->registrationStatus_l) |
    !kcg_comp_sessionStatus_T_RCM_Session_Types_Pkg(
      &_L27,
      &outC->sessionStatus_l);
}