/* DMI_Control_Pkg::Sub_func::HourGlassAnimation */
void HourGlassAnimation_DMI_Control_Pkg_Sub_func(
  /* DMI_Control_Pkg::Sub_func::HourGlassAnimation::start */ kcg_bool start,
  /* DMI_Control_Pkg::Sub_func::HourGlassAnimation::stop */ kcg_bool stop,
  /* DMI_Control_Pkg::Sub_func::HourGlassAnimation::actualtime */ time_Type_MoRC_Pck actualtime,
  outC_HourGlassAnimation_DMI_Control_Pkg_Sub_func *outC)
{
  kcg_int tmp;
  
  /* 1 */
  countDownTimer_MoRC_Pck_Utils(
    start,
    stop,
    actualtime,
    kcg_true,
    20,
    &outC->Context_1);
  /* 1 */ RisingEdge_digital(outC->Context_1.expired, &outC->_1_Context_1);
  if (outC->_1_Context_1.RE_Output) {
    tmp = 10;
  }
  else {
    tmp = 0;
  }
  /* 1 */ Counter_pwlinear_int(tmp, kcg_false, &outC->_2_Context_1);
  outC->Output1 = outC->_2_Context_1.Count % 40;
}
/* MoRC_Pck::Utils::waitAndRepeatTimer */
void waitAndRepeatTimer_MoRC_Pck_Uti(
    /* MoRC_Pck::Utils::waitAndRepeatTimer::actualTime */ time_Type_MoRC_Pck actualTime,
    /* MoRC_Pck::Utils::waitAndRepeatTimer::re_start */ kcg_bool re_start,
    /* MoRC_Pck::Utils::waitAndRepeatTimer::stop */ kcg_bool stop,
    /* MoRC_Pck::Utils::waitAndRepeatTimer::repeatInterval */ time_Type_MoRC_Pck repeatInterval,
    /* MoRC_Pck::Utils::waitAndRepeatTimer::maxNoOfRepetitions */ kcg_int maxNoOfRepetitions,
    outC_waitAndRepeatTimer_MoRC_Pc *outC)
{
    /* MoRC_Pck::Utils::waitAndRepeatTimer::_L9 */
    static kcg_int _L9;
    /* MoRC_Pck::Utils::waitAndRepeatTimer::_L14 */
    static kcg_bool _L14;

    /* 1 */
    countDownTimer_MoRC_Pck_Utils(
        re_start,
        stop,
        actualTime,
        kcg_true,
        repeatInterval,
        &outC->Context_1);
    /* fby_1_init_1 */ if (outC->init) {
        outC->init = kcg_false;
        _L9 = 0;
    }
    else {
        _L9 = outC->_L22;
    }
    outC->elapsed = _L9 >= maxNoOfRepetitions;
    _L14 = !outC->elapsed;
    /* 2 */ if (re_start) {
        outC->_L22 = 0;
    }
    else /* 1 */ if (outC->Context_1.expired) {
        outC->_L22 = 1 + _L9;
    }
    else {
        outC->_L22 = _L9;
    }
    outC->triggerAction = (_L14 & outC->Context_1.expired) | (_L14 &
                          outC->Context_1.started);
}
/* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session */
void maintaining_a_Session_MoRC_Pck_Subfunc_Pkg(
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::communicationSessionEstablished */ kcg_bool communicationSessionEstablished,
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::safeRadioConnectionReestablished */ kcg_bool safeRadioConnectionReestablished,
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::lossOfTheSafeRadioConnection */ kcg_bool lossOfTheSafeRadioConnection,
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::disconnectionHasNotBeenOrdered */ kcg_bool disconnectionHasNotBeenOrdered,
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::trainFrontInsideInAnAnnouncedRadioHole */ kcg_bool trainFrontInsideInAnAnnouncedRadioHole,
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::actualTime */ time_Type_MoRC_Pck actualTime,
  outC_maintaining_a_Session_MoRC_Pck_Subfunc_Pkg *outC)
{
  SSM_TR_Maintaining_SM tmp1;
  kcg_bool tmp;
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::Maintaining_SM::CommunicationSessionEstablished::RadioConnection_SM */ SSM_ST_RadioConnection_SM_Maintaining_SM_CommunicationSessionEstablished RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished;
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::Maintaining_SM::CommunicationSessionEstablished::RadioConnection_SM */ SSM_ST_RadioConnection_SM_Maintaining_SM_CommunicationSessionEstablished RadioConnection_SM_state_sel_Maintaining_SM_CommunicationSessionEstablished;
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::Maintaining_SM::CommunicationSessionEstablished */ kcg_bool CommunicationSessionEstablished_weakb_clock_Maintaining_SM;
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::Maintaining_SM::CommunicationSessionEstablished::RadioConnection_SM::ConnecctionLostInAnnouncedRadioHole */ kcg_bool br_1_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_ConnecctionLostInAnnouncedRadioHole;
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::Maintaining_SM::CommunicationSessionEstablished::RadioConnection_SM::SafeRadio_connected */ kcg_bool br_1_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_SafeRadio_connected;
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::Maintaining_SM::CommunicationSessionEstablished::RadioConnection_SM::SafeRadio_connected */ kcg_bool br_2_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_SafeRadio_connected;
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::Maintaining_SM::CommunicationSessionEstablished */ kcg_bool br_1_guard_Maintaining_SM_CommunicationSessionEstablished;
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::Maintaining_SM */ SSM_ST_Maintaining_SM Maintaining_SM_state_sel;
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::Maintaining_SM */ SSM_ST_Maintaining_SM Maintaining_SM_state_act;
  /* MoRC_Pck::Subfunc_Pkg::maintaining_a_Session::Maintaining_SM */ kcg_bool Maintaining_SM_reset_act;
  
  if (outC->init) {
    outC->init = kcg_false;
    Maintaining_SM_state_sel =
      SSM_st_CommunicationSessionNotEstablished_Maintaining_SM;
  }
  else {
    Maintaining_SM_state_sel = outC->Maintaining_SM_state_nxt;
  }
  switch (Maintaining_SM_state_sel) {
    case SSM_st_CommunicationSessionEstablished_Maintaining_SM :
      Maintaining_SM_state_act =
        SSM_st_CommunicationSessionEstablished_Maintaining_SM;
      Maintaining_SM_reset_act = kcg_false;
      break;
    case SSM_st_CommunicationSessionNotEstablished_Maintaining_SM :
      if (communicationSessionEstablished) {
        Maintaining_SM_state_act =
          SSM_st_CommunicationSessionEstablished_Maintaining_SM;
      }
      else {
        Maintaining_SM_state_act =
          SSM_st_CommunicationSessionNotEstablished_Maintaining_SM;
      }
      Maintaining_SM_reset_act = communicationSessionEstablished;
      break;
    
  }
  switch (Maintaining_SM_state_act) {
    case SSM_st_CommunicationSessionEstablished_Maintaining_SM :
      switch (Maintaining_SM_state_sel) {
        case SSM_st_CommunicationSessionNotEstablished_Maintaining_SM :
          if (communicationSessionEstablished) {
            tmp1 = SSM_TR_CommunicationSessionNotEstablished_1_Maintaining_SM;
          }
          else {
            tmp1 = SSM_TR_no_trans_Maintaining_SM;
          }
          break;
        case SSM_st_CommunicationSessionEstablished_Maintaining_SM :
          tmp1 = SSM_TR_no_trans_Maintaining_SM;
          break;
        
      }
      CommunicationSessionEstablished_weakb_clock_Maintaining_SM = tmp1 !=
        SSM_TR_no_trans_Maintaining_SM;
      if (Maintaining_SM_reset_act) {
        outC->init1 = kcg_true;
        /* 1 */ countDownTimer_reset_MoRC_Pck_Utils(&outC->Context_1);
      }
      if (outC->init1) {
        RadioConnection_SM_state_sel_Maintaining_SM_CommunicationSessionEstablished =
          SSM_st_SafeRadio_connected_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
      }
      else {
        RadioConnection_SM_state_sel_Maintaining_SM_CommunicationSessionEstablished =
          outC->RadioConnection_SM_state_nxt_Maintaining_SM_CommunicationSessionEstablished;
      }
      switch (RadioConnection_SM_state_sel_Maintaining_SM_CommunicationSessionEstablished) {
        case SSM_st_SafeRadio_connected_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          br_1_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_SafeRadio_connected =
            trainFrontInsideInAnAnnouncedRadioHole &
            lossOfTheSafeRadioConnection;
          br_2_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_SafeRadio_connected =
            lossOfTheSafeRadioConnection & disconnectionHasNotBeenOrdered;
          if (br_1_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_SafeRadio_connected) {
            outC->firstRequestToSetupASafeRadioConnection = kcg_false;
          }
          else if (br_2_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_SafeRadio_connected) {
            outC->firstRequestToSetupASafeRadioConnection = kcg_true;
          }
          else {
            outC->firstRequestToSetupASafeRadioConnection = kcg_false;
          }
          break;
        case SSM_st_ConnectionLost_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          outC->firstRequestToSetupASafeRadioConnection = kcg_false;
          break;
        case SSM_st_RadioConnectionLostTimerExpired_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          outC->firstRequestToSetupASafeRadioConnection = kcg_false;
          break;
        case SSM_st_ConnecctionLostInAnnouncedRadioHole_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          br_1_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_ConnecctionLostInAnnouncedRadioHole =
            !trainFrontInsideInAnAnnouncedRadioHole;
          if (br_1_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_ConnecctionLostInAnnouncedRadioHole) {
            outC->firstRequestToSetupASafeRadioConnection = kcg_true;
          }
          else {
            outC->firstRequestToSetupASafeRadioConnection = kcg_false;
          }
          break;
        
      }
      /* 1 */
      countDownTimer_MoRC_Pck_Utils(
        outC->firstRequestToSetupASafeRadioConnection,
        kcg_false,
        actualTime,
        kcg_false,
        cRadioConnectionReestablishingTimeout_MoRC_Pck,
        &outC->Context_1);
      switch (RadioConnection_SM_state_sel_Maintaining_SM_CommunicationSessionEstablished) {
        case SSM_st_ConnecctionLostInAnnouncedRadioHole_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          if (br_1_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_ConnecctionLostInAnnouncedRadioHole) {
            RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished =
              SSM_st_ConnectionLost_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
          }
          else {
            RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished =
              SSM_st_ConnecctionLostInAnnouncedRadioHole_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
          }
          tmp = kcg_false;
          break;
        case SSM_st_RadioConnectionLostTimerExpired_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished =
            SSM_st_RadioConnectionLostTimerExpired_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
          tmp = kcg_false;
          break;
        case SSM_st_ConnectionLost_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          if (safeRadioConnectionReestablished) {
            RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished =
              SSM_st_SafeRadio_connected_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
          }
          else if (outC->Context_1.expired) {
            RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished =
              SSM_st_RadioConnectionLostTimerExpired_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
          }
          else {
            RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished =
              SSM_st_ConnectionLost_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
          }
          tmp = kcg_false;
          break;
        case SSM_st_SafeRadio_connected_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          if (br_1_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_SafeRadio_connected) {
            RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished =
              SSM_st_ConnecctionLostInAnnouncedRadioHole_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
            tmp = kcg_true;
          }
          else {
            if (br_2_guard_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM_SafeRadio_connected) {
              RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished =
                SSM_st_ConnectionLost_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
            }
            else {
              RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished =
                SSM_st_SafeRadio_connected_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
            }
            tmp = kcg_false;
          }
          break;
        
      }
      switch (RadioConnection_SM_state_act_Maintaining_SM_CommunicationSessionEstablished) {
        case SSM_st_ConnecctionLostInAnnouncedRadioHole_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          outC->RadioConnection_SM_state_nxt_Maintaining_SM_CommunicationSessionEstablished =
            SSM_st_ConnecctionLostInAnnouncedRadioHole_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
          outC->tryToSetupANewSafeRadioConnection = kcg_false;
          break;
        case SSM_st_RadioConnectionLostTimerExpired_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          outC->RadioConnection_SM_state_nxt_Maintaining_SM_CommunicationSessionEstablished =
            SSM_st_RadioConnectionLostTimerExpired_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
          outC->tryToSetupANewSafeRadioConnection = kcg_false;
          break;
        case SSM_st_ConnectionLost_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          outC->RadioConnection_SM_state_nxt_Maintaining_SM_CommunicationSessionEstablished =
            SSM_st_ConnectionLost_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
          outC->tryToSetupANewSafeRadioConnection = kcg_true;
          break;
        case SSM_st_SafeRadio_connected_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM :
          outC->RadioConnection_SM_state_nxt_Maintaining_SM_CommunicationSessionEstablished =
            SSM_st_SafeRadio_connected_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
          outC->tryToSetupANewSafeRadioConnection = kcg_false;
          break;
        
      }
      if (CommunicationSessionEstablished_weakb_clock_Maintaining_SM) {
        outC->informTheDriverThatNoConnectionWasSetup = kcg_false;
        outC->Maintaining_SM_state_nxt =
          SSM_st_CommunicationSessionEstablished_Maintaining_SM;
      }
      else {
        br_1_guard_Maintaining_SM_CommunicationSessionEstablished =
          outC->RadioConnection_SM_state_nxt_Maintaining_SM_CommunicationSessionEstablished ==
          SSM_st_RadioConnectionLostTimerExpired_Maintaining_SM_CommunicationSessionEstablished_RadioConnection_SM;
        if (br_1_guard_Maintaining_SM_CommunicationSessionEstablished) {
          outC->informTheDriverThatNoConnectionWasSetup = kcg_true;
          outC->Maintaining_SM_state_nxt =
            SSM_st_CommunicationSessionNotEstablished_Maintaining_SM;
        }
        else {
          outC->informTheDriverThatNoConnectionWasSetup = kcg_false;
          outC->Maintaining_SM_state_nxt =
            SSM_st_CommunicationSessionEstablished_Maintaining_SM;
        }
      }
      outC->init1 = kcg_false;
      break;
    case SSM_st_CommunicationSessionNotEstablished_Maintaining_SM :
      outC->informTheDriverThatNoConnectionWasSetup = kcg_false;
      tmp = kcg_false;
      outC->firstRequestToSetupASafeRadioConnection = kcg_false;
      outC->tryToSetupANewSafeRadioConnection = kcg_false;
      outC->Maintaining_SM_state_nxt =
        SSM_st_CommunicationSessionNotEstablished_Maintaining_SM;
      break;
    
  }
  outC->finalAttemptToSetupTheSafeRadioConnectionFailed =
    outC->informTheDriverThatNoConnectionWasSetup;
  outC->requestsToSetupTheSafeRadioConnectionStopped =
    outC->finalAttemptToSetupTheSafeRadioConnectionFailed | tmp;
}
/* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2 */
void requestRadioConnectionSetupFromOBU_v2_MoRC_Pck_Subfunc_Pkg(
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::mode */ M_MODE mode,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::eventsPhases */ obuEventsAndPhases_T_RCM_Session_Types_Pkg *eventsPhases,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::p42_sessionManagement */ p42_sessionManagement_T_RCM_MsgTypes_Pkg *p42_sessionManagement,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::sessionStatus */ sessionStatus_T_RCM_Session_Types_Pkg *sessionStatus,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::registrationStatus */ mobileRegistrationContext_T_RCM_Types_Pkg *registrationStatus,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::connectionStatus */ mobileConnectionContext_T_RCM_Types_Pkg *connectionStatus,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::connect */ kcg_bool connect,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::disconnect */ kcg_bool disconnect,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::currentTime */ T_internal_Type_Obu_BasicTypes_Pkg currentTime,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::reset */ kcg_bool reset,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::maxTimeToMaintainCommSession */ T_internal_Type_Obu_BasicTypes_Pkg maxTimeToMaintainCommSession,
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::noOfRetriesToEstablishASafeRadioConnection */ kcg_int noOfRetriesToEstablishASafeRadioConnection,
  outC_requestRadioConnectionSetupFromOBU_v2_MoRC_Pck_Subfunc_Pkg *outC)
{
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::IfBlock1::else */
  static kcg_bool else_clock_IfBlock1;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::repeat_SM::rep_inactive */
  static kcg_bool br_1_guard_repeat_SM_rep_inactive;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::repeat_SM::rep_inactive */
  static kcg_bool br_2_clock_repeat_SM_rep_inactive;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::repeat_SM::rep_repeatUntilSuccessfulOrADefinedNumberOfTimes */
  static kcg_bool br_1_guard_repeat_SM_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::repeat_SM::rep_repeatUntilSuccessfulOrADefinedNumberOfTimes */
  static kcg_bool br_2_clock_repeat_SM_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::repeat_SM::rep_repeatUntilStopConditionMet */
  static kcg_bool br_1_guard_repeat_SM_rep_repeatUntilStopConditionMet;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::repeat_SM::rep_repeatUntilStopConditionMet */
  static kcg_bool br_2_clock_repeat_SM_rep_repeatUntilStopConditionMet;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::repeat_SM */
  static SSM_ST_repeat_SM repeat_SM_state_sel;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::repeat_SM */
  static SSM_ST_repeat_SM repeat_SM_state_act;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::repeatUntilStopConditionMet */
  static kcg_bool repeatUntilStopConditionMet;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::successfullyConnected */
  static kcg_bool successfullyConnected;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::_L336 */
  static kcg_bool _L336;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::_L334 */
  static kcg_bool _L334;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::_L321 */
  static kcg_bool _L321;
  /* MoRC_Pck::Subfunc_Pkg::requestRadioConnectionSetupFromOBU_v2::_L318 */
  static kcg_bool _L318;
  
  else_clock_IfBlock1 = (*registrationStatus).valid &
    ((*registrationStatus).status == mrs_registered_RCM_Types_Pkg);
  repeatUntilStopConditionMet = connect &
    !(*eventsPhases).isPartOfAnOngoingStartOfMissionProcedure &
    else_clock_IfBlock1;
  successfullyConnected = (*connectionStatus).valid &
    ((*connectionStatus).status == mcs_connected_RCM_Types_Pkg);
  _L318 = ((*p42_sessionManagement).msgSrc == msrc_Euroradio_Common_Types_Pkg) |
    ((*p42_sessionManagement).msgSrc == msrc_Eurobalise_Common_Types_Pkg) |
    ((*p42_sessionManagement).msgSrc == msrc_RadioInfillUnit_Common_Types_Pkg) |
    ((*p42_sessionManagement).msgSrc == msrc_OBU_Common_Types_Pkg);
  _L321 = (*p42_sessionManagement).q_rbc ==
    Q_RBC_Establish_communication_session;
  _L334 = /* 2 */
    validate_q_sleepsession_v2_MoRC_Pck_Subfunc_Pkg(
      p42_sessionManagement,
      mode);
  _L336 = !(((*p42_sessionManagement).nid_c == (*sessionStatus).nid_c) &
      ((*sessionStatus).nid_rbc == (*p42_sessionManagement).nid_RBC)) &
    (*sessionStatus).valid & ((*sessionStatus).phase !=
      sp_terminated_RCM_Session_Types_Pkg);
  /* init_repeat_SM */ if (outC->init) {
    repeat_SM_state_sel = SSM_st_rep_inactive_repeat_SM;
  }
  else {
    repeat_SM_state_sel = outC->repeat_SM_state_nxt;
  }
  /* 2 */
  RisingEdge_digital(
    (kcg_bool) ((*connectionStatus).valid & (*connectionStatus).connectionLost),
    &outC->Context_2);
  /* 1 */
  countDownTimer_MoRC_Pck_Utils(
    outC->Context_2.RE_Output,
    (kcg_bool)
      ((*connectionStatus).valid & !(*connectionStatus).connectionLost),
    currentTime,
    kcg_false,
    maxTimeToMaintainCommSession,
    &outC->Context_1);
  /* 1 */
  RisingEdge_digital(
    (kcg_bool)
      ((*connectionStatus).settingUpConnectionHasFailed &
        (*connectionStatus).valid),
    &outC->_1_Context_1);
  /* sel_repeat_SM */ switch (repeat_SM_state_sel) {
    case SSM_st_rep_repeatUntilStopConditionMet_repeat_SM :
      br_1_guard_repeat_SM_rep_repeatUntilStopConditionMet =
        successfullyConnected | (*eventsPhases).endOfMissionIsExecuted |
        (*eventsPhases).trainFrontPassesALevelTransitionBorder |
        (*eventsPhases).trainFrontPassesA_RBC_RBC_border |
        (*eventsPhases).trainFrontPassesStartOfAnnouncedRadioHole |
        ((*p42_sessionManagement).valid & ((*p42_sessionManagement).q_rbc ==
            Q_RBC_Terminate_communication_session) & _L334 & _L318) |
        ((*p42_sessionManagement).valid & _L321 & _L334 & _L318 & _L336) |
        outC->Context_1.expired | reset;
      /* guard_rep_repeatUntilStopConditionMet */ if (br_1_guard_repeat_SM_rep_repeatUntilStopConditionMet) {
        repeat_SM_state_act = SSM_st_rep_inactive_repeat_SM;
      }
      else {
        repeat_SM_state_act = SSM_st_rep_repeatUntilStopConditionMet_repeat_SM;
        br_2_clock_repeat_SM_rep_repeatUntilStopConditionMet =
          outC->_1_Context_1.RE_Output;
      }
      break;
    case SSM_st_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes_repeat_SM :
      br_1_guard_repeat_SM_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes =
        successfullyConnected | reset;
      /* guard_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes */ if (br_1_guard_repeat_SM_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes) {
        repeat_SM_state_act = SSM_st_rep_inactive_repeat_SM;
      }
      else {
        repeat_SM_state_act =
          SSM_st_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes_repeat_SM;
        br_2_clock_repeat_SM_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes =
          outC->_1_Context_1.RE_Output;
      }
      break;
    case SSM_st_rep_inactive_repeat_SM :
      br_1_guard_repeat_SM_rep_inactive = connect &
        (*eventsPhases).isPartOfAnOngoingStartOfMissionProcedure &
        else_clock_IfBlock1;
      /* guard_rep_inactive */ if (br_1_guard_repeat_SM_rep_inactive) {
        repeat_SM_state_act =
          SSM_st_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes_repeat_SM;
      }
      else {
        if (repeatUntilStopConditionMet) {
          repeat_SM_state_act =
            SSM_st_rep_repeatUntilStopConditionMet_repeat_SM;
        }
        else {
          repeat_SM_state_act = SSM_st_rep_inactive_repeat_SM;
        }
        br_2_clock_repeat_SM_rep_inactive = repeatUntilStopConditionMet;
      }
      break;
    
  }
  /* act_repeat_SM */ switch (repeat_SM_state_act) {
    case SSM_st_rep_inactive_repeat_SM :
      outC->repeat_SM_state_nxt = SSM_st_rep_inactive_repeat_SM;
      break;
    case SSM_st_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes_repeat_SM :
      outC->repeat_SM_state_nxt =
        SSM_st_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes_repeat_SM;
      break;
    case SSM_st_rep_repeatUntilStopConditionMet_repeat_SM :
      outC->repeat_SM_state_nxt =
        SSM_st_rep_repeatUntilStopConditionMet_repeat_SM;
      break;
    
  }
  /* 1 */ if (reset) {
    kcg_copy_p42_sessionManagement_T_RCM_MsgTypes_Pkg(
      &outC->p42_sessionManagement_mem,
      (p42_sessionManagement_T_RCM_MsgTypes_Pkg *)
        &cNo_p42_SessionManagement_RCM_MsgTypes_Pkg);
  }
  else /* 4 */ if ((*p42_sessionManagement).valid) {
    kcg_copy_p42_sessionManagement_T_RCM_MsgTypes_Pkg(
      &outC->p42_sessionManagement_mem,
      p42_sessionManagement);
  }
  else /* 1_fby_1_init_7 */ if (outC->init) {
    kcg_copy_p42_sessionManagement_T_RCM_MsgTypes_Pkg(
      &outC->p42_sessionManagement_mem,
      (p42_sessionManagement_T_RCM_MsgTypes_Pkg *)
        &cNo_p42_SessionManagement_RCM_MsgTypes_Pkg);
  }
  outC->init = kcg_false;
  /* ck_disconnect */ if (disconnect) {
    outC->connectionCmd.valid = kcg_true;
    outC->connectionCmd.mobileDeviceNo = (*connectionStatus).mobileDeviceNo;
    outC->connectionCmd.action = mca_disconnect_RCM_Types_Pkg;
    outC->connectionCmd.nid_radio = (*connectionStatus).nid_radio;
  }
  else {
    /* sel_repeat_SM */ switch (repeat_SM_state_sel) {
      case SSM_st_rep_inactive_repeat_SM :
        /* guard_rep_inactive */ if (br_1_guard_repeat_SM_rep_inactive) {
          else_clock_IfBlock1 = kcg_true;
        }
        else /* cb_anon_sm */ if (br_2_clock_repeat_SM_rep_inactive) {
          else_clock_IfBlock1 = kcg_true;
        }
        else {
          else_clock_IfBlock1 = kcg_false;
        }
        break;
      case SSM_st_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes_repeat_SM :
        /* guard_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes */ if (br_1_guard_repeat_SM_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes) {
          else_clock_IfBlock1 = kcg_false;
        }
        else /* cb_anon_sm */ if (br_2_clock_repeat_SM_rep_repeatUntilSuccessfulOrADefinedNumberOfTimes) {
          else_clock_IfBlock1 = kcg_true;
        }
        else {
          else_clock_IfBlock1 = kcg_false;
        }
        break;
      case SSM_st_rep_repeatUntilStopConditionMet_repeat_SM :
        /* guard_rep_repeatUntilStopConditionMet */ if (br_1_guard_repeat_SM_rep_repeatUntilStopConditionMet) {
          else_clock_IfBlock1 = kcg_false;
        }
        else /* cb_anon_sm */ if (br_2_clock_repeat_SM_rep_repeatUntilStopConditionMet) {
          else_clock_IfBlock1 = kcg_true;
        }
        else {
          else_clock_IfBlock1 = kcg_false;
        }
        break;
      
    }
    /* ck_anon_activ */ if (else_clock_IfBlock1) {
      outC->connectionCmd.valid = kcg_true;
      outC->connectionCmd.mobileDeviceNo = (*connectionStatus).mobileDeviceNo;
      outC->connectionCmd.action = mca_connect_RCM_Types_Pkg;
      /* 5 */ if ((*p42_sessionManagement).valid & _L321 & _L334 & _L318 &
        (((((*sessionStatus).phase == sp_terminated_RCM_Session_Types_Pkg) |
              ((*sessionStatus).phase ==
                sp_establishing_RCM_Session_Types_Pkg)) &
            (*sessionStatus).valid) | _L336)) {
        outC->connectionCmd.nid_radio =
          outC->p42_sessionManagement_mem.nid_radio;
      }
      else {
        outC->connectionCmd.nid_radio = (*connectionStatus).nid_radio;
      }
    }
    else /* ck_anon_activ */ if ((*eventsPhases).trainFrontPassesStartOfAnnouncedRadioHole) {
      outC->connectionCmd.valid = kcg_true;
      outC->connectionCmd.mobileDeviceNo = (*connectionStatus).mobileDeviceNo;
      outC->connectionCmd.action = mca_expectRadioHole_RCM_Types_Pkg;
      outC->connectionCmd.nid_radio = (*connectionStatus).nid_radio;
    }
    else /* ck_anon_activ */ if ((*eventsPhases).trainFrontReachesEndOfAnnouncedRadioHole) {
      outC->connectionCmd.valid = kcg_true;
      outC->connectionCmd.mobileDeviceNo = (*connectionStatus).mobileDeviceNo;
      outC->connectionCmd.action = mca_unexpectRadioHole_RCM_Types_Pkg;
      outC->connectionCmd.nid_radio = (*connectionStatus).nid_radio;
    }
    else {
      outC->connectionCmd.valid = kcg_false;
      outC->connectionCmd.mobileDeviceNo = (*connectionStatus).mobileDeviceNo;
      outC->connectionCmd.action = mca_nop_RCM_Types_Pkg;
      outC->connectionCmd.nid_radio = (*connectionStatus).nid_radio;
    }
  }
}