/* terminateAndEstablishSession */
void MoRC_terminateAndEstablishSession(
  /* terminateAndEstablishSession::newOrderToEstablishASession_in */MoRC_orderToContactAnRBC_Type *newOrderToEstablishASession_in,
  /* terminateAndEstablishSession::sessionStatus */MoRC_sessionStatus_Type sessionStatus,
  /* terminateAndEstablishSession::OBU_hasToEstablishANewSession */kcg_bool OBU_hasToEstablishANewSession,
  MoRC_outC_terminateAndEstablishSession *outC)
{
  /* terminateAndEstablishSession::SM1 */ MoRC_SSM_ST_SM1 SM1_state_sel;
  /* terminateAndEstablishSession::SM1 */ MoRC_SSM_ST_SM1 SM1_state_act;
  /* terminateAndEstablishSession::_L26 */ kcg_bool _L26;
  
  if (outC->init) {
    SM1_state_sel = MoRC_SSM_st_NoTerminationInProgress_SM1;
  }
  else {
    SM1_state_sel = outC->SM1_state_nxt;
  }
  _L26 = sessionStatus != MoRC_morc_st_inactive;
  outC->initiateTermination = (*newOrderToEstablishASession_in).valid &&
    OBU_hasToEstablishANewSession &&
    (*newOrderToEstablishASession_in).actionToBePerformed ==
    MoRC_morc_rbca_establishSession && _L26;
  switch (SM1_state_sel) {
    case MoRC_SSM_st_NoTerminationInProgress_SM1 :
      if (outC->initiateTermination) {
        SM1_state_act = MoRC_SSM_st_TerminationInProgress_SM1;
      }
      else {
        SM1_state_act = MoRC_SSM_st_NoTerminationInProgress_SM1;
      }
      break;
    case MoRC_SSM_st_TerminationInProgress_SM1 :
      if (_L26) {
        SM1_state_act = MoRC_SSM_st_TerminationInProgress_SM1;
      }
      else {
        SM1_state_act = MoRC_SSM_st_EstablishNewSession_SM1;
      }
      break;
    case MoRC_SSM_st_EstablishNewSession_SM1 :
      SM1_state_act = MoRC_SSM_st_NoTerminationInProgress_SM1;
      break;
    
  }
  if ((*newOrderToEstablishASession_in).valid) {
    MoRC_kcg_copy_orderToContactAnRBC_Type(
      &outC->storedOrder,
      newOrderToEstablishASession_in);
  }
  else if (outC->init) {
    MoRC_kcg_copy_orderToContactAnRBC_Type(
      &outC->storedOrder,
      (MoRC_orderToContactAnRBC_Type *) &MoRC_cInvalidOrderToContactAnRBC);
  }
  outC->init = kcg_false;
  switch (SM1_state_act) {
    case MoRC_SSM_st_EstablishNewSession_SM1 :
      outC->SM1_state_nxt = MoRC_SSM_st_EstablishNewSession_SM1;
      outC->initiateEstablishingNewSession = kcg_true;
      MoRC_kcg_copy_orderToContactAnRBC_Type(
        &outC->newOrderToEstablishASession_out,
        &outC->storedOrder);
      break;
    case MoRC_SSM_st_TerminationInProgress_SM1 :
      outC->SM1_state_nxt = MoRC_SSM_st_TerminationInProgress_SM1;
      outC->initiateEstablishingNewSession = kcg_false;
      MoRC_kcg_copy_orderToContactAnRBC_Type(
        &outC->newOrderToEstablishASession_out,
        (MoRC_orderToContactAnRBC_Type *) &MoRC_cInvalidOrderToContactAnRBC);
      break;
    case MoRC_SSM_st_NoTerminationInProgress_SM1 :
      outC->SM1_state_nxt = MoRC_SSM_st_NoTerminationInProgress_SM1;
      outC->initiateEstablishingNewSession = kcg_false;
      MoRC_kcg_copy_orderToContactAnRBC_Type(
        &outC->newOrderToEstablishASession_out,
        newOrderToEstablishASession_in);
      break;
    
  }
}
/* MoRC_withSimplified_IF */
void MoRC_MoRC_withSimplified_IF(
  MoRC_inC_MoRC_withSimplified_IF *inC,
  MoRC_outC_MoRC_withSimplified_IF *outC)
{
  MoRC_validRadioNetworkID_Type tmp;
  MoRC_validRadioNetworkID_Type tmp1;
  MoRC_validRadioNetworkID_Type tmp2;
  MoRC_mobileHWStatus_Type tmp3;
  MoRC_onBoardOrder_Type tmp9;
  kcg_bool tmp8;
  MoRC_orderToContactAnRBC_Type tmp7;
  kcg_bool tmp6;
  kcg_bool tmp5;
  kcg_bool tmp4;
  /* MoRC_withSimplified_IF::PowerUpSequencer::TheVeryFirstCycle::_L2 */ kcg_bool _L2_PowerUpSequencer_TheVeryFirstCycle;
  /* MoRC_withSimplified_IF::PowerUpSequencer::AtPowerUpState */ kcg_bool br_1_guard_PowerUpSequencer_AtPowerUpState;
  /* MoRC_withSimplified_IF::PowerUpSequencer::AfterPowerUp */ kcg_bool br_1_guard_PowerUpSequencer_AfterPowerUp;
  /* MoRC_withSimplified_IF::MessageFromTrackDec::else */ kcg_bool _10_else_clock_MessageFromTrackDec;
  /* MoRC_withSimplified_IF::MessageFromTrackDec::else::else */ kcg_bool else_clock_MessageFromTrackDec;
  /* MoRC_withSimplified_IF::MessageFromTrackDec */ kcg_bool MessageFromTrackDec_clock;
  /* MoRC_withSimplified_IF::PowerUpSequencer */ MoRC_SSM_ST_PowerUpSequencer PowerUpSequencer_state_act;
  /* MoRC_withSimplified_IF::establishOrderFromRBC */ MoRC_orderToContactAnRBC_Type establishOrderFromRBC;
  /* MoRC_withSimplified_IF::terminateOrderFromRBC */ MoRC_orderToContactAnRBC_Type terminateOrderFromRBC;
  /* MoRC_withSimplified_IF::enableExecution */ kcg_bool enableExecution;
  /* MoRC_withSimplified_IF::_L47 */ kcg_bool _L47;
  /* MoRC_withSimplified_IF::_L127 */ MoRC_orderToContactAnRBC_Type _L127;
  /* MoRC_withSimplified_IF::_L136 */ kcg_bool _L136;
  
  tmp6 = inC->orderFromOnBoard == MoRC_obo_initiateCommunication;
  MessageFromTrackDec_clock = inC->messageFromRBC ==
    MoRC_cNID_MESSAGE_GeneralMessage;
  if (MessageFromTrackDec_clock) {
  }
  else {
    _10_else_clock_MessageFromTrackDec = inC->messageFromRBC ==
      MoRC_cNID_MESSAGE_GeneralMessage_init;
    if (_10_else_clock_MessageFromTrackDec) {
    }
    else {
      else_clock_MessageFromTrackDec = inC->messageFromRBC ==
        MoRC_cNID_MESSAGE_RBC_RIU_SystemVersion;
      if (else_clock_MessageFromTrackDec) {
      }
      else {
        tmp4 = inC->messageFromRBC ==
          MoRC_cNID_MESSAGE_InitiationOfACommunicationSession_track;
        if (tmp4) {
        }
        else {
          br_1_guard_PowerUpSequencer_AtPowerUpState = inC->messageFromRBC ==
            MoRC_cNID_MESSAGE_AckOfTerminationOfACommunicationSession;
          if (br_1_guard_PowerUpSequencer_AtPowerUpState) {
          }
          else {
            br_1_guard_PowerUpSequencer_AfterPowerUp = inC->messageFromRBC ==
              MoRC_cNID_PACKET_131;
          }
        }
      }
    }
  }
  if (outC->init) {
    outC->init = kcg_false;
    PowerUpSequencer_state_act = MoRC_SSM_st_TheVeryFirstCycle_PowerUpSequencer;
  }
  else {
    PowerUpSequencer_state_act = outC->PowerUpSequencer_state_nxt;
  }
  switch (PowerUpSequencer_state_act) {
    case MoRC_SSM_st_TheVeryFirstCycle_PowerUpSequencer :
      _L2_PowerUpSequencer_TheVeryFirstCycle = inC->powerAvailable;
      enableExecution = _L2_PowerUpSequencer_TheVeryFirstCycle;
      break;
    case MoRC_SSM_st_AtPowerUpState_PowerUpSequencer :
      enableExecution = kcg_true;
      break;
    case MoRC_SSM_st_AfterPowerUp_PowerUpSequencer :
      enableExecution = kcg_true;
      break;
    
  }
  MoRC_kcg_copy_orderToContactAnRBC_Type(
    &establishOrderFromRBC,
    (MoRC_orderToContactAnRBC_Type *) &MoRC_cEstablishOrderFromTrackside);
  establishOrderFromRBC.rbc_id = inC->NID_RBC_ID;
  MoRC_kcg_copy_orderToContactAnRBC_Type(
    &terminateOrderFromRBC,
    (MoRC_orderToContactAnRBC_Type *) &MoRC_cTerminateOrderFromTrackside);
  terminateOrderFromRBC.rbc_id = inC->NID_RBC_ID;
  if (tmp6) {
    tmp8 = kcg_true;
  }
  else {
    tmp5 = inC->orderFromOnBoard == MoRC_obo_terminateCommunication;
    tmp8 = kcg_false;
  }
  if (enableExecution) {
    if (MessageFromTrackDec_clock) {
      MoRC_kcg_copy_orderToContactAnRBC_Type(&_L127, &terminateOrderFromRBC);
    }
    else if (_10_else_clock_MessageFromTrackDec) {
      MoRC_kcg_copy_orderToContactAnRBC_Type(&_L127, &establishOrderFromRBC);
    }
    else if (else_clock_MessageFromTrackDec) {
      MoRC_kcg_copy_orderToContactAnRBC_Type(
        &_L127,
        (MoRC_orderToContactAnRBC_Type *) &MoRC_cInvalidOrderToContactAnRBC);
    }
    else if (tmp4) {
      MoRC_kcg_copy_orderToContactAnRBC_Type(&_L127, &establishOrderFromRBC);
    }
    else {
      MoRC_kcg_copy_orderToContactAnRBC_Type(
        &_L127,
        (MoRC_orderToContactAnRBC_Type *) &MoRC_cInvalidOrderToContactAnRBC);
    }
    tmp9 = inC->orderFromOnBoard;
    if (tmp6) {
      MoRC_kcg_copy_orderToContactAnRBC_Type(&tmp7, &establishOrderFromRBC);
    }
    else if (tmp5) {
      MoRC_kcg_copy_orderToContactAnRBC_Type(&tmp7, &terminateOrderFromRBC);
    }
    else {
      MoRC_kcg_copy_orderToContactAnRBC_Type(
        &tmp7,
        (MoRC_orderToContactAnRBC_Type *) &MoRC_cInvalidOrderToContactAnRBC);
    }
  }
  else {
    MoRC_kcg_copy_orderToContactAnRBC_Type(
      &_L127,
      (MoRC_orderToContactAnRBC_Type *) &MoRC_cInvalidOrderToContactAnRBC);
    tmp9 = MoRC_obo_noOrder;
    MoRC_kcg_copy_orderToContactAnRBC_Type(
      &tmp7,
      (MoRC_orderToContactAnRBC_Type *) &MoRC_cInvalidOrderToContactAnRBC);
  }
  _L47 = tmp9 == MoRC_obo_terminateCommunication;
  _L136 = tmp8 && enableExecution;
  /* 1 */ MoRC_FallingEdge_digital(inC->powerAvailable, &outC->_1_Context_1);
  if (MessageFromTrackDec_clock) {
    tmp8 = kcg_false;
    tmp5 = kcg_false;
    tmp6 = kcg_false;
  }
  else if (_10_else_clock_MessageFromTrackDec) {
    tmp8 = kcg_false;
    tmp5 = kcg_false;
    tmp6 = kcg_false;
  }
  else if (else_clock_MessageFromTrackDec) {
    tmp8 = kcg_false;
    tmp5 = kcg_true;
    tmp6 = kcg_false;
  }
  else {
    tmp5 = kcg_false;
    if (tmp4) {
      tmp8 = kcg_false;
      tmp6 = kcg_false;
    }
    else if (br_1_guard_PowerUpSequencer_AtPowerUpState) {
      tmp8 = kcg_true;
      tmp6 = kcg_false;
    }
    else {
      tmp8 = kcg_false;
      if (br_1_guard_PowerUpSequencer_AfterPowerUp) {
        tmp6 = kcg_true;
      }
      else {
        tmp6 = kcg_false;
      }
    }
  }
  tmp3.valid = kcg_true;
  tmp3.connectionStatus = inC->mobileHWConnectionStatus;
  tmp3.settingUpConnectionHasFailed = kcg_true;
  tmp2.valid = kcg_true;
  tmp2.radioNetworkID = inC->RadioNetworkID_fromTrackside;
  tmp1.valid = kcg_true;
  tmp1.radioNetworkID = inC->RadioNetworkID_fromDriver;
  tmp.valid = kcg_true;
  tmp.radioNetworkID = inC->RadioNetworkID_memorized;
  /* 1 */
  MoRC_managementOfRadioCommunication(
    inC->actualTime,
    (kcg_bool) (tmp8 && enableExecution),
    &_L127,
    &_L127,
    &_L127,
    _L47,
    _L47,
    _L47,
    _L47,
    _L47,
    kcg_false,
    inC->powerAvailable,
    outC->_1_Context_1.FE_Output,
    inC->M_Level,
    &tmp,
    &tmp1,
    &tmp2,
    kcg_false,
    kcg_false,
    &tmp3,
    kcg_false,
    kcg_false,
    &tmp7,
    kcg_false,
    (kcg_bool) (enableExecution && tmp6),
    (kcg_bool) (inC->systemVersionIsCompatible && enableExecution),
    (kcg_bool) (tmp5 && enableExecution),
    inC->M_Mode,
    _L136,
    kcg_true,
    _L136,
    (kcg_bool) (MoRC_rhs_end == inC->radioHole_status && enableExecution),
    kcg_false,
    (kcg_bool)
      ((MoRC_rhs_begin == inC->radioHole_status || inC->radioHole_status ==
          MoRC_rhs_inside) && enableExecution),
    kcg_false,
    _L136,
    (MoRC_validRadioNetworkID_Type *) &MoRC_cSampleRadioNetworkID,
    MoRC_cConnectionStatusTimerInterval,
    &outC->Context_1);
  outC->memorizeTheLastRadioNetworkID =
    outC->Context_1.memorizeTheLastRadioNetworkID;
  outC->radioComSesssionEstablished =
    outC->Context_1.sessionSuccessfullyEstablished;
  outC->safeRadioCommunication_requestSetUp =
    outC->Context_1.requestTheSetupOfASafeRadioConnection;
  outC->safeRadioCommunication_releaseSetUp =
    outC->Context_1.requestReleaseOfSafeRadioConnectionWithTrackside;
  outC->mobileHWCmd = outC->Context_1.mobileHWCmd.action;
  if (outC->Context_1.sendTheMessageInitiationOfCommunicationSessionToTrackside) {
    outC->messageToRBC = MoRC_cNID_MESSAGE_InitiationOfACommunicationSession;
  }
  else if (outC->Context_1.sendATerminationOfCommunicationMessage) {
    outC->messageToRBC = MoRC_cNID_MESSAGE_terminationOfACommunicationSession;
  }
  else if (outC->Context_1.sendMessage_NoCompatibleVersionSupported) {
    outC->messageToRBC = MoRC_cNID_MESSAGE_NoCompatibleVersionSupported;
  }
  else if (outC->Context_1.sendASessionEstablishedReportToTrackside) {
    outC->messageToRBC = MoRC_cNID_MESSAGE_SessionEstablished;
  }
  else {
    outC->messageToRBC = MoRC_cNID_MESSAGE_noMessage;
  }
  outC->mobileSWStatus = outC->Context_1.mobileSWStatus.connectionStatus;
  outC->actualRadioNetworkID =
    outC->Context_1.actualRadioNetworkID.radioNetworkID;
  switch (PowerUpSequencer_state_act) {
    case MoRC_SSM_st_AfterPowerUp_PowerUpSequencer :
      br_1_guard_PowerUpSequencer_AfterPowerUp = !inC->powerAvailable;
      if (br_1_guard_PowerUpSequencer_AfterPowerUp) {
        outC->PowerUpSequencer_state_nxt =
          MoRC_SSM_st_TheVeryFirstCycle_PowerUpSequencer;
        tmp4 = kcg_false;
      }
      else {
        outC->PowerUpSequencer_state_nxt =
          MoRC_SSM_st_AfterPowerUp_PowerUpSequencer;
        tmp4 = kcg_true;
      }
      break;
    case MoRC_SSM_st_AtPowerUpState_PowerUpSequencer :
      if (outC->safeRadioCommunication_requestSetUp) {
        outC->PowerUpSequencer_state_nxt =
          MoRC_SSM_st_AfterPowerUp_PowerUpSequencer;
        tmp4 = kcg_false;
      }
      else {
        outC->PowerUpSequencer_state_nxt =
          MoRC_SSM_st_AtPowerUpState_PowerUpSequencer;
        tmp4 = kcg_true;
      }
      break;
    case MoRC_SSM_st_TheVeryFirstCycle_PowerUpSequencer :
      if (_L2_PowerUpSequencer_TheVeryFirstCycle) {
        outC->PowerUpSequencer_state_nxt =
          MoRC_SSM_st_AtPowerUpState_PowerUpSequencer;
        tmp4 = kcg_false;
      }
      else {
        outC->PowerUpSequencer_state_nxt =
          MoRC_SSM_st_TheVeryFirstCycle_PowerUpSequencer;
        tmp4 = kcg_true;
      }
      break;
    
  }
  outC->ready = outC->Context_1.ready && tmp4;
}