diff --git a/Models/Instruments/PFD/res/spd-tape.png b/Models/Instruments/PFD/res/spd-tape.png
index 920d9b52..f60c7f92 100644
Binary files a/Models/Instruments/PFD/res/spd-tape.png and b/Models/Instruments/PFD/res/spd-tape.png differ
diff --git a/Models/Liveries/A321/CFM/USAirways.xml b/Models/Liveries/A321/CFM/USAirways.xml
index 8a040660..54cf1afa 100644
--- a/Models/Liveries/A321/CFM/USAirways.xml
+++ b/Models/Liveries/A321/CFM/USAirways.xml
@@ -11,7 +11,7 @@
- 1
+ 0
0
diff --git a/Nasal/FMGC.nas b/Nasal/FMGC.nas
index 5e109d6c..ba4020b6 100644
--- a/Nasal/FMGC.nas
+++ b/Nasal/FMGC.nas
@@ -6,6 +6,7 @@
##################
setprop("/FMGC/internal/overspeed", 338);
+setprop("/FMGC/internal/minspeed", 204);
setprop("/position/gear-agl-ft", 0);
setprop("/FMGC/internal/mng-spd", 157);
setprop("/FMGC/internal/mng-spd-cmd", 157);
@@ -16,7 +17,7 @@ setprop("/it-autoflight/internal/vert-speed-fpm", 0);
var FMGCinit = func {
setprop("/FMGC/status/to-state", 0);
- setprop("/FMGC/status/phase", "0"); # 0 is preflight 1 takeoff 2 climb 3 cruise 4 descent 5 approach 6 go around 7 done
+ setprop("/FMGC/status/phase", "0"); # 0 is Preflight 1 is Takeoff 2 is Climb 3 is Cruise 4 is Descent 5 is Decel/Approach 6 is Go Around 7 is Done
setprop("/FMGC/internal/tropo", 36090);
setprop("/FMGC/internal/overspeed", 338);
setprop("/FMGC/internal/mng-spd", 157);
@@ -24,6 +25,7 @@ var FMGCinit = func {
setprop("/FMGC/internal/mng-kts-mach", 0);
setprop("/FMGC/internal/mach-switchover", 0);
setprop("/it-autoflight/settings/reduc-agl-ft", 3000);
+ setprop("/FMGC/internal/decel", 0);
phasecheck.start();
various.start();
}
@@ -80,6 +82,7 @@ var phasecheck = maketimer(0.2, func {
var n1_left = getprop("/engines/engine[0]/n1");
var n1_right = getprop("/engines/engine[1]/n1");
var flaps = getprop("/controls/flight/flap-pos");
+ var modelat = getprop("/modes/pfd/fma/roll-mode");
var mode = getprop("/modes/pfd/fma/pitch-mode");
var gs = getprop("/velocities/groundspeed-kt");
var alt = getprop("/instrumentation/altimeter/indicated-altitude-ft");
@@ -97,32 +100,41 @@ var phasecheck = maketimer(0.2, func {
var targetfpa = getprop("/it-autoflight/input/fpa");
var vertmode = getprop("/modes/pfd/fma/pitch-mode");
var reduc_agl_ft = getprop("/it-autoflight/settings/reduc-agl-ft");
+ var locarm = getprop("/it-autopilot/output/loc-armed");
+ var apprarm = getprop("/it-autopilot/output/appr-armed");
+
if ((((n1_left >= 85) and (n1_right >= 85)) or (gs > 90 )) and flaps < 4 and (mode == "SRS")) {
setprop("/FMGC/status/phase", "1");
setprop("/systems/pressurization/mode", "TO");
}
+
if ((aglalt >= reduc_agl_ft) and (alt <= cruiseft) and (phase == "1") and (phase != "4") and (mode != "SRS")) {
setprop("/FMGC/status/phase", "2");
}
+
if (alt >= cruiseft_b and phase == "2" and (mode == "ALT" or mode == "ALT CRZ")) {
setprop("/FMGC/status/phase", "3");
setprop("/systems/pressurization/mode", "CR");
}
+
if (alt <= cruiseft and (mode == "DES" or mode == "OP DES") and phase == "3") {
setprop("/FMGC/status/phase", "4");
setprop("/systems/pressurization/mode", "DE");
}
- if (getprop("/FMGC/status/to-state") == 0 and flaps >= 4 and ((phase == "4") or (phase == "2"))) { # add man activation of approach phase in MCDU or DECEL when those things are simulated
+
+ if (getprop("/FMGC/status/to-state") == 0 and flaps >= 3 and ((phase == "2") or (phase == "4"))) {
setprop("/FMGC/status/phase", "5");
}
- if ((phase == "5") and (state1 == "TOGA") and (state2 == "TOGA")) { # this is the only fully correct one to FCOM
+
+ if ((phase == "5") and (state1 == "TOGA") and (state2 == "TOGA")) {
setprop("/FMGC/status/phase", "6");
setprop("/it-autoflight/input/toga", 1);
}
- # forget transition from APP to climb for now because it would be too complex
+
if ((phase == "6") and ((vertmode == "G/A CLB") or (vertmode == "SPD CLB") or (vertmode == "CLB") or ((vertmode == "V/S") and (targetvs > 0)) or ((vertmode == "FPA") and (targetfpa > 0))) and (alt <= targetalt)) {
- setprop("/FMGC/status/phase", "2"); # going to CLIMB mode from GA
+ setprop("/FMGC/status/phase", "2");
}
+
if ((wowl and wowr) and (gs < 20) and (phase == "5")) {
setprop("/FMGC/status/phase", "7");
var fd1 = getprop("/it-autoflight/input/fd1");
@@ -135,6 +147,27 @@ var phasecheck = maketimer(0.2, func {
setprop("/it-autoflight/input/fd2", fd2);
press_init();
}
+
+ var flap = getprop("/controls/flight/flap-pos");
+ if (flap == 0) {
+ setprop("/FMGC/internal/overspeed", 338);
+ setprop("/FMGC/internal/minspeed", 204);
+ } else if (flap == 1) {
+ setprop("/FMGC/internal/overspeed", 216);
+ setprop("/FMGC/internal/minspeed", 188);
+ } else if (flap == 2) {
+ setprop("/FMGC/internal/overspeed", 207);
+ setprop("/FMGC/internal/minspeed", 171);
+ } else if (flap == 3) {
+ setprop("/FMGC/internal/overspeed", 189);
+ setprop("/FMGC/internal/minspeed", 159);
+ } else if (flap == 4) {
+ setprop("/FMGC/internal/overspeed", 174);
+ setprop("/FMGC/internal/minspeed", 146);
+ } else if (flap == 5) {
+ setprop("/FMGC/internal/overspeed", 163);
+ setprop("/FMGC/internal/minspeed", 136);
+ }
});
var various = maketimer(1, func {
@@ -145,21 +178,6 @@ var various = maketimer(1, func {
} else {
setprop("/it-autoflight/settings/reduc-agl-ft", getprop("/FMGC/internal/reduc-agl-ft"));
}
-
- var flap = getprop("/controls/flight/flap-pos");
- if (flap == 0) {
- setprop("/FMGC/internal/overspeed", 338);
- } else if (flap == 1) {
- setprop("/FMGC/internal/overspeed", 216);
- } else if (flap == 2) {
- setprop("/FMGC/internal/overspeed", 207);
- } else if (flap == 3) {
- setprop("/FMGC/internal/overspeed", 189);
- } else if (flap == 4) {
- setprop("/FMGC/internal/overspeed", 174);
- } else if (flap == 5) {
- setprop("/FMGC/internal/overspeed", 163);
- }
});
#################
@@ -171,6 +189,7 @@ var ManagedSPD = maketimer(0.25, func {
if (getprop("/it-autoflight/input/spd-managed") == 1) {
var alt = getprop("/instrumentation/altimeter/indicated-altitude-ft");
var mode = getprop("/modes/pfd/fma/pitch-mode");
+ var ias = getprop("/instrumentation/airspeed-indicator/indicated-speed-kt");
var mach = getprop("/instrumentation/airspeed-indicator/indicated-mach");
var ktsmach = getprop("/it-autoflight/input/kts-mach");
var mngktsmach = getprop("/FMGC/internal/mng-kts-mach");
@@ -179,10 +198,12 @@ var ManagedSPD = maketimer(0.25, func {
var kts_sel = getprop("/it-autoflight/input/spd-kts");
var mach_sel = getprop("/it-autoflight/input/spd-mach");
var srsSPD = getprop("/it-autoflight/settings/togaspd");
- var phase = getprop("/FMGC/status/phase"); # 0 is preflight 1 takeoff 2 climb 3 cruise 4 descent 5 approach 6 go around 7 done
+ var phase = getprop("/FMGC/status/phase"); # 0 is Preflight 1 is Takeoff 2 is Climb 3 is Cruise 4 is Descent 5 is Decel/Approach 6 is Go Around 7 is Done
var flap = getprop("/controls/flight/flap-pos");
var overspeed = getprop("/FMGC/internal/overspeed");
+ var minspeed = getprop("/FMGC/internal/minspeed");
var mach_switchover = getprop("/FMGC/internal/mach-switchover");
+ var decel = getprop("/FMGC/internal/decel");
var mng_alt_spd_cmd = getprop("/FMGC/internal/mng-alt-spd");
var mng_alt_spd = math.round(mng_alt_spd_cmd, 1);
@@ -190,6 +211,14 @@ var ManagedSPD = maketimer(0.25, func {
var mng_alt_mach_cmd = getprop("/FMGC/internal/mng-alt-mach");
var mng_alt_mach = math.round(mng_alt_mach_cmd, 0.001);
+ if (mach > mng_alt_mach and phase == 2) {
+ setprop("/FMGC/internal/mach-switchover", 1);
+ }
+
+ if (ias > mng_alt_spd and (phase == 4 or phase == 5)) {
+ setprop("/FMGC/internal/mach-switchover", 0);
+ }
+
if (mode == "SRS" and phase == 0 or phase == 1) {
if (mngktsmach) {
setprop("/FMGC/internal/mng-kts-mach", 0);
@@ -218,8 +247,29 @@ var ManagedSPD = maketimer(0.25, func {
if (mng_spd_cmd != mng_alt_mach) {
setprop("/FMGC/internal/mng-spd-cmd", mng_alt_mach);
}
- } else if (phase == 4 or phase == 5 or phase == 6 or phase == 7) {
- libraries.mcpSPDKnbPull();
+ } else if (phase == 4 and alt > 11100 and !mach_switchover) {
+ if (mngktsmach) {
+ setprop("/FMGC/internal/mng-kts-mach", 0);
+ }
+ if (mng_spd_cmd != mng_alt_spd) {
+ setprop("/FMGC/internal/mng-spd-cmd", mng_alt_spd);
+ }
+ } else if (phase == 4 and alt > 11100 and mach_switchover) {
+ if (!mngktsmach) {
+ setprop("/FMGC/internal/mng-kts-mach", 1);
+ }
+ if (mng_spd_cmd != mng_alt_mach) {
+ setprop("/FMGC/internal/mng-spd-cmd", mng_alt_mach);
+ }
+ } else if ((phase == 4 or phase == 5 or phase == 6) and alt <= 11050) {
+ if (mngktsmach) {
+ setprop("/FMGC/internal/mng-kts-mach", 0);
+ }
+ if (mng_spd_cmd != 250 and !decel) {
+ setprop("/FMGC/internal/mng-spd-cmd", 250);
+ } else if (mng_spd_cmd != minspeed and decel) {
+ setprop("/FMGC/internal/mng-spd-cmd", minspeed);
+ }
}
var mng_spd_cmd = getprop("/FMGC/internal/mng-spd-cmd");
@@ -243,10 +293,6 @@ var ManagedSPD = maketimer(0.25, func {
} else if (mach_sel != mng_spd and ktsmach) {
setprop("/it-autoflight/input/spd-mach", mng_spd);
}
-
- if (mach >= mng_alt_mach and phase == 2) {
- setprop("/FMGC/internal/mach-switchover", 1);
- }
} else {
ManagedSPD.stop();
}
diff --git a/Nasal/MCDU/MCDU1.nas b/Nasal/MCDU/MCDU1.nas
index 3769b281..e2c92040 100644
--- a/Nasal/MCDU/MCDU1.nas
+++ b/Nasal/MCDU/MCDU1.nas
@@ -10,7 +10,7 @@ var MCDU_init = func {
var MCDU_reset = func {
setprop("/it-autoflight/settings/togaspd", 157);
setprop("/MCDU[0]/last-fmgc-page", "STATUS");
- setprop("/MCDU[0]/page", "STATUS");
+ setprop("/MCDU[0]/page", "MCDU");
setprop("/MCDU[0]/scratchpad", "");
setprop("/MCDUC/flight-num", "");
setprop("/MCDUC/thracc-set", 0);
@@ -46,6 +46,8 @@ var lskbutton = func(btn) {
if (btn == "1") {
if (getprop("/MCDU[0]/page") == "MCDU") {
setprop("/MCDU[0]/page", getprop("/MCDU[0]/last-fmgc-page"));
+ setprop("/MCDU[0]/scratchpad-msg", "1");
+ setprop("/MCDU[0]/scratchpad", "GPS PRIMARY");
} else if (getprop("/MCDU[0]/page") == "TO") {
PerfTOInput("L1");
}
@@ -214,8 +216,6 @@ var initInputA = func(key) {
setprop("/FMGC/internal/arr-arpt", fromto[1]);
setprop("/FMGC/internal/tofrom-set", 1);
fmgc.updateARPT();
- setprop("/MCDU[0]/scratchpad-msg", "1");
- setprop("/MCDU[0]/scratchpad", "GPS PRIMARY");
} else {
setprop("/MCDU[0]/scratchpad-msg", "1");
setprop("/MCDU[0]/scratchpad", "NOT ALLOWED");
diff --git a/Nasal/MCDU/MCDU2.nas b/Nasal/MCDU/MCDU2.nas
index f4cb61b6..e6a88fa7 100644
--- a/Nasal/MCDU/MCDU2.nas
+++ b/Nasal/MCDU/MCDU2.nas
@@ -10,7 +10,7 @@ var MCDU_init = func {
var MCDU_reset = func {
setprop("/it-autoflight/settings/togaspd", 157);
setprop("/MCDU[1]/last-fmgc-page", "STATUS");
- setprop("/MCDU[1]/page", "STATUS");
+ setprop("/MCDU[1]/page", "MCDU");
setprop("/MCDU[1]/scratchpad", "");
setprop("/MCDUC/flight-num", "");
setprop("/MCDUC/thracc-set", 0);
@@ -46,6 +46,8 @@ var lskbutton = func(btn) {
if (btn == "1") {
if (getprop("/MCDU[1]/page") == "MCDU") {
setprop("/MCDU[1]/page", getprop("/MCDU[1]/last-fmgc-page"));
+ setprop("/MCDU[1]/scratchpad-msg", "1");
+ setprop("/MCDU[1]/scratchpad", "GPS PRIMARY");
} else if (getprop("/MCDU[1]/page") == "TO") {
PerfTOInput("L1");
}
@@ -214,8 +216,6 @@ var initInputA = func(key) {
setprop("/FMGC/internal/arr-arpt", fromto[1]);
setprop("/FMGC/internal/tofrom-set", 1);
fmgc.updateARPT();
- setprop("/MCDU[1]/scratchpad-msg", "1");
- setprop("/MCDU[1]/scratchpad", "GPS PRIMARY");
} else {
setprop("/MCDU[1]/scratchpad-msg", "1");
setprop("/MCDU[1]/scratchpad", "NOT ALLOWED");
diff --git a/Systems/fmgc-c.xml b/Systems/fmgc-c.xml
index dadd4c54..b590a98a 100644
--- a/Systems/fmgc-c.xml
+++ b/Systems/fmgc-c.xml
@@ -72,15 +72,13 @@
-
-
-
-
/instrumentation/airspeed-indicator/indicated-speed-kt
-
/instrumentation/airspeed-indicator/indicated-mach
-
- /it-autoflight/input/spd-mach
-
-
+
+
+
/instrumentation/airspeed-indicator/indicated-speed-kt
+
/instrumentation/airspeed-indicator/indicated-mach
+
+ /it-autoflight/input/spd-mach
+