diff --git a/Nasal/ECAM.nas b/Nasal/ECAM.nas index ef7b77b3..66864835 100644 --- a/Nasal/ECAM.nas +++ b/Nasal/ECAM.nas @@ -184,61 +184,103 @@ var LowerECAM = { var man_sel = getprop("/ECAM/Lower/man-select"); var fault_sel = getprop("/ECAM/Lower/fault-select"); - var apu_timer = getprop("/ECAM/Lower/apu-timer"); - var apu_n = getprop("/systems/apu/rpm"); - var apu_master = getprop("/controls/APU/master"); - - var eng_timer = getprop("/ECAM/Lower/eng-timer"); - var eng1_state = getprop("/engines/engine[0]/state"); - var eng2_state = getprop("/engines/engine[1]/state"); - var eng_mode = getprop("/controls/engines/engine-start-switch"); - if(!man_sel) { + if(!fault_sel) { - #TODO auto select page for ENG on TO, F/CTL - if( eng_mode == 0 + var apu_timer = getprop("/ECAM/Lower/apu-timer"); + var apu_n = getprop("/systems/apu/rpm"); + var apu_master = getprop("/controls/APU/master"); + + var eng_timer = getprop("/ECAM/Lower/eng-timer"); + var eng_to = getprop("/ECAM/Lower/eng-to"); + var eng1_state = getprop("/engines/engine[0]/state"); + var eng2_state = getprop("/engines/engine[1]/state"); + var eng_mode = getprop("/controls/engines/engine-start-switch"); + + var flaps = getprop("/controls/flight/flap-lever"); + var agl = getprop("/position/gear-agl-ft"); + + var phase = getprop("/FMGC/status/phase"); + var gear0 = getprop("/gear/gear[0]/wow"); + var n1_left = getprop("/engines/engine[0]/n1-actual"); + var n1_right = getprop("/engines/engine[1]/n1-actual"); + var state1 = getprop("/systems/thrust/state1"); + var state2 = getprop("/systems/thrust/state2"); + var flx = getprop("/systems/thrust/lim-flex"); + var thr1 = getprop("/controls/engines/engine[0]/throttle-pos"); + var thr2 = getprop("/controls/engines/engine[1]/throttle-pos"); + + var eng_out = 0; + if ((getprop("/engines/engine[0]/state") == 3 and getprop("/engines/engine[1]/state") != 3) or (getprop("/engines/engine[0]/state") != 3 and getprop("/engines/engine[1]/state") == 3)) { + eng_out = 1; + } + + var to_thr = 0; + if (n1_left >= 70 and state1 == "TOGA" or (flx == 1 and state1 == "MCT" and eng_out == 0) + or (flx == 1 and (state1 == "MAN THR" and thr1 >= 0.83 and eng_out == 0)) + or n1_right >= 70 and state2 == "TOGA" or (flx == 1 and state2 == "MCT" and eng_out == 0) + or (flx == 1 and (state2 == "MAN THR" and thr2 >= 0.83 and eng_out == 0))) { + to_thr = 1; + } + + #TODO auto select page for F/CTL + if ( eng_mode == 0 or eng1_state == 1 or eng1_state == 2 or eng2_state == 1 or eng2_state == 2 + or (to_thr == 1 and agl < 1500) + or eng_to == 1 or eng_timer > 0) { - if(eng_timer == 0) { + if (eng_timer == 0) { setprop("/ECAM/Lower/eng-timer", 1); } - if(eng_mode == 1) { + if (eng_mode == 1 and to_thr == 0) { setprop("/ECAM/Lower/eng-timer", 0); } - if((eng1_state == 0 or eng1_state == 3) and (eng2_state == 0 or eng2_state == 3)) { + if (to_thr == 1 and agl <= 1500) { + setprop("/ECAM/Lower/eng-to", 1); + } + + if (eng_to == 1 and flaps == 0 and to_thr == 0 and agl >= 1500) { + setprop("/ECAM/Lower/eng-to", 0); + } + + if ((eng1_state == 0 or eng1_state == 3) and (eng2_state == 0 or eng2_state == 3) and gear0 == 1 and to_thr == 0) { settimer(func() { setprop("/ECAM/Lower/eng-timer", 0);}, 10); } + if (eng_to == 1 and agl >= 1500) { + settimer(func() { setprop("/ECAM/Lower/eng-to", 0);}, 60); + } + setprop("/ECAM/Lower/page", "eng"); - } else if((apu_master == 1 and apu_n < 95) or apu_timer > 0) { + } else if ((apu_master == 1 and apu_n < 95) or apu_timer > 0) { # apu-timer states: # 0 -> no apu start # 1 -> apu starting/started, will be set back to 0 by timer - if(apu_timer == 0) { + if (apu_timer == 0) { setprop("/ECAM/Lower/apu-timer", 1); } - if(apu_master == 0) { + if (apu_master == 0) { setprop("/ECAM/Lower/apu-timer", 0); } - if(apu_n >= 95) { + if (apu_n >= 95) { settimer(func() { setprop("/ECAM/Lower/apu-timer", 0);}, 10); } setprop("/ECAM/Lower/page", "apu"); - } else if(((getprop("/engines/engine[0]/n2-actual") >= 59 or getprop("/engines/engine[1]/n2-actual") >= 59) and getprop("/gear/gear[1]/wow") == 1) or (getprop("/instrumentation/altimeter/indicated-altitude-ft") <= 16000 and getprop("/controls/gear/gear-down") == 1 and getprop("/gear/gear[1]/wow") == 0)) { + } else if (((getprop("/engines/engine[0]/n2-actual") >= 59 or getprop("/engines/engine[1]/n2-actual") >= 59) and getprop("/gear/gear[1]/wow") == 1) or (getprop("/instrumentation/altimeter/indicated-altitude-ft") <= 16000 and getprop("/controls/gear/gear-down") == 1 and getprop("/gear/gear[1]/wow") == 0)) { setprop("/ECAM/Lower/page", "wheel"); - } else if(getprop("/gear/gear[1]/wow") == 1) { + } else if (getprop("/gear/gear[1]/wow") == 1) { setprop("/ECAM/Lower/page", "door"); } else { @@ -253,6 +295,7 @@ var LowerECAM = { setprop("/ECAM/Lower/fault-select", 0); setprop("/ECAM/Lower/apu-timer", 0); setprop("/ECAM/Lower/eng-timer", 0); + setprop("/ECAM/Lower/eng-to", 0); setprop("/ECAM/Lower/fctl-timer", 0); setprop("/ECAM/Lower/light/apu", 0); setprop("/ECAM/Lower/light/bleed", 0);