/* registeringToTheRadioNetwork */
void MoRC_registeringToTheRadioNetwork(
  /* registeringToTheRadioNetwork::atPowerUp */kcg_bool atPowerUp,
  /* registeringToTheRadioNetwork::afterDriverEntryOfANewRadioNetworkID */kcg_bool afterDriverEntryOfANewRadioNetworkID,
  /* registeringToTheRadioNetwork::etcs_level */MoRC_M_LEVEL_Type etcs_level,
  /* registeringToTheRadioNetwork::registrationOrderedFromTrackside */kcg_bool registrationOrderedFromTrackside,
  /* registeringToTheRadioNetwork::registrationOrderFromTracksideCancelled */kcg_bool registrationOrderFromTracksideCancelled,
  /* registeringToTheRadioNetwork::atPowerOff */kcg_bool atPowerOff,
  /* registeringToTheRadioNetwork::RadioNetworkID_memorized */MoRC_validRadioNetworkID_Type *RadioNetworkID_memorized,
  /* registeringToTheRadioNetwork::RadioNetworkID_fromDriver */MoRC_validRadioNetworkID_Type *RadioNetworkID_fromDriver,
  /* registeringToTheRadioNetwork::RadioNetworkID_fromTrackside */MoRC_validRadioNetworkID_Type *RadioNetworkID_fromTrackside,
  /* registeringToTheRadioNetwork::triggerDecisionThatNoRadioNetworkIDAvailable */kcg_bool triggerDecisionThatNoRadioNetworkIDAvailable,
  /* registeringToTheRadioNetwork::mobileHWStatus */MoRC_mobileHWStatus_Type *mobileHWStatus,
  /* registeringToTheRadioNetwork::mobileSWCmd */MoRC_mobileSWCmd_Type *mobileSWCmd,
  /* registeringToTheRadioNetwork::RadioNetworkID_Default */MoRC_validRadioNetworkID_Type *RadioNetworkID_Default,
  MoRC_outC_registeringToTheRadioNetwork *outC)
{
  MoRC_struct__10898 tmp;
  /* registeringToTheRadioNetwork::_L32 */ kcg_bool _L32;
  /* registeringToTheRadioNetwork::_L44 */ kcg_bool _L44;
  /* registeringToTheRadioNetwork::_L76 */ MoRC_mobileSWStatus_Type _L76;
  /* registeringToTheRadioNetwork::_L89 */ kcg_bool _L89;
  /* registeringToTheRadioNetwork::_L95 */ kcg_bool _L95;
  /* registeringToTheRadioNetwork::_L99 */ kcg_bool _L99;
  /* registeringToTheRadioNetwork::_L103 */ kcg_bool _L103;
  /* registeringToTheRadioNetwork::_L120 */ kcg_bool _L120;
  
  /* 3 */ MoRC_RisingEdge_digital(atPowerUp, &outC->Context_3);
  _L32 = (*RadioNetworkID_fromDriver).valid &&
    afterDriverEntryOfANewRadioNetworkID;
  _L44 = (*RadioNetworkID_fromTrackside).valid &&
    registrationOrderedFromTrackside;
  if (outC->init) {
    outC->_L108 = kcg_false;
    _L89 = kcg_true;
  }
  else {
    outC->_L108 = !registrationOrderFromTracksideCancelled &&
      (registrationOrderedFromTrackside || outC->_L108);
    _L89 = outC->noValidActualRadioNetworkID_available;
  }
  _L95 = (*RadioNetworkID_Default).valid &&
    triggerDecisionThatNoRadioNetworkIDAvailable && _L89;
  if (((*RadioNetworkID_memorized).valid && outC->Context_3.RE_Output) ||
    _L32 || _L44 || _L95) {
    if (_L95) {
      MoRC_kcg_copy_validRadioNetworkID_Type(
        &outC->actualRadioNetworkID,
        RadioNetworkID_Default);
    }
    else if (_L44) {
      MoRC_kcg_copy_validRadioNetworkID_Type(
        &outC->actualRadioNetworkID,
        RadioNetworkID_fromTrackside);
    }
    else if (_L32) {
      MoRC_kcg_copy_validRadioNetworkID_Type(
        &outC->actualRadioNetworkID,
        RadioNetworkID_fromDriver);
    }
    else {
      MoRC_kcg_copy_validRadioNetworkID_Type(
        &outC->actualRadioNetworkID,
        RadioNetworkID_memorized);
    }
  }
  else if (outC->init) {
    MoRC_kcg_copy_validRadioNetworkID_Type(
      &outC->actualRadioNetworkID,
      (MoRC_validRadioNetworkID_Type *) &MoRC_cInvalidRadioNetworkID);
  }
  outC->noValidActualRadioNetworkID_available =
    !outC->actualRadioNetworkID.valid;
  outC->orderTheRegistrationOfItsConnectedMobiles = outC->Context_3.RE_Output ||
    (afterDriverEntryOfANewRadioNetworkID && (MoRC_ETCS_Level_2 == etcs_level ||
        etcs_level == MoRC_ETCS_Level_3)) ||
    (triggerDecisionThatNoRadioNetworkIDAvailable &&
      outC->noValidActualRadioNetworkID_available);
  /* 2 */ MoRC_RisingEdge_digital(atPowerOff, &outC->Context_2);
  outC->memorizeTheLastRadioNetworkID = outC->Context_2.RE_Output &&
    outC->actualRadioNetworkID.valid;
  if (outC->init) {
    outC->init = kcg_false;
    MoRC_kcg_copy_mobileSWStatus_Type(
      &_L76,
      (MoRC_mobileSWStatus_Type *) &MoRC_cInvalidMobileSWStatus);
  }
  else {
    MoRC_kcg_copy_mobileSWStatus_Type(&_L76, &outC->mobileSWStatus);
  }
  _L89 = _L76.connectionStatus == MoRC_mswc_unregistered;
  _L95 = _L89 || (MoRC_mswc_unregistered != _L76.connectionStatus &&
      _L76.registeredRadioNetworkID !=
      outC->actualRadioNetworkID.radioNetworkID);
  _L99 = !(_L76.connectionStatus == MoRC_mswc_establishingSession ||
      _L76.connectionStatus == MoRC_mswc_sessionEstablished);
  _L103 = !(_L76.connectionStatus == MoRC_mswc_connecting ||
      _L76.connectionStatus == MoRC_mswc_connected);
  /* 4 */
  MoRC_RisingEdge_digital(
    (kcg_bool) (outC->_L108 && _L95 && _L99 && _L103),
    &outC->Context_4);
  _L120 = (_L76.valid && _L76.mobileHW_available &&
      ((registrationOrderedFromTrackside && _L95 && _L99 && _L103) ||
        outC->Context_4.RE_Output)) ||
    outC->orderTheRegistrationOfItsConnectedMobiles || (_L32 || _L44);
  if (_L120) {
    tmp.valid = _L120;
    tmp.action = MoRC_mswa_register;
    tmp.radioNetworkID = outC->actualRadioNetworkID.radioNetworkID;
  }
  else {
    MoRC_kcg_copy_mobileSWCmd_Type(&tmp, mobileSWCmd);
  }
  /* 1 */ MoRC_radioNetworkMobile(mobileHWStatus, &tmp, &outC->Context_1);
  MoRC_kcg_copy_mobileHWCmd_Type(
    &outC->mobileHWCmd,
    &outC->Context_1.mobileHWCmd);
  MoRC_kcg_copy_mobileSWStatus_Type(
    &outC->mobileSWStatus,
    &outC->Context_1.mobileSWStatus);
  outC->rejectOrderToContactRBC_or_RIU = _L89 || _L76.connectionStatus ==
    MoRC_mswc_registering;
}
/* managementOfRadioCommunication */
void MoRC_managementOfRadioCommunication(
  /* managementOfRadioCommunication::actualTime */MoRC_time_Type actualTime,
  /* managementOfRadioCommunication::acknowledgementOfTerminationOfCommunicationSessionReceived */kcg_bool acknowledgementOfTerminationOfCommunicationSessionReceived,
  /* managementOfRadioCommunication::orderReceivedFromTrackside */MoRC_orderToContactAnRBC_Type *orderReceivedFromTrackside,
  /* managementOfRadioCommunication::orderReceivedFromRBC */MoRC_orderToContactAnRBC_Type *orderReceivedFromRBC,
  /* managementOfRadioCommunication::orderReceivedFromRadio_InfillUnit */MoRC_orderToContactAnRBC_Type *orderReceivedFromRadio_InfillUnit,
  /* managementOfRadioCommunication::errorConditionRequiringTerminationDetected */kcg_bool errorConditionRequiringTerminationDetected,
  /* managementOfRadioCommunication::trainIsRejectedByRBC_duringStartOfMission */kcg_bool trainIsRejectedByRBC_duringStartOfMission,
  /* managementOfRadioCommunication::driverClosesTheDeskduringStartOfMission */kcg_bool driverClosesTheDeskduringStartOfMission,
  /* managementOfRadioCommunication::trainExitedFromAnRBCArea */kcg_bool trainExitedFromAnRBCArea,
  /* managementOfRadioCommunication::endOfMissionIsExecuted */kcg_bool endOfMissionIsExecuted,
  /* managementOfRadioCommunication::isInCommunicationSessionWithAnRIU */kcg_bool isInCommunicationSessionWithAnRIU,
  /* managementOfRadioCommunication::atPowerUp */kcg_bool atPowerUp,
  /* managementOfRadioCommunication::atPowerOff */kcg_bool atPowerOff,
  /* managementOfRadioCommunication::M_LEVEL */MoRC_M_LEVEL_Type M_LEVEL,
  /* managementOfRadioCommunication::RadioNetworkID_memorized */MoRC_validRadioNetworkID_Type *RadioNetworkID_memorized,
  /* managementOfRadioCommunication::RadioNetworkID_fromDriver */MoRC_validRadioNetworkID_Type *RadioNetworkID_fromDriver,
  /* managementOfRadioCommunication::RadioNetworkID_fromTrackside */MoRC_validRadioNetworkID_Type *RadioNetworkID_fromTrackside,
  /* managementOfRadioCommunication::afterDriverEntryOfANewRadioNetworkID */kcg_bool afterDriverEntryOfANewRadioNetworkID,
  /* managementOfRadioCommunication::triggerDecisionThatNoRadioNetworkIDAvailable */kcg_bool triggerDecisionThatNoRadioNetworkIDAvailable,
  /* managementOfRadioCommunication::mobileHWStatus */MoRC_mobileHWStatus_Type *mobileHWStatus,
  /* managementOfRadioCommunication::isPartOfAnOngoingStartOfMissionProcedure */kcg_bool isPartOfAnOngoingStartOfMissionProcedure,
  /* managementOfRadioCommunication::trainPassesALevelTransitionBorder */kcg_bool trainPassesALevelTransitionBorder,
  /* managementOfRadioCommunication::orderToEstablishACommunicationSession_fromOBU */MoRC_orderToContactAnRBC_Type *orderToEstablishACommunicationSession_fromOBU,
  /* managementOfRadioCommunication::orderDoesNotRequestToContactAnAcceptingRBC */kcg_bool orderDoesNotRequestToContactAnAcceptingRBC,
  /* managementOfRadioCommunication::trainPassesA_RBC_RBC_border_WithItsFrontEnd */kcg_bool trainPassesA_RBC_RBC_border_WithItsFrontEnd,
  /* managementOfRadioCommunication::systemVersionFromTracksideSupported */kcg_bool systemVersionFromTracksideSupported,
  /* managementOfRadioCommunication::systemVersionReceived */kcg_bool systemVersionReceived,
  /* managementOfRadioCommunication::M_MODE */MoRC_M_MODE_Type M_MODE,
  /* managementOfRadioCommunication::atStartOfMission */kcg_bool atStartOfMission,
  /* managementOfRadioCommunication::modeChangeHasToBeReportedToRBC */kcg_bool modeChangeHasToBeReportedToRBC,
  /* managementOfRadioCommunication::driverHasManuallyChangedLevel */kcg_bool driverHasManuallyChangedLevel,
  /* managementOfRadioCommunication::trainFrontReachesEndOfAnnouncedRadioHole */kcg_bool trainFrontReachesEndOfAnnouncedRadioHole,
  /* managementOfRadioCommunication::startOfMissionProcedureCompleted */kcg_bool startOfMissionProcedureCompleted,
  /* managementOfRadioCommunication::trainFrontInsideInAnAnnouncedRadioHole */kcg_bool trainFrontInsideInAnAnnouncedRadioHole,
  /* managementOfRadioCommunication::OBU_hasToEstablishANewSession */kcg_bool OBU_hasToEstablishANewSession,
  /* managementOfRadioCommunication::startOfMissionProcedureIsGoingOn */kcg_bool startOfMissionProcedureIsGoingOn,
  /* managementOfRadioCommunication::RadioNetworkID_Default */MoRC_validRadioNetworkID_Type *RadioNetworkID_Default,
  /* managementOfRadioCommunication::connectionStatusTimerInterval */MoRC_time_Type connectionStatusTimerInterval,
  MoRC_outC_managementOfRadioCommunication *outC)
{
  MoRC_mobileSWCmd_Type tmp;
  /* managementOfRadioCommunication::CommunicationSession_SM::NoSession::_L38 */ kcg_bool _L38_CommunicationSession_SM_NoSession;
  /* managementOfRadioCommunication::CommunicationSession_SM::NoSession::_L37 */ kcg_bool _L37_CommunicationSession_SM_NoSession;
  /* managementOfRadioCommunication::CommunicationSession_SM::Establishing */ kcg_bool br_1_guard_CommunicationSession_SM_Establishing;
  /* managementOfRadioCommunication::CommunicationSession_SM::Establishing::_L35 */ kcg_bool _L35_CommunicationSession_SM_Establishing;
  /* managementOfRadioCommunication::CommunicationSession_SM::Establishing::_L31 */ kcg_bool _L31_CommunicationSession_SM_Establishing;
  /* managementOfRadioCommunication::CommunicationSession_SM::Establishing::_L19 */ kcg_bool _L19_CommunicationSession_SM_Establishing;
  /* managementOfRadioCommunication::CommunicationSession_SM::Establishing::_L21 */ kcg_bool _L21_CommunicationSession_SM_Establishing;
  /* managementOfRadioCommunication::CommunicationSession_SM::Establishing::_L23 */ kcg_bool _L23_CommunicationSession_SM_Establishing;
  /* managementOfRadioCommunication::CommunicationSession_SM::Establishing::_L24 */ kcg_bool _L24_CommunicationSession_SM_Establishing;
  /* managementOfRadioCommunication::CommunicationSession_SM::Establishing::_L25 */ kcg_bool _L25_CommunicationSession_SM_Establishing;
  /* managementOfRadioCommunication::CommunicationSession_SM::Maintaining */ kcg_bool br_1_guard_CommunicationSession_SM_Maintaining;
  /* managementOfRadioCommunication::CommunicationSession_SM::Maintaining::_L2 */ kcg_bool _L2_CommunicationSession_SM_Maintaining;
  /* managementOfRadioCommunication::CommunicationSession_SM::Terminating::_L12 */ kcg_bool _L12_CommunicationSession_SM_Terminating;
  /* managementOfRadioCommunication::CommunicationSession_SM::Terminating::_L1 */ kcg_bool _L1_CommunicationSession_SM_Terminating;
  /* managementOfRadioCommunication::CommunicationSession_SM::Terminating::_L3 */ kcg_bool _L3_CommunicationSession_SM_Terminating;
  /* managementOfRadioCommunication::mobileSWStatus_loc */ MoRC_mobileSWStatus_Type last_mobileSWStatus_loc;
  /* managementOfRadioCommunication::establishingACommunicationSessionAborted */ kcg_bool last_establishingACommunicationSessionAborted;
  /* managementOfRadioCommunication::sessionStatus */ MoRC_sessionStatus_Type last_sessionStatus;
  /* managementOfRadioCommunication::communicationSessionInitiatedFromTrackside */ kcg_bool last_communicationSessionInitiatedFromTrackside;
  /* managementOfRadioCommunication::communicationSessionInitiatedByOBU */ kcg_bool last_communicationSessionInitiatedByOBU;
  /* managementOfRadioCommunication::sessionEstablished */ kcg_bool last_sessionEstablished;
  /* managementOfRadioCommunication::sessionSuccessfullyEstablished */ kcg_bool last_sessionSuccessfullyEstablished;
  /* managementOfRadioCommunication::CommunicationSession_SM */ MoRC_SSM_ST_CommunicationSession_SM CommunicationSession_SM_state_act;
  /* managementOfRadioCommunication::CommunicationSession_SM */ kcg_bool CommunicationSession_SM_reset_sel;
  /* managementOfRadioCommunication::initiateTermination */ kcg_bool initiateTermination;
  
  if (outC->init) {
    last_sessionSuccessfullyEstablished = kcg_false;
    last_sessionEstablished = kcg_false;
    last_communicationSessionInitiatedByOBU = kcg_false;
    last_communicationSessionInitiatedFromTrackside = kcg_false;
    last_establishingACommunicationSessionAborted = kcg_false;
    initiateTermination = kcg_false;
    MoRC_kcg_copy_mobileSWStatus_Type(
      &last_mobileSWStatus_loc,
      (MoRC_mobileSWStatus_Type *) &MoRC_cInvalidMobileSWStatus);
    last_sessionStatus = MoRC_morc_st_inactive;
    CommunicationSession_SM_state_act =
      MoRC_SSM_st_NoSession_CommunicationSession_SM;
    outC->init = kcg_false;
    CommunicationSession_SM_reset_sel = kcg_false;
  }
  else {
    initiateTermination =
      outC->prevSessionTerminatedDueToLossOfSafeRadioConnection;
    MoRC_kcg_copy_mobileSWStatus_Type(
      &last_mobileSWStatus_loc,
      &outC->mobileSWStatus);
    last_establishingACommunicationSessionAborted =
      outC->establishingACommunicationSessionAborted;
    last_sessionStatus = outC->sessionStatus;
    last_communicationSessionInitiatedFromTrackside =
      outC->communicationSessionInitiatedFromTrackside;
    last_communicationSessionInitiatedByOBU =
      outC->communicationSessionInitiatedByOBU;
    last_sessionEstablished = outC->sessionEstablished;
    last_sessionSuccessfullyEstablished = outC->sessionSuccessfullyEstablished;
    CommunicationSession_SM_state_act = outC->CommunicationSession_SM_state_nxt;
    CommunicationSession_SM_reset_sel = outC->CommunicationSession_SM_reset_nxt;
  }
  switch (CommunicationSession_SM_state_act) {
    case MoRC_SSM_st_NoSession_CommunicationSession_SM :
      outC->sessionStatus = MoRC_morc_st_inactive;
      break;
    case MoRC_SSM_st_Establishing_CommunicationSession_SM :
      outC->sessionStatus = MoRC_morc_st_establishing;
      break;
    case MoRC_SSM_st_Maintaining_CommunicationSession_SM :
      outC->sessionStatus = MoRC_morc_st_maintaining;
      break;
    case MoRC_SSM_st_Terminating_CommunicationSession_SM :
      outC->sessionStatus = MoRC_morc_st_terminating;
      break;
    
  }
  /* 1 */
  MoRC_terminateAndEstablishSession(
    orderReceivedFromTrackside,
    outC->sessionStatus,
    OBU_hasToEstablishANewSession,
    &outC->_9_Context_1);
  switch (CommunicationSession_SM_state_act) {
    case MoRC_SSM_st_Terminating_CommunicationSession_SM :
      br_1_guard_CommunicationSession_SM_Maintaining = kcg_false;
      _L38_CommunicationSession_SM_NoSession = kcg_false;
      if (CommunicationSession_SM_reset_sel) {
        /* 1 */
        MoRC_terminating_a_CommunicationSession_reset(&outC->_7_Context_1);
      }
      /* 1 */
      MoRC_terminating_a_CommunicationSession(
        kcg_true,
        (kcg_bool) (MoRC_morc_st_maintaining == last_sessionStatus),
        acknowledgementOfTerminationOfCommunicationSessionReceived,
        (kcg_bool) (last_sessionStatus == MoRC_morc_st_establishing),
        actualTime,
        last_establishingACommunicationSessionAborted,
        &outC->_7_Context_1);
      _L1_CommunicationSession_SM_Terminating =
        outC->_7_Context_1.sendATerminationOfCommunicationMessage;
      _L3_CommunicationSession_SM_Terminating =
        outC->_7_Context_1.ignoreMessagesFromRBC_exceptAckOfTerminationOfCommunicationSession;
      _L12_CommunicationSession_SM_Terminating =
        outC->_7_Context_1.communicationSessionTerminated;
      if (outC->_7_Context_1.requestReleaseOfSafeRadioConnectionWithTrackside) {
        MoRC_kcg_copy_mobileSWCmd_Type(
          &tmp,
          (MoRC_mobileSWCmd_Type *) &MoRC_cTerminateSafeRadioConnectionCmd);
      }
      else {
        MoRC_kcg_copy_mobileSWCmd_Type(
          &tmp,
          (MoRC_mobileSWCmd_Type *) &MoRC_cInvalidMobileSWCmd);
      }
      br_1_guard_CommunicationSession_SM_Establishing = kcg_false;
      outC->prevSessionTerminatedDueToLossOfSafeRadioConnection =
        initiateTermination;
      break;
    case MoRC_SSM_st_Maintaining_CommunicationSession_SM :
      br_1_guard_CommunicationSession_SM_Maintaining = kcg_false;
      _L38_CommunicationSession_SM_NoSession = kcg_false;
      if (CommunicationSession_SM_reset_sel) {
        /* 1 */
        MoRC_maintaining_a_CommunicationSession_reset(&outC->_6_Context_1);
      }
      /* 1 */
      MoRC_maintaining_a_CommunicationSession(
        last_sessionEstablished,
        (kcg_bool)
          (last_mobileSWStatus_loc.valid && MoRC_mswc_registered ==
            last_mobileSWStatus_loc.connectionStatus),
        (kcg_bool)
          (last_mobileSWStatus_loc.valid &&
            last_mobileSWStatus_loc.connectionStatus == MoRC_mswc_unregistered),
        kcg_true,
        trainFrontInsideInAnAnnouncedRadioHole,
        actualTime,
        &outC->_6_Context_1);
      _L2_CommunicationSession_SM_Maintaining =
        outC->_6_Context_1.informTheDriverThatNoConnectionWasSetup;
      if (outC->_6_Context_1.requestsToSetupTheSafeRadioConnectionStopped) {
        MoRC_kcg_copy_mobileSWCmd_Type(
          &tmp,
          (MoRC_mobileSWCmd_Type *) &MoRC_cTerminateSafeRadioConnectionCmd);
      }
      else if (outC->_6_Context_1.tryToSetupANewSafeRadioConnection) {
        MoRC_kcg_copy_mobileSWCmd_Type(
          &tmp,
          (MoRC_mobileSWCmd_Type *) &MoRC_cRegisterSafeRadioConnectionCmd);
      }
      else {
        MoRC_kcg_copy_mobileSWCmd_Type(
          &tmp,
          (MoRC_mobileSWCmd_Type *) &MoRC_cInvalidMobileSWCmd);
      }
      outC->prevSessionTerminatedDueToLossOfSafeRadioConnection =
        outC->_6_Context_1.finalAttemptToSetupTheSafeRadioConnectionFailed;
      br_1_guard_CommunicationSession_SM_Establishing =
        outC->_6_Context_1.firstRequestToSetupASafeRadioConnection;
      break;
    case MoRC_SSM_st_Establishing_CommunicationSession_SM :
      if (CommunicationSession_SM_reset_sel) {
        /* 2 */
        MoRC_establish_a_CommunicationSession_reset(&outC->_8_Context_2);
      }
      /* 2 */
      MoRC_establish_a_CommunicationSession(
        isPartOfAnOngoingStartOfMissionProcedure,
        (kcg_bool)
          (last_mobileSWStatus_loc.valid &&
            last_mobileSWStatus_loc.connectionStatus == MoRC_mswc_registered),
        last_mobileSWStatus_loc.settingUpConnectionHasFailed,
        endOfMissionIsExecuted,
        trainPassesALevelTransitionBorder,
        &outC->_9_Context_1.newOrderToEstablishASession_out,
        orderToEstablishACommunicationSession_fromOBU,
        orderDoesNotRequestToContactAnAcceptingRBC,
        trainPassesA_RBC_RBC_border_WithItsFrontEnd,
        systemVersionFromTracksideSupported,
        systemVersionReceived,
        last_communicationSessionInitiatedFromTrackside,
        last_communicationSessionInitiatedByOBU,
        last_communicationSessionInitiatedFromTrackside,
        &outC->_8_Context_2);
      _L19_CommunicationSession_SM_Establishing =
        outC->_8_Context_2.InformTheDriverThatNoConnectionWasSetup;
      _L21_CommunicationSession_SM_Establishing =
        outC->_8_Context_2.sendTheMessageInitiationOfCommunicationSessionToTrackside;
      _L23_CommunicationSession_SM_Establishing =
        outC->_8_Context_2.sendMessage_NoCompatibleVersionSupported;
      _L24_CommunicationSession_SM_Establishing =
        outC->_8_Context_2.terminateTheCommunicationSession;
      _L25_CommunicationSession_SM_Establishing =
        outC->_8_Context_2.sendASessionEstablishedReportToTrackside;
      _L31_CommunicationSession_SM_Establishing =
        outC->_8_Context_2.sessionSuccessfullyEstablished;
      _L35_CommunicationSession_SM_Establishing =
        outC->_8_Context_2.establishingACommunicationSessionAborted;
      _L38_CommunicationSession_SM_NoSession =
        outC->_8_Context_2.requestsToSetupTheSafeRadioConnectionStopped;
      br_1_guard_CommunicationSession_SM_Maintaining =
        outC->_8_Context_2.requestTheSetupOfASafeRadioConnection;
      MoRC_kcg_copy_mobileSWCmd_Type(
        &tmp,
        (MoRC_mobileSWCmd_Type *) &MoRC_cInvalidMobileSWCmd);
      outC->prevSessionTerminatedDueToLossOfSafeRadioConnection =
        outC->_8_Context_2.finalAttemptToSetupTheSafeRadioConnectionFailed;
      br_1_guard_CommunicationSession_SM_Establishing =
        outC->_8_Context_2.firstRequestToSetupASafeRadioConnection;
      break;
    case MoRC_SSM_st_NoSession_CommunicationSession_SM :
      br_1_guard_CommunicationSession_SM_Maintaining = kcg_false;
      _L38_CommunicationSession_SM_NoSession = kcg_false;
      MoRC_kcg_copy_mobileSWCmd_Type(
        &tmp,
        (MoRC_mobileSWCmd_Type *) &MoRC_cInvalidMobileSWCmd);
      br_1_guard_CommunicationSession_SM_Establishing = kcg_false;
      outC->prevSessionTerminatedDueToLossOfSafeRadioConnection =
        initiateTermination;
      break;
    
  }
  /* 1 */
  MoRC_registeringToTheRadioNetwork(
    atPowerUp,
    afterDriverEntryOfANewRadioNetworkID,
    M_LEVEL,
    br_1_guard_CommunicationSession_SM_Maintaining,
    _L38_CommunicationSession_SM_NoSession,
    atPowerOff,
    RadioNetworkID_memorized,
    RadioNetworkID_fromDriver,
    RadioNetworkID_fromTrackside,
    triggerDecisionThatNoRadioNetworkIDAvailable,
    mobileHWStatus,
    &tmp,
    RadioNetworkID_Default,
    &outC->_5_Context_1);
  outC->orderTheRegistrationOfItsConnectedMobiles =
    outC->_5_Context_1.orderTheRegistrationOfItsConnectedMobiles;
  outC->memorizeTheLastRadioNetworkID =
    outC->_5_Context_1.memorizeTheLastRadioNetworkID;
  MoRC_kcg_copy_validRadioNetworkID_Type(
    &outC->actualRadioNetworkID,
    &outC->_5_Context_1.actualRadioNetworkID);
  outC->rejectOrderToContactRBC_or_RIU =
    outC->_5_Context_1.rejectOrderToContactRBC_or_RIU;
  MoRC_kcg_copy_mobileHWCmd_Type(
    &outC->mobileHWCmd,
    &outC->_5_Context_1.mobileHWCmd);
  MoRC_kcg_copy_mobileSWStatus_Type(
    &outC->mobileSWStatus,
    &outC->_5_Context_1.mobileSWStatus);
  br_1_guard_CommunicationSession_SM_Maintaining =
    outC->mobileSWStatus.connectionStatus == MoRC_mswc_registered;
  /* 1 */
  MoRC_FallingEdge_digital(
    (kcg_bool) (M_LEVEL == MoRC_ETCS_Level_1),
    &outC->_4_Context_1);
  /* 2 */
  MoRC_initiateTerminatingASession(
    orderReceivedFromTrackside,
    errorConditionRequiringTerminationDetected,
    trainIsRejectedByRBC_duringStartOfMission,
    driverClosesTheDeskduringStartOfMission,
    trainExitedFromAnRBCArea,
    orderReceivedFromTrackside,
    actualTime,
    isInCommunicationSessionWithAnRIU,
    outC->_4_Context_1.FE_Output,
    endOfMissionIsExecuted,
    &outC->_3_Context_2);
  outC->sendAPositionReport = outC->_3_Context_2.sendAPositionReport;
  initiateTermination = outC->_3_Context_2.initiateTermination ||
    outC->_9_Context_1.initiateTermination;
  /* 2 */
  MoRC_RisingEdge_digital(
    br_1_guard_CommunicationSession_SM_Maintaining,
    &outC->_2_Context_2);
  /* 2 */
  MoRC_FallingEdge_digital(
    br_1_guard_CommunicationSession_SM_Maintaining,
    &outC->Context_2);
  /* 3 */
  MoRC_RisingEdge_digital(
    (kcg_bool)
      (outC->mobileSWStatus.connectionStatus == MoRC_mswc_unregistered),
    &outC->Context_3);
  /* 1 */
  MoRC_safeRadioConnectionIndication(
    startOfMissionProcedureIsGoingOn,
    outC->prevSessionTerminatedDueToLossOfSafeRadioConnection,
    outC->prevSessionTerminatedDueToLossOfSafeRadioConnection,
    _L38_CommunicationSession_SM_NoSession,
    (kcg_bool) (outC->mobileSWStatus.valid && outC->_2_Context_2.RE_Output),
    (kcg_bool) (outC->mobileSWStatus.valid && outC->Context_2.FE_Output),
    (kcg_bool) (outC->mobileSWStatus.valid && outC->Context_3.RE_Output),
    trainFrontInsideInAnAnnouncedRadioHole,
    actualTime,
    br_1_guard_CommunicationSession_SM_Establishing,
    br_1_guard_CommunicationSession_SM_Establishing,
    connectionStatusTimerInterval,
    &outC->_1_Context_1);
  MoRC_kcg_copy_safeRadioConnectionStatusValid_Type(
    &outC->safeRadioConnectionStatus_toDriver,
    &outC->_1_Context_1.connectionStatus);
  switch (CommunicationSession_SM_state_act) {
    case MoRC_SSM_st_NoSession_CommunicationSession_SM :
      outC->InformTheDriverThatNoConnectionWasSetup = kcg_false;
      outC->sendTheMessageInitiationOfCommunicationSessionToTrackside =
        kcg_false;
      outC->sendMessage_NoCompatibleVersionSupported = kcg_false;
      outC->sendASessionEstablishedReportToTrackside = kcg_false;
      outC->sendATerminationOfCommunicationMessage = kcg_false;
      outC->ignoreMessagesFromRBC_exceptAckOfTerminationOfCommunicationSession =
        kcg_false;
      outC->sessionSuccessfullyEstablished = kcg_false;
      outC->sessionEstablished = kcg_false;
      _L38_CommunicationSession_SM_NoSession = /* 2 */
        MoRC_isOrderToEstablishConnection(orderReceivedFromRadio_InfillUnit);
      _L37_CommunicationSession_SM_NoSession = /* 1 */
        MoRC_isOrderToEstablishConnection(orderReceivedFromRBC);
      if (CommunicationSession_SM_reset_sel) {
        /* 1 */ MoRC_Initiate_a_Session_reset(&outC->Context_1);
      }
      /* 1 */
      MoRC_Initiate_a_Session(
        /* isOrderToEstablishConnection */
        MoRC_isOrderToEstablishConnection(
          orderToEstablishACommunicationSession_fromOBU),
        _L37_CommunicationSession_SM_NoSession,
        _L38_CommunicationSession_SM_NoSession,
        M_LEVEL,
        atStartOfMission,
        (kcg_bool)
          (_L37_CommunicationSession_SM_NoSession ||
            _L38_CommunicationSession_SM_NoSession),
        M_MODE,
        modeChangeHasToBeReportedToRBC,
        driverHasManuallyChangedLevel,
        trainFrontReachesEndOfAnnouncedRadioHole,
        outC->prevSessionTerminatedDueToLossOfSafeRadioConnection,
        startOfMissionProcedureCompleted,
        kcg_true,
        outC->_9_Context_1.initiateEstablishingNewSession,
        &outC->Context_1);
      outC->CommunicationSession_SM_reset_nxt =
        outC->Context_1.initiate_a_communicationSession_Request;
      if (outC->Context_1.initiate_a_communicationSession_Request) {
        outC->CommunicationSession_SM_state_nxt =
          MoRC_SSM_st_Establishing_CommunicationSession_SM;
      }
      else {
        outC->CommunicationSession_SM_state_nxt =
          MoRC_SSM_st_NoSession_CommunicationSession_SM;
      }
      outC->establishingACommunicationSessionAborted =
        last_establishingACommunicationSessionAborted;
      outC->communicationSessionInitiatedFromTrackside =
        outC->Context_1.communicationSessionInitiatedFromTrackside_;
      outC->communicationSessionInitiatedByOBU =
        outC->Context_1.communicationSessionInitiatedByOBU_;
      break;
    case MoRC_SSM_st_Establishing_CommunicationSession_SM :
      outC->sendATerminationOfCommunicationMessage = kcg_false;
      outC->ignoreMessagesFromRBC_exceptAckOfTerminationOfCommunicationSession =
        kcg_false;
      br_1_guard_CommunicationSession_SM_Establishing =
        _L24_CommunicationSession_SM_Establishing || initiateTermination;
      if (br_1_guard_CommunicationSession_SM_Establishing) {
        outC->CommunicationSession_SM_reset_nxt = kcg_true;
        outC->CommunicationSession_SM_state_nxt =
          MoRC_SSM_st_Terminating_CommunicationSession_SM;
      }
      else {
        outC->CommunicationSession_SM_reset_nxt =
          _L31_CommunicationSession_SM_Establishing;
        if (_L31_CommunicationSession_SM_Establishing) {
          outC->CommunicationSession_SM_state_nxt =
            MoRC_SSM_st_Maintaining_CommunicationSession_SM;
        }
        else {
          outC->CommunicationSession_SM_state_nxt =
            MoRC_SSM_st_Establishing_CommunicationSession_SM;
        }
      }
      outC->establishingACommunicationSessionAborted =
        _L35_CommunicationSession_SM_Establishing;
      outC->communicationSessionInitiatedFromTrackside =
        last_communicationSessionInitiatedFromTrackside;
      outC->communicationSessionInitiatedByOBU =
        last_communicationSessionInitiatedByOBU;
      outC->sessionEstablished = _L31_CommunicationSession_SM_Establishing;
      outC->sessionSuccessfullyEstablished =
        _L31_CommunicationSession_SM_Establishing;
      outC->sendASessionEstablishedReportToTrackside =
        _L25_CommunicationSession_SM_Establishing;
      outC->sendMessage_NoCompatibleVersionSupported =
        _L23_CommunicationSession_SM_Establishing;
      outC->sendTheMessageInitiationOfCommunicationSessionToTrackside =
        _L21_CommunicationSession_SM_Establishing;
      outC->InformTheDriverThatNoConnectionWasSetup =
        _L19_CommunicationSession_SM_Establishing;
      break;
    case MoRC_SSM_st_Maintaining_CommunicationSession_SM :
      outC->sendTheMessageInitiationOfCommunicationSessionToTrackside =
        kcg_false;
      outC->sendMessage_NoCompatibleVersionSupported = kcg_false;
      outC->sendASessionEstablishedReportToTrackside = kcg_false;
      outC->sendATerminationOfCommunicationMessage = kcg_false;
      outC->ignoreMessagesFromRBC_exceptAckOfTerminationOfCommunicationSession =
        kcg_false;
      br_1_guard_CommunicationSession_SM_Maintaining = kcg_false ||
        initiateTermination;
      outC->CommunicationSession_SM_reset_nxt =
        br_1_guard_CommunicationSession_SM_Maintaining;
      if (br_1_guard_CommunicationSession_SM_Maintaining) {
        outC->CommunicationSession_SM_state_nxt =
          MoRC_SSM_st_Terminating_CommunicationSession_SM;
      }
      else {
        outC->CommunicationSession_SM_state_nxt =
          MoRC_SSM_st_Maintaining_CommunicationSession_SM;
      }
      outC->establishingACommunicationSessionAborted =
        last_establishingACommunicationSessionAborted;
      outC->communicationSessionInitiatedFromTrackside =
        last_communicationSessionInitiatedFromTrackside;
      outC->communicationSessionInitiatedByOBU =
        last_communicationSessionInitiatedByOBU;
      outC->sessionEstablished = last_sessionEstablished;
      outC->sessionSuccessfullyEstablished =
        last_sessionSuccessfullyEstablished;
      outC->InformTheDriverThatNoConnectionWasSetup =
        _L2_CommunicationSession_SM_Maintaining;
      break;
    case MoRC_SSM_st_Terminating_CommunicationSession_SM :
      outC->InformTheDriverThatNoConnectionWasSetup = kcg_false;
      outC->sendTheMessageInitiationOfCommunicationSessionToTrackside =
        kcg_false;
      outC->sendMessage_NoCompatibleVersionSupported = kcg_false;
      outC->sendASessionEstablishedReportToTrackside = kcg_false;
      outC->CommunicationSession_SM_reset_nxt =
        _L12_CommunicationSession_SM_Terminating;
      if (_L12_CommunicationSession_SM_Terminating) {
        outC->CommunicationSession_SM_state_nxt =
          MoRC_SSM_st_NoSession_CommunicationSession_SM;
      }
      else {
        outC->CommunicationSession_SM_state_nxt =
          MoRC_SSM_st_Terminating_CommunicationSession_SM;
      }
      outC->establishingACommunicationSessionAborted =
        last_establishingACommunicationSessionAborted;
      outC->communicationSessionInitiatedFromTrackside =
        last_communicationSessionInitiatedFromTrackside;
      outC->communicationSessionInitiatedByOBU =
        last_communicationSessionInitiatedByOBU;
      outC->sessionEstablished = last_sessionEstablished;
      outC->sessionSuccessfullyEstablished =
        last_sessionSuccessfullyEstablished;
      outC->ignoreMessagesFromRBC_exceptAckOfTerminationOfCommunicationSession =
        _L3_CommunicationSession_SM_Terminating;
      outC->sendATerminationOfCommunicationMessage =
        _L1_CommunicationSession_SM_Terminating;
      break;
    
  }
}