diff --git a/Nasal/ECAM/ECAM-controller.nas b/Nasal/ECAM/ECAM-controller.nas
index 22dadf2e..9375bb14 100644
--- a/Nasal/ECAM/ECAM-controller.nas
+++ b/Nasal/ECAM/ECAM-controller.nas
@@ -89,6 +89,11 @@ var warningNodes = {
rudTrimConfig2: props.globals.initNode("/ECAM/warnings/fctl/rudder-trim-config-range"),
dc2FuelConsumptionIncreased: props.globals.initNode("/ECAM/warnings/logic/dc-2-fuel-consumption-increased"),
dc2FMSPredictions: props.globals.initNode("/ECAM/warnings/logic/dc-2-fms-predictions-unreliable"),
+ thrLeversNotSet: props.globals.initNode("/ECAM/warnings/logic/eng/thr-lever-not-set"),
+ revSet: props.globals.initNode("/ECAM/warnings/logic/eng/reverse-set"),
+ eng1Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-fail"),
+ eng2Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-fail"),
+ phase5Trans: props.globals.initNode("/ECAM/warnings/logic/eng/phase-5-output"),
},
Timers: {
apuFaultOutput: props.globals.initNode("/ECAM/warnings/timer/apu-fault-output"),
diff --git a/Nasal/ECAM/ECAM-logic.nas b/Nasal/ECAM/ECAM-logic.nas
index 32185ee9..ebba38ce 100644
--- a/Nasal/ECAM/ECAM-logic.nas
+++ b/Nasal/ECAM/ECAM-logic.nas
@@ -1160,6 +1160,240 @@ var messages_priority_3 = func {
var messages_priority_2 = func {
phaseVar2 = phaseNode.getValue();
+
+ if ((phaseVar2 == 2 or phaseVar2 == 3 or phaseVar2 == 9) and warningNodes.Logic.thrLeversNotSet.getValue() and engThrustLvrNotSet.clearFlag == 0) {
+ engThrustLvrNotSet.active = 1;
+
+ if (fadec.Thrust.limFlex.getValue()) {
+ engThrustLvrNotSetMCT.active = 1;
+ ECAM_controller.warningReset(engThrustLvrNotSetMCT);
+ } else {
+ engThrustLvrNotSetTO.active = 1;
+ ECAM_controller.warningReset(engThrustLvrNotSetTO);
+ }
+ } else {
+ ECAM_controller.warningReset(engThrustLvrNotSet);
+ ECAM_controller.warningReset(engThrustLvrNotSetMCT);
+ ECAM_controller.warningReset(engThrustLvrNotSetTO);
+ }
+
+ if ((phaseVar2 >= 5 and phaseVar2 <= 7) and warningNodes.Logic.revSet.getValue() and engRevSet.clearFlag == 0) {
+ engRevSet.active = 1;
+
+ if (engRevSetLevers.clearFlag == 0) {
+ engRevSetLevers.active = 1;
+ } else {
+ ECAM_controller.warningReset(engRevSetLevers);
+ }
+ } else {
+ ECAM_controller.warningReset(engRevSet);
+ ECAM_controller.warningReset(engRevSetLevers);
+ }
+
+ if (warningNodes.Logic.eng1Fail.getValue() and eng1Fail.clearFlag == 0) {
+ eng1Fail.active = 1;
+
+ if (0 == 1 and thrustMalfunction1.clearFlag == 0) { # OVER THR PROTECT
+ thrustMalfunction1.active = 1;
+ } else {
+ ECAM_controller.warningReset(thrustMalfunction1);
+ }
+
+ if (0 == 1 and shaftFailure1.clearFlag == 0) { # PW ONLY
+ shaftFailure1.active = 1;
+ } else {
+ ECAM_controller.warningReset(shaftFailure1);
+ }
+
+ if (phaseVar2 != 2 and phaseVar2 != 9 and pts.Controls.Engines.startSw.getValue() != 2 and eng1FailModeSel.clearFlag == 0) { # and not stall and not EGT protect
+ eng1FailModeSel.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FailModeSel);
+ }
+
+ if (phaseVar2 != 4 and warningNodes.Logic.phase5Trans.getValue() == 1) {
+ if (eng1FailThrLvrIdle.clearFlag == 0 and pts.Controls.Engines.Engine.throttleLever[0].getValue() > 0.01) {
+ eng1FailThrLvrIdle.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FailThrLvrIdle);
+ }
+
+ if (eng1FailNoRelight.clearFlag == 0 and phaseVar2 != 2 and phaseVar2 != 9 and pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 0) {
+ eng1FailNoRelight.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FailNoRelight);
+ }
+
+ if (eng1FailMasterOff.clearFlag == 0 and pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 0) {
+ eng1FailMasterOff.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FailMasterOff);
+ }
+
+ if (eng1FailDamage.clearFlag == 0 and systems.fireButtons[0].getValue() == 0) {
+ eng1FailDamage.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FailDamage);
+ }
+
+ if (eng1FailFirePB.clearFlag == 0 and systems.fireButtons[0].getValue() == 0) {
+ eng1FailFirePB.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FailFirePB);
+ }
+
+ if (eng1FailAgent1DischT.clearFlag == 0 and !systems.extinguisherBottles.vector[0].lightProp.getValue()) {
+ eng1FailAgent1DischT.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FailAgent1DischT);
+ }
+
+ if (eng1FailAgent1Disch.clearFlag == 0 and !systems.extinguisherBottles.vector[0].lightProp.getValue()) {
+ eng1FailAgent1Disch.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FailAgent1Disch);
+ }
+
+ if (eng1FailNoDamage.clearFlag == 0) {
+ eng1FailNoDamage.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FailNoDamage);
+ }
+
+ if (eng1FailRelight.clearFlag == 0) {
+ eng1FailRelight.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng1FailRelight);
+ }
+ } else {
+ ECAM_controller.warningReset(eng1FailThrLvrIdle);
+ ECAM_controller.warningReset(eng1FailNoRelight);
+ ECAM_controller.warningReset(eng1FailMasterOff);
+ ECAM_controller.warningReset(eng1FailDamage);
+ ECAM_controller.warningReset(eng1FailFirePB);
+ ECAM_controller.warningReset(eng1FailAgent1DischT);
+ ECAM_controller.warningReset(eng1FailAgent1Disch);
+ ECAM_controller.warningReset(eng1FailNoDamage);
+ ECAM_controller.warningReset(eng1FailRelight);
+ }
+ } else {
+ ECAM_controller.warningReset(eng1Fail);
+ ECAM_controller.warningReset(thrustMalfunction1);
+ ECAM_controller.warningReset(shaftFailure1);
+ ECAM_controller.warningReset(eng1FailModeSel);
+ ECAM_controller.warningReset(eng1FailThrLvrIdle);
+ ECAM_controller.warningReset(eng1FailNoRelight);
+ ECAM_controller.warningReset(eng1FailMasterOff);
+ ECAM_controller.warningReset(eng1FailDamage);
+ ECAM_controller.warningReset(eng1FailFirePB);
+ ECAM_controller.warningReset(eng1FailAgent1DischT);
+ ECAM_controller.warningReset(eng1FailAgent1Disch);
+ ECAM_controller.warningReset(eng1FailNoDamage);
+ ECAM_controller.warningReset(eng1FailRelight);
+ }
+
+ if (warningNodes.Logic.eng2Fail.getValue() and eng2Fail.clearFlag == 0) {
+ eng2Fail.active = 1;
+
+ if (0 == 1 and thrustMalfunction2.clearFlag == 0) { # OVER THR PROTECT
+ thrustMalfunction2.active = 1;
+ } else {
+ ECAM_controller.warningReset(thrustMalfunction2);
+ }
+
+ if (0 == 1 and shaftFailure2.clearFlag == 0) { # PW ONLY
+ shaftFailure2.active = 1;
+ } else {
+ ECAM_controller.warningReset(shaftFailure2);
+ }
+
+ if (phaseVar2 != 2 and phaseVar2 != 9 and pts.Controls.Engines.startSw.getValue() != 2 and eng2FailModeSel.clearFlag == 0) { # and not stall and not EGT protect
+ eng2FailModeSel.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng2FailModeSel);
+ }
+
+ if (phaseVar2 != 4 and warningNodes.Logic.phase5Trans.getValue() == 1) {
+ if (eng2FailThrLvrIdle.clearFlag == 0 and pts.Controls.Engines.Engine.throttleLever[1].getValue() > 0.01) {
+ eng2FailThrLvrIdle.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng2FailThrLvrIdle);
+ }
+
+ if (eng2FailNoRelight.clearFlag == 0 and phaseVar2 != 2 and phaseVar2 != 9 and pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 0) {
+ eng2FailNoRelight.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng2FailNoRelight);
+ }
+
+ if (eng2FailMasterOff.clearFlag == 0 and pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 0) {
+ eng2FailMasterOff.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng2FailMasterOff);
+ }
+
+ if (eng2FailDamage.clearFlag == 0 and systems.fireButtons[1].getValue() == 0) {
+ eng2FailDamage.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng2FailDamage);
+ }
+
+ if (eng2FailFirePB.clearFlag == 0 and systems.fireButtons[1].getValue() == 0) {
+ eng2FailFirePB.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng2FailFirePB);
+ }
+
+ if (eng2FailAgent1DischT.clearFlag == 0 and !systems.extinguisherBottles.vector[2].lightProp.getValue()) {
+ eng2FailAgent1DischT.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng2FailAgent1DischT);
+ }
+
+ if (eng2FailAgent1Disch.clearFlag == 0 and !systems.extinguisherBottles.vector[2].lightProp.getValue()) {
+ eng2FailAgent1Disch.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng2FailAgent1Disch);
+ }
+
+ if (eng2FailNoDamage.clearFlag == 0) {
+ eng2FailNoDamage.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng2FailNoDamage);
+ }
+
+ if (eng2FailRelight.clearFlag == 0) {
+ eng2FailRelight.active = 1;
+ } else {
+ ECAM_controller.warningReset(eng2FailRelight);
+ }
+ } else {
+ ECAM_controller.warningReset(eng2FailThrLvrIdle);
+ ECAM_controller.warningReset(eng2FailNoRelight);
+ ECAM_controller.warningReset(eng2FailMasterOff);
+ ECAM_controller.warningReset(eng2FailDamage);
+ ECAM_controller.warningReset(eng2FailFirePB);
+ ECAM_controller.warningReset(eng2FailAgent1DischT);
+ ECAM_controller.warningReset(eng2FailAgent1Disch);
+ ECAM_controller.warningReset(eng2FailNoDamage);
+ ECAM_controller.warningReset(eng2FailRelight);
+ }
+ } else {
+ ECAM_controller.warningReset(eng2Fail);
+ ECAM_controller.warningReset(thrustMalfunction2);
+ ECAM_controller.warningReset(shaftFailure2);
+ ECAM_controller.warningReset(eng2FailModeSel);
+ ECAM_controller.warningReset(eng2FailThrLvrIdle);
+ ECAM_controller.warningReset(eng2FailNoRelight);
+ ECAM_controller.warningReset(eng2FailMasterOff);
+ ECAM_controller.warningReset(eng2FailDamage);
+ ECAM_controller.warningReset(eng2FailFirePB);
+ ECAM_controller.warningReset(eng2FailAgent1DischT);
+ ECAM_controller.warningReset(eng2FailAgent1Disch);
+ ECAM_controller.warningReset(eng2FailNoDamage);
+ ECAM_controller.warningReset(eng2FailRelight);
+ }
+
# DC EMER CONFIG
if (!systems.ELEC.EmerElec.getValue() and systems.ELEC.Bus.dcEss.getValue() < 25 and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() < 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcEmerconfig.clearFlag == 0) {
dcEmerconfig.active = 1;
diff --git a/Nasal/ECAM/ECAM-messages.nas b/Nasal/ECAM/ECAM-messages.nas
index f87ba9f4..41df8920 100644
--- a/Nasal/ECAM/ECAM-messages.nas
+++ b/Nasal/ECAM/ECAM-messages.nas
@@ -10,6 +10,7 @@
# Left E/WD
var warnings = std.Vector.new([
+ # LEVEL 3 WARN
var stall = warning.new(msg: "", aural: 2),
var flap_not_zero = warning.new(msg: "F/CTL FLAP LVR NOT ZERO", colour: "r", aural: 0, light: 0, isMainMsg: 1),
@@ -47,12 +48,12 @@ var warnings = std.Vector.new([
var eng1FireFlAgent1Timer = warning.new(msg: " -AGENT 1 AFT 10 S.DISCH", colour: "w"),
var eng1FireFlAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng1FireFlATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
- var eng1FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w", isMainMsg: 1),
+ var eng1FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w"),
var eng1FireFlAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
# ENG 1 FIRE (ground)
var eng1FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
- var eng1FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w", isMainMsg: 1),
+ var eng1FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w"),
var eng1FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"),
var eng1FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng1FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
@@ -70,12 +71,12 @@ var warnings = std.Vector.new([
var eng2FireFlAgent1Timer = warning.new(msg: " -AGENT 1 AFT 10 S.DISCH", colour: "w"),
var eng2FireFlAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng2FireFlATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
- var eng2FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w", isMainMsg: 1),
+ var eng2FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w"),
var eng2FireFlAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
# ENG 2 FIRE (ground)
var eng2FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
- var eng2FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w", isMainMsg: 1),
+ var eng2FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w"),
var eng2FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"),
var eng2FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng2FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
@@ -94,7 +95,7 @@ var warnings = std.Vector.new([
var ADR123FaultBUSSF = warning.new(msg: " -FO BKUP SPD/ALT.....ON", colour: "c"),
var ADR123FaultADRPB = warning.new(msg: " -ADR 1+2+3 P/B......OFF", colour: "c"),
var ADR123FaultSPD = warning.new(msg: " -SPD......FLY THE GREEN", colour: "c"),
- var ADR123FaultAOADISAG = warning.new(msg: " •IF AOA DISAGREE: ", colour: "w", isMainMsg: 1),
+ var ADR123FaultAOADISAG = warning.new(msg: " •IF AOA DISAGREE: ", colour: "w"),
var ADR123FaultBUSSINOP = warning.new(msg: " BKUP SPD/ALT.DO NOT USE", colour: "c"),
var ADR123FaultSTBY = warning.new(msg: " -STBY INST.MAY BE UNREL", colour: "c"),
var ADR123FaultPROC = warning.new(msg: " -ALL ADR OFF PROC.APPLY", colour: "c"),
@@ -123,7 +124,7 @@ var warnings = std.Vector.new([
var excessCabAlt = warning.new(msg: "CAB PR EXCESS CAB ALT", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var excessCabAltMask = warning.new(msg: " -CREW OXY MASKS.....USE", colour: "c"),
var excessCabAltSigns = warning.new(msg: " -SIGNS...............ON", colour: "c"),
- var excessCabAltEmerD = warning.new(msg: " •EMER DESCENT:", colour: "w", isMainMsg: 1),
+ var excessCabAltEmerD = warning.new(msg: " •EMER DESCENT:", colour: "w"),
var excessCabAltDES = warning.new(msg: " -DESCENT.......INITIATE", colour: "c"),
var excessCabAltTHRLVR = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var excessCabAltSPDBRK = warning.new(msg: " -SPD BRK...........FULL", colour: "c"),
@@ -133,20 +134,20 @@ var warnings = std.Vector.new([
var excessCabAltPA = warning.new(msg: " -EMER DES (PA).ANNOUNCE", colour: "c"),
var excessCabAltXPDR = warning.new(msg: " -XPDR 7700.....CONSIDER", colour: "c"),
var excessCabAltMEA = warning.new(msg: " MAX FL.....100/MEA-MORA", colour: "c"),
- var excessCabAltCabAlt = warning.new(msg: " •IF CAB ALT>14000 FT:", colour: "w", isMainMsg: 1),
+ var excessCabAltCabAlt = warning.new(msg: " •IF CAB ALT>14000 FT:", colour: "w"),
var excessCabAltMasks = warning.new(msg: " -PAX OXY MASKS...MAN ON", colour: "c"),
# ENG 1 OIL LO PR
var eng1OilLoPr = warning.new(msg: "ENG 1 OIL LO PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
- var eng1OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w", isMainMsg: 1),
- var eng1OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w", isMainMsg: 1),
+ var eng1OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w"),
+ var eng1OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w"),
var eng1OilLoPrThrot = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
var eng1OilLoPrMaster = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
# ENG 2 OIL LO PR
var eng2OilLoPr = warning.new(msg: "ENG 2 OIL LO PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
- var eng2OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w", isMainMsg: 1),
- var eng2OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w", isMainMsg: 1),
+ var eng2OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w"),
+ var eng2OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w"),
var eng2OilLoPrThrot = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
var eng2OilLoPrMaster = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
@@ -161,7 +162,7 @@ var warnings = std.Vector.new([
var gearNotDownLocked = warning.new(msg: "L/G GEAR NOT DOWNLOCKED", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var gearNotDownLockedRec = warning.new(msg: " -L/G LEVER......RECYCLE", colour: "c"),
- var gearNotDownLockedWork = warning.new(msg: " •IF UNSUCCESSFUL:", colour: "w", isMainMsg: 1),
+ var gearNotDownLockedWork = warning.new(msg: " •IF UNSUCCESSFUL:", colour: "w"),
var gearNotDownLocked120 = warning.new(msg: " AFTER 120S:", colour: "w"),
var gearNotDownLockedGrav = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"),
@@ -171,17 +172,17 @@ var warnings = std.Vector.new([
# Cargo smoke
var cargoSmokeFwd = warning.new(msg: "SMOKE FWD CARGO SMOKE", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var cargoSmokeFwdFans = warning.new(msg: " -CAB FANS...........OFF", colour: "c"),
- var cargoSmokeFwdGrdClsd = warning.new(msg: " •IF FWD CRG CLSD:", colour: "w", isMainMsg: 1),
+ var cargoSmokeFwdGrdClsd = warning.new(msg: " •IF FWD CRG CLSD:", colour: "w"),
var cargoSmokeFwdAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"),
- var cargoSmokeFwdGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w", isMainMsg: 1),
- var cargoSmokeFwdDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w", isMainMsg: 1),
+ var cargoSmokeFwdGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w"),
+ var cargoSmokeFwdDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
var cargoSmokeFwdDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"),
var cargoSmokeAft = warning.new(msg: "SMOKE AFT CARGO SMOKE", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var cargoSmokeAftFans = warning.new(msg: " -CAB FANS...........OFF", colour: "c"),
- var cargoSmokeAftGrdClsd = warning.new(msg: " •IF AFT CRG CLSD:", colour: "w", isMainMsg: 1),
+ var cargoSmokeAftGrdClsd = warning.new(msg: " •IF AFT CRG CLSD:", colour: "w"),
var cargoSmokeAftAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"),
- var cargoSmokeAftGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w", isMainMsg: 1),
- var cargoSmokeAftDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w", isMainMsg: 1),
+ var cargoSmokeAftGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w"),
+ var cargoSmokeAftDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
var cargoSmokeAftDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"),
# Lavatory SMOKE
@@ -256,6 +257,46 @@ var warnings = std.Vector.new([
var airBleedLeak = warning.new(msg: "AIR BLEED LEAK ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var airBleedLeakShut = warning.new(msg: " -X BLEED..........SHUT", colour: "c"),
+ # LEVEL 2 WARN
+ # THR LEVERS NOT SET
+ var engThrustLvrNotSet = warning.new(msg: "ENG THR LEVERS NOT SET ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
+ var engThrustLvrNotSetMCT = warning.new(msg: " -THR LEVERS ....MCT/FLX", colour: "c"),
+ var engThrustLvrNotSetTO = warning.new(msg: " -THR LEVERS.......TO/GA", colour: "c"),
+
+ # REV SET
+ var engRevSet = warning.new(msg: "ENG REV SET ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
+ var engRevSetLevers = warning.new(msg: " -THR LEVER......FWD THR", colour: "c"),
+
+ # ENG 1 FAIL
+ var eng1Fail = warning.new(msg: "ENG 1 FAIL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
+ var thrustMalfunction1 = warning.new(msg: " THRUST MALFUNCTION ", colour: "a"),
+ var shaftFailure1 = warning.new(msg: " SHAFT FAILURE ", colour: "a"),
+ var eng1FailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
+ var eng1FailThrLvrIdle = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
+ var eng1FailNoRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w"),
+ var eng1FailMasterOff = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
+ var eng1FailDamage = warning.new(msg: " IF DAMAGE : ", colour: "w"),
+ var eng1FailFirePB = warning.new(msg: " -ENG 1 FIRE P/B....PUSH", colour: "c"),
+ var eng1FailAgent1DischT = warning.new(msg: " -AGENT1 AFTER 10S.DISCH", colour: "c"),
+ var eng1FailAgent1Disch = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
+ var eng1FailNoDamage = warning.new(msg: " IF NO DAMAGE : ", colour: "w"),
+ var eng1FailRelight = warning.new(msg: " -ENG 1 RELIGHT.CONSIDER", colour: "c"),
+
+ # ENG 2 FAIL
+ var eng2Fail = warning.new(msg: "ENG 2 FAIL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
+ var thrustMalfunction2 = warning.new(msg: " THRUST MALFUNCTION ", colour: "a"),
+ var shaftFailure2 = warning.new(msg: " SHAFT FAILURE ", colour: "a"),
+ var eng2FailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
+ var eng2FailThrLvrIdle = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
+ var eng2FailNoRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w"),
+ var eng2FailMasterOff = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
+ var eng2FailDamage = warning.new(msg: " IF DAMAGE : ", colour: "w"),
+ var eng2FailFirePB = warning.new(msg: " -ENG 2 FIRE P/B....PUSH", colour: "c"),
+ var eng2FailAgent1DischT = warning.new(msg: " -AGENT2 AFTER 10S.DISCH", colour: "c"),
+ var eng2FailAgent1Disch = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
+ var eng2FailNoDamage = warning.new(msg: " IF NO DAMAGE : ", colour: "w"),
+ var eng2FailRelight = warning.new(msg: " -ENG 2 RELIGHT.CONSIDER", colour: "c"),
+
# DC EMER CONFIG
var dcEmerconfig = warning.new(msg: "ELEC DC EMER CONFIG", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var dcEmerconfigManOn = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
diff --git a/Systems/a320-fwc.xml b/Systems/a320-fwc.xml
index 655814bc..0f633b54 100644
--- a/Systems/a320-fwc.xml
+++ b/Systems/a320-fwc.xml
@@ -2183,6 +2183,245 @@
+
+
+
+ /ECAM/warnings/logic/eng/eng-1-thr-lvr-abv-idle eq 1
+ /ECAM/warnings/logic/eng/eng-2-thr-lvr-abv-idle eq 1
+
+
+
+
+
+
+ /engines/engine[0]/n2-actual ge 59.4
+ /controls/engines/engine[0]/throttle-pos ge 0.60
+ /controls/engines/engine[0]/throttle-pos lt 0.78
+
+
+
+
+ /ECAM/warnings/logic/eng/thr-lever-1-mcl-mct
+ 120
+ 0.25
+
+
+
+
+
+ /engines/engine[0]/n2-actual ge 59.4
+ /controls/engines/engine[0]/throttle-pos ge 0.60
+ /controls/engines/engine[0]/throttle-pos lt 0.83
+
+
+
+
+ /ECAM/warnings/logic/eng/thr-lever-1-mct
+ 120
+ 0.25
+
+
+
+
+
+ /engines/engine[1]/n2-actual ge 59.4
+ /controls/engines/engine[1]/throttle-pos ge 0.60
+ /controls/engines/engine[1]/throttle-pos lt 0.78
+
+
+
+
+ /ECAM/warnings/logic/eng/thr-lever-2-mcl-mct
+ 120
+ 0.25
+
+
+
+
+
+ /engines/engine[1]/n2-actual ge 59.4
+ /controls/engines/engine[1]/throttle-pos ge 0.60
+ /controls/engines/engine[1]/throttle-pos lt 0.83
+
+
+
+
+ /ECAM/warnings/logic/eng/thr-lever-2-mct
+ 120
+ 0.25
+
+
+
+
+
+ /ECAM/warnings/logic/eng/new-retard-logic ne 1
+
+
+ /systems/thrust/lim-flex eq 0
+
+ /ECAM/warnings/logic/eng/thr-lever-2-mct-output eq 1
+ /ECAM/warnings/logic/eng/thr-lever-2-mcl-mct-output eq 1
+
+
+
+ /systems/thrust/lim-flex eq 1
+ /ECAM/warnings/logic/eng/thr-lever-2-mcl-mct-output eq 1
+
+
+ /systems/thrust/lim-flex eq 0
+
+ /ECAM/warnings/logic/eng/thr-lever-1-mct-output eq 1
+ /ECAM/warnings/logic/eng/thr-lever-1-mcl-mct-output eq 1
+
+
+
+ /systems/thrust/lim-flex eq 1
+ /ECAM/warnings/logic/eng/thr-lever-1-mcl-mct-output eq 1
+
+
+
+
+
+
+
+
+ /ECAM/timer/ground-calc eq 0
+
+ /gear/gear[1]/rollspeed-ms lt 36
+ /ECAM/warning-phase ne 7
+
+
+ /controls/engines/engine[0]/throttle-rev gt 0.0
+ /controls/engines/engine[1]/throttle-rev gt 0.0
+
+
+
+
+
+
+
+ /engines/engine[0]/n2-actual ge 59.4
+
+
+
+
+ /ECAM/warnings/logic/eng/eng-1-fail-cond-set-input
+ 120
+ 0.3333
+
+
+
+
+
+ /controls/engines/engine[0]/cutoff-switch eq 1
+ /controls/engines/engine[0]/fire-btn eq 1
+
+
+
+
+
+
+ /engines/engine[1]/n2-actual ge 59.4
+
+
+
+
+ /ECAM/warnings/logic/eng/eng-2-fail-cond-set-input
+ 120
+ 0.3333
+
+
+
+
+
+ /controls/engines/engine[1]/cutoff-switch eq 1
+ /controls/engines/engine[1]/fire-btn eq 1
+
+
+
+
+
+
+ /controls/engines/engine[0]/cutoff-switch eq 0
+ /controls/engines/engine[0]/fire-btn eq 0
+ /engines/engine[0]/n2-actual lt 59.4
+ /ECAM/warnings/logic/eng/eng-1-fail-cond eq 1
+
+
+
+
+
+
+ /controls/engines/engine[1]/cutoff-switch eq 0
+ /controls/engines/engine[1]/fire-btn eq 0
+ /engines/engine[1]/n2-actual lt 59.4
+ /ECAM/warnings/logic/eng/eng-2-fail-cond eq 1
+
+
+
+
+
+
+ /engines/engine[0]/n2-actual ge 59.4
+ /ECAM/dual-failure-enabled eq 1
+
+
+
+
+
+
+ /engines/engine[1]/n2-actual ge 59.4
+ /ECAM/dual-failure-enabled eq 1
+
+
+
+
+ /controls/engines/engine[0]/cutoff-switch
+ 120
+ 0.01666666666
+
+
+
+ /controls/engines/engine[1]/cutoff-switch
+ 120
+ 0.01666666666
+
+
+
+
+
+
+ /ECAM/warnings/logic/stall/phase-4-output eq 0
+ /ECAM/warnings/logic/stall/phase-4 eq 0
+ /ECAM/warning-phase eq 5
+
+
+
+
+
+
+
+
+ /ECAM/warnings/logic/eng/phase-5-output eq 1
+ /ECAM/warnings/logic/eng/phase-5-output-2 eq 1
+ /ECAM/warnings/logic/eng/eng-1-master-60-sec eq 0
+
+ /ECAM/warnings/logic/eng/eng-1-fail-output eq 1
+
+
+
+
+
+
+
+ /ECAM/warnings/logic/eng/phase-5-output eq 1
+ /ECAM/warnings/logic/eng/phase-5-output-2 eq 1
+ /ECAM/warnings/logic/eng/eng-2-master-60-sec eq 0
+
+ /ECAM/warnings/logic/eng/eng-2-fail-output eq 1
+
+
+
diff --git a/Systems/ecam-proprules.xml b/Systems/ecam-proprules.xml
index d5a55c1a..0cc0f736 100644
--- a/Systems/ecam-proprules.xml
+++ b/Systems/ecam-proprules.xml
@@ -1081,4 +1081,73 @@
+
+
+ RS
+
+ /ECAM/warnings/logic/eng/eng-1-fail-cond-set
+
+
+ /ECAM/warnings/logic/eng/eng-1-fail-cond-reset
+
+
+
+
+
+ RS
+
+ /ECAM/warnings/logic/eng/eng-2-fail-cond-set
+
+
+ /ECAM/warnings/logic/eng/eng-2-fail-cond-reset
+
+
+
+
+
+ RS
+
+ /ECAM/warnings/logic/eng/eng-1-fail-set
+
+
+ /ECAM/warnings/logic/eng/eng-1-fail-reset
+
+
+
+
+
+ RS
+
+ /ECAM/warnings/logic/eng/eng-2-fail-set
+
+
+ /ECAM/warnings/logic/eng/eng-2-fail-reset
+
+
+
+
+
+ monostable
+ true
+
+
+ /ECAM/warnings/logic/eng/phase-5
+
+
+
+
+
+
+ monostable
+ true
+
+
+ /ECAM/warnings/logic/eng/phase-5-output
+
+
+