diff --git a/Nasal/ECAM.nas b/Nasal/ECAM.nas index 30be5563..a26c0509 100644 --- a/Nasal/ECAM.nas +++ b/Nasal/ECAM.nas @@ -301,7 +301,6 @@ var LowerECAM = { setprop("/it-autoflight/output/athr-warning", 0); setprop("/ECAM/Lower/light/clr", 0); setprop("/ECAM/warnings/master-caution-light", 0); - LowerECAM.failCall("sts"); return; } @@ -309,12 +308,12 @@ var LowerECAM = { setprop("/it-autoflight/output/ap-warning", 0); setprop("/ECAM/Lower/light/clr", 0); setprop("/ECAM/warnings/master-warning-light", 0); - LowerECAM.failCall("sts"); return; } if (b == "clr" and getprop("/ECAM/Lower/man-select") == 0 and getprop("/ECAM/Lower/fault-select") == 0) { ecam.ECAM_controller.clear(); + return; } if (getprop("/ECAM/Lower/fault-select") == 0) { diff --git a/Nasal/ECAM/ECAM-controller.nas b/Nasal/ECAM/ECAM-controller.nas index d027cc3e..ed076337 100644 --- a/Nasal/ECAM/ECAM-controller.nas +++ b/Nasal/ECAM/ECAM-controller.nas @@ -26,6 +26,8 @@ var rightLineIndex = 0; var statusIndex = 0; var flash = 0; +var hasCleared = 0; +var statusFlag = 0; var warning = { new: func(msg,colour = "g",aural = 9,light = 9,hasSubmsg = 0,lastSubmsg = 0) { @@ -45,7 +47,7 @@ var warning = { return t }, write: func() { - if (me.active == 0) {return;} + if (me.active == 0) { return; } lineIndex = 0; while (lineIndex < 7 and lines[lineIndex].getValue() != "") { lineIndex = lineIndex + 1; # go to next line until empty line @@ -69,15 +71,11 @@ var warning = { }, sound: func() { if (me.aural > 1 or me.noRepeat2 == 1 or me.active == 0) {return;} + aural[me.aural].setBoolValue(0); me.noRepeat2 = 1; - if (aural[me.aural].getBoolValue()) { - aural[me.aural].setBoolValue(0); - settimer(func() { - aural[me.aural].setBoolValue(1); - }, 0.15); - } else { - aural[me.aural].setBoolValue(1); - } + settimer(func() { + aural[me.aural].setBoolValue(1); + }, 0.15); }, }; @@ -236,16 +234,20 @@ var ECAM_controller = { } }, clear: func() { + hasCleared = 0; foreach (var w; warnings.vector) { if (w.active == 1) { if (w.hasSubmsg == 1) { continue; } w.clearFlag = 1; + hasCleared = 1; + statusFlag = 1; break; } } - if (lines[0].getValue() == "") { # all messages cleared - call status + if (hasCleared == 0 and statusFlag == 1) { libraries.LowerECAM.failCall("sts"); + statusFlag = 0; } }, recall: func() { diff --git a/Nasal/buttons.nas b/Nasal/buttons.nas index e530ac0f..0bdb5a8e 100644 --- a/Nasal/buttons.nas +++ b/Nasal/buttons.nas @@ -635,9 +635,13 @@ var athrWarn = func(type) { } var lockThr = func() { - setprop("/systems/thrust/thr-lock-time", getprop("/sim/time/elapsed-sec")); - setprop("/systems/thrust/thr-locked", 1); - lockTimer.start(); + state1 = getprop("/systems/thrust/state1"); + state2 = getprop("/systems/thrust/state2"); + if ((state1 == "CL" and state2 == "CL" and getprop("/systems/thrust/eng-out") == 0) or (state1 == "MCT" and state2 == "MCT" and getprop("/systems/thrust/eng-out") == 1)) { + setprop("/systems/thrust/thr-lock-time", getprop("/sim/time/elapsed-sec")); + setprop("/systems/thrust/thr-locked", 1); + lockTimer.start(); + } } var checkLockThr = func() { @@ -664,7 +668,13 @@ var checkLockThr = func() { state1 = getprop("/systems/thrust/state1"); state2 = getprop("/systems/thrust/state2"); - if ((state1 == "CL" and state2 == "CL" and getprop("/systems/thrust/eng-out") == 0) or (state1 == "MCT" and state2 == "MCT" and getprop("/systems/thrust/eng-out") == 1)) { + if ((state1 != "CL" and state2 != "CL" and getprop("/systems/thrust/eng-out") == 0) or (state1 != "MCT" and state2 != "MCT" and getprop("/systems/thrust/eng-out") == 1)) { + lockTimer.stop(); + setprop("/systems/thrust/thr-locked", 0); + setprop("/systems/thrust/thr-locked-alert", 0); + setprop("/systems/thrust/thr-lock-time", 0); + setprop("/systems/thrust/thr-locked-flash", 0); + } elsif ((state1 == "CL" and state2 == "CL" and getprop("/systems/thrust/eng-out") == 0) or (state1 == "MCT" and state2 == "MCT" and getprop("/systems/thrust/eng-out") == 1)) { setprop("/systems/thrust/thr-locked-alert", 1); setprop("/systems/thrust/thr-lock-time", getprop("/sim/time/elapsed-sec")); setprop("/systems/thrust/thr-locked-flash", 1); @@ -704,11 +714,14 @@ var checkLockThr2 = func() { state1 = getprop("/systems/thrust/state1"); state2 = getprop("/systems/thrust/state2"); + + if ((state1 != "CL" and state2 != "CL" and getprop("/systems/thrust/eng-out") == 0) or (state1 != "MCT" and state2 != "MCT" and getprop("/systems/thrust/eng-out") == 1)) { + lockTimer2.stop(); setprop("/systems/thrust/thr-locked", 0); setprop("/systems/thrust/thr-locked-alert", 0); + setprop("/systems/thrust/thr-lock-time", 0); setprop("/systems/thrust/thr-locked-flash", 0); - lockTimer2.stop(); } }