// @Params("<5000|120000|200000>, <true|false>") -not yet in the model public void abort(int altitude, boolean controlMotorFired) { if (internalState == cevStatesAscent) { if (internalAscentState == ascentStatesFirstStage) { spacecraft.doStage1Abort(altitude, controlMotorFired); if (altitude <= 120000) { if (controlMotorFired) { internalAscentState = ascentStatesAbortLowActiveLAS; } else { internalAscentState = ascentStatesAbortPassiveLAS; } } if (altitude >= 120000) { // <ERR> interval overlap -> ambiguity // TODO: Are this errors supposed to be found? // Should this reamin or not? internalAscentState = ascentStatesAbortHighActiveLAS; // <ERR> forgotten controlMotor branch } return; } if (internalAscentState == ascentStatesSecondStage) { spacecraft.doStage2Abort(controlMotorFired); if (controlMotorFired) { internalAscentState = ascentStatesAbortHighActiveLAS; } else { internalAscentState = ascentStatesAbortPassiveLAS; } return; } } // assert hasNextState() : errors.log("abort command did not enter abort state"); // TODO: What does hasNextState? assert false : errors.log("abort command did not enter abort state"); }
public void completion() { if (internalState == cevStatesAscent) { if (internalAscentState == ascentStatesHoldLaunch) { internalState = cevStatesEndState; return; } if (internalAscentState == ascentStatesPadAbort) { internalState = cevStatesEndState; return; } if (internalAscentState == ascentStatesAbortPassiveLAS) { spacecraft.doLowPassiveAbort(); internalState = cevStatesEntry; internalEntryState = entryStatesChuteSequence; return; } if (internalAscentState == ascentStatesAbortLowActiveLAS) { assert failures.noLAS_CNTRLfailure() : errors.log("active LAS with failed control motor"); spacecraft.doLowActiveAbort(); internalState = cevStatesEntry; internalEntryState = entryStatesChuteSequence; return; } if (internalAscentState == ascentStatesAbortHighActiveLAS) { assert failures.noLAS_CNTRLfailure() : errors.log("active LAS with failed control motor"); internalState = cevStatesEntry; internalEntryState = entryStatesChuteSequence; return; } } if (internalState == cevStatesEarthOrbit) { if (internalEarthOrbitState == earthOrbitStatesInsertion) { if (failures.noEARTH_SENSORfailure()) { internalEarthOrbitState = earthOrbitStatesOrbitOps; } else { internalEarthOrbitState = earthOrbitStatesSafeHold; // <ERR> never reached } return; } } if (internalState == cevStatesLunarOps) { if (internalLunarOpsState == lunarOpsStatesInsertion) { internalLunarOpsState = lunarOpsStatesLunarOrbit; return; } if (internalLunarOpsState == lunarOpsStatesLunarLanding) { internalLunarOpsState = lunarOpsStatesLunarOrbit; } } if (internalState == cevStatesEntry) { if (internalEntryState == entryStatesEntryInterface) { internalEntryState = entryStatesNominalEntry; return; } if (internalEntryState == entryStatesNominalEntry) { internalEntryState = entryStatesChuteSequence; return; } if (internalEntryState == entryStatesChuteSequence) { assert spacecraft.readyForChuteSequence() : errors.last(); internalEntryState = entryStatesLanding; return; } if (internalEntryState == entryStatesLanding) { internalState = cevStatesEndState; return; } if (internalEntryState == entryStatesAbortEntryBallistic) { internalEntryState = entryStatesChuteSequence; return; } if (internalEntryState == entryStatesAbortEntryFixedBank) { internalEntryState = entryStatesChuteSequence; return; } if (internalState == cevStatesLunarOps) { if (internalLunarOpsState == lunarOpsStatesLunarLanding) { if (internalLunarLandingLSAMState == lunarLandingLSAMStatesLunarDescent) { internalLunarLandingLSAMState = lunarLandingLSAMStatesSurfaceOps; return; } } } } assert false; }