diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml
index b68029b0..910db173 100644
--- a/Models/FlightDeck/a320.flightdeck.xml
+++ b/Models/FlightDeck/a320.flightdeck.xml
@@ -6810,7 +6810,7 @@
property-adjust
controls/engines/engine[0]/throttle
- 0.01
+ 0.01
1
@@ -6821,7 +6821,7 @@
property-adjust
controls/engines/engine[0]/throttle
- -0.01
+ -0.01
0
@@ -6840,20 +6840,11 @@
Engine 1 throttle lever rev
rotate
thr_l
- fdm/jsbsim/fcs/reverse-lever[0]
- -3.5
-
- trim.axis
-
-
-
- Engine 1 throttle lever rev 2
- rotate
- thr_l
- fdm/jsbsim/fcs/reverse-thr-lever[0]
+ fdm/jsbsim/fadec/reverse-lever[0]
- 0.00 0
- 0.50-20
+ 0.00 0.0
+ 0.25 -3.5
+ 1.00-23.5
trim.axis
@@ -6870,7 +6861,7 @@
property-adjust
controls/engines/engine[1]/throttle
- 0.01
+ 0.01
1
@@ -6881,7 +6872,7 @@
property-adjust
controls/engines/engine[1]/throttle
- -0.01
+ -0.01
0
@@ -6900,20 +6891,11 @@
Engine 2 throttle lever rev
rotate
thr_r
- fdm/jsbsim/fcs/reverse-lever[1]
- -3.5
-
- trim.axis
-
-
-
- Engine 2 throttle lever rev 2
- rotate
- thr_r
- fdm/jsbsim/fcs/reverse-thr-lever[1]
+ fdm/jsbsim/fadec/reverse-lever[1]
- 0.00 0
- 0.50-20
+ 0.00 0.0
+ 0.25 -3.5
+ 1.00-23.5
trim.axis
@@ -8168,8 +8150,8 @@
false
false
led.txf
- 0.010
- 1.0
+ 0.010
+ 1.0
0.012
0.050
@@ -8199,8 +8181,8 @@
false
false
led.txf
- 0.010
- 1.0
+ 0.010
+ 1.0
0.012
0.060
@@ -8230,8 +8212,8 @@
false
false
led.txf
- 0.008
- 1.0
+ 0.008
+ 1.0
0.012
0.060
@@ -8261,8 +8243,8 @@
false
false
led.txf
- 0.010
- 1.1
+ 0.010
+ 1.1
0.012
0.060
@@ -8292,8 +8274,8 @@
false
false
led.txf
- 0.010
- 1.0
+ 0.010
+ 1.0
0.012
0.060
@@ -8323,8 +8305,8 @@
false
false
led.txf
- 0.008
- 1.0
+ 0.008
+ 1.0
0.012
0.060
@@ -8354,8 +8336,8 @@
false
false
led.txf
- 0.010
- 1.0
+ 0.010
+ 1.0
0.012
0.040
@@ -8531,8 +8513,8 @@
false
false
led.txf
- 0.007
- 1.0
+ 0.007
+ 1.0
0.012
0.040
@@ -8562,8 +8544,8 @@
false
false
led.txf
- 0.007
- 1.0
+ 0.007
+ 1.0
0.012
0.040
@@ -8595,8 +8577,8 @@
false
false
led.txf
- 0.007
- 1.0
+ 0.007
+ 1.0
0.012
0.040
@@ -8626,8 +8608,8 @@
false
false
led.txf
- 0.007
- 1.0
+ 0.007
+ 1.0
0.012
0.040
diff --git a/Models/Instruments/Upper-ECAM/Upper-ECAM.nas b/Models/Instruments/Upper-ECAM/Upper-ECAM.nas
index 67ba5947..ca855aa5 100644
--- a/Models/Instruments/Upper-ECAM/Upper-ECAM.nas
+++ b/Models/Instruments/Upper-ECAM/Upper-ECAM.nas
@@ -996,13 +996,13 @@ input = {
slatLocked: "/fdm/jsbsim/fcs/slat-locked",
# N1 parameters
- N1_1: "/ECAM/Upper/N1[0]",
- N1_2: "/ECAM/Upper/N1[1]",
+ N1_1: "/instrumentation/upper-ecam/n1[0]",
+ N1_2: "/instrumentation/upper-ecam/n1[1]",
N1_actual_1: "/engines/engine[0]/n1-actual",
N1_actual_2: "/engines/engine[1]/n1-actual",
- N1_lim: "/ECAM/Upper/N1ylim",
- N1thr_1: "/ECAM/Upper/N1thr[0]",
- N1thr_2: "/ECAM/Upper/N1thr[1]",
+ N1_lim: "/instrumentation/upper-ecam/n1-limit",
+ N1thr_1: "/instrumentation/upper-ecam/n1-thr[0]",
+ N1thr_2: "/instrumentation/upper-ecam/n1-thr[1]",
# N2 parameters
N2_actual_1: "/engines/engine[0]/n2-actual",
diff --git a/Nasal/Libraries/libraries.nas b/Nasal/Libraries/libraries.nas
index 967b11dc..e5c1bb58 100644
--- a/Nasal/Libraries/libraries.nas
+++ b/Nasal/Libraries/libraries.nas
@@ -91,6 +91,7 @@ var systemsInit = func() {
systems.FUEL.init();
systems.ADIRS.init();
systems.eng_init();
+ systems.ENGINE.init();
systems.FADEC.init();
systems.APUController.init();
systems.BrakeSys.reset();
diff --git a/Nasal/Systems/Engines/engines-common.nas b/Nasal/Systems/Engines/engines-common.nas
index 00f39a20..93f91900 100644
--- a/Nasal/Systems/Engines/engines-common.nas
+++ b/Nasal/Systems/Engines/engines-common.nas
@@ -17,121 +17,114 @@ var eng_common_init = func {
manStart[1].setValue(0);
}
-# Engine thrust commands
+var ENGINE = {
+ reverseLever: [props.globals.getNode("/controls/engines/engine[0]/reverse-lever"), props.globals.getNode("/controls/engines/engine[1]/reverse-lever")],
+ reverseLeverTemp: [0, 0],
+ throttle: [props.globals.getNode("/controls/engines/engine[0]/throttle"), props.globals.getNode("/controls/engines/engine[1]/throttle")],
+ init: func() {
+ me.reverseLever[0].setBoolValue(0);
+ me.reverseLever[1].setBoolValue(0);
+ },
+};
+
+# Engine Sim Control Stuff
var doIdleThrust = func {
# Idle does not respect selected engines, because it is used to respond
# to "Retard" and both engines must be idle for spoilers to deploy
- pts.Controls.Engines.Engine.throttle[0].setValue(0);
- pts.Controls.Engines.Engine.throttle[1].setValue(0);
+ ENGINE.throttle[0].setValue(0);
+ ENGINE.throttle[1].setValue(0);
}
var doClThrust = func {
if (pts.Sim.Input.Selected.engine[0].getBoolValue()) {
- pts.Controls.Engines.Engine.throttle[0].setValue(0.63);
+ ENGINE.throttle[0].setValue(0.63);
}
if (pts.Sim.Input.Selected.engine[1].getBoolValue()) {
- pts.Controls.Engines.Engine.throttle[1].setValue(0.63);
+ ENGINE.throttle[1].setValue(0.63);
}
}
var doMctThrust = func {
if (pts.Sim.Input.Selected.engine[0].getBoolValue()) {
- pts.Controls.Engines.Engine.throttle[0].setValue(0.8);
+ ENGINE.throttle[0].setValue(0.8);
}
if (pts.Sim.Input.Selected.engine[1].getBoolValue()) {
- pts.Controls.Engines.Engine.throttle[1].setValue(0.8);
+ ENGINE.throttle[1].setValue(0.8);
}
}
var doTogaThrust = func {
if (pts.Sim.Input.Selected.engine[0].getBoolValue()) {
- pts.Controls.Engines.Engine.throttle[0].setValue(1);
+ ENGINE.throttle[0].setValue(1);
}
if (pts.Sim.Input.Selected.engine[1].getBoolValue()) {
- pts.Controls.Engines.Engine.throttle[1].setValue(1);
+ ENGINE.throttle[1].setValue(1);
}
}
-# Reverse Thrust System - TODO: Totally f*cked! Redo the whole d*mn thing!
-var toggleFastRevThrust = func {
- #if (systems.FADEC.detentText[0].getValue() == "IDLE" and systems.FADEC.detentText[1].getValue() == "IDLE" and pts.Controls.Engines.Engine.reverseCmd[0].getValue() == 0 and pts.Controls.Engines.Engine.reverseCmd[1].getValue() == 0 and pts.Gear.wow[1].getValue() == 1 and pts.Gear.wow[2].getValue() == 1) {
- # if (pts.Sim.Input.Selected.engine[0].getBoolValue()) {
- # interpolate("/engines/engine[0]/reverser-pos-norm", 1, 1.4);
- # pts.Controls.Engines.Engine.reverseCmd[0].setValue(1);
- # pts.Controls.Engines.Engine.reverseLever[0].setValue(0.65);
- # pts.Fdm.JSBsim.Propulsion.Engine.reverseCmdAngle[0].setValue(3.14);
- # }
- # if (pts.Sim.Input.Selected.engine[1].getBoolValue()) {
- # interpolate("/engines/engine[1]/reverser-pos-norm", 1, 1.4);
- # pts.Controls.Engines.Engine.reverseCmd[1].setValue(1);
- # pts.Controls.Engines.Engine.reverseLever[1].setValue(0.65);
- # pts.Fdm.JSBsim.Propulsion.Engine.reverseCmdAngle[1].setValue(3.14);
- # }
- #} else if (pts.Controls.Engines.Engine.reverseCmd[0].getValue() == 1 or pts.Controls.Engines.Engine.reverseCmd[1].getValue() == 1) {
- # interpolate("/engines/engine[0]/reverser-pos-norm", 0, 1.0);
- # interpolate("/engines/engine[1]/reverser-pos-norm", 0, 1.0);
- # pts.Controls.Engines.Engine.reverseLever[0].setValue(0);
- # pts.Controls.Engines.Engine.reverseLever[1].setValue(0);
- # pts.Fdm.JSBsim.Propulsion.Engine.reverseCmdAngle[0].setValue(0);
- # pts.Fdm.JSBsim.Propulsion.Engine.reverseCmdAngle[1].setValue(0);
- # pts.Controls.Engines.Engine.reverseCmd[0].setValue(0);
- # pts.Controls.Engines.Engine.reverseCmd[1].setValue(0);
- #}
+# Intentionally not using + or -, floating point error would be BAD
+# We just based it off Engine 1
+var doRevThrust = func() {
+ ENGINE.reverseLeverTemp[0] = ENGINE.reverseLever[0].getValue();
+ if ((pts.Gear.wow[1].getBoolValue() or pts.Gear.wow[2].getBoolValue()) and systems.FADEC.maxDetent.getValue() == 0) {
+ if (ENGINE.reverseLeverTemp[0] < 0.25) {
+ ENGINE.reverseLever[0].setValue(0.25);
+ ENGINE.reverseLever[1].setValue(0.25);
+ } else if (ENGINE.reverseLeverTemp[0] < 0.5) {
+ ENGINE.reverseLever[0].setValue(0.5);
+ ENGINE.reverseLever[1].setValue(0.5);
+ } else if (ENGINE.reverseLeverTemp[0] < 0.75) {
+ ENGINE.reverseLever[0].setValue(0.75);
+ ENGINE.reverseLever[1].setValue(0.75);
+ } else if (ENGINE.reverseLeverTemp[0] < 1.0) {
+ ENGINE.reverseLever[0].setValue(1.0);
+ ENGINE.reverseLever[1].setValue(1.0);
+ }
+ ENGINE.throttle[0].setValue(0);
+ ENGINE.throttle[1].setValue(0);
+ } else {
+ ENGINE.reverseLever[0].setValue(0);
+ ENGINE.reverseLever[1].setValue(0);
+ }
}
-var doRevThrust = func {
- #if (pts.Gear.wow[1].getValue() != 1 and pts.Gear.wow[2].getValue() != 1) {
- # # Can't select reverse if not on the ground
- # return;
- #}
- #if (pts.Sim.Input.Selected.engine[0].getBoolValue() and pts.Controls.Engines.Engine.reverseCmd[0].getValue() == 1) {
- # var pos = pts.Controls.Engines.Engine.reverseLever[0].getValue();
- # if (pos < 0.649) {
- # pts.Controls.Engines.Engine.reverseLever[0].setValue(pos + 0.15);
- # }
- #}
- #if (pts.Sim.Input.Selected.engine[1].getBoolValue() and pts.Controls.Engines.Engine.reverseCmd[1].getValue() == 1) {
- # var pos = pts.Controls.Engines.Engine.reverseLever[1].getValue();
- # if (pos < 0.649) {
- # pts.Controls.Engines.Engine.reverseLever[1].setValue(pos + 0.15);
- # }
- #}
- #
- #if (pts.Sim.Input.Selected.engine[0].getBoolValue() and systems.FADEC.detentText[0].getValue() == "IDLE" and pts.Controls.Engines.Engine.reverseCmd[0].getValue() == 0) {
- # interpolate("/engines/engine[0]/reverser-pos-norm", 1, 1.4);
- # pts.Controls.Engines.Engine.reverseLever[0].setValue(0.05);
- # pts.Controls.Engines.Engine.reverseCmd[0].setValue(1);
- # pts.Fdm.JSBsim.Propulsion.Engine.reverseCmdAngle[0].setValue(3.14);
- #}
- #if (pts.Sim.Input.Selected.engine[1].getBoolValue() and systems.FADEC.detentText[1].getValue() == "IDLE" and pts.Controls.Engines.Engine.reverseCmd[1].getValue() == 0) {
- # interpolate("/engines/engine[1]/reverser-pos-norm", 1, 1.4);
- # pts.Controls.Engines.Engine.reverseLever[1].setValue(0.05);
- # pts.Controls.Engines.Engine.reverseCmd[1].setValue(1);
- # pts.Fdm.JSBsim.Propulsion.Engine.reverseCmdAngle[1].setValue(3.14);
- #}
+var unRevThrust = func() {
+ ENGINE.reverseLeverTemp[0] = ENGINE.reverseLever[0].getValue();
+ if ((pts.Gear.wow[1].getBoolValue() or pts.Gear.wow[2].getBoolValue()) and systems.FADEC.maxDetent.getValue() == 0) {
+ if (ENGINE.reverseLeverTemp[0] > 0.75) {
+ ENGINE.reverseLever[0].setValue(0.75);
+ ENGINE.reverseLever[1].setValue(0.75);
+ } else if (ENGINE.reverseLeverTemp[0] > 0.5) {
+ ENGINE.reverseLever[0].setValue(0.5);
+ ENGINE.reverseLever[1].setValue(0.5);
+ } else if (ENGINE.reverseLeverTemp[0] > 0.25) {
+ ENGINE.reverseLever[0].setValue(0.25);
+ ENGINE.reverseLever[1].setValue(0.25);
+ } else if (ENGINE.reverseLeverTemp[0] > 0) {
+ ENGINE.reverseLever[0].setValue(0);
+ ENGINE.reverseLever[1].setValue(0);
+ }
+ ENGINE.throttle[0].setValue(0);
+ ENGINE.throttle[1].setValue(0);
+ } else {
+ ENGINE.reverseLever[0].setValue(0);
+ ENGINE.reverseLever[1].setValue(0);
+ }
}
-var unRevThrust = func {
- #if (pts.Sim.Input.Selected.engine[0].getBoolValue() and pts.Controls.Engines.Engine.reverseCmd[0].getValue() == 1) {
- # var pos = pts.Controls.Engines.Engine.reverseLever[0].getValue();
- # if (pos > 0.051) {
- # pts.Controls.Engines.Engine.reverseLever[0].setValue(pos - 0.15);
- # } else {
- # interpolate("/engines/engine[0]/reverser-pos-norm", 0, 1.0);
- # pts.Controls.Engines.Engine.reverseLever[0].setValue(0);
- # pts.Controls.Engines.Engine.reverseCmd[0].setValue(0);
- # pts.Fdm.JSBsim.Propulsion.Engine.reverseCmdAngle[0].setValue(0);
- # }
- #}
- #if (pts.Sim.Input.Selected.engine[1].getBoolValue() and pts.Controls.Engines.Engine.reverseCmd[1].getValue() == 1) {
- # var pos = pts.Controls.Engines.Engine.reverseLever[1].getValue();
- # if (pos > 0.051) {
- # pts.Controls.Engines.Engine.reverseLever[1].setValue(pos - 0.15);
- # } else {
- # interpolate("/engines/engine[1]/reverser-pos-norm", 0, 1.0);
- # pts.Controls.Engines.Engine.reverseLever[1].setValue(0);
- # pts.Controls.Engines.Engine.reverseCmd[1].setValue(0);
- # pts.Fdm.JSBsim.Propulsion.Engine.reverseCmdAngle[1].setValue(0);
- # }
- #}
+var toggleFastRevThrust = func() {
+ if ((pts.Gear.wow[1].getBoolValue() or pts.Gear.wow[2].getBoolValue()) and systems.FADEC.maxDetent.getValue() == 0) {
+ if (ENGINE.reverseLever[0].getValue() != 0) { # NOT a bool, this way it always closes even if partially open
+ ENGINE.reverseLever[0].setValue(0);
+ ENGINE.reverseLever[1].setValue(0);
+ } else {
+ ENGINE.reverseLever[0].setValue(1);
+ ENGINE.reverseLever[1].setValue(1);
+ }
+ ENGINE.throttle[0].setValue(0);
+ ENGINE.throttle[1].setValue(0);
+ } else {
+ ENGINE.reverseLever[0].setValue(0);
+ ENGINE.reverseLever[1].setValue(0);
+ }
}
diff --git a/Nasal/Systems/fadec-common.nas b/Nasal/Systems/fadec-common.nas
index f4e7e441..4a5f83d5 100644
--- a/Nasal/Systems/fadec-common.nas
+++ b/Nasal/Systems/fadec-common.nas
@@ -27,7 +27,6 @@ var FADEC = {
},
lvrClb: props.globals.getNode("/fdm/jsbsim/fadec/lvrclb"),
lvrClbStatus: 0,
- togaLk: props.globals.getNode("/fdm/jsbsim/fadec/toga-lk"),
Lock: {
thrLockAlert: props.globals.getNode("/fdm/jsbsim/fadec/thr-locked-alert"),
thrLockCmd: props.globals.getNode("/fdm/jsbsim/fadec/thr-locked"),
@@ -36,7 +35,9 @@ var FADEC = {
thrLockTime: props.globals.getNode("/fdm/jsbsim/fadec/thr-locked-time"),
},
manThrAboveMct: [0, 0],
+ maxDetent: props.globals.getNode("/fdm/jsbsim/fadec/max-detent"),
n1Mode: [props.globals.getNode("/fdm/jsbsim/fadec/control-1/n1-mode"), props.globals.getNode("/fdm/jsbsim/fadec/control-2/n1-mode")],
+ togaLk: props.globals.getNode("/fdm/jsbsim/fadec/toga-lk"),
init: func() {
me.engOut.setBoolValue(0);
me.Limit.activeMode.setBoolValue("TOGA");
diff --git a/Systems/a320-cfm56-5b4-engine-fadec.xml b/Systems/a320-cfm56-5b4-engine-fadec.xml
index 07623ba0..4baec5e6 100644
--- a/Systems/a320-cfm56-5b4-engine-fadec.xml
+++ b/Systems/a320-cfm56-5b4-engine-fadec.xml
@@ -392,6 +392,150 @@
+
+
+
+
+
+
+ /controls/engines/engine[0]/reverse-lever ge 0.25
+
+
+
+
+
+
+
+ /systems/hydraulic/green-psi ge 1500
+ /systems/acconfig/autoconfig-running eq 1
+
+
+
+
+ fadec/reverse-1/position-cmd
+ fadec/reverse-1/position-rate
+
+
+
+
+ fadec/reverse-1/position-norm
+ 3.14
+
+
+
+
+
+ /controls/engines/engine[0]/reverse-lever eq 1
+
+
+ /controls/engines/engine[0]/reverse-lever eq 0.75
+
+
+ /controls/engines/engine[0]/reverse-lever eq 0.5
+
+
+ 0.08
+ 1.0
+
+
+
+
+
+
+ 0.08
+
+
+ /controls/engines/engine[0]/reverse-lever
+ 0.25
+
+
+
+ fadec/limit/mrev-norm
+ 0.08
+
+ 0.75
+
+
+
+
+
+ 0.08
+ fadec/limit/mrev-norm
+
+
+
+
+
+
+
+ /controls/engines/engine[1]/reverse-lever ge 0.25
+
+
+
+
+
+
+
+ /systems/hydraulic/yellow-psi ge 1500
+ /systems/acconfig/autoconfig-running eq 1
+
+
+
+
+ fadec/reverse-2/position-cmd
+ fadec/reverse-2/position-rate
+
+
+
+
+ fadec/reverse-2/position-norm
+ 3.14
+
+
+
+
+
+ /controls/engines/engine[1]/reverse-lever eq 1
+
+
+ /controls/engines/engine[1]/reverse-lever eq 0.75
+
+
+ /controls/engines/engine[1]/reverse-lever eq 0.5
+
+
+ 0.08
+ 1.0
+
+
+
+
+
+
+ 0.08
+
+
+ /controls/engines/engine[1]/reverse-lever
+ 0.25
+
+
+
+ fadec/limit/mrev-norm
+ 0.08
+
+ 0.75
+
+
+
+
+
+ 0.08
+ fadec/limit/mrev-norm
+
+
+
+
+
@@ -402,9 +546,9 @@
-
+
@@ -649,9 +793,9 @@
-
+
@@ -1039,9 +1183,9 @@
-
+
+ fadec/reverse-1/position-norm ne 0
+
fadec/athr/active eq 1
@@ -1067,9 +1211,9 @@
-
+
+ fadec/reverse-2/position-norm ne 0
+
fadec/athr/active eq 1
@@ -1129,5 +1273,79 @@
+
+
+
+
+
+
+ /engines/engine[0]/n1-actual
+
+ 20 -131
+ 50 -64
+ 100 48
+ 110 65
+
+
+
+
+
+
+
+
+ /engines/engine[1]/n1-actual
+
+ 20 -131
+ 50 -64
+ 100 48
+ 110 65
+
+
+
+
+
+
+
+
+ fadec/control-1/lever-n1
+
+ 20 -131
+ 50 -64
+ 100 48
+ 110 65
+
+
+
+
+
+
+
+
+ fadec/control-2/lever-n1
+
+ 20 -131
+ 50 -64
+ 100 48
+ 110 65
+
+
+
+
+
+
+
+
+ fadec/limit/toga
+
+ 20 -131
+ 50 -64
+ 100 48
+ 110 65
+
+
+
+
+
+
diff --git a/Systems/a320-cockpit.xml b/Systems/a320-cockpit.xml
index 4335ba76..41c21b16 100644
--- a/Systems/a320-cockpit.xml
+++ b/Systems/a320-cockpit.xml
@@ -24,6 +24,26 @@
+
+
+ /controls/engines/engine[0]/reverse-lever
+ 20
+
+
+
+ /controls/engines/engine[1]/reverse-lever
+ 20
+
+
+
+ /controls/engines/engine[0]/cutoff-switch
+ 20
+
+
+
+ /controls/engines/engine[1]/cutoff-switch
+ 20
+
diff --git a/Systems/a320-fcs.xml b/Systems/a320-fcs.xml
index 55e5e65a..2752da6f 100644
--- a/Systems/a320-fcs.xml
+++ b/Systems/a320-fcs.xml
@@ -639,40 +639,6 @@
-
-
-
- /controls/engines/engine[0]/reverse-cmd
- 20
-
-
-
- /controls/engines/engine[1]/reverse-cmd
- 20
-
-
-
- /controls/engines/engine[0]/reverse-lever
- 20
-
-
-
- /controls/engines/engine[1]/reverse-lever
- 20
-
-
-
- /controls/engines/engine[0]/cutoff-switch
- 20
-
-
-
- /controls/engines/engine[1]/cutoff-switch
- 20
-
-
-
-
diff --git a/Systems/upper-ecam.xml b/Systems/upper-ecam.xml
index 607af68f..dd113deb 100644
--- a/Systems/upper-ecam.xml
+++ b/Systems/upper-ecam.xml
@@ -217,27 +217,10 @@
-
+
Flap Indicator