/* manage_TextMessages_Pkg::sendTextMessage */
void sendTextMessage_manage_TextMessages_Pkg(
  /* manage_TextMessages_Pkg::sendTextMessage::inSystemTime */ T_internal_Type_Obu_BasicTypes_Pkg inSystemTime,
  /* manage_TextMessages_Pkg::sendTextMessage::inStatusList */ DMI_TXT_MSGList_status_T_DMI_Types_Pkg *inStatusList,
  /* manage_TextMessages_Pkg::sendTextMessage::intextMessage */ DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *intextMessage,
  /* manage_TextMessages_Pkg::sendTextMessage::inTextReport */ Q_TEXTREPORT inTextReport,
  /* manage_TextMessages_Pkg::sendTextMessage::inNID_TextMessage */ NID_TEXTMESSAGE inNID_TextMessage,
  /* manage_TextMessages_Pkg::sendTextMessage::inContext */ DMI_context_TXT_MSG_T_DMI_Types_Pkg inContext,
  /* manage_TextMessages_Pkg::sendTextMessage::inWhichMode */ M_MODE inWhichMode,
  /* manage_TextMessages_Pkg::sendTextMessage::inWhichLevel */ M_LEVEL inWhichLevel,
  /* manage_TextMessages_Pkg::sendTextMessage::outStatusList */ DMI_TXT_MSGList_status_T_DMI_Types_Pkg *outStatusList,
  /* manage_TextMessages_Pkg::sendTextMessage::dmi_textMessage */ DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_textMessage)
{
  /* manage_TextMessages_Pkg::sendTextMessage */
  static DMI_TXT_MSG_status_T_DMI_Types_Pkg mk_struct;
  /* manage_TextMessages_Pkg::sendTextMessage::needsStore */
  static kcg_bool needsStore;
  
  needsStore = (Q_TEXTCONFIRM_No_confirmation_required !=
      (*intextMessage).q_textConfirm) & (*intextMessage).valid;
  /* ck_needsStore */ if (needsStore) {
    mk_struct.valid = kcg_true;
    mk_struct.dmi_textMessageID = (*intextMessage).textMessage_ID;
    mk_struct.timeStamp = inSystemTime;
    mk_struct.textReport = inTextReport;
    mk_struct.context = inContext;
    mk_struct.nid_textmessage = inNID_TextMessage;
    mk_struct.whichLevel = inWhichLevel;
    mk_struct.whichMode = inWhichMode;
    /* 1 */
    saveStatus_manage_TextMessages_Pkg(inStatusList, &mk_struct, outStatusList);
    kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
      dmi_textMessage,
      intextMessage);
  }
  else /* ck_anon_activ */ if ((*intextMessage).valid) {
    kcg_copy_DMI_TXT_MSGList_status_T_DMI_Types_Pkg(
      outStatusList,
      inStatusList);
    kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
      dmi_textMessage,
      intextMessage);
  }
  else {
    kcg_copy_DMI_TXT_MSGList_status_T_DMI_Types_Pkg(
      outStatusList,
      inStatusList);
    kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
      dmi_textMessage,
      (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
        &cDefaultText_manage_DMI_Output_Pkg);
  }
}
/* manage_DMI_Output_Pkg::doTextMessages */
void doTextMessages_manage_DMI_Output_Pkg(
  /* manage_DMI_Output_Pkg::doTextMessages::dmi_FromBG */ kcg_bool dmi_FromBG,
  /* manage_DMI_Output_Pkg::doTextMessages::inSystemTime */ T_internal_Type_Obu_BasicTypes_Pkg inSystemTime,
  /* manage_DMI_Output_Pkg::doTextMessages::dmi_textMessage */ DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_textMessage)
{
  if (dmi_FromBG) {
    kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
      dmi_textMessage,
      (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
        &cTextSpecial_BG_manage_DMI_Output_Pkg);
    (*dmi_textMessage).system_clock = inSystemTime;
  }
  else {
    kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
      dmi_textMessage,
      (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
        &cDefaultText_manage_DMI_Output_Pkg);
  }
}
/* manage_TextMessages_Pkg::manageTextMessages */
void manageTextMessages_manage_TextMessages_Pkg(
  /* manage_TextMessages_Pkg::manageTextMessages::inSystemTime */ T_internal_Type_Obu_BasicTypes_Pkg inSystemTime,
  /* manage_TextMessages_Pkg::manageTextMessages::inStatusList */ DMI_TXT_MSGList_status_T_DMI_Types_Pkg *inStatusList,
  /* manage_TextMessages_Pkg::manageTextMessages::dmi_FromBG */ kcg_bool dmi_FromBG,
  /* manage_TextMessages_Pkg::manageTextMessages::inModeLevel_Ack */ T_AcknoledgementRequest_Level_And_Mode_Types_Pkg *inModeLevel_Ack,
  /* manage_TextMessages_Pkg::manageTextMessages::announcedLevelTransition */ T_AnnouncedLevel_Level_And_Mode_Types_Pkg *announcedLevelTransition,
  /* manage_TextMessages_Pkg::manageTextMessages::dmi_textMessage */ DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_textMessage,
  /* manage_TextMessages_Pkg::manageTextMessages::outStatusList */ DMI_TXT_MSGList_status_T_DMI_Types_Pkg *outStatusList)
{
  /* manage_TextMessages_Pkg::manageTextMessages */ DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg tmp1;
  /* manage_TextMessages_Pkg::manageTextMessages */ DMI_context_TXT_MSG_T_DMI_Types_Pkg tmp;
  /* manage_TextMessages_Pkg::manageTextMessages::levelNeedsAck */ kcg_bool levelNeedsAck;
  /* manage_TextMessages_Pkg::manageTextMessages::modeChange */ kcg_bool modeChange;
  /* manage_TextMessages_Pkg::manageTextMessages::_L29 */ kcg_bool _L29;
  
  /* ck__L6 */ if ((*inModeLevel_Ack).valid) {
    _L29 = /* 1 */
      checkIfNeeded_manage_TextMessages_Pkg(
        inModeLevel_Ack,
        (*announcedLevelTransition).LevelTransition.transition.level,
        inStatusList);
  }
  else {
    _L29 = kcg_false;
  }
  levelNeedsAck = (*inModeLevel_Ack).LevelNeedsAck & _L29;
  modeChange = _L29 & !levelNeedsAck;
  /* ck_modeChange */ if (modeChange) {
    switch ((*inModeLevel_Ack).whichMode) {
      case M_MODE_Staff_Responsible :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Mode_SR_manage_TextMessages_Pkg);
        break;
      case M_MODE_On_Sight :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Mode_OS_manage_TextMessages_Pkg);
        break;
      case M_MODE_Shunting :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Mode_SH_manage_TextMessages_Pkg);
        break;
      case M_MODE_Limited_Supervision :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Mode_LS_manage_TextMessages_Pkg);
        break;
      case M_MODE_National_System :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Mode_SN_manage_TextMessages_Pkg);
        break;
      case M_MODE_Unfitted :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Mode_UN_manage_TextMessages_Pkg);
        break;
      case M_MODE_Trip :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Mode_TR_manage_TextMessages_Pkg);
        break;
      
      default :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cDefaultText_manage_DMI_Output_Pkg);
    }
    tmp = con_modeChange_DMI_Types_Pkg;
  }
  else /* ck_anon_activ */ if (levelNeedsAck) {
    switch ((*announcedLevelTransition).LevelTransition.transition.level) {
      case M_LEVEL_Level_0 :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Level_0_manage_TextMessages_Pkg);
        break;
      case M_LEVEL_Level_1 :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Level_1_manage_TextMessages_Pkg);
        break;
      case M_LEVEL_Level_2 :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Level_2_manage_TextMessages_Pkg);
        break;
      case M_LEVEL_Level_3 :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Level_3_manage_TextMessages_Pkg);
        break;
      case M_LEVEL_Level_NTC_specified_by_NID_NTC :
        kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
          &tmp1,
          (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
            &cText_Level_NTC_manage_TextMessages_Pkg);
        break;
      
    }
    /* 1 */ if ((*inModeLevel_Ack).LevelNeedsAck) {
      tmp1.q_textConfirm = Q_TEXTCONFIRM_Confirmation_required;
    }
    else {
      tmp1.q_textConfirm = Q_TEXTCONFIRM_No_confirmation_required;
    }
    tmp = con_levelMgmt_DMI_Types_Pkg;
  }
  else /* ck_anon_activ */ if (dmi_FromBG) {
    kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
      &tmp1,
      (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
        &cTextSpecial_BG_manage_DMI_Output_Pkg);
    tmp = con_trackRequest_DMI_Types_Pkg;
  }
  else {
    kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
      &tmp1,
      (DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *)
        &cDefaultText_manage_DMI_Output_Pkg);
    tmp = con_undefined_DMI_Types_Pkg;
  }
  /* 2 */
  sendTextMessage_manage_TextMessages_Pkg(
    inSystemTime,
    inStatusList,
    &tmp1,
    Q_TEXTREPORT_No_driver_acknowledgement_report_required,
    111,
    tmp,
    (*inModeLevel_Ack).whichMode,
    (*announcedLevelTransition).LevelTransition.transition.level,
    outStatusList,
    dmi_textMessage);
}
/* manage_DMI_Output_Pkg::collectDMIPackets */
void collectDMIPackets_manage_DMI_Output_Pkg(
  /* manage_DMI_Output_Pkg::collectDMIPackets::TIU_TrainStatus */TIU_trainStatus_T_TIU_Types_Pkg *TIU_TrainStatus,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_dynamic */DMI_Dynamic_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_dynamic,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_menuRequest */DMI_Menu_Request_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_menuRequest,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_entryRequest */DMI_Entry_Request_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_entryRequest,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_evc_coded_train_data */DMI_EVC_Coded_Train_Data_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_evc_coded_train_data,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_text_message */DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_text_message,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_trackDescription */DMI_Track_Description_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_trackDescription,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_identifierRequest */DMI_Identifier_Request_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_identifierRequest,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_systemVersion */DMI_System_Version_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_systemVersion,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_displayControl */DMI_Display_Control_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_displayControl,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_EVC_levelData */DMI_EVC_Level_Data_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_EVC_levelData,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_EVC_radioNet */DMI_EVC_Radio_Net_Data_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_EVC_radioNet,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_driverIdentifier */DMI_Driver_Identifier_T_DMI_Messages_Bothways_Pkg *dmi_driverIdentifier,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_trainRunningNumber */DMI_Train_Running_Number_T_DMI_Messages_Bothways_Pkg *dmi_trainRunningNumber,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_trainData */DMI_Train_Data_T_DMI_Messages_Bothways_Pkg *dmi_trainData,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_adhesionFactor */DMI_Adhesion_Factor_Data_T_DMI_Messages_Bothways_Pkg *dmi_adhesionFactor,
  /* manage_DMI_Output_Pkg::collectDMIPackets::dmi_iconRequest */DMI_Icons_T_DMI_Messages_EVC_to_DMI_Pkg *dmi_iconRequest,
  /* manage_DMI_Output_Pkg::collectDMIPackets::systemTime */T_internal_Type_Obu_BasicTypes_Pkg systemTime,
  outC_collectDMIPackets_manage_DMI_Output_Pkg *outC)
{
  static dmiOutputs_T_manage_DMI_Output_Pkg tmp;
  
  outC->to_DMI.present = (*dmi_dynamic).valid | (*dmi_menuRequest).valid |
    (*dmi_entryRequest).valid | (*dmi_evc_coded_train_data).valid |
    (*dmi_text_message).valid | (*dmi_trackDescription).valid |
    (*dmi_identifierRequest).valid | (*dmi_systemVersion).valid |
    ((*dmi_displayControl).valid | (*dmi_EVC_levelData).valid |
      (*dmi_EVC_radioNet).valid | (*dmi_driverIdentifier).valid |
      (*dmi_trainRunningNumber).valid | (*dmi_trainData).valid |
      (*dmi_adhesionFactor).valid | (*dmi_iconRequest).valid);
  kcg_copy_DMI_Dynamic_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.dynamic,
    dmi_dynamic);
  kcg_copy_DMI_Menu_Request_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.menu_request,
    dmi_menuRequest);
  kcg_copy_DMI_Entry_Request_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.entry_request,
    dmi_entryRequest);
  kcg_copy_DMI_EVC_Coded_Train_Data_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.evc_coded_train_data,
    dmi_evc_coded_train_data);
  kcg_copy_DMI_Text_Message_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.textMessage,
    dmi_text_message);
  kcg_copy_DMI_Track_Description_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.trackDescription,
    dmi_trackDescription);
  kcg_copy_DMI_System_Version_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.systemVersion,
    dmi_systemVersion);
  kcg_copy_DMI_Display_Control_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.displayControl,
    dmi_displayControl);
  kcg_copy_DMI_EVC_Level_Data_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.EVC_levelData,
    dmi_EVC_levelData);
  kcg_copy_DMI_EVC_Radio_Net_Data_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.EVC_radioNetData,
    dmi_EVC_radioNet);
  kcg_copy_DMI_Driver_Identifier_T_DMI_Messages_Bothways_Pkg(
    &outC->to_DMI.driverIdentifier,
    dmi_driverIdentifier);
  kcg_copy_DMI_Train_Running_Number_T_DMI_Messages_Bothways_Pkg(
    &outC->to_DMI.trainRunningNumber,
    dmi_trainRunningNumber);
  kcg_copy_DMI_Train_Data_T_DMI_Messages_Bothways_Pkg(
    &outC->to_DMI.trainData,
    dmi_trainData);
  kcg_copy_DMI_Adhesion_Factor_Data_T_DMI_Messages_Bothways_Pkg(
    &outC->to_DMI.adhesionFactor,
    dmi_adhesionFactor);
  kcg_copy_DMI_Icons_T_DMI_Messages_EVC_to_DMI_Pkg(
    &outC->to_DMI.iconRequest,
    dmi_iconRequest);
  if (outC->init) {
    outC->init = kcg_false;
    kcg_copy_dmiOutputs_T_manage_DMI_Output_Pkg(
      &tmp,
      (dmiOutputs_T_manage_DMI_Output_Pkg *)
        &cOutputStatus_manage_DMI_Output_Pkg);
  }
  else {
    kcg_copy_dmiOutputs_T_manage_DMI_Output_Pkg(&tmp, &outC->rem_outputStatus);
  }
  /* 1 */
  synchWithDMI_manage_DMI_Output_Pkg(
    dmi_identifierRequest,
    TIU_TrainStatus,
    &tmp,
    systemTime,
    &outC->to_DMI.identifierRequest,
    &outC->rem_outputStatus);
}