1
0
Fork 0

Merge branch 'dev' into pressurization

This commit is contained in:
Jonathan Redpath 2022-01-31 13:37:56 +00:00
commit a25e4b90ed
63 changed files with 1466 additions and 1600 deletions

View file

@ -4879,7 +4879,6 @@
<file>Aircraft/A320-family/Nasal/MCDU/PERFTO.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/RADNAV.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/DATA.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/STATUS.nas</file>
</mcdu>
<!-- Traffic layer from E-jet -->
<traffic>

View file

@ -34,39 +34,44 @@
<text>
<halign>left</halign>
<label>The Aircraft Config has detected that rendering settings are not set properly!</label>
<label>Your rendering settings will not allow all graphical features of the aircraft to be visible!</label>
</text>
<text>
<halign>left</halign>
<label>This means lighting effects on the exterior and in the virtual cockpit will not be visible.</label>
<label>This means certain lighting effects will not be usable, including cockpit floodlights. </label>
</text>
<text>
<halign>left</halign>
<label>ALS, and custom shader settings must be on.</label>
<label>For the best experience:</label>
</text>
<text>
<halign>left</halign>
<label>Landmass shader must be at least 4 for lightspots to work.</label>
<label>* Atmospheric Light Scattering should be enabled</label>
</text>
<text>
<halign>left</halign>
<label>Model shader must be at least 2 for lightmaps to work.</label>
<label>* Landmass shader should be at least 4 for external lights to illuminate the ground</label>
</text>
<text>
<halign>left</halign>
<label>* Model shader should be at least 2 for lighting to illuminate the aircraft model</label>
</text>
<hrule/>
<text>
<halign>left</halign>
<label>Would you like the Aircraft Config to automatically turn on ALS and fix shader settings?</label>
<label>Would you like Aircraft Config to automatically set these minimum basic settings?</label>
</text>
<text>
<halign>left</halign>
<label>If the settings do not save after fixing, try quitting FlightGear through File -&gt; Exit after fixing.</label>
<label>To save these settings, make sure to quit FlightGear with File -&gt; Exit after your flight is complete.</label>
</text>
</group>
@ -105,8 +110,8 @@
<button>
<halign>center</halign>
<legend>Yes, fix all settings</legend>
<pref-width>180</pref-width>
<legend>Apply minimum settings</legend>
<pref-width>200</pref-width>
<binding>
<command>nasal</command>
<script>
@ -120,8 +125,8 @@
<button>
<halign>center</halign>
<legend>Yes, but I'll fix shaders myself</legend>
<pref-width>180</pref-width>
<legend>Advanced: View Shader Settings</legend>
<pref-width>200</pref-width>
<binding>
<command>nasal</command>
<script>
@ -143,8 +148,8 @@
<button>
<halign>center</halign>
<legend>I don't care</legend>
<pref-width>180</pref-width>
<legend>Ignore</legend>
<pref-width>150</pref-width>
<binding>
<command>dialog-close</command>
</binding>

View file

@ -1521,11 +1521,12 @@
<!-- Cocktpit Door Switch -->
<animation>
<type>slider</type>
<type>knob</type>
<object-name>CockpitDoorSwitch</object-name>
<object-name>CockpitDoorSwitch.mark</object-name>
<property>controls/doors/doorc-switch</property>
<drag-direction>vertical</drag-direction>
<drag-scale-px>14</drag-scale-px>
<action>
<binding>
<command>property-adjust</command>
@ -4705,6 +4706,8 @@
<property>controls/switches/annun-test</property>
<value>1</value>
</equals>
<not><property>FMGC/FCU-working</property></not>
<equals>
<property>it-autoflight/input/kts-mach</property>
<value>1</value>
@ -4730,6 +4733,7 @@
<property>it-autoflight/input/spd-managed</property>
<value>0</value>
</equals>
<property>FMGC/FCU-working</property>
</and>
</condition>
</animation>
@ -4751,6 +4755,7 @@
<property>it-autoflight/input/spd-managed</property>
<value>0</value>
</equals>
<property>FMGC/FCU-working</property>
</and>
</condition>
</animation>
@ -4793,6 +4798,7 @@
<property>controls/switches/annun-test</property>
<value>1</value>
</equals>
<not><property>FMGC/FCU-working</property></not>
<equals>
<property>it-autoflight/custom/trk-fpa</property>
<value>0</value>
@ -4811,6 +4817,7 @@
<property>controls/switches/annun-test</property>
<value>1</value>
</equals>
<not><property>FMGC/FCU-working</property></not>
<equals>
<property>it-autoflight/custom/trk-fpa</property>
<value>1</value>
@ -4832,6 +4839,7 @@
<property>it-autoflight/custom/show-hdg</property>
<value>1</value>
</equals>
<property>FMGC/FCU-working</property>
</and>
</condition>
</animation>
@ -4878,10 +4886,13 @@
<type>select</type>
<object-name>alt-text</object-name>
<condition>
<not-equals>
<property>controls/switches/annun-test</property>
<value>1</value>
</not-equals>
<and>
<property>FMGC/FCU-working</property>
<not-equals>
<property>controls/switches/annun-test</property>
<value>1</value>
</not-equals>
</and>
</condition>
</animation>
@ -4930,6 +4941,7 @@
<property>controls/switches/annun-test</property>
<value>1</value>
</equals>
<not><property>FMGC/FCU-working</property></not>
<equals>
<property>it-autoflight/custom/trk-fpa</property>
<value>1</value>
@ -4952,6 +4964,7 @@
<property>it-autoflight/output/vert</property>
<value>1</value>
</equals>
<property>FMGC/FCU-working</property>
</and>
</condition>
</animation>
@ -4969,6 +4982,7 @@
<property>it-autoflight/output/vert</property>
<value>5</value>
</equals>
<property>FMGC/FCU-working</property>
</and>
</condition>
</animation>
@ -4990,6 +5004,7 @@
<property>it-autoflight/output/vert</property>
<value>5</value>
</not-equals>
<property>FMGC/FCU-working</property>
</and>
</condition>
</animation>

View file

@ -49,52 +49,41 @@ var canvas_IESI = {
obj.AI_horizon_trans = obj["AI_horizon"].createTransform();
obj.AI_horizon_rot = obj["AI_horizon"].createTransform();
obj._aiCenter = obj["AI_center"].getCenter();
obj._cachedInhg = nil;
obj._excessMotion = 0;
obj._fast = 0;
obj._cachedMode = nil;
obj._canReset = 0;
obj._excessMotionInInit = 0;
obj._fastInit = 0;
obj._IESITime = 0;
obj._showIESI = 0;
obj.ASI = 0;
obj.canReset = 0;
obj.isNegativeAlt = 0;
obj.middleAltOffset = nil;
obj._isNegativeAlt = 0;
obj._middleAltOffset = nil;
obj._powerResult = 0;
obj._roll = 0;
obj.update_items = [
props.UpdateManager.FromHashValue("airspeed", nil, func(val) {
# Subtract 30, since the scale starts at 30, but don't allow less than 0, or more than 520 knots
if (val <= 30) {
obj.ASI = 0;
} else if (val >= 520) {
obj.ASI = 490;
} else {
obj.ASI = val - 30;
}
obj["ASI_scale"].setTranslation(0, obj.ASI * 8.295);
obj["ASI_scale"].setTranslation(0, math.clamp(val - 30, 0, 490) * 8.295);
}),
props.UpdateManager.FromHashList(["altitude","altitude_ind"], nil, func(val) {
if (val.altitude > 50000) {
val.altitude = 50000;
} elsif (val.altitude < -2000) {
val.altitude = -2000;
}
val.altitude = math.clamp(val.altitude, -2000, 50000);
if (val.altitude < 0) {
obj["negText"].show();
obj.isNegativeAlt = 1;
obj._isNegativeAlt = 1;
} else {
obj["negText"].hide();
obj.isNegativeAlt = 0;
obj._isNegativeAlt = 0;
}
obj.altOffset = (val.altitude / 500) - int(val.altitude / 500);
obj.middleAltText = roundaboutAlt(val.altitude / 100);
if (obj.altOffset > 0.5) {
obj.middleAltOffset = -(obj.altOffset - 1) * 258.5528;
obj._middleAltOffset = -(obj.altOffset - 1) * 258.5528;
} else {
obj.middleAltOffset = -obj.altOffset * 258.5528;
obj._middleAltOffset = -obj.altOffset * 258.5528;
}
obj["ALT_scale"].setTranslation(0, -obj.middleAltOffset);
obj["ALT_scale"].setTranslation(0, -obj._middleAltOffset);
obj["ALT_scale"].update();
obj["ALT_five"].setText(sprintf("%03d", abs(obj.middleAltText+10)));
obj["ALT_four"].setText(sprintf("%03d", abs(obj.middleAltText+5)));
@ -114,20 +103,16 @@ var canvas_IESI = {
obj.altTens = num(right(sprintf("%02d", val.altitude), 2));
obj["ALT_tens"].setTranslation(0, obj.altTens * 3.16);
}),
props.UpdateManager.FromHashValue("mach", nil, func(val) {
if (val >= 0.5) {
obj._machWasAbove50 = 1;
obj["ASI_mach_decimal"].show();
obj["ASI_mach"].show();
} elsif (val >= 0.45 and obj._machWasAbove50) {
props.UpdateManager.FromHashValue("showMach", nil, func(val) {
if (val) {
obj["ASI_mach_decimal"].show();
obj["ASI_mach"].show();
} else {
obj._machWasAbove50 = 0;
obj["ASI_mach_decimal"].hide();
obj["ASI_mach"].hide();
}
}),
props.UpdateManager.FromHashValue("mach", nil, func(val) {
if (val >= 0.999) {
obj["ASI_mach"].setText("99");
} else {
@ -138,8 +123,9 @@ var canvas_IESI = {
obj.AI_horizon_trans.setTranslation(0, val * 16.74);
}),
props.UpdateManager.FromHashValue("roll", nil, func(val) {
obj.AI_horizon_rot.setRotation(-val * D2R, obj["AI_center"].getCenter());
obj["AI_bank"].setRotation(-val * D2R);
obj._roll = -val * D2R;
obj.AI_horizon_rot.setRotation(obj._roll, obj._aiCenter);
obj["AI_bank"].setRotation(obj._roll);
}),
props.UpdateManager.FromHashValue("skid", nil, func(val) {
if (abs(val) >= 84.99) {
@ -149,32 +135,29 @@ var canvas_IESI = {
obj["AI_slipskid"].show();
}
}),
props.UpdateManager.FromHashList(["altimeter_mode","qnh_hpa","qnh_inhg"], nil, func(val) {
obj.updateQNH(val);
}),
];
return obj;
},
getKeys: func() {
return ["IESI","IESI_Init","attRst","attRstRect","att90s","ATTflag","ATTflag_rect","ATTflag_text","ALTwarn","SPDwarn","ASI_scale","ASI_mach","ASI_mach_decimal","AI_center","AI_index","AI_horizon","AI_sky_bank","AI_bank","AI_bank_center","AI_slipskid","ALT_scale","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_meters","QNH_setting","QNH_std","negText","negText2","AI_bank_scale","metricM","metricBox"];
},
alignFault: props.globals.getNode("/systems/navigation/align-fault"),
update: func(notification) {
if (notification.qnh_inhg != me._cachedInhg) {
me._powerResult = me.updatePower(notification);
if (me._powerResult == 0) { return; }
if (notification.qnh_inhg != me._cachedInhg or notification.altimeter_mode != me._cachedMode) {
me._cachedInhg = notification.qnh_inhg;
me._cachedMode = notification.altimeter_mode;
me.updateQNH(notification);
}
me.updatePower(notification);
if (me.group.getVisible() == 0) {
return;
}
if (me._IESITime + 90 >= notification.elapsedTime) {
if (notification.groundspeed > 2) {
me._excessMotion = 1;
if (!me._fastInit and me.alignFault.getBoolValue()) {
me._excessMotionInInit = 1;
}
if (me._fast) {
if (me._fastInit) {
me["IESI"].show();
me["IESI_Init"].hide();
me["AI_bank"].hide();
@ -195,15 +178,15 @@ var canvas_IESI = {
me["IESI"].hide();
me["IESI_Init"].show();
me["ATTflag"].hide();
return;
}
return;
} else {
if (pinPrograms.metricAltitude) {
me["ALT_meters"].show();
me["metricM"].show();
me["metricBox"].show();
if (me.isNegativeAlt) {
if (me._isNegativeAlt) {
me["negText2"].show();
} else {
me["negText2"].hide();
@ -215,7 +198,7 @@ var canvas_IESI = {
me["negText2"].hide();
}
if (!me._excessMotion) {
if (!me._excessMotionInInit) {
me["IESI_Init"].hide();
me["IESI"].show();
me["AI_bank"].show();
@ -260,57 +243,41 @@ var canvas_IESI = {
} else {
me["QNH_setting"].setText(sprintf("%4.0f", notification.qnh_hpa));
}
me["QNH_setting"].show();
me["QNH_std"].hide();
me["QNH_setting"].show();
}
},
_transientVar: 0,
updatePower: func(notification) {
# todo 20W power consumption
if (notification.attReset == 1 and me.canReset) {
me.canReset = 0;
me._excessMotion = 0;
me._fast = 1;
if (notification.attReset == 1 and me._canReset) {
me._canReset = 0;
me._excessMotionInInit = 0;
me._fastInit = 1;
iesi_init.setBoolValue(0);
} else if (me._IESITime + 90 < notification.elapsedTime and notification.iesiInit and !me.canReset) {
me.canReset = 1;
} else if (me._IESITime + 90 < notification.elapsedTime and notification.iesiInit and !me._canReset) {
me._canReset = 1;
}
if (notification.dcEss >= 25 or (notification.relay7XB and notification.dcHot1703 >= 25)) {
me._showIESI = 1;
if (notification.iesiPowered) {
if (notification.acconfig != 1 and notification.iesiInit != 1) {
iesi_init.setBoolValue(1);
if (me._fast) {
me._IESITime = notification.elapsedTime - 80;
} else {
me._IESITime = notification.elapsedTime;
}
me._IESITime = notification.elapsedTime - (me._fastInit ? 80 : 0);
} else if (notification.acconfig == 1 and notification.iesiInit != 1) {
iesi_init.setBoolValue(1);
me._IESITime = notification.elapsedTime - 87;
}
} elsif (notification.iesiInit) {
if (!me._transientVar) {
me._transientVar = 1;
settimer(func() {
if (systems.ELEC.Bus.dcEss.getValue() >= 25 or (systems.ELEC.Bus.dcHot1703.getValue() >= 25 and systems.ELEC.Relay.relay7XB.getValue())) {
me._transientVar = 0;
} else {
me.canReset = 0;
me._excessMotion = 0;
me._fast = 0;
me._showIESI = 0;
me._transientVar = 0;
iesi_init.setBoolValue(0);
}
}, 0.2); # 200ms delay power transients
}
me._canReset = 0;
me._excessMotionInInit = 0;
me._fastInit = 0;
iesi_init.setBoolValue(0);
}
if (me._showIESI and notification.iesiBrt > 0.01) {
if (notification.iesiPowered and notification.iesiBrt > 0.01) {
me.group.setVisible(1);
return 1;
} else {
me.group.setVisible(0);
return 0;
}
},
};
@ -352,13 +319,14 @@ var input = {
"attReset": "/instrumentation/iesi/att-reset",
"iesiBrt": "/controls/lighting/DU/iesi",
"iesiInit": "/instrumentation/iesi/iesi-init",
"iesiPowered": "/instrumentation/iesi/power/power-on",
"mach": "/instrumentation/airspeed-indicator/indicated-mach",
"pitch": "/instrumentation/iesi/pitch-deg",
"qnh_hpa": "/instrumentation/altimeter[6]/setting-hpa",
"qnh_inhg": "/instrumentation/altimeter[6]/setting-inhg",
"roll": "/orientation/roll-deg",
"skid": "/instrumentation/iesi/slip-skid",
"relay7XB": "/systems/electrical/sources/si-1/inverter-control/relay-7xb",
"showMach": "/instrumentation/iesi/display/show-mach",
};
foreach (var name; keys(input)) {

View file

@ -5,7 +5,7 @@
viewBox="0 0 1024 1024"
version="1.1"
id="svg2"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
sodipodi:docname="iesi.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
@ -38,16 +38,16 @@
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="986"
inkscape:window-height="974"
id="namedview371"
showgrid="true"
inkscape:zoom="0.93517029"
inkscape:cx="815.35952"
inkscape:cy="762.42799"
inkscape:zoom="0.66126526"
inkscape:cx="369.74572"
inkscape:cy="772.76099"
inkscape:window-x="-11"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="ATTflag"
inkscape:current-layer="MsgBox"
showguides="true"
inkscape:snap-global="false"
units="pt"
@ -72,11 +72,11 @@
inkscape:label="MsgBox">
<rect
y="720.3349"
x="304.32764"
x="260.241"
height="91.330338"
width="406.27161"
width="490.202"
id="rect4448"
style="fill:#c9d121;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.17302;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" />
style="fill:#c9d121;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.48539;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" />
<text
inkscape:label="#text979"
transform="scale(1.0000144,0.9999856)"
@ -142,11 +142,11 @@
<g
id="ATTwarn">
<rect
style="fill:#c9d121;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
style="fill:#c9d121;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.23675;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
id="rect4484"
width="243.81277"
width="283.81299"
height="91.330353"
x="390.0936"
x="360.09399"
y="287.07605" />
<text
id="text4486"
@ -164,14 +164,15 @@
</g>
</g>
<g
id="ATTflag">
id="ATTflag"
style="display:inline">
<rect
y="720.3349"
x="304.32764"
x="260.241"
height="91.330338"
width="406.27161"
width="490.202"
id="attRstRect"
style="fill:#c9d121;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.17302;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" />
style="fill:#c9d121;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.48538;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" />
<text
inkscape:label="#text979"
transform="scale(1.0000144,0.9999856)"
@ -186,12 +187,12 @@
y="796.4032"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:86px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.75">ATT : RST</tspan></text>
<rect
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.21458;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
id="ATTflag_rect"
width="243.81277"
height="91.330353"
x="390.0936"
y="287.07605" />
width="280.59842"
height="91.115768"
x="361.70129"
y="287.18335" />
<text
id="ATTflag_text"
y="363.13785"
@ -212,7 +213,8 @@
inkscape:label="IESI">
<g
id="AI_horizon"
inkscape:label="#g4573">
inkscape:label="#g4573"
style="display:inline">
<g
transform="translate(824.0447,-40.79798)"
inkscape:label="#g4312"
@ -618,7 +620,7 @@
</g>
</g>
<rect
style="opacity:1;fill:#1fa7f8;fill-opacity:1;stroke:none;stroke-width:2.58922;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="display:inline;opacity:1;fill:#1fa7f8;fill-opacity:1;stroke:none;stroke-width:2.58922;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="AI_sky_bank"
width="663.18652"
height="124.96"
@ -626,7 +628,7 @@
y="138.78481"
inkscape:label="#rect5809" />
<rect
style="opacity:0.5;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:10.0653;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
style="display:inline;opacity:0.5;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:10.0653;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="AI_bank_scale_clip"
width="663.21997"
height="229.7616"
@ -634,7 +636,7 @@
y="138.67441"
inkscape:label="#rect1094" />
<rect
style="opacity:0.46;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:1.27697;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="display:inline;opacity:0.46;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:1.27697;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="AI_horizon_clip"
width="663.21997"
height="608.67889"

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 118 KiB

File diff suppressed because it is too large Load diff

View file

@ -637,11 +637,9 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
me.symbols.dmeRDist.setText("");
}
# Hide heading bug 10 secs after change
var vhdg_bug = getprop("/it-autoflight/input/hdg") or 0;
var hdg_bug_active = getprop("/it-autoflight/custom/show-hdg");
if (hdg_bug_active == nil)
hdg_bug_active = 1;
# Hide heading bug 45 secs after change
var vhdg_bug = fmgc.Input.hdg.getValue();
var hdg_bug_active = fmgc.Custom.showHdg.getBoolValue();
if((me.in_mode("toggle_display_mode", ["MAP"]) and me.get_switch("toggle_display_type") == "CRT")
or (me.get_switch("toggle_track_heading") and me.get_switch("toggle_display_type") == "LCD"))

View file

@ -79,6 +79,15 @@ var init = func {
}
var draw = func{
if (me.model.wp.hidden == 1 or me.model.name == "(DECEL)" or me.model.name == "(T/C)" or me.model.name == "(T/D)" or me.model.name == "(LIM)") {
me.wp_sym.hide();
me.text_wps.hide();
if (me.text_alt != nil) {
me.text_alt.hide();
}
return;
}
var wp_group = me.element;
var alt = me.model.alt;
var i = me.model.idx;

View file

@ -60,7 +60,7 @@ canvas.NDStyles["Airbus"] = {
lat_ctrl: "/it-autoflight/output/lat",
managed_val: 1,
ver_ctrl: "/it-autoflight/output/vert",
spd_ctrl: "/flight-management/control/spd-ctrl",
spd_ctrl: "/it-autoflight/input/spd-managed",
current_wp: "/FMGC/flightplan[2]/current-wp",
ap1: "/it-autoflight/output/ap1",
ap2: "/it-autoflight/output/ap2",
@ -595,18 +595,18 @@ canvas.NDStyles["Airbus"] = {
isMapStructure: 1,
update_on: ["toggle_display_mode","toggle_range"],
predicate: func(nd, layer) {
var visible = nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting));
var visible = nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)) and getprop("/instrumentation/nd/symbols/decel/show");
layer.group.setVisible( visible );
if (visible) {
layer.update();
}
},
options: {
# Overridable options:
# decel_node: node containing latitude-deg and longitude-deg used to mark the deceleration point
# managed_speed_node: boolean property indicating that the aircraft is flying in managed speed mode
decel_node: "/instrumentation/nd/symbols/decel",
listen: [
"fplan_active",
"current_wp",
"wp_count",
"spd_ctrl",
"ver_ctrl",
"athr"
@ -746,14 +746,15 @@ canvas.NDStyles["Airbus"] = {
},
},
{
id: "taOnly", # the SVG ID
impl: { # implementation hash
init: func(nd, symbol), # for updateCenter stuff, called during initialization in the ctor
predicate: func(nd) getprop("/instrumentation/tcas/inputs/mode") == 2, # the condition
is_true: func(nd) nd.symbols.taOnly.show(), # if true, run this
is_false: func(nd) nd.symbols.taOnly.hide(), # if false, run this
}, # end of taOnly behavior/callbacks
}, # end of taOnly
# TODO: taOnly doesn"t need to use getprop polling in update(), use a listener instead!
id: "taOnly",
impl: {
init: func(nd, symbol),
predicate: func(nd) getprop("/instrumentation/tcas/inputs/mode") == 2,
is_true: func(nd) nd.symbols.taOnly.show(),
is_false: func(nd) nd.symbols.taOnly.hide(),
},
},
{
id: "tas",
impl: {
@ -761,7 +762,6 @@ canvas.NDStyles["Airbus"] = {
predicate: func(nd) getprop("/instrumentation/airspeed-indicator/true-speed-kt") >= 60,
is_true: func(nd) {
nd.symbols.tas.setText(sprintf("%3.0f",getprop("/instrumentation/airspeed-indicator/true-speed-kt")));
nd.symbols.tas.show();
},
is_false: func(nd){
nd.symbols.tas.setText("---");
@ -832,7 +832,7 @@ canvas.NDStyles["Airbus"] = {
var deg = math.round(getprop("/FMGC/flightplan[2]/current-leg-course-mag")) or 0;
}
if (deg != nil) {
nd.symbols.wpActiveCrs.setText(sprintf("%03.0f", deg) ~ "°");
nd.symbols.wpActiveCrs.setText(sprintf("%03.0f°", deg));
nd.symbols.wpActiveCrs.show();
} else {
nd.symbols.wpActiveCrs.hide();
@ -1324,7 +1324,7 @@ canvas.NDStyles["Airbus"] = {
id:"curTrkPtr",
impl: {
init: func(nd,symbol),
predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR","MAP"]) and !nd.get_switch("toggle_centered")
predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and !nd.get_switch("toggle_centered")
and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))
and abs(nd.aircraft_source.get_trk_mag() - nd.aircraft_source.get_hdg_mag()) <= 42),
is_true: func(nd) {
@ -1368,7 +1368,7 @@ canvas.NDStyles["Airbus"] = {
impl: {
init: func(nd,symbol),
predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and
nd.get_switch("toggle_centered") and (nd.change_phase != 1) and
nd.get_switch("toggle_centered") and (nd.change_phase != 1) and
getprop(nd.options.defaults.lat_ctrl) == 0 and abs(nd.aircraft_source.get_trk_mag() - nd.aircraft_source.get_hdg_mag()) <= 42 and
(nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))),
is_true: func(nd) {
@ -1531,6 +1531,8 @@ canvas.NDStyles["Airbus"] = {
predicate: func(nd) (getprop("/instrumentation/airspeed-indicator/true-speed-kt") >= 100),
is_true: func(nd) {
var windDir = pts.Instrumentation.PFD.windDirection.getValue() or 0;
if(nd.get_switch("toggle_true_north"))
windDir = windDir + getprop("/environment/magnetic-variation-deg");
nd.symbols.wind.setText(sprintf("%03.0f / %02.0f",windDir,pts.Instrumentation.PFD.windSpeed.getValue() or 0));
},
is_false: func(nd) {
@ -1545,7 +1547,18 @@ canvas.NDStyles["Airbus"] = {
predicate: func(nd) (!(nd.in_mode("toggle_display_mode", ["PLAN"]) and (nd.get_switch("toggle_display_type") == "LCD")) and (pts.Instrumentation.PFD.windSpeed.getValue() or 0) >= 2 and getprop("/instrumentation/airspeed-indicator/true-speed-kt") >= 100),
is_true: func(nd) {
nd.symbols.windArrow.show();
var windArrowRot = (pts.Instrumentation.PFD.windDirection.getValue() or 0) - nd.aircraft_source.get_hdg_tru();
var windArrowRot = pts.Instrumentation.PFD.windDirection.getValue() or 0;
if(nd.in_mode("toggle_display_mode", ["MAP","PLAN"])) {
if(nd.get_switch("toggle_true_north"))
windArrowRot = windArrowRot - nd.aircraft_source.get_trk_tru();
else
windArrowRot = windArrowRot - nd.aircraft_source.get_trk_mag();
} else {
if(nd.get_switch("toggle_true_north"))
windArrowRot = windArrowRot - nd.aircraft_source.get_hdg_tru();
else
windArrowRot = windArrowRot - nd.aircraft_source.get_hdg_mag();
}
nd.symbols.windArrow.setRotation(windArrowRot*D2R);
},
is_false: func(nd) nd.symbols.windArrow.hide(),

View file

@ -43,6 +43,7 @@ var du6_offtime = props.globals.initNode("/instrumentation/du/du6-off-time", 0.0
var autoland_alarm = props.globals.initNode("/instrumentation/pfd/logic/autoland/autoland-alarm", 0, "BOOL");
var autoland_pulse = props.globals.initNode("/instrumentation/pfd/logic/autoland/autoland-sw-pulse", 0, "BOOL");
var autoland_pitch_land = props.globals.initNode("/instrumentation/pfd/logic/autoland/pitch-land", 0, "BOOL");
var autoland_ap_disc_ft = props.globals.initNode("/instrumentation/pfd/logic/autoland/ap-disc-ft", 0, "INT");
var canvas_pfd = {
middleOffset: 0,
@ -776,7 +777,7 @@ var canvas_pfd = {
getKeys: func() {
return ["FMA_man","FMA_manmode","FMA_flxmode","FMA_flxtemp","FMA_thrust","FMA_lvrclb","FMA_pitch","FMA_pitcharm","FMA_pitcharm2","FMA_roll","FMA_rollarm","FMA_combined","FMA_ctr_msg","FMA_catmode","FMA_cattype","FMA_nodh","FMA_dh","FMA_dhn","FMA_ap",
"FMA_fd","FMA_athr","FMA_man_box","FMA_flx_box","FMA_thrust_box","FMA_pitch_box","FMA_pitcharm_box","FMA_roll_box","FMA_rollarm_box","FMA_combined_box","FMA_catmode_box","FMA_cattype_box","FMA_cat_box","FMA_dh_box","FMA_ap_box","FMA_fd_box",
"FMA_athr_box","FMA_Middle1","FMA_Middle2","ALPHA_MAX","ALPHA_PROT","ALPHA_SW","ALPHA_bars","VLS_min","ASI_max","ASI_scale","ASI_target","ASI_mach","ASI_mach_decimal","ASI_trend_up","ASI_trend_down","ASI_digit_UP","ASI_digit_DN","ASI_decimal_UP",
"FMA_athr_box","FMA_Middle1","FMA_Middle2","ALPHA_MAX","ALPHA_PROT","ALPHA_SW","ALPHA_bars","VLS_min","ASI_max","ASI_scale","ASI_target","ASI_mach","ASI_trend_up","ASI_trend_down","ASI_digit_UP","ASI_digit_DN","ASI_decimal_UP",
"ASI_decimal_DN","ASI_index","ASI_error","ASI_group","ASI_frame","AI_center","AI_bank","AI_bank_lim","AI_bank_lim_X","AI_pitch_lim","AI_pitch_lim_X","AI_slipskid","AI_horizon","AI_horizon_ground","AI_horizon_sky","AI_stick","AI_stick_pos","AI_heading",
"AI_agl_g","AI_agl","AI_error","AI_group","FD_roll","FD_pitch","ALT_box_flash","ALT_box","ALT_box_amber","ALT_scale","ALT_target","ALT_target_digit","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_digit_UP",
"ALT_digit_DN","ALT_digit_UP_metric","ALT_error","ALT_neg","ALT_group","ALT_group2","ALT_frame","VS_pointer","VS_box","VS_digit","VS_error","VS_group","QNH","QNH_setting","QNH_std","QNH_box","LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer",
@ -969,7 +970,7 @@ var canvas_pfd = {
me.tgt_kts = notification.targetKts;
if (notification.managedSpd) {
if (notification.decel) {
if (fmgc.FMGCInternal.decel) {
me.tgt_ias = fmgc.FMGCInternal.vappSpeedSet ? fmgc.FMGCInternal.vapp_appr : fmgc.FMGCInternal.vapp;
me.tgt_kts = fmgc.FMGCInternal.vappSpeedSet ? fmgc.FMGCInternal.vapp_appr : fmgc.FMGCInternal.vapp;
} else if (fmgc.FMGCInternal.phase == 6) {
@ -1279,16 +1280,14 @@ var canvas_pfd = {
me["machError"].hide();
if (me.ind_mach >= 0.999) {
me["ASI_mach"].setText("999");
me["ASI_mach"].setText(".999");
} else {
me["ASI_mach"].setText(sprintf("%3.0f", me.ind_mach * 1000));
me["ASI_mach"].setText(sprintf(".%3.0f", me.ind_mach * 1000));
}
if (me.ind_mach >= 0.5) {
me["ASI_mach_decimal"].show();
me["ASI_mach"].show();
} else {
me["ASI_mach_decimal"].hide();
me["ASI_mach"].hide();
}
} else {
@ -2052,7 +2051,6 @@ var input = {
thr2: "/controls/engines/engine[1]/throttle-pos",
decision: "/instrumentation/mk-viii/inputs/arinc429/decision-height",
decel: "/FMGC/internal/decel",
radio: "/FMGC/internal/radio",
baro: "/FMGC/internal/baro",

View file

@ -1,19 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="pfd.svg"
inkscape:version="0.91 r13725"
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
id="svg2"
version="1.1"
viewBox="0 0 1024 1024"
height="1024pt"
width="1024pt">
width="1024pt"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata375">
<rdf:RDF>
@ -37,17 +37,17 @@
units="pt"
inkscape:snap-global="false"
showguides="true"
inkscape:current-layer="svg2"
inkscape:current-layer="ALT_group"
inkscape:window-maximized="1"
inkscape:window-y="-8"
inkscape:window-x="-8"
inkscape:cy="245.80636"
inkscape:cx="411.71903"
inkscape:zoom="0.35355341"
inkscape:window-y="-11"
inkscape:window-x="-11"
inkscape:cy="673.69595"
inkscape:cx="1065.6983"
inkscape:zoom="5.6568545"
showgrid="false"
id="namedview371"
inkscape:window-height="657"
inkscape:window-width="1280"
inkscape:window-height="974"
inkscape:window-width="1920"
inkscape:pageshadow="2"
inkscape:pageopacity="1"
guidetolerance="10"
@ -230,8 +230,7 @@
y="480.29712"
id="text4718"
transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan4720"
x="381.24359"
@ -244,8 +243,7 @@
y="480.29608"
x="593.11237"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="480.29608"
x="593.11237"
@ -258,8 +256,7 @@
y="367.48999"
x="381.24359"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="367.48999"
x="381.24359"
@ -272,8 +269,7 @@
y="367.4892"
id="text5097"
transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan5099"
x="593.11237"
@ -286,8 +282,7 @@
y="268.78375"
id="text5125"
transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan5127"
x="381.24359"
@ -300,8 +295,7 @@
y="268.78317"
x="593.11237"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="268.78317"
x="593.11237"
@ -314,8 +308,7 @@
y="155.97633"
x="373.38058"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="155.97633"
x="373.38058"
@ -328,8 +321,7 @@
y="155.976"
id="text5145"
transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan5147"
x="600.9754"
@ -342,8 +334,7 @@
y="-13.234788"
x="365.51758"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="-13.234788"
x="365.51758"
@ -356,8 +347,7 @@
y="-13.234759"
id="text5209"
transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan5211"
x="608.83844"
@ -374,8 +364,7 @@
y="705.91138"
x="381.24359"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="705.91138"
x="381.24359"
@ -388,8 +377,7 @@
y="705.90985"
id="text4517"
transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan4519"
x="593.11237"
@ -402,8 +390,7 @@
y="790.51678"
id="text4541"
transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan4543"
x="381.24359"
@ -416,8 +403,7 @@
y="790.51508"
x="593.11237"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="790.51508"
x="593.11237"
@ -430,8 +416,7 @@
y="846.91992"
x="381.24359"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="846.91992"
x="381.24359"
@ -444,8 +429,7 @@
y="846.91803"
id="text4553"
transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan4555"
x="593.11237"
@ -458,8 +442,7 @@
y="959.72705"
id="text4581"
transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan4583"
x="373.38058"
@ -472,8 +455,7 @@
y="959.72498"
x="600.9754"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="959.72498"
x="600.9754"
@ -486,8 +468,7 @@
y="1128.9375"
x="365.51758"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="1128.9375"
x="365.51758"
@ -500,8 +481,7 @@
y="1128.9351"
id="text4593"
transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan4595"
x="608.83844"
@ -688,10 +668,9 @@
id="text4924"
y="178.57314"
x="392.94345"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#bb6100;fill-opacity:1;stroke:none;stroke-width:1.00001001px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30.00020027px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#bb6100;fill-opacity:1;stroke-width:1.00001001px"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#bb6100;fill-opacity:1;stroke:none;stroke-width:1.00001px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30.0002px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#bb6100;fill-opacity:1;stroke-width:1.00001px"
y="178.57314"
x="392.94345"
id="tspan4926"
@ -703,8 +682,7 @@
y="178.57445"
id="text4958"
inkscape:label="#text4314"
transform="scale(0.97051544,1.0303803)"
sodipodi:linespacing="0%"><tspan
transform="scale(0.97051544,1.0303803)"><tspan
sodipodi:role="line"
id="tspan4960"
x="530.78998"
@ -717,8 +695,7 @@
y="666.06818"
id="text4970"
inkscape:label="#text4314"
transform="scale(0.97051987,1.0303756)"
sodipodi:linespacing="0%"><tspan
transform="scale(0.97051987,1.0303756)"><tspan
sodipodi:role="line"
id="tspan4972"
x="420.73514"
@ -731,8 +708,7 @@
y="666.06818"
x="502.99374"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#bb6100;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#bb6100;fill-opacity:1"
y="666.06818"
x="502.99374"
@ -1142,8 +1118,7 @@
y="404.63544"
id="text4314"
inkscape:label="#text4314"
transform="scale(0.97051454,1.0303813)"
sodipodi:linespacing="0%"><tspan
transform="scale(0.97051454,1.0303813)"><tspan
sodipodi:role="line"
id="tspan4407"
x="202.60973"
@ -1156,8 +1131,7 @@
y="404.63544"
x="721.12775"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#bb6100;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#bb6100;fill-opacity:1"
y="404.63544"
x="721.12775"
@ -1245,17 +1219,16 @@
inkscape:transform-center-y="245.55937"
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.65757698"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="511.25748"
y="680.72845"
id="AI_agl"
transform="scale(0.87678236,1.1405339)"
sodipodi:linespacing="0%"><tspan
transform="scale(0.87678236,1.1405339)"><tspan
sodipodi:role="line"
id="tspan4624"
x="511.25748"
y="680.72845"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.65757698">0000</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:45px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.657577">0000</tspan></text>
</g>
<g
id="AI_stick"
@ -1523,7 +1496,7 @@
id="tspan5094"
x="1019.0017"
y="569.32635"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.77169991px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.65757698">1</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.7717px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.657577">1</tspan></text>
<text
transform="scale(0.87676975,1.1405503)"
id="text5100"
@ -1531,7 +1504,7 @@
x="1019.0017"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.77169991px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.7717px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
y="628.34387"
x="1019.0017"
id="tspan5098"
@ -1547,7 +1520,7 @@
id="tspan5102"
x="1019.0017"
y="687.27924"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.77169991px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.65757698">6</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.7717px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.657577">6</tspan></text>
</g>
<g
id="g5092"
@ -1605,7 +1578,7 @@
x="1086.9194"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:31.75600052px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:31.756px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
y="183.6866"
x="1086.9194"
id="tspan5128"
@ -1621,7 +1594,7 @@
id="tspan5132"
x="1086.9194"
y="246.63768"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:31.75600052px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.65757698">2</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:31.756px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.657577">2</tspan></text>
<text
transform="scale(0.87678236,1.1405339)"
id="text5138"
@ -1629,7 +1602,7 @@
x="1086.9194"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:31.75600052px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:31.756px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
y="309.50116"
x="1086.9194"
id="tspan5136"
@ -1723,7 +1696,7 @@
id="tspan5136-1"
x="1147.7107"
y="405.05588"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.65757698">00</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.657577">00</tspan></text>
</g>
</g>
<rect
@ -1986,10 +1959,10 @@
id="FMA_manmode"
y="74.429817"
x="125.31013"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"
inkscape:label="#text983"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
y="74.429817"
x="125.31013"
id="tspan4307"
@ -1997,7 +1970,7 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="125.84993"
y="33.759209"
id="FMA_man"
@ -2006,7 +1979,7 @@
id="tspan4303"
x="125.84993"
y="33.759209"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698">MAN</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577">MAN</tspan></text>
<path
inkscape:label="#path987"
sodipodi:nodetypes="cc"
@ -2017,7 +1990,7 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="505.48523"
y="115.0584"
id="FMA_ctr_msg"
@ -2026,7 +1999,7 @@
id="tspan4614"
x="505.48523"
y="115.0584"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke-width:0.65757698">MAN PITCH TRIM ONLY</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke-width:0.657577">MAN PITCH TRIM ONLY</tspan></text>
<path
style="fill:none;fill-opacity:1;stroke:#515256;stroke-width:3.19995403;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="m 432.8701,90.374503 0,-88.7230442"
@ -2042,7 +2015,7 @@
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"
inkscape:label="#text983"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.657577"
y="34.986706"
x="370.20218"
id="tspan4244"
@ -2059,7 +2032,7 @@
id="tspan4248"
x="422.80801"
y="74.709473"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.65757698">G/S</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.657577">G/S</tspan></text>
<text
transform="scale(0.87678236,1.1405339)"
id="FMA_pitcharm2"
@ -2068,7 +2041,7 @@
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"
inkscape:label="#text983"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.657577"
y="74.709473"
x="305.3663"
id="tspan4252"
@ -2076,7 +2049,7 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999973px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="629.61298"
y="34.635147"
id="FMA_roll"
@ -2085,11 +2058,11 @@
id="tspan4256"
x="629.61298"
y="34.635147"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.65757698">LOC</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.657577">LOC</tspan></text>
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999973px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="629.22266"
y="74.709473"
id="FMA_rollarm"
@ -2098,7 +2071,7 @@
id="tspan4260"
x="629.22266"
y="74.709473"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.65757698">NAV</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.657577">NAV</tspan></text>
<rect
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.39996576;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
id="FMA_pitch_box"
@ -2206,7 +2179,7 @@
id="tspan4618"
x="859.21783"
y="885.26117"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.3993988px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.75">STD</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.3994px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.75">STD</tspan></text>
<g
id="ALT_target"
inkscape:label="#g4832">
@ -2253,7 +2226,7 @@
id="tspan4800"
x="890.99316"
y="506.26898"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.83480072px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1;stroke-width:0.75">000</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.8348px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1;stroke-width:0.75">000</tspan></text>
</g>
<text
xml:space="preserve"
@ -2262,8 +2235,7 @@
y="787.28491"
id="ALT_digit_DN"
transform="scale(0.95382558,1.0484097)"
inkscape:label="#text975"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan5112"
x="802.7406"
@ -2276,8 +2248,7 @@
y="220.32645"
x="802.7406"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
sodipodi:linespacing="0%"><tspan
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#179ab7;fill-opacity:1;stroke-width:0.75"
y="220.32645"
x="802.7406"
@ -2303,7 +2274,7 @@
id="tspan5024"
x="887.71545"
y="775.94104"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.75600052px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.65757698">QNH</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.756px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ffffff;fill-opacity:1;stroke-width:0.657577">QNH</tspan></text>
<text
id="QNH_setting"
y="885.26117"
@ -2312,7 +2283,7 @@
xml:space="preserve"
transform="scale(1.0000144,0.9999856)"
inkscape:label="#text979"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.3993988px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.75;stroke-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.3994px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.75;stroke-opacity:1"
y="885.26117"
x="907.61713"
id="tspan977"
@ -2443,16 +2414,16 @@
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.75"
x="890.99316"
x="895.2074"
y="506.23941"
id="ALT_digits"
transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan973"
x="890.99316"
x="895.2074"
y="506.23941"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.83480072px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#0dc04b;fill-opacity:1;stroke-width:0.75">00</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.8348px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#0dc04b;fill-opacity:1;stroke-width:0.75">00</tspan></text>
</g>
<rect
style="display:inline;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:3.22735;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
@ -2485,10 +2456,10 @@
id="FMA_ap"
y="34.635155"
x="1080.6229"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"
inkscape:label="#text983"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
y="34.635155"
x="1080.6229"
id="tspan4268"
@ -2496,7 +2467,7 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="1080.6229"
y="74.709656"
id="FMA_fd"
@ -2505,16 +2476,16 @@
id="tspan4272"
x="1080.6229"
y="74.709656"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698">1 FD 2</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577">1 FD 2</tspan></text>
<text
transform="scale(0.87678236,1.1405339)"
id="FMA_athr"
y="115.05846"
x="1080.6229"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"
inkscape:label="#text983"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
y="115.05846"
x="1080.6229"
id="tspan4276"
@ -2522,7 +2493,7 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="874.48682"
y="34.635155"
id="FMA_catmode"
@ -2531,16 +2502,16 @@
id="tspan4280"
x="874.48682"
y="34.635155"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698">CAT 3</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577">CAT 3</tspan></text>
<text
transform="scale(0.87678236,1.1405339)"
id="FMA_cattype"
y="74.709656"
x="874.48682"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"
inkscape:label="#text983"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
y="74.709656"
x="874.48682"
id="tspan4284"
@ -2548,7 +2519,7 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="874.48682"
y="115.05846"
id="FMA_nodh"
@ -2557,7 +2528,7 @@
id="tspan4288"
x="874.48682"
y="115.05846"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698">NO RADIO</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577">NO RADIO</tspan></text>
<rect
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.39996576;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
id="FMA_catmode_box"
@ -2609,7 +2580,7 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="123.23077"
y="34.635437"
id="FMA_thrust"
@ -2618,7 +2589,7 @@
id="tspan981"
x="123.23077"
y="34.635437"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.65757698">SPEED</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.657577">SPEED</tspan></text>
<rect
inkscape:label="#rect4290"
y="7.4160867"
@ -2643,7 +2614,7 @@
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"
inkscape:label="#text983"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.657577"
y="34.635437"
x="505.48523"
id="tspan4354"
@ -2661,10 +2632,10 @@
id="FMA_dh"
y="115.05846"
x="831.23047"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"
inkscape:label="#text983"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
y="115.05846"
x="831.23047"
id="tspan4301"
@ -2672,7 +2643,7 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="934.0097"
y="115.05846"
id="FMA_dhn"
@ -2681,7 +2652,7 @@
id="tspan4305"
x="934.0097"
y="115.05846"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.65757698">0250</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.657577">0250</tspan></text>
<g
inkscape:label="#g4375"
id="ALPHA_bars">
@ -4083,7 +4054,7 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:34.00000012px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="185.85408"
y="74.429558"
id="FMA_flxtemp"
@ -4092,16 +4063,16 @@
id="tspan4316"
x="185.85408"
y="74.429558"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.65757698">+40</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.657577">+40</tspan></text>
<text
transform="scale(0.87678236,1.1405339)"
id="FMA_lvrclb"
y="114.70684"
x="123.23077"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"
inkscape:label="#text983"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
y="114.70684"
x="123.23077"
id="tspan4294"
@ -5665,28 +5636,15 @@
inkscape:label="#text975"
transform="scale(0.95383277,1.0484018)"
id="ASI_mach"
y="835.1153"
y="785.1153"
x="69.848434"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.83480072px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.8348px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="835.1153"
x="69.848434"
id="tspan4664"
sodipodi:role="line">000</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.75"
x="51.798809"
y="835.1153"
id="ASI_mach_decimal"
transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan4668"
x="51.798809"
y="835.1153"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.83480072px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1;stroke-width:0.75">.</tspan></text>
<text
inkscape:label="#text975"
transform="scale(0.95382555,1.0484097)"
@ -5777,12 +5735,11 @@
id="text4326"
y="348.03003"
x="71.731003"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.65757698"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
xml:space="preserve"
inkscape:label="#text983"
sodipodi:linespacing="0%"><tspan
inkscape:label="#text983"><tspan
dx="0"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35.17490005px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;letter-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35.1749px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;letter-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
y="348.03003"
x="71.731003"
id="tspan4328"
@ -5796,17 +5753,16 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.65757698"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="71.731506"
y="659.0799"
id="text4332"
transform="scale(0.92333871,1.0830262)"
sodipodi:linespacing="0%"><tspan
transform="scale(0.92333871,1.0830262)"><tspan
sodipodi:role="line"
id="tspan4334"
x="71.731506"
y="659.0799"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35.17490005px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698">SLOW</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35.1749px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577">SLOW</tspan></text>
</g>
<g
id="ASI_buss_ref"
@ -5883,14 +5839,14 @@
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.75"
x="851.70166"
x="855.8645"
y="505.93329"
id="ALT_error"
transform="scale(0.95383278,1.0484018)"
inkscape:label="#text975"><tspan
sodipodi:role="line"
id="tspan4386-4-0"
x="851.70166"
x="855.8645"
y="505.93329"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke-width:0.75">ALT</tspan></text>
<text
@ -5959,7 +5915,7 @@
x="34.684372"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.99000168px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#b055be;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.99px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#b055be;fill-opacity:1;stroke-width:0.75"
y="935.95209"
x="34.684372"
id="tspan978"
@ -5970,7 +5926,7 @@
x="34.684372"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.99000168px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#b055be;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.99px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#b055be;fill-opacity:1;stroke-width:0.75"
y="974.72784"
x="34.684372"
id="tspan979"
@ -5981,7 +5937,7 @@
x="34.684372"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.99000168px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#b055be;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.99px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#b055be;fill-opacity:1;stroke-width:0.75"
y="1013.5292"
x="34.684372"
id="tspan780"
@ -6092,52 +6048,52 @@
xml:space="preserve"
inkscape:label="#text913"
transform="scale(0.96366556,1.0377044)"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.83639908px;line-height:87.00000048%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="317.73038"
x="898.703"
sodipodi:role="line"
id="tspan919">40</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.83639908px;line-height:87.00000048%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="344.55804"
x="898.703"
sodipodi:role="line"
id="tspan4300">20</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.83639908px;line-height:87.00000048%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="371.38571"
x="898.703"
sodipodi:role="line"
id="tspan931">00</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.83639908px;line-height:87.00000048%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="398.21338"
x="898.703"
sodipodi:role="line"
id="tspan927">80</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.83639908px;line-height:87.00000048%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="425.04105"
x="898.703"
sodipodi:role="line"
id="tspan925">60</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.83639908px;line-height:87.00000048%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="451.86871"
x="898.703"
sodipodi:role="line"
id="tspan923">40</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.83639908px;line-height:87.00000048%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="478.69638"
x="898.703"
sodipodi:role="line"
id="tspan921">20</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.83639908px;line-height:87.00000048%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="505.52405"
x="898.703"
sodipodi:role="line"
id="tspan917">00</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.83639908px;line-height:87.00000048%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="532.35175"
x="898.703"
sodipodi:role="line"
id="tspan915">80</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.83639908px;line-height:87.00000048%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="559.17938"
x="898.703"
sodipodi:role="line"
@ -6307,7 +6263,7 @@
<text
inkscape:label="#text983"
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577;font-size:33.99999992px;"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
x="61.095329"
y="74.429939"
id="FMA_flxmode"
@ -6316,7 +6272,7 @@
id="tspan4307-3"
x="61.095329"
y="74.429939"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.65757698">FLX</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577">FLX</tspan></text>
<text
inkscape:label="#text1607"
id="spdLimError"
@ -6375,17 +6331,17 @@
x="823.7511"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48px;line-height:1.10000002;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48px;line-height:1.1;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="453.28622"
x="823.7511"
id="tspan1791"
sodipodi:role="line">N</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48px;line-height:1.10000002;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48px;line-height:1.1;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="506.08621"
x="823.7511"
sodipodi:role="line"
id="tspan1795">E</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48px;line-height:1.10000002;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48px;line-height:1.1;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.75"
y="558.88623"
x="823.7511"
sodipodi:role="line"
@ -6402,7 +6358,7 @@
id="tspan1777"
x="417.56354"
y="34.634907"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:33px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.65757698">-800</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:33px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.657577">-800</tspan></text>
<rect
inkscape:label="#rect4290"
y="896.48456"
@ -6419,9 +6375,9 @@
xml:space="preserve"
transform="scale(1.0000144,0.9999856)"
inkscape:label="#text979"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.3993988px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.3994px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="928.04248"
x="852.95343"
x="852.96283"
id="tspan977-3"
sodipodi:role="line">11070 </tspan></text>
<text
@ -6435,7 +6391,7 @@
id="tspan1813"
x="909.43152"
y="928.62128"
style="font-size:38.3993988px;line-height:1.25;fill:#179ab7;fill-opacity:1;stroke-width:0.75">M</tspan></text>
style="font-size:38.3994px;line-height:1.25;fill:#179ab7;fill-opacity:1;stroke-width:0.75">M</tspan></text>
<text
inkscape:label="#text975"
transform="scale(0.95382559,1.0484097)"

Before

Width:  |  Height:  |  Size: 350 KiB

After

Width:  |  Height:  |  Size: 348 KiB

View file

@ -19,6 +19,7 @@ var engOpt = props.globals.getNode("/options/eng", 1);
var thrustState = [nil, nil];
# local variables
var takeoffConfig = 0;
var transmitFlag1 = 0;
var transmitFlag2 = 0;
var phaseVar3 = nil;
@ -2325,6 +2326,40 @@ var messages_priority_2 = func {
ECAM_controller.warningReset(fctlSpdBrkStillOut);
}
if (fctlPitchTrimDisag.clearFlag == 0 and takeoffConfig and fmgc.FMGCInternal.toFlapThsSet and abs(-getprop("/fdm/jsbsim/hydraulics/elevator-trim/final-deg") - fmgc.FMGCInternal.toThs) >= 1.3) {
fctlPitchTrimDisag.active = 1;
fctlPitchTrimDisag2.active = 1;
} else {
ECAM_controller.warningReset(fctlPitchTrimDisag);
ECAM_controller.warningReset(fctlPitchTrimDisag2);
}
if (fctlFlapsDisag.clearFlag == 0 and takeoffConfig and fmgc.FMGCInternal.toFlapThsSet and (fmgc.FMGCInternal.toFlap + 1 != pts.Controls.Flight.flapsPos.getValue())) {
fctlFlapsDisag.active = 1;
} else {
ECAM_controller.warningReset(fctlFlapsDisag);
}
if (toSpdsDisag.clearFlag == 0 and takeoffConfig and fmgc.FMGCInternal.v1set and fmgc.FMGCInternal.vrset and fmgc.FMGCInternal.v2set and !(fmgc.FMGCInternal.v1 <= fmgc.FMGCInternal.vr and fmgc.FMGCInternal.vr <= fmgc.FMGCInternal.v2)) {
toSpdsDisag.active = 1;
} else {
ECAM_controller.warningReset(toSpdsDisag);
}
if (toSpdsTooLow.clearFlag == 0 and takeoffConfig and
fmgc.FMGCInternal.toFlapThsSet and fmgc.FMGCInternal.zfwSet and fmgc.FMGCInternal.blockSet and fmgc.FMGCInternal.v1set and fmgc.FMGCInternal.vrset and fmgc.FMGCInternal.v2set
and (fmgc.FMGCInternal.v1 < mcdu.VMCG.getValue() or fmgc.FMGCInternal.vr < (mcdu.VMCA.getValue() * 1.05) or fmgc.FMGCInternal.v2 < (mcdu.VMCA.getValue() * 1.10) or fmgc.FMGCInternal.v2 < (1.13 * mcdu.chooseVS1G()))) {
toSpdsTooLow.active = 1;
} else {
ECAM_controller.warningReset(toSpdsTooLow);
}
if (toSpdsNotInserted.clearFlag == 0 and takeoffConfig and (!fmgc.FMGCInternal.v1set or !fmgc.FMGCInternal.vrset or !fmgc.FMGCInternal.v2set)) {
toSpdsNotInserted.active = 1;
} else {
ECAM_controller.warningReset(toSpdsNotInserted);
}
gearPosition = pts.Gear.position[1].getValue();
if (directLaw.clearFlag == 0 and warningNodes.Timers.directLaw.getValue() == 1 and phaseVar2 != 4 and phaseVar2 != 5 and phaseVar2 != 7 and phaseVar2 != 8) {
directLaw.active = 1;

View file

@ -14,9 +14,9 @@ var warnings = std.Vector.new([
var flap_not_zero = warning.new(msg: "F/CTL FLAP LVR NOT ZERO", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var overspeed = warning.new(msg: "OVER SPEED", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var overspeedVMO = warning.new(msg: "-VMO/MMO.......350 /.82", colour: "r"),
var overspeedGear = warning.new(msg: "-VLE...........280 /.67", colour: "r"),
var overspeedFlap = warning.new(msg: "-VFE................XXX", colour: "r"),
var overspeedVMO = warning.new(msg: " -VMO/MMO.......350 /.82", colour: "r"),
var overspeedGear = warning.new(msg: " -VLE...........280 /.67", colour: "r"),
var overspeedFlap = warning.new(msg: " -VFE................XXX", colour: "r"),
var allEngFail = warning.new(msg: "ENG ALL ENGINES FAILURE", colour: "r", aural: 0, light: 0, isMainMsg: 1, sdPage: "enginePage"),
var allEngFailElec = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
@ -182,25 +182,25 @@ var warnings = std.Vector.new([
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"),
var cargoSmokeFwdDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
var cargoSmokeFwdDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"),
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, sdPage: "condPage"),
var cargoSmokeAftFans = warning.new(msg: " -CAB FANS...........OFF", colour: "c"),
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"),
var cargoSmokeAftDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
var cargoSmokeAftDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"),
var cargoSmokeAftDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
var cargoSmokeAftDisemb = warning.new(msg: " -PAX..........DISEMBARK", colour: "c"),
# Lavatory SMOKE
var lavatorySmoke = warning.new(msg: "SMOKE LAVATORY SMOKE ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var lavatorySmokeComm = warning.new(msg: "-CKPT/CAB COM.ESTABLISH ", colour: "c"),
var lavatorySmokeComm = warning.new(msg: " -CKPT/CAB COM.ESTABLISH ", colour: "c"),
# EXCES RESID PR
var excessResidPress = warning.new(msg: "CAB PR EXCES RESIDUAL PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1, sdPage: "cabPressPage"),
var excessResidPressPack1 = warning.new(msg: "-PACK 1.............OFF", colour: "c"),
var excessResidPressPack2 = warning.new(msg: "-PACK 2.............OFF", colour: "c"),
var excessResidPressCabCr = warning.new(msg: "-CABIN CREW.......ALERT", colour: "c"),
var excessResidPressPack1 = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var excessResidPressPack2 = warning.new(msg: " -PACK 2.............OFF", colour: "c"),
var excessResidPressCabCr = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
# ESS Bus on Bat
# NEW EMER CONFIG
@ -494,6 +494,12 @@ var warnings = std.Vector.new([
# F/CTL SPD BRK STILL OUT
var fctlSpdBrkStillOut = warning.new(msg: "F/CTL SPD BRK STILL OUT ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var fctlPitchTrimDisag = warning.new(msg: "F/CTL", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var fctlPitchTrimDisag2 = warning.new(msg: "PITCH TRIM/MCDU/CG DISAGREE", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var fctlFlapsDisag = warning.new(msg: "F/CTL FLAPS/MCDU DISAGREE", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var toSpdsDisag = warning.new(msg: "T.O V1/VR/V2 DISAGREE ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var toSpdsTooLow = warning.new(msg: "T.O SPEEDS TOO LOW ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var toSpdsNotInserted = warning.new(msg: "T.O SPEEDS NOT INSERTED ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
# DIRECT LAW
var directLaw = warning.new(msg: "F/CTL DIRECT LAW", colour: "a", aural: 1, light: 1, isMainMsg: 1),
@ -514,19 +520,19 @@ var warnings = std.Vector.new([
# Autothrust
var athr_offw = warning.new(msg: "AUTO FLT A/THR OFF", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var athr_offw_1 = warning.new(msg: "-THR LEVERS........MOVE", colour: "c"),
var athr_offw_1 = warning.new(msg: " -THR LEVERS........MOVE", colour: "c"),
var athr_lock = warning.new(msg: "ENG THRUST LOCKED", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var athr_lock_1 = warning.new(msg: "-THR LEVERS........MOVE", colour: "c"),
var athr_lock_1 = warning.new(msg: " -THR LEVERS........MOVE", colour: "c"),
var athr_lim = warning.new(msg: "AUTO FLT A/THR LIMITED", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var athr_lim_1 = warning.new(msg: "-THR LEVERS........MOVE", colour: "c"),
var athr_lim_1 = warning.new(msg: " -THR LEVERS........MOVE", colour: "c"),
# TCAS FAULT
var tcasFault = warning.new(msg: "NAV TCAS FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var tcasStby = warning.new(msg: "NAV TCAS STBY", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gpwsFault = warning.new(msg: "NAV GPWS FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gpwsFaultOff = warning.new(msg: "-GPWS...............OFF", colour: "c"),
var gpwsFaultOff = warning.new(msg: " -GPWS...............OFF", colour: "c"),
var gpwsTerrFault = warning.new(msg: "NAV GPWS TERR DET FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gpwsTerrFaultOff = warning.new(msg: "-GPWS TERR..........OFF", colour: "c"),
var gpwsTerrFaultOff = warning.new(msg: " -GPWS TERR..........OFF", colour: "c"),
# FAC and Rudder System
var fac12Fault = warning.new(msg: "AUTO FLT FAC 1+2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),

View file

@ -507,6 +507,9 @@ var apOff = func(type, side) {
} elsif (side == 2) {
fmgc.Input.ap2.setValue(0);
}
var radarft = (side == 2) ? getprop("/instrumentation/radar-altimeter[1]/radar-altitude-ft-corrected") : getprop("/instrumentation/radar-altimeter[0]/radar-altitude-ft-corrected");
setprop("/instrumentation/pfd/logic/autoland/ap-disc-ft",radarft);
}
# Autothrust Disconnection

View file

@ -46,6 +46,7 @@ var Misc = {
};
var Position = {
airborne5Secs: props.globals.getNode("/systems/fmgc/airborne-5-secs"),
gearAglFtTemp: 0,
gearAglFt: props.globals.getNode("/position/gear-agl-ft", 1),
indicatedAltitudeFt: props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1),
@ -365,9 +366,9 @@ var ITAF = {
# Preselect Heading
if (Output.latTemp != 0 and Output.latTemp != 9) { # Modes that always show HDG
if (Custom.hdgTime.getValue() + 45 >= Misc.elapsedSec.getValue()) {
setprop("it-autoflight/custom/show-hdg", 1);
Custom.showHdg.setBoolValue(1);
} else {
setprop("it-autoflight/custom/show-hdg", 0);
Custom.showHdg.setBoolValue(0);
}
}
@ -442,7 +443,7 @@ var ITAF = {
},
ap1Master: func(s) {
if (s == 1) {
if (Output.vert.getValue() != 6 and !Gear.wow1.getBoolValue() and !Gear.wow2.getBoolValue() and systems.ELEC.Bus.acEss.getValue() >= 110 and fbw.FBW.apOff == 0 and Position.gearAglFt.getValue() >= 100) {
if (Output.vert.getValue() != 6 and !Gear.wow1.getBoolValue() and !Gear.wow2.getBoolValue() and FMGCNodes.Power.FMGC1Powered.getBoolValue() and fbw.FBW.apOff == 0 and Position.gearAglFt.getValue() >= 100 and Position.airborne5Secs.getBoolValue()) {
Output.ap1.setBoolValue(1);
me.updateFma();
Output.latTemp = Output.lat.getValue();
@ -464,7 +465,7 @@ var ITAF = {
},
ap2Master: func(s) {
if (s == 1) {
if (Output.vert.getValue() != 6 and !Gear.wow1.getBoolValue() and !Gear.wow2.getBoolValue() and systems.ELEC.Bus.acEss.getValue() >= 110 and fbw.FBW.apOff == 0 and Position.gearAglFt.getValue() >= 100) {
if (Output.vert.getValue() != 6 and !Gear.wow1.getBoolValue() and !Gear.wow2.getBoolValue() and FMGCNodes.Power.FMGC2Powered.getBoolValue() and fbw.FBW.apOff == 0 and Position.gearAglFt.getValue() >= 100 and Position.airborne5Secs.getBoolValue()) {
Output.ap2.setBoolValue(1);
me.updateFma();
Output.latTemp = Output.lat.getValue();
@ -495,7 +496,7 @@ var ITAF = {
},
athrMaster: func(s) {
if (s == 1) {
if (systems.ELEC.Bus.acEss.getValue() >= 110 and !pts.FMGC.CasCompare.casRejectAll.getBoolValue() and fbw.FBW.apOff == 0) {
if ((FMGCNodes.Power.FMGC1Powered.getBoolValue() or FMGCNodes.Power.FMGC2Powered.getBoolValue()) and !pts.FMGC.CasCompare.casRejectAll.getBoolValue() and fbw.FBW.apOff == 0) {
Output.athr.setBoolValue(1);
Custom.ThrLock.setValue(0);
Custom.Sound.enableAthrOff = 1;

View file

@ -26,10 +26,7 @@ var altitude = 0;
var flap = 0;
var flaps = 0;
var ktsmach = 0;
var kts_sel = 0;
var mach_sel = 0;
var srsSPD = 0;
var decel = 0;
var mng_alt_spd = 0;
var mng_alt_mach = 0;
var altsel = 0;
@ -75,6 +72,7 @@ var FMGCinit = func {
var FMGCInternal = {
# phase logic
phase: 0,
decel: 0,
minspeed: 0,
maxspeed: 0,
clbSpdLim: 250,
@ -132,6 +130,9 @@ var FMGCInternal = {
vrset: 0,
v2: 0,
v2set: 0,
toFlap: 0,
toThs: 0,
toFlapThsSet: 0,
# PERF APPR
destMag: 0,
@ -258,13 +259,16 @@ var postInit = func() {
var FMGCNodes = {
costIndex: props.globals.initNode("/FMGC/internal/cost-index", 0, "DOUBLE"),
decel: props.globals.initNode("/FMGC/internal/decel", 0, "BOOL"),
flexSet: props.globals.initNode("/FMGC/internal/flex-set", 0, "BOOL"),
flexTemp: props.globals.initNode("/FMGC/internal/flex", 0, "INT"),
mngSpdAlt: props.globals.getNode("/FMGC/internal/mng-alt-spd"),
ktsToMachFactor: props.globals.getNode("/FMGC/internal/kts-to-mach-factor"),
machToKtsFactor: props.globals.getNode("/FMGC/internal/mach-to-kts-factor"),
mngMachAlt: props.globals.getNode("/FMGC/internal/mng-alt-mach"),
Power: {
FMGC1Powered: props.globals.getNode("systems/fmgc/power/power-1-on"),
FMGC2Powered: props.globals.getNode("systems/fmgc/power/power-2-on"),
},
toFromSet: props.globals.initNode("/FMGC/internal/tofrom-set", 0, "BOOL"),
ldgElev: props.globals.getNode("/FMGC/internal/ldg-elev", 1),
toState: props.globals.initNode("/FMGC/internal/to-state", 0, "BOOL"),
@ -303,9 +307,15 @@ var updateARPT = func {
}
}
var updateArptLatLon = func {
var apt = nil;
var dms = nil;
var degrees = nil;
var minutes = nil;
var sign = nil;
var updateArptLatLon = func() {
#ref lat
dms = getprop("/FMGC/flightplan[2]/wp[0]/lat");
apt = airportinfo(FMGCInternal.depApt);
dms = apt.lat;
degrees = int(dms);
minutes = sprintf("%.1f",abs((dms - degrees) * 60));
sign = degrees >= 0 ? "N" : "S";
@ -313,7 +323,7 @@ var updateArptLatLon = func {
setprop("/FMGC/internal/align-ref-lat-minutes", minutes);
setprop("/FMGC/internal/align-ref-lat-sign", sign);
#ref long
dms = getprop("/FMGC/flightplan[2]/wp[0]/lon");
dms = apt.lon;
degrees = int(dms);
minutes = sprintf("%.1f",abs((dms - degrees) * 60));
sign = degrees >= 0 ? "E" : "W";
@ -605,7 +615,7 @@ var masterFMGC = maketimer(0.2, func {
}
}
} elsif (FMGCInternal.phase == 4) {
if (FMGCNodes.decel.getValue()) {
if (FMGCInternal.decel) {
newphase = 5;
}
} elsif (FMGCInternal.phase == 5) {
@ -621,9 +631,9 @@ var masterFMGC = maketimer(0.2, func {
if (flightPlanController.num[2].getValue() > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and
flightPlanController.arrivalDist <= 15 and (modelat == "NAV" or modelat == "LOC" or modelat == "LOC*") and pts.Position.gearAglFt.getValue() < 9500) { #todo decel pseudo waypoint
FMGCNodes.decel.setValue(1);
} elsif (FMGCNodes.decel.getValue() and (FMGCInternal.phase == 0 or FMGCInternal.phase == 6)) {
FMGCNodes.decel.setValue(0);
FMGCInternal.decel = 1;
} elsif (FMGCInternal.decel and (FMGCInternal.phase == 0 or FMGCInternal.phase == 6)) {
FMGCInternal.decel = 0;
}
@ -977,7 +987,6 @@ var ManagedSPD = maketimer(0.25, func {
if (FMGCInternal.crzSet and FMGCInternal.costIndexSet) {
if (Custom.Input.spdManaged.getBoolValue()) {
altitude = pts.Instrumentation.Altimeter.indicatedFt.getValue();
decel = FMGCNodes.decel.getValue();
ktsmach = Input.ktsMach.getValue();
mode = Modes.PFD.FMA.pitchMode.getValue();
srsSPD = srsSpeedNode.getValue();
@ -998,12 +1007,12 @@ var ManagedSPD = maketimer(0.25, func {
} elsif ((FMGCInternal.phase == 2 or FMGCInternal.phase == 3) and altitude <= FMGCInternal.clbSpdLimAlt) {
# Speed is maximum of greendot / climb speed limit
FMGCInternal.mngKtsMach = 0;
FMGCInternal.mngSpdCmd = decel ? FMGCInternal.minspeed : math.clamp(FMGCInternal.clbSpdLim, FMGCInternal.clean, 999);
FMGCInternal.mngSpdCmd = FMGCInternal.decel ? FMGCInternal.minspeed : math.clamp(FMGCInternal.clbSpdLim, FMGCInternal.clean, 999);
} elsif ((FMGCInternal.phase == 2 or FMGCInternal.phase == 3) and altitude > (FMGCInternal.clbSpdLimAlt + 20)) {
FMGCInternal.mngKtsMach = FMGCInternal.machSwitchover ? 1 : 0;
FMGCInternal.mngSpdCmd = FMGCInternal.machSwitchover ? mng_alt_mach : mng_alt_spd;
} elsif ((FMGCInternal.phase >= 4 and FMGCInternal.phase <= 6) and altitude > (FMGCInternal.desSpdLimAlt + 20)) {
if (decel) {
if (FMGCInternal.decel) {
FMGCInternal.mngKtsMach = 0;
FMGCInternal.mngSpdCmd = FMGCInternal.minspeed;
} else {
@ -1013,7 +1022,7 @@ var ManagedSPD = maketimer(0.25, func {
} elsif ((FMGCInternal.phase >= 4 and FMGCInternal.phase <= 6) and altitude <= FMGCInternal.desSpdLimAlt) {
FMGCInternal.mngKtsMach = 0;
# Speed is maximum of greendot / descent speed limit
FMGCInternal.mngSpdCmd = decel ? FMGCInternal.minspeed : math.clamp(FMGCInternal.desSpdLim, FMGCInternal.clean, 999);
FMGCInternal.mngSpdCmd = FMGCInternal.decel ? FMGCInternal.minspeed : math.clamp(FMGCInternal.desSpdLim, FMGCInternal.clean, 999);
}
# Clamp to minspeed, maxspeed

View file

@ -195,7 +195,7 @@ var MessageController = {
typeIIMessages: std.Vector.new([
TypeIIMessage.new("LAT DISCONT AHEAD", "amb", 0),TypeIIMessage.new("MORE DRAG"),TypeIIMessage.new("RWY/LS MISMATCH", "amb", 0),TypeIIMessage.new("STEP DELETED"),
TypeIIMessage.new("STEP NOW"),TypeIIMessage.new("TIME TO EXIT", "amb", 0),TypeIIMessage.new("V1/VR/V2 DISAGREE", "amb", 0),
TypeIIMessage.new("TO SPEED TOO LOW", "amb", 0),
TypeIIMessage.new("T.O SPEEDS TOO LOW", "amb", 0),TypeIIMessage.new("CHECK TAKE OFF DATA", "amb", 0),
TypeIIMessage.new("CHECK DEST DATA", "amb", 0), #p.533
TypeIIMessage.new("GPS PRIMARY"),TypeIIMessage.new("GPS PRIMARY LOST", "amb", 0),
]),

View file

@ -1,7 +1,6 @@
var airwaysPage = {
title: [nil, nil, nil],
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -45,7 +44,6 @@ var airwaysPage = {
me.R1 = [nil, "TO ", "blu"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0]];
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
makeTmpy: func() {
@ -67,7 +65,6 @@ var airwaysPage = {
}
},
updateAirways: func(index, airwayName) {
me.fontMatrix[0][index - 1] = 0;
if (index == 1) {
me.L1[0] = airwayName;
} elsif (index == 2) {

View file

@ -5,7 +5,6 @@ var isNoVia = [0, 0, 0];
var arrivalPage = {
title: [nil, nil, nil],
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -132,7 +131,6 @@ var arrivalPage = {
_setupPageWithData: func() {
me.title = ["ARRIVAL", " TO ", left(me.id, 4)];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
@ -178,7 +176,6 @@ var arrivalPage = {
me.R4 = [nil, nil, "ack"];
me.R5 = [nil, nil, "ack"];
me.R6 = [nil, nil, "ack"];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "ack"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
},

View file

@ -2,7 +2,6 @@ var latReq = {
title: [nil, nil, nil],
titleColour: "wht",
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour

View file

@ -1,6 +1,5 @@
var atisPage = {
title: nil,
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -77,7 +76,6 @@ var atisPage = {
me.R6 = ["PRINT ", nil, "blu"];
me.arrowsMatrix = [[0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "wht", "wht"], ["ack", "ack", "ack", "ack", "ack", "blu"]];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
update: func() {

View file

@ -1,6 +1,5 @@
var closestAirportPage = {
title: nil,
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -40,12 +39,13 @@ var closestAirportPage = {
me.title = "CLOSEST AIRPORTS";
me.C1[1] = " BRG DIST";
me.R1[1] = "UTC ";
me.L5 = ["[ ]", nil, "blu"];
me.L5 = ["[ ]", nil, "blu"];
me.C5 = [nil, me.frozen ? "LIST FROZEN" : nil, "grn"];
me.R5 = [nil, nil, "grn"];
me.L6 = [" FREEZE", nil, "blu"];
me.R6 = ["EFOB/WIND ", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 1]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "blu"], ["ack", "ack", "ack", "ack", "ack", "wht"]];
me.fontMatrix = [[0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0]];
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
me.update();
me.updateBrgDist();
@ -98,31 +98,64 @@ var closestAirportPage = {
var magvarLocal = magvar();
if (size(me.airports) >= 1) {
me.cdVector[0] = courseAndDistance(me.airports[0]);
me.C1 = [math.round(me.cdVector[0][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[0][1]), " BRG DIST", "grn"];
me.brg = me.cdVector[0][0] - magvarLocal;
if (me.brg > 360) {
me.brg -= 360;
} else if (me.brg < 0) {
me.brg += 360;
}
me.C1 = [sprintf("%03d°",me.brg) ~ " " ~ sprintf("%4d",math.round(me.cdVector[0][1])), " BRG DIST", "grn"];
}
if (size(me.airports) >= 2) {
me.cdVector[1] = courseAndDistance(me.airports[1]);
me.C2 = [math.round(me.cdVector[1][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[1][1]) , nil, "grn"];
me.brg = me.cdVector[1][0] - magvarLocal;
if (me.brg > 360) {
me.brg -= 360;
} else if (me.brg < 0) {
me.brg += 360;
}
me.C2 = [sprintf("%03d°",me.brg) ~ " " ~ sprintf("%4d",math.round(me.cdVector[1][1])), nil, "grn"];
}
if (size(me.airports) >= 3) {
me.cdVector[2] = courseAndDistance(me.airports[2]);
me.C3 = [math.round(me.cdVector[2][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[2][1]), nil, "grn"];
me.brg = me.cdVector[2][0] - magvarLocal;
if (me.brg > 360) {
me.brg -= 360;
} else if (me.brg < 0) {
me.brg += 360;
}
me.C3 = [sprintf("%03d°",me.brg) ~ " " ~ sprintf("%4d",math.round(me.cdVector[2][1])), nil, "grn"];
}
if (size(me.airports) >= 4) {
me.cdVector[3] = courseAndDistance(me.airports[3]);
me.C4 = [math.round(me.cdVector[3][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[3][1]), nil, "grn"];
me.brg = me.cdVector[3][0] - magvarLocal;
if (me.brg > 360) {
me.brg -= 360;
} else if (me.brg < 0) {
me.brg += 360;
}
me.C4 = [sprintf("%03d°",me.brg) ~ " " ~ sprintf("%4d",math.round(me.cdVector[3][1])), nil, "grn"];
}
if (me.manAirport != nil) {
me.C5 = [math.round(courseAndDistance(me.manAirport)[0] - magvarLocal) ~ " " ~ math.round(courseAndDistance(me.manAirport)[1]), nil, "grn"];
me.brg = courseAndDistance(me.manAirport)[0] - magvarLocal;
if (me.brg > 360) {
me.brg -= 360;
} else if (me.brg < 0) {
me.brg += 360;
}
me.C5 = [sprintf("%03d°",me.brg) ~ " " ~ sprintf("%4d",math.round(courseAndDistance(me.manAirport)[1])), me.frozen ? "LIST FROZEN" : nil, "grn"];
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
manAirportCall: func(id) {
if (id == "CLR") {
me.manAirport = nil;
me.L5 = [nil, nil, "grn"];
me.C5 = [nil, nil, "grn"];
me.R5 = [nil, nil, "grn"];
me._setupPageWithData();
return;
}
if (size(id) > 4) {
@ -133,6 +166,7 @@ var closestAirportPage = {
me.manAirport = airportinfo(id);
me.L5 = [id, nil, "grn"];
me.R5 = ["----", nil, "grn"];
mcdu_scratchpad.scratchpads[me.computer].empty();
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
}

View file

@ -4,7 +4,6 @@ var isNoTransDep = [0, 0, 0];
var departurePage = {
title: [nil, nil, nil],
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -106,7 +105,6 @@ var departurePage = {
_setupPageWithData: func() {
me.title = ["DEPARTURE", " FROM ", left(me.id, 4)];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
@ -147,7 +145,6 @@ var departurePage = {
me.R4 = [nil, nil, "ack"];
me.R5 = [nil, nil, "ack"];
me.R6 = [nil, nil, "ack"];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "ack"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
},
@ -561,6 +558,19 @@ var departurePage = {
me.selectedRunway = me.depAirport[0].runway(me.runways[index - 2 + me.scrollRwy]);
me.makeTmpy();
fmgc.flightPlanController.flightplans[me.computer].departure_runway = me.selectedRunway;
mcdu.perfToCheckTakeoffData(me.computer);
if (fmgc.FMGCInternal.v1set) {
fmgc.FMGCInternal.v1set = 0;
fmgc.FMGCInternal.v1 = 0;
}
if (fmgc.FMGCInternal.vrset) {
fmgc.FMGCInternal.vrset = 0;
fmgc.FMGCInternal.vr = 0;
}
if (fmgc.FMGCInternal.v2set) {
fmgc.FMGCInternal.v2set = 0;
fmgc.FMGCInternal.v2 = 0;
}
me.updateRunways();
me.updatePage();
fmgc.flightPlanController.flightPlanChanged(me.computer);

View file

@ -3,7 +3,6 @@ var dirToFlag = 0;
var dirTo = {
title: [nil],
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -46,7 +45,6 @@ var dirTo = {
me.R5 = ["[ ] ", "RADIAL OUT ", "blu"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "blu", "blu", "blu", "blu", "ack"], ["ack", "blu", "blu", "ack", "ack", "ack"]];
me.fontMatrix = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0]];
me.updateFromFpln();
me.updateTmpy();
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
@ -82,7 +80,7 @@ var dirTo = {
var x = 0;
me.vector = [];
for (var i = 1 + (me.scroll); i < size(canvas_mcdu.myFpln[me.computer].planList) - 2; i = i + 1) {
if (canvas_mcdu.myFpln[me.computer].planList[i].wp.wp_name == "DISCONTINUITY" or canvas_mcdu.myFpln[me.computer].planList[i].wp.wp_name == "VECTORS" or canvas_mcdu.myFpln[me.computer].planList[i].wp.wp_name == "T-P" or canvas_mcdu.myFpln[me.computer].planList[i].wp.wp_type == "hdgToAlt") { continue; } # can't ever have tmpy with dir to
if (canvas_mcdu.myFpln[me.computer].planList[i].wp.wp_name == "DISCONTINUITY" or canvas_mcdu.myFpln[me.computer].planList[i].wp.wp_name == "VECTORS" or canvas_mcdu.myFpln[me.computer].planList[i].wp.wp_name == "T-P" or canvas_mcdu.myFpln[me.computer].planList[i].wp.wp_type == "hdgToAlt") { continue; }
if (canvas_mcdu.myFpln[me.computer].planList[i].index > fmgc.flightPlanController.arrivalIndex[2]) {
continue;
}
@ -148,7 +146,6 @@ var dirTo = {
fieldL1: func(text, override = 0, overrideIndex = -1) {
me.makeTmpy();
me.L1[0] = text;
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0]];
if (size(text) == 16) {
# lat lon
var lat = split("/", text)[0];
@ -237,7 +234,6 @@ var dirTo = {
leftFieldBtn: func(index) {
me.makeTmpy();
me.L1[0] = me.vector[index - 2].wp_name;
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0]];
fmgc.flightPlanController.directTo(me.vector[index - 2], me.computer);
me.arrowsMatrix[0][1] = 0;
# FIGURE OUT HOW TO MAKE IT SO IT DOESN'T DELETE THE WAYPOINTS ON DIR TO BUT DOES IN FLIGHTPLAN
@ -254,7 +250,6 @@ var dirTo = {
dirToFlag = 0;
fmgc.flightPlanController.destroyTemporaryFlightPlan(me.computer, 0);
me.L1 = [" [ ]", " WAYPOINT", "blu"];
me.fontMatrix = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0]];
me.R1 = ["---- --- ", "UTC DIST ", "wht"];
} else {
mcdu_message(me.computer, "NOT ALLOWED");
@ -265,7 +260,6 @@ var dirTo = {
dirToFlag = 0;
fmgc.flightPlanController.destroyTemporaryFlightPlan(me.computer, 1);
me.L1 = [" [ ]", " WAYPOINT", "blu"];
me.fontMatrix = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0]];
me.R1 = ["---- --- ", "UTC DIST ", "wht"];
setprop("MCDU[" ~ me.computer ~ "]/page", "F-PLNA"); # todo - remember horizontal srcoll of f-plna?
} else {

View file

@ -1,7 +1,6 @@
var duplicateNamesPage = {
title: nil,
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -49,7 +48,6 @@ var duplicateNamesPage = {
me.title = "DUPLICATE NAMES";
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.distances = [];
for (var i = 0; i < size(me.vector); i += 1) {

View file

@ -160,22 +160,22 @@ var fplnItem = {
if (me.wp.wp_name == "DISCONTINUITY") {
canvas_mcdu.myLatRev[me.computer] = latRev.new(4, me.wp, me.index, me.computer);
} elsif (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (me.index == fmgc.flightPlanController.arrivalIndex[me.computer]) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(1, me.wp, me.index, me.computer);
} elsif (left(me.wp.wp_name, 4) == fmgc.flightPlanController.flightplans[me.computer].departure.id) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(0, me.wp, me.index, me.computer);
} elsif (me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
if (me.wp.wp_name == "PPOS" or me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(2, me.wp, me.index, me.computer);
} elsif (me.index == fmgc.flightPlanController.arrivalIndex[me.computer]) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(1, me.wp, me.index, me.computer);
} elsif (fmgc.flightPlanController.flightplans[me.computer].departure != nil and left(me.wp.wp_name, 4) == fmgc.flightPlanController.flightplans[me.computer].departure.id) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(0, me.wp, me.index, me.computer);
} else {
canvas_mcdu.myLatRev[me.computer] = latRev.new(3, me.wp, me.index, me.computer);
}
} else {
if (me.index == fmgc.flightPlanController.arrivalIndex[2]) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(1, me.wp, me.index, me.computer);
} elsif (left(me.wp.wp_name, 4) == fmgc.flightPlanController.flightplans[2].departure.id) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(0, me.wp, me.index, me.computer);
} elsif (me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
if (me.wp.wp_name == "PPOS" or me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(2, me.wp, me.index, me.computer);
} elsif (me.index == fmgc.flightPlanController.arrivalIndex[2]) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(1, me.wp, me.index, me.computer);
} elsif (fmgc.flightPlanController.flightplans[2].departure != nil and left(me.wp.wp_name, 4) == fmgc.flightPlanController.flightplans[2].departure.id) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(0, me.wp, me.index, me.computer);
} else {
canvas_mcdu.myLatRev[me.computer] = latRev.new(3, me.wp, me.index, me.computer);
}
@ -190,22 +190,22 @@ var fplnItem = {
canvas_mcdu.myVertRev[me.computer] = nil;
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (me.index == fmgc.flightPlanController.arrivalIndex[me.computer]) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(1, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} if (left(me.wp.wp_name, 4) == fmgc.flightPlanController.flightplans[me.computer].departure.id) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(0, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} elsif (me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
if (me.wp.wp_name == "PPOS" or me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(3, me.wp.wp_name, me.index, me.computer, me.wp, me.plan);
} elsif (me.index == fmgc.flightPlanController.arrivalIndex[me.computer]) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(1, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} if (fmgc.flightPlanController.flightplans[me.computer].departure != nil and left(me.wp.wp_name, 4) == fmgc.flightPlanController.flightplans[me.computer].departure.id) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(0, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} else {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(2, me.wp.wp_name, me.index, me.computer, me.wp, me.plan);
}
} else {
if (me.index == fmgc.flightPlanController.arrivalIndex[2]) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(1, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} elsif (left(me.wp.wp_name, 4) == fmgc.flightPlanController.flightplans[2].departure.id) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(0, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} elsif (me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
if (me.wp.wp_name == "PPOS" or me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(3, me.wp.wp_name, me.index, me.computer, me.wp, me.plan);
} elsif (me.index == fmgc.flightPlanController.arrivalIndex[2]) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(1, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} elsif (fmgc.flightPlanController.flightplans[2].departure != nil and left(me.wp.wp_name, 4) == fmgc.flightPlanController.flightplans[2].departure.id) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(0, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} else {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(2, me.wp.wp_name, me.index, me.computer, me.wp, me.plan);
}
@ -290,8 +290,32 @@ var staticText = {
},
};
var pseudoItem = {
new: func(computer, text) {
var pI = {parents:[pseudoItem]};
pI.computer = computer;
pI.text = text;
pI.colour = colour;
return pI;
},
updateLeftText: func() {
return [me.text, nil, me.colour];
},
updateCenterText: func() {
return ["----", nil, "wht"];
},
updateRightText: func() {
return ["---/------", " --NM ", "wht"];
},
pushButtonLeft: func() {
mcdu_message(me.computer, "NOT ALLOWED");
},
pushButtonRight: func() {
mcdu_message(me.computer, "NOT ALLOWED");
},
};
var fplnPage = { # this one is only created once, and then updated - remember this
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
L1: [nil, nil, "ack"], # content, title, colour
L2: [nil, nil, "ack"],
L3: [nil, nil, "ack"],
@ -347,6 +371,8 @@ var fplnPage = { # this one is only created once, and then updated - remember th
return "----END OF ALTN F-PLN---";
} else if (type == "noAltnFpln") {
return "------NO ALTN F-PLN-----";
} else if (type == "decel") {
return "(DECEL)";
} else if (type == "empty") {
return "";
}
@ -509,9 +535,18 @@ var fplnPage = { # this one is only created once, and then updated - remember th
setprop("MCDU[" ~ me.computer ~ "]/page", "LATREV");
}
} else {
if (size(me.outputList) >= index) {
if ((index - 1 + me.scroll) < size(me.planList) and !mcdu_scratchpad.scratchpads[me.computer].showTypeIMsg and !mcdu_scratchpad.scratchpads[me.computer].showTypeIIMsg) {
if (size(mcdu_scratchpad.scratchpads[me.computer].scratchpad) > 0) {
var returny = fmgc.flightPlanController.scratchpad(mcdu_scratchpad.scratchpads[me.computer].scratchpad, (index - 1 + me.scroll), me.computer);
# Use outputList.index to correct the index the call goes to after sequencing
if (mcdu_scratchpad.scratchpads[me.computer].scratchpad == "CLR") {
if (me.outputList[index - 1].wp.wp_name == "(DECEL)") {
mcdu_message(me.computer, "NOT ALLOWED");
return;
}
}
var returny = fmgc.flightPlanController.scratchpad(mcdu_scratchpad.scratchpads[me.computer].scratchpad, me.outputList[index - 1].index, me.computer);
if (returny == 3) {
mcdu_message(me.computer, "DIR TO IN PROGRESS");
} elsif (returny == 0) {

View file

@ -196,4 +196,4 @@ var engine_one_chk_OOOI = setlistener("/engines/engine[0]/state", func {
removelistener(engine_one_chk_OOOI);
waitingOOOIChange.start();
}
},0,0);
},0,0);

View file

@ -169,6 +169,7 @@ var fuelPredInput = func(key, i) {
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
} else if (find("/", scratchpad) != -1) {
if (acconfig_weight_kgs.getValue() == 1) {
scratchpad = scratchpad / LBS2KGS;
@ -199,6 +200,7 @@ var fuelPredInput = func(key, i) {
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
} else {
mcdu_message(i, "ENTRY OUT OF RANGE");
}
@ -235,6 +237,7 @@ var fuelPredInput = func(key, i) {
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
} else {
mcdu_message(i, "ENTRY OUT OF RANGE");
}

View file

@ -1,7 +1,6 @@
var holdPage = {
title: [nil, nil, nil],
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -41,37 +40,35 @@ var holdPage = {
me.title = ["HOLD", " AT ", me.waypoint.wp_name];
me.titleColour = "wht";
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [1, 1, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["wht", "wht", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["blu", "blu", "ack", "ack", "ack", "ack"]];
if (me.waypoint.fly_type == "Hold") {
me.makeTmpy();
me.L1 = [" " ~ sprintf("%03.0f", me.waypoint.hold_inbound_radial), "INB CRS", "blu"];
me.fontMatrix[0][0] = 0;
me.L1 = [sprintf("%03.0f°", me.waypoint.hold_inbound_radial), "INB CRS", "blu"];
if (me.waypoint.hold_is_left_handed) {
me.L2 = [" L", " TURN", "blu"];
me.L2 = ["L", " TURN", "blu"];
} else {
me.L2 = [" R", " TURN", "blu"];
me.L2 = ["R", " TURN", "blu"];
}
if (me.waypoint.hold_is_distance) {
me.L2 = [" -.-/" ~ me.waypoint.hold_time_or_distance, "TIME/DIST", "blu"];
me.L3 = [" -.-/" ~ me.waypoint.hold_time_or_distance, "TIME/DIST", "blu"];
} else {
me.L2 = [" " ~ sprintf("%3.1f", (me.waypoint.hold_time_or_distance / 60)) ~ "/----", "TIME/DIST", "blu"];
me.L3 = [sprintf("%3.1f", (me.waypoint.hold_time_or_distance / 60)) ~ "/----", "TIME/DIST", "blu"];
}
me.R1 = ["COMPUTED ", nil, "wht"];
me.R1 = ["COMPUTED ", nil, "blu"];
me.R2 = ["DATABASE ", nil, "yel"];
me.arrowsMatrix[1][1] = 0;
} else {
me.L1 = [" 100", "INB CRS", "blu"];
me.L2 = [" R", " TURN", "blu"];
me.L1 = ["100°", "INB CRS", "blu"];
me.L2 = ["R", " TURN", "blu"];
if (pts.Instrumentation.Altimeter.indicatedFt.getValue() >= 14000) {
me.L2 = [" 1.5/----", "TIME/DIST", "blu"];
me.L3 = ["1.5/----", "TIME/DIST", "blu"];
} else {
me.L2 = [" 1.0/----", "TIME/DIST", "blu"];
me.L3 = ["1.0/----", "TIME/DIST", "blu"];
}
me.R1 = ["COMPUTED ", nil, "wht"];
me.R2 = ["DATABASE ", nil, "wht"];
me.R1 = ["COMPUTED ", nil, "blu"];
me.R2 = ["DATABASE ", nil, "blu"];
}
me.L6 = [" RETURN", nil, "wht"];
me.C4 = ["LAST EXIT", nil, "wht"];
@ -87,6 +84,7 @@ var holdPage = {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
me.L1[2] = "yel";
me.L2[2] = "yel";
me.L3[2] = "yel";
me.L6 = [" F-PLN", " TMPY", "yel"];
me.R6 = ["INSERT ", " TMPY", "yel"];
me.arrowsColour[0][5] = "yel";
@ -95,6 +93,7 @@ var holdPage = {
} else {
me.L1[2] = "blu";
me.L2[2] = "blu";
me.L3[2] = "blu";
me.L6 = [" RETURN", nil, "wht"];
me.R6 = [nil, nil, "ack"];
me.arrowsColour[0][5] = "wht";

View file

@ -3,6 +3,29 @@
# Copyright (c) 2020 Josh Davidson (Octal450)
# Copyright (c) 2020 Matthew Maring (mattmaring)
var resetFlightplan = func(i) {
fmgc.FMGCInternal.depApt = "";
fmgc.FMGCInternal.arrApt = "";
fmgc.FMGCInternal.toFromSet = 0;
fmgc.FMGCNodes.toFromSet.setValue(0);
fmgc.windController.resetDesWinds();
setprop("/FMGC/internal/align-ref-lat", 0);
setprop("/FMGC/internal/align-ref-long", 0);
setprop("/FMGC/internal/align-ref-lat-edit", 0);
setprop("/FMGC/internal/align-ref-long-edit", 0);
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
fmgc.flightPlanController.reset(2);
fmgc.flightPlanController.init();
Simbrief.SimbriefParser.inhibit = 0;
fmgc.updateARPT();
mcdu_scratchpad.scratchpads[i].empty();
}
var initInputA = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1") { #clear coRoute if set
@ -222,26 +245,7 @@ var initInputA = func(key, i) {
mcdu_message(i, "NOT ALLOWED");
}
else if (scratchpad == "CLR") {
fmgc.FMGCInternal.depApt = "";
fmgc.FMGCInternal.arrApt = "";
fmgc.FMGCInternal.toFromSet = 0;
fmgc.FMGCNodes.toFromSet.setValue(0);
fmgc.windController.resetDesWinds();
setprop("/FMGC/internal/align-ref-lat", 0);
setprop("/FMGC/internal/align-ref-long", 0);
setprop("/FMGC/internal/align-ref-lat-edit", 0);
setprop("/FMGC/internal/align-ref-long-edit", 0);
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
fmgc.flightPlanController.reset(2);
fmgc.flightPlanController.init();
Simbrief.SimbriefParser.inhibit = 0;
fmgc.updateARPT();
mcdu_scratchpad.scratchpads[i].empty();
resetFlightplan(i);
#} else if (scratchpad == "") {
#fmgc.FMGCInternal.altSelected = 0;
#setprop("MCDU[" ~ i ~ "]/page", "ROUTESELECTION");
@ -253,18 +257,15 @@ var initInputA = func(key, i) {
var froms = size(fromto[0]);
var tos = size(fromto[1]);
if (froms == 4 and tos == 4) {
#route
if (fmgc.FMGCInternal.toFromSet == 1 and fmgc.FMGCInternal.arrApt != fromto[1]) {
fmgc.windController.resetDesWinds();
}
resetFlightplan(i);
fmgc.FMGCInternal.depApt = fromto[0];
fmgc.FMGCInternal.arrApt = fromto[1];
atsu.ATISInstances[0].newStation(fromto[0]);
atsu.ATISInstances[1].newStation(fromto[1]);
fmgc.FMGCInternal.toFromSet = 1;
fmgc.FMGCNodes.toFromSet.setValue(1);
#scratchpad
mcdu_scratchpad.scratchpads[i].empty();
fmgc.flightPlanController.updateAirports(fromto[0], fromto[1], 2);
fmgc.FMGCInternal.altSelected = 0;
fmgc.updateARPT();

View file

@ -207,6 +207,7 @@ var initInputB = func(key, i) {
fmgc.blockCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
} else if (find("/", scratchpad) != -1) {
if (acconfig_weight_kgs.getValue() == 1) {
scratchpad = scratchpad / LBS2KGS;
@ -238,6 +239,7 @@ var initInputB = func(key, i) {
fmgc.blockCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
} else {
mcdu_message(i, "ENTRY OUT OF RANGE");
}
@ -275,6 +277,7 @@ var initInputB = func(key, i) {
fmgc.blockCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
} else {
mcdu_message(i, "ENTRY OUT OF RANGE");
}

View file

@ -2,7 +2,6 @@ var latRev = {
title: [nil, nil, nil],
titleColour: "wht",
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -48,22 +47,22 @@ var latRev = {
_setupPageWithData: func() {
if (me.type == 2) {
me.title = ["LAT REV", " FROM ", "PPOS"];
var acPos = geo.aircraft_position();
me.subtitle = [dmsToString(sprintf(acPos.lat()), "lat"), dmsToString(sprintf(acPos.lon()), "lon")];
me.L2 = [" OFFSET", nil, "wht"];
me.L3 = [" HOLD", nil, "wht"];
me.L6 = [" RETURN", nil, "wht"];
me.R1 = ["FIX INFO ", nil, "wht"];
me.R2 = ["[ ]°/[ ]°/[ ]", "LL XING/INCR/NO", "blu"];
me.R2 = ["[ ]°/[]°/[]", "LL XING/INCR/NO", "blu"];
me.arrowsMatrix = [[0, 1, 1, 0, 0, 1], [1, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "wht", "wht", "ack", "ack", "wht"], ["wht", "ack", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0]];
} elsif (me.type == 4) {
me.title = ["LAT REV", " FROM ", "DISCON"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.R4 = ["[ ]", "NEW DEST", "blu"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.R4 = ["[ ]", "NEW DEST ", "blu"];
me.L6 = [" RETURN", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0]];
} else {
if (me.type == 0) {
me.title = ["LAT REV", " FROM ", left(me.wpt.wp_name, 4)];
@ -72,17 +71,18 @@ var latRev = {
} else {
me.depAirport = findAirportsByICAO(me.wpt.wp_name);
}
me.subtitle = [dmsToString(sprintf(me.depAirport[0].lat), "lat"), dmsToString(sprintf(me.depAirport[0].lon), "lon")];
if (size(me.depAirport) > 0) {
me.subtitle = [dmsToString(sprintf(me.depAirport[0].lat), "lat"), dmsToString(sprintf(me.depAirport[0].lon), "lon")];
}
me.L1 = [" DEPARTURE", nil, "wht"];
me.L2 = [" OFFSET", nil, "wht"];
me.L6 = [" RETURN", nil, "wht"];
me.R1 = ["FIX INFO ", nil, "wht"];
me.R2 = ["[ ]°/[ ]°/[ ]", "LL XING/INCR/NO", "blu"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.R4 = ["[ ]", "NEW DEST", "blu"];
me.R2 = ["[ ]°/[]°/[]", "LL XING/INCR/NO", "blu"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.R4 = ["[ ]", "NEW DEST ", "blu"];
me.arrowsMatrix = [[1, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0]];
me.arrowsColour = [["wht", "wht", "ack", "ack", "ack", "wht"], ["wht", "ack", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0]];
} elsif (me.type == 1) {
me.title = ["LAT REV", " FROM ", left(me.wpt.wp_name, 4)];
me.arrowsMatrix = [[0, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0]];
@ -92,7 +92,9 @@ var latRev = {
} else {
me.arrAirport = findAirportsByICAO(me.wpt.wp_name);
}
me.subtitle = [dmsToString(sprintf(me.arrAirport[0].lat), "lat"), dmsToString(sprintf(me.arrAirport[0].lon), "lon")];
if (size(me.arrAirport) > 0) {
me.subtitle = [dmsToString(sprintf(me.arrAirport[0].lat), "lat"), dmsToString(sprintf(me.arrAirport[0].lon), "lon")];
}
me.L3 = [" ALTN", nil, "wht"];
if (fmgc.FMGCInternal.altAirportSet) {
me.L4 = [" ALTN", " ENABLE", "blu"];
@ -102,8 +104,7 @@ var latRev = {
}
me.L6 = [" RETURN", nil, "wht"];
me.R1 = ["ARRIVAL ", nil, "wht"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0]];
me.R3 = ["[ ]", "NEXT WPT ", "blu"];
} elsif (me.type == 3) {
me.title = ["LAT REV", " FROM ", me.wpt.wp_name];
me.arrowsMatrix = [[0, 0, 1, 1, 0, 1], [1, 0, 0, 0, 1, 0]];
@ -121,10 +122,9 @@ var latRev = {
}
me.L6 = [" RETURN", nil, "wht"];
me.R1 = ["FIX INFO ", nil, "wht"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.R4 = ["[ ]", "NEW DEST", "blu"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.R4 = ["[ ]", "NEW DEST ", "blu"];
me.R5 = ["AIRWAYS ", nil, "wht"];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0]];
}
}
},
@ -164,7 +164,7 @@ var dmsToString = func(dms, type) {
} else {
var sign = degrees >= 0 ? "E" : "W";
}
return abs(degrees) ~ "g" ~ minutes ~ " " ~ sign;
return abs(degrees) ~ "°" ~ minutes ~ sign;
}

View file

@ -153,12 +153,11 @@ var MCDU_reset = func(i) {
fmgc.FMGCInternal.vrset = 0;
fmgc.FMGCInternal.v2 = 0;
fmgc.FMGCInternal.v2set = 0;
setprop("/FMGC/internal/accel-agl-ft", 1500); #eventually set to 1500 above runway
setprop("/MCDUC/thracc-set", 0);
setprop("/FMGC/internal/to-flap", 0);
setprop("/FMGC/internal/to-ths", "0.0");
setprop("/FMGC/internal/flap-ths-set", 0);
fmgc.FMGCInternal.toFlap = 0;
fmgc.FMGCInternal.toThs = 0.0;
fmgc.FMGCInternal.toFlapThsSet = 0;
setprop("/FMGC/internal/flex", 0);
setprop("/FMGC/internal/flex-set", 0);
setprop("/FMGC/internal/eng-out-reduc", "1500");
@ -524,7 +523,7 @@ var lskbutton = func(btn, i) {
} else if (page == "PERFAPPR") {
perfAPPRInput("L3",i);
} else if (page == "STATUS") {
statusInput("L3",i);
fmgc.switchDatabase();
} else if (page == "RADNAV") {
radnavInput("L3",i);
} else if (page == "DATA") {
@ -788,7 +787,6 @@ var lskbutton = func(btn, i) {
canvas_mcdu.myDuplicate[i].pushButtonLeft(5);
} else if (page == "CLOSESTAIRPORT") {
canvas_mcdu.myClosestAirport[i].manAirportCall(mcdu_scratchpad.scratchpads[i].scratchpad);
mcdu_scratchpad.scratchpads[i].empty();
} else if (page == "ATCMENU") {
pageNode[i].setValue("NOTIFICATION");
} else if (page == "FLTLOG") {
@ -1173,7 +1171,16 @@ var rskbutton = func(btn, i) {
}
pageNode[i].setValue("WINDDES");
} else if (page == "STATUS") {
statusInput("R5",i);
if (fmgc.WaypointDatabase.getCount() >= 1) {
if (fmgc.WaypointDatabase.confirm[i]) {
fmgc.WaypointDatabase.delete(i);
fmgc.WaypointDatabase.confirm[i] = 0;
} else {
fmgc.WaypointDatabase.confirm[i] = 1;
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (page == "PERFTO") {
perfTOInput("R5",i);
} else if (page == "PERFAPPR") {
@ -1524,17 +1531,25 @@ var button = func(btn, i, event = "") {
} else { # up with buttonCLRDown[i]>4
buttonCLRDown[i] = 0;
}
} else if (btn == "LONGCLR") {
mcdu_scratchpad.scratchpads[i].empty();
} else if (btn == "DOT") {
mcdu_scratchpad.scratchpads[i].addChar(".");
} else if (btn == "PLUSMINUS") {
if (right(mcdu_scratchpad.scratchpads[i].scratchpad, 1) == "-") {
var _toggle = right(scratchpad,1);
if (_toggle == "+" or _toggle == "-") {
_toggle = (_toggle == "-") ? "+" : "-";
mcdu_scratchpad.scratchpads[i].clear();
mcdu_scratchpad.scratchpads[i].addChar("+");
mcdu_scratchpad.scratchpads[i].addChar(_toggle);
} else {
mcdu_scratchpad.scratchpads[i].addChar("-");
}
} else if (btn == "OVFY") {
mcdu_scratchpad.scratchpads[i].addChar("@");
if (size(scratchpad) == 0) {
mcdu_scratchpad.scratchpads[i].addChar("@");
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_scratchpad.scratchpads[i].addChar(btn);
}

View file

@ -38,7 +38,7 @@ var perfCLBInput = func(key, i) {
if (getprop("/FMGC/internal/activate-twice") == 0) {
setprop("/FMGC/internal/activate-twice", 1);
fmgc.FMGCInternal.phase = 5;
setprop("/FMGC/internal/decel", 1);
fmgc.FMGCInternal.decel = 1;
setprop("MCDU[" ~ i ~ "]/page", "PERFAPPR");
} else {
mcdu_message(i, "NOT ALLOWED");

View file

@ -32,7 +32,7 @@ var perfCRZInput = func(key, i) {
if (getprop("/FMGC/internal/activate-twice") == 0) {
setprop("/FMGC/internal/activate-twice", 1);
fmgc.FMGCInternal.phase = 5;
setprop("/FMGC/internal/decel", 1);
fmgc.FMGCInternal.decel = 1;
setprop("MCDU[" ~ i ~ "]/page", "PERFAPPR");
} else {
mcdu_message(i, "NOT ALLOWED");

View file

@ -32,7 +32,7 @@ var perfDESInput = func(key, i) {
if (getprop("/FMGC/internal/activate-twice") == 0) {
setprop("/FMGC/internal/activate-twice", 1);
fmgc.FMGCInternal.phase = 5;
setprop("/FMGC/internal/decel", 1);
fmgc.FMGCInternal.decel = 1;
setprop("MCDU[" ~ i ~ "]/page", "PERFAPPR");
} else {
mcdu_message(i, "NOT ALLOWED");

View file

@ -3,19 +3,55 @@
# Copyright (c) 2020 Josh Davidson (Octal450)
# Copyright (c) 2020 Matthew Maring (mattmaring)
# VMCA 109.5 at 0ft
# VMCG 106.5 at 0ft all conf
var standard_VMCA = 109.5; # TODO calculate VMCA/VMCG on altitude (ft) of departure airport (read below)
var standard_VMCG = 106.5;
# TODO - DepArp elevation or current elevation (on ground only!!) -> math.round(fmgc.flightPlanController.flightplans[2].departure.elevation * M2FT))
var perfTOCheckVSpeeds = func(i) {
if (fmgc.FMGCInternal.v1set == 1 and fmgc.FMGCInternal.vrset == 1 and fmgc.FMGCInternal.v2set == 1) { # only when v1/vr/v2 all sets
if (fmgc.FMGCInternal.v1>fmgc.FMGCInternal.vr or fmgc.FMGCInternal.vr > fmgc.FMGCInternal.v2) mcdu_messageTypeII(i,"V1/VR/V2 DISAGREE");
else if (fmgc.FMGCInternal.v1<standard_VMCG or fmgc.FMGCInternal.vr<(standard_VMCA*1.05) or fmgc.FMGCInternal.v2<(standard_VMCA*1.10)) mcdu_messageTypeII(i,"TO SPEED TOO LOW");
#else if (Vr<KVr*VS1G or V2<KV2*VS1G) mcdu_messageTypeII(i,"TO SPEED TOO LOW"); #TODO - check to VS1G and look constant KVr KV2 on manual, not own by me :/
var doneMessageCheck = 0;
var perfToCheckTakeoffData = func(i) {
if (fmgc.FMGCInternal.v1set and fmgc.FMGCInternal.vrset and fmgc.FMGCInternal.v2set) {
if (doneMessageCheck) {
mcdu_scratchpad.messageQueues[i].deleteWithText("CHECK TAKE OFF DATA");
}
mcdu_scratchpad.messageQueues[i].addNewMsg(mcdu_scratchpad.MessageController.getTypeIIMsgByText("CHECK TAKE OFF DATA"));
doneMessageCheck = 1;
}
}
var doneMessageDisag = 0;
var perfTOCheckVSpeedsConsistency = func(i) {
if (fmgc.FMGCInternal.v1set and fmgc.FMGCInternal.vrset and fmgc.FMGCInternal.v2set) {
if (!(fmgc.FMGCInternal.v1 <= fmgc.FMGCInternal.vr and fmgc.FMGCInternal.vr <= fmgc.FMGCInternal.v2)) {
if (doneMessageDisag) {
mcdu_scratchpad.messageQueues[i].deleteWithText("V1/VR/V2 DISAGREE");
}
mcdu_scratchpad.messageQueues[i].addNewMsg(mcdu_scratchpad.MessageController.getTypeIIMsgByText("V1/VR/V2 DISAGREE"));
doneMessageDisag = 1;
}
}
}
var VMCA = props.globals.getNode("/FMGC/internal/vmca-kt");
var VMCG = props.globals.getNode("/FMGC/internal/vmcg-kt");
var chooseVS1G = func() {
if (fmgc.FMGCInternal.toFlap == 1) {
return fmgc.FMGCInternal.vs1g_conf_1f;
} elsif (fmgc.FMGCInternal.toFlap == 2) {
return fmgc.FMGCInternal.vs1g_conf_2;
} elsif (fmgc.FMGCInternal.toFlap == 3) {
return fmgc.FMGCInternal.vs1g_conf_3;
}
};
var doneMessageToLow = 0;
var perfTOCheckVSpeedsLimitations = func(i) {
if (fmgc.FMGCInternal.toFlapThsSet and fmgc.FMGCInternal.zfwSet and fmgc.FMGCInternal.blockSet and fmgc.FMGCInternal.v1set and fmgc.FMGCInternal.vrset and fmgc.FMGCInternal.v2set) {
if (fmgc.FMGCInternal.v1 < VMCG.getValue() or fmgc.FMGCInternal.vr < (VMCA.getValue() * 1.05) or fmgc.FMGCInternal.v2 < (VMCA.getValue() * 1.10) or fmgc.FMGCInternal.v2 < (1.13 * chooseVS1G())) {
if (doneMessageToLow) {
mcdu_scratchpad.messageQueues[i].deleteWithText("T.O SPEEDS TOO LOW");
}
mcdu_scratchpad.messageQueues[i].addNewMsg(mcdu_scratchpad.MessageController.getTypeIIMsgByText("T.O SPEEDS TOO LOW"));
doneMessageToLow = 1;
}
}
}
@ -42,7 +78,8 @@ var perfTOInput = func(key, i) {
fmgc.FMGCNodes.v1set.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeeds(i); # do V-speeds validation
perfTOCheckVSpeedsConsistency(i);
perfTOCheckVSpeedsLimitations(i);
} else {
mcdu_message(i, "NOT ALLOWED");
}
@ -63,7 +100,8 @@ var perfTOInput = func(key, i) {
fmgc.FMGCInternal.vrset = 1;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeeds(i); # do V-speeds validation
perfTOCheckVSpeedsConsistency(i);
perfTOCheckVSpeedsLimitations(i);
} else {
mcdu_message(i, "NOT ALLOWED");
}
@ -87,7 +125,8 @@ var perfTOInput = func(key, i) {
setprop("/it-autoflight/settings/togaspd", scratchpad);
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeeds(i); # do V-speeds validation
perfTOCheckVSpeedsConsistency(i);
perfTOCheckVSpeedsLimitations(i);
} else {
mcdu_message(i, "NOT ALLOWED");
}
@ -152,9 +191,9 @@ var perfTOInput = func(key, i) {
}
} else if (key == "R3" and modifiable) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/to-flap", 0);
setprop("/FMGC/internal/to-ths", "0.0");
setprop("/FMGC/internal/flap-ths-set", 0);
fmgc.FMGCInternal.toFlap = 0;
fmgc.FMGCInternal.toThs = 0;
fmgc.FMGCInternal.toFlapThsSet = 0;
mcdu_scratchpad.scratchpads[i].empty();
} else {
if (find("/", scratchpad) != -1) {
@ -165,45 +204,71 @@ var perfTOInput = func(key, i) {
var trims = size(trim);
var trima = substr(trim, 2);
var trimb = substr(trim, 0, 3);
var validtrima = num(trima) != nil and num(trima) >= 0 and num(trima) <= 7.0;
var validtrimb = num(trimb) != nil and num(trimb) >= 0 and num(trimb) <= 7.0;
if (flaps == 0 and getprop("/FMGC/internal/flap-ths-set")) {
if (flaps == 0 and fmgc.FMGCInternal.toFlapThsSet) {
if (trims == 5 and find("DN", trim) != -1 and validtrima) {
setprop("/FMGC/internal/to-ths", -1 * trima);
fmgc.FMGCInternal.toThs = -1 * trima;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
perfToCheckTakeoffData(i);
} else if (trims == 5 and find("DN", trim) != -1 and validtrimb) {
setprop("/FMGC/internal/to-ths", -1 * trimb);
fmgc.FMGCInternal.toThs = -1 * trimb;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
perfToCheckTakeoffData(i);
} else if (trims == 5 and find("UP", trim) != -1 and validtrima) {
setprop("/FMGC/internal/to-ths", trima);
fmgc.FMGCInternal.toThs = trima;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
perfToCheckTakeoffData(i);
} else if (trims == 5 and find("UP", trim) != -1 and validtrimb) {
setprop("/FMGC/internal/to-ths", trimb);
fmgc.FMGCInternal.toThs = trimb;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
perfToCheckTakeoffData(i);
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (flaps == 1 and num(flap) != nil and flap >= 0 and flap <= 3) {
if (trims == 5 and find("DN", trim) != -1 and validtrima) {
setprop("/FMGC/internal/to-flap", flap);
setprop("/FMGC/internal/to-ths", -1 * trima);
setprop("/FMGC/internal/flap-ths-set", 1);
fmgc.FMGCInternal.toFlap = flap;
fmgc.FMGCInternal.toThs = -1 * trima;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
if (fmgc.FMGCInternal.toFlapThsSet) {
perfToCheckTakeoffData(i);
}
fmgc.FMGCInternal.toFlapThsSet = 1;
} else if (trims == 5 and find("DN", trim) != -1 and validtrimb) {
setprop("/FMGC/internal/to-flap", flap);
setprop("/FMGC/internal/to-ths", -1 * trimb);
setprop("/FMGC/internal/flap-ths-set", 1);
fmgc.FMGCInternal.toFlap = flap;
fmgc.FMGCInternal.toThs = -1 * trimb;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
if (fmgc.FMGCInternal.toFlapThsSet) {
perfToCheckTakeoffData(i);
}
fmgc.FMGCInternal.toFlapThsSet = 1;
} else if (trims == 5 and find("UP", trim) != -1 and validtrima) {
setprop("/FMGC/internal/to-flap", flap);
setprop("/FMGC/internal/to-ths", trima);
setprop("/FMGC/internal/flap-ths-set", 1);
fmgc.FMGCInternal.toFlap = flap;
fmgc.FMGCInternal.toThs = trima;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
if (fmgc.FMGCInternal.toFlapThsSet) {
perfToCheckTakeoffData(i);
}
fmgc.FMGCInternal.toFlapThsSet = 1;
} else if (trims == 5 and find("UP", trim) != -1 and validtrimb) {
setprop("/FMGC/internal/to-flap", flap);
setprop("/FMGC/internal/to-ths", trimb);
setprop("/FMGC/internal/flap-ths-set", 1);
fmgc.FMGCInternal.toFlap = flap;
fmgc.FMGCInternal.toThs = trimb;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
if (fmgc.FMGCInternal.toFlapThsSet) {
perfToCheckTakeoffData(i);
}
fmgc.FMGCInternal.toFlapThsSet = 1;
} else {
mcdu_message(i, "NOT ALLOWED");
}
@ -211,11 +276,13 @@ var perfTOInput = func(key, i) {
mcdu_message(i, "NOT ALLOWED");
}
} else if (size(scratchpad) == 1 and num(scratchpad) != nil and scratchpad >= 0 and scratchpad <= 3) {
setprop("/FMGC/internal/to-flap", scratchpad);
if (!getprop("/FMGC/internal/flap-ths-set")) {
setprop("/FMGC/internal/flap-ths-set", 1);
}
fmgc.FMGCInternal.toFlap = scratchpad;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
if (fmgc.FMGCInternal.toFlapThsSet) {
perfToCheckTakeoffData(i);
}
fmgc.FMGCInternal.toFlapThsSet = 1;
} else {
mcdu_message(i, "NOT ALLOWED");
}
@ -233,6 +300,8 @@ var perfTOInput = func(key, i) {
setprop("/FMGC/internal/flex-set", 1);
var flex_calc = getprop("/FMGC/internal/flex") - getprop("environment/temperature-degc");
setprop("/FMGC/internal/flex-cmd", flex_calc);
perfTOCheckVSpeedsLimitations(i);
perfToCheckTakeoffData(i);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");

View file

@ -1,6 +1,5 @@
var pilotWaypointPage = {
title: nil,
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour

View file

@ -52,7 +52,7 @@ var progCLBInput = func(key, i) {
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
fmgc.FMGCInternal.decel = 0;
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
@ -66,7 +66,7 @@ var progCLBInput = func(key, i) {
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
fmgc.FMGCInternal.decel = 0;
}
} else {
mcdu_message(i, "NOT ALLOWED");
@ -88,7 +88,7 @@ var progCRZInput = func(key, i) {
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
fmgc.FMGCInternal.decel = 0;
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
@ -102,7 +102,7 @@ var progCRZInput = func(key, i) {
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
fmgc.FMGCInternal.decel = 0;
}
} else {
mcdu_message(i, "NOT ALLOWED");
@ -124,7 +124,7 @@ var progDESInput = func(key, i) {
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
fmgc.FMGCInternal.decel = 0;
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
@ -138,7 +138,7 @@ var progDESInput = func(key, i) {
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
fmgc.FMGCInternal.decel = 0;
}
} else {
mcdu_message(i, "NOT ALLOWED");

View file

@ -1,6 +1,5 @@
var receivedMessagesPage = {
title: nil,
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -63,7 +62,6 @@ var receivedMessagesPage = {
me.L6 = [" RETURN", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["blu", "blu", "blu", "blu", "blu", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
update: func() {
@ -155,8 +153,6 @@ var receivedMessagesPage = {
var receivedMessagePage = {
title: nil,
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
L2: [nil, nil, "ack"],
@ -229,7 +225,6 @@ var receivedMessagePage = {
me.L6 = [" RETURN", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["blu", "blu", "blu", "blu", "blu", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
update: func() {

View file

@ -1,16 +0,0 @@
# A3XX mCDU by Joshua Davidson (Octal450), Jonathan Redpath, and Matthew Maring (mattmaring)
# Copyright (c) 2020 Josh Davidson (Octal450)
var statusInput = func(key, i) {
if (key == "L3") {
fmgc.switchDatabase();
} elsif (key == "R5") {
if (fmgc.WaypointDatabase.confirm[i]) {
fmgc.WaypointDatabase.delete(i);
fmgc.WaypointDatabase.confirm[i] = 0;
} else {
fmgc.WaypointDatabase.confirm[i] = 1;
}
}
}

View file

@ -4,7 +4,6 @@ var scratchpadSplit = nil;
var vertRev = {
title: [nil, nil, nil],
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -85,20 +84,16 @@ var vertRev = {
me.R2 = ["RTA ", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 1, 1, 1], [0, 1, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "wht", "wht", "wht"], ["ack", "wht", "ack", "ack", "wht", "wht"]];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
} elsif (me.type == 2) {
me.title = ["VERT REV", " AT ", me.id];
me.fontMatrix = [[0, 0, 1, 0, 0, 0], [0, 0, 1, 0, 0, 0]];
me.L1 = ["", " EFOB ---.-", "wht"];
me.R1 = ["", "EXTRA ---.- ", "wht"];
me.L2 = [fmgc.FMGCInternal.clbSpdLim ~ "/" ~ fmgc.FMGCInternal.clbSpdLimAlt, " CLB SPD LIM", "mag"];
me.speed = me.getSpd();
if (me.speed[0] == nil) {
me.L3 = [" [ ]", " SPD CSTR", "blu"];
me.fontMatrix[0][2] = 1;
me.L3 = ["[ ]", " SPD CSTR", "blu"];
} else {
me.L3 = [me.speed[0], " SPD CSTR", me.speed[1]];
me.fontMatrix[0][2] = 0;
}
me.L4 = [" CONSTANT MACH", nil, "wht"];
me.L5 = [" WIND DATA", nil, "wht"];
@ -106,11 +101,9 @@ var vertRev = {
me.R2 = ["RTA ", nil, "wht"];
me.alt = me.getAlt();
if (me.alt[0] == nil) {
me.R3 = ["[ ] ", "ALT CSTR ", "blu"];
me.fontMatrix[1][2] = 1;
me.R3 = ["[ ]", "ALT CSTR ", "blu"];
} else {
me.R3 = [me.alt[0], "ALT CSTR ", me.alt[1]];
me.fontMatrix[1][2] = 0;
me.R3 = [me.alt[0], "ALT CSTR ", me.alt[1]];
}
me.R6 = ["DES ", nil, "amb"];
# When the system does vertical planning, L6 should be RETURN and R6 not used if the MCDU knows the waypoint is during climb or descent.
@ -138,7 +131,6 @@ var vertRev = {
me.R2 = ["RTA ", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 1, 1, 1], [0, 1, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "wht", "wht", "wht"], ["ack", "wht", "ack", "ack", "wht", "wht"]];
me.fontMatrix = [[0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
} elsif (me.type == 1) {
if (size(me.id) > 4) {
me.arrAirport = findAirportsByICAO(left(me.id, 4));
@ -155,7 +147,6 @@ var vertRev = {
me.R3 = ["3000", "G/S INTCP", "grn"];
me.arrowsMatrix = [[0, 0, 0, 1, 1, 1], [0, 1, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "wht", "wht", "wht"], ["ack", "wht", "ack", "ack", "wht", "wht"]];
me.fontMatrix = [[0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
}
}
me.updateR5();

View file

@ -5,7 +5,6 @@
var windCLBPage = {
title: nil,
titleColour: "wht",
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -46,7 +45,6 @@ var windCLBPage = {
me.titleColour = "wht";
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 1, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "ack"], ["wht", "ack", "ack", "ack", "wht", "ack"]];
me.fontMatrix = [[1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0]];
var computer_temp = 2;
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
@ -69,10 +67,8 @@ var windCLBPage = {
var windStore = fmgc.windController.clb_winds[computer_temp].wind5;
if (windStore.set) {
me.L5 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][4] = 1;
} else {
me.L5 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][4] = 1;
me.L5 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L5 = [nil, nil, "ack"];
@ -82,10 +78,8 @@ var windCLBPage = {
var windStore = fmgc.windController.clb_winds[computer_temp].wind4;
if (windStore.set) {
me.L4 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][3] = 1;
} else {
me.L4 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][3] = 1;
me.L4 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L4 = [nil, nil, "ack"];
@ -95,10 +89,8 @@ var windCLBPage = {
var windStore = fmgc.windController.clb_winds[computer_temp].wind3;
if (windStore.set) {
me.L3 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][2] = 1;
} else {
me.L3 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][2] = 1;
me.L3 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L3 = [nil, nil, "ack"];
@ -108,10 +100,8 @@ var windCLBPage = {
var windStore = fmgc.windController.clb_winds[computer_temp].wind2;
if (windStore.set) {
me.L2 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][1] = 1;
} else {
me.L2 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][1] = 1;
me.L2 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L2 = [nil, nil, "ack"];
@ -120,17 +110,15 @@ var windCLBPage = {
if (me.items >= 1) {
var windStore = fmgc.windController.clb_winds[computer_temp].wind1;
if (windStore.set) {
me.L1 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, "TRU WIND/ALT", "blu"];
me.fontMatrix[0][0] = 1;
me.L1 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, " TRU WIND/ALT", "blu"];
} else {
me.L1 = ["[ ]°/[ ]/[ ]", "TRU WIND/ALT", "blu"];
me.fontMatrix[0][0] = 1;
me.L1 = ["[ ]°/[ ]/[ ]", " TRU WIND/ALT", "blu"];
}
}
me.L6 = [" RETURN", nil, "wht"];
me.R1 = [" HISTORY ", "WIND ", "wht"];
me.R3 = [" REQUEST ", "WIND ", "amb"];
me.R1 = ["WIND ", "HISTORY ", "wht"];
me.R3 = ["REQUEST ", "WIND ", "amb"];
me.R5 = [" PHASE ", "NEXT ", "wht"];
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);

View file

@ -5,7 +5,6 @@
var windCRZPage = {
title: [nil, nil, nil],
titleColour: "wht",
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -60,7 +59,6 @@ var windCRZPage = {
me.titleColour = "wht";
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 1, 1, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "wht", "wht", "ack"]];
me.fontMatrix = [[1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0]];
var computer_temp = 2;
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
@ -96,10 +94,8 @@ var windCRZPage = {
var windStore = fmgc.windController.crz_winds[computer_temp].wind4;
if (windStore.set) {
me.L4 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][3] = 1;
} else {
me.L4 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][3] = 1;
me.L4 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L4 = [nil, nil, "ack"];
@ -109,10 +105,8 @@ var windCRZPage = {
var windStore = fmgc.windController.crz_winds[computer_temp].wind3;
if (windStore.set) {
me.L3 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][2] = 1;
} else {
me.L3 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][2] = 1;
me.L3 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L3 = [nil, nil, "ack"];
@ -122,10 +116,8 @@ var windCRZPage = {
var windStore = fmgc.windController.crz_winds[computer_temp].wind2;
if (windStore.set) {
me.L2 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][1] = 1;
} else {
me.L2 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][1] = 1;
me.L2 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L2 = [nil, nil, "ack"];
@ -134,31 +126,25 @@ var windCRZPage = {
if (me.items >= 1) {
var windStore = fmgc.windController.crz_winds[computer_temp].wind1;
if (windStore.set) {
me.L1 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, "TRU WIND/ALT", "blu"];
me.fontMatrix[0][0] = 1;
me.L1 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, " TRU WIND/ALT", "blu"];
} else {
me.L1 = ["[ ]°/[ ]/[ ]", "TRU WIND/ALT", "blu"];
me.fontMatrix[0][0] = 1;
me.L1 = ["[ ]°/[ ]/[ ]", " TRU WIND/ALT", "blu"];
}
}
var windStore = fmgc.windController.crz_winds[computer_temp].sat1;
if (windStore.set) {
me.L5 = [windStore.temp ~ "/" ~ windStore.altitude, "SAT / ALT", "blu"];
me.fontMatrix[0][4] = 1;
} else {
me.L5 = ["[ ]/[ ]", "SAT / ALT", "blu"];
me.fontMatrix[0][4] = 1;
me.L5 = ["[ ]/[ ]", "SAT / ALT", "blu"];
}
} else {
if (me.items >= 4) {
var windStore = fmgc.windController.winds[computer_temp][me.match_location].wind4;
if (windStore.set) {
me.L4 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][3] = 1;
} else {
me.L4 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][3] = 1;
me.L4 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L4 = [nil, nil, "ack"];
@ -168,10 +154,8 @@ var windCRZPage = {
var windStore = fmgc.windController.winds[computer_temp][me.match_location].wind3;
if (windStore.set) {
me.L3 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][2] = 1;
} else {
me.L3 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][2] = 1;
me.L3 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L3 = [nil, nil, "ack"];
@ -181,10 +165,8 @@ var windCRZPage = {
var windStore = fmgc.windController.winds[computer_temp][me.match_location].wind2;
if (windStore.set) {
me.L2 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][1] = 1;
} else {
me.L2 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][1] = 1;
me.L2 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L2 = [nil, nil, "ack"];
@ -193,21 +175,17 @@ var windCRZPage = {
if (me.items >= 1) {
var windStore = fmgc.windController.winds[computer_temp][me.match_location].wind1;
if (windStore.set) {
me.L1 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, "TRU WIND/ALT", "blu"];
me.fontMatrix[0][0] = 1;
me.L1 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, " TRU WIND/ALT", "blu"];
} else {
me.L1 = ["[ ]°/[ ]/[ ]", "TRU WIND/ALT", "blu"];
me.fontMatrix[0][0] = 1;
me.L1 = ["[ ]°/[ ]/[ ]", " TRU WIND/ALT", "blu"];
}
}
var windStore = fmgc.windController.winds[computer_temp][me.match_location].sat1;
if (windStore.set) {
me.L5 = [windStore.temp ~ "/" ~ windStore.altitude, "SAT / ALT", "blu"];
me.fontMatrix[0][4] = 1;
} else {
me.L5 = ["[ ]/[ ]", "SAT / ALT", "blu"];
me.fontMatrix[0][4] = 1;
me.L5 = ["[ ]/[ ]", "SAT / ALT", "blu"];
}
}

View file

@ -8,7 +8,6 @@ var magVar = nil;
var windDESPage = {
title: nil,
titleColour: "wht",
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -50,7 +49,6 @@ var windDESPage = {
me.titleColour = "wht";
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 1, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "wht", "ack", "ack"]];
me.fontMatrix = [[1, 1, 1, 1, 1, 0], [1, 0, 0, 0, 0, 0]];
var computer_temp = 2;
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
@ -73,10 +71,8 @@ var windDESPage = {
var windStore = fmgc.windController.des_winds[computer_temp].wind5;
if (windStore.set) {
me.L5 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][4] = 1;
} else {
me.L5 = ["[ ]/°[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][4] = 1;
}
} else {
me.L5 = [nil, nil, "ack"];
@ -86,10 +82,8 @@ var windDESPage = {
var windStore = fmgc.windController.des_winds[computer_temp].wind4;
if (windStore.set) {
me.L4 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][3] = 1;
} else {
me.L4 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][3] = 1;
me.L4 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L4 = [nil, nil, "ack"];
@ -99,10 +93,8 @@ var windDESPage = {
var windStore = fmgc.windController.des_winds[computer_temp].wind3;
if (windStore.set) {
me.L3 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][2] = 1;
} else {
me.L3 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][2] = 1;
me.L3 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L3 = [nil, nil, "ack"];
@ -112,10 +104,8 @@ var windDESPage = {
var windStore = fmgc.windController.des_winds[computer_temp].wind2;
if (windStore.set) {
me.L2 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, nil, "blu"];
me.fontMatrix[0][1] = 1;
} else {
me.L2 = ["[ ]°/[ ]/[ ]", nil, "blu"];
me.fontMatrix[0][1] = 1;
me.L2 = ["[ ]°/[ ]/[ ]", nil, "blu"];
}
} else {
me.L2 = [nil, nil, "ack"];
@ -125,10 +115,8 @@ var windDESPage = {
var windStore = fmgc.windController.des_winds[computer_temp].wind1;
if (windStore.set) {
me.L1 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude) ~ "/" ~ windStore.altitude, "TRU WIND/ALT", "blu"];
me.fontMatrix[0][0] = 1;
} else {
me.L1 = ["[ ]°/[ ]/[ ]", "TRU WIND/ALT", "blu"];
me.fontMatrix[0][0] = 1;
me.L1 = ["[ ]°/[ ]/[ ]", "TRU WIND/ALT", "blu"];
}
}
@ -137,11 +125,9 @@ var windDESPage = {
if (fmgc.FMGCInternal.altAirportSet) {
var windStore = fmgc.windController.des_winds[computer_temp].alt1;
if (windStore.set) {
me.R1 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude), "ALTN WIND ", "blu"];
me.fontMatrix[1][0] = 1;
me.R1 = [sprintf("%03.0f", windStore.heading) ~ "°/" ~ sprintf("%03.0f", windStore.magnitude), "ALTN WIND", "blu"];
} else {
me.R1 = ["[ ]°/[ ]", "ALTN WIND ", "blu"];
me.fontMatrix[1][0] = 1;
me.R1 = ["[ ]°/[ ]", "ALTN WIND", "blu"];
}
} else {
me.R1 = ["", "", "blu"];

View file

@ -4,7 +4,6 @@
var windHISTPage = {
title: nil,
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
@ -137,7 +136,6 @@ var windHISTPage = {
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0]];
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
# makeTmpy: func() {

View file

@ -144,13 +144,9 @@ var ADIRU = {
}
},
_excessMotion: 0,
alignFault: props.globals.getNode("/systems/navigation/align-fault"),
alignLoop: func() {
me._roll = pts.Orientation.roll.getValue();
me._pitch = pts.Orientation.pitch.getValue();
me._gs = pts.Velocities.groundspeed.getValue();
# todo use IR values
if (me._gs > 5 or abs(me._pitch) > 5 or abs(me._roll) > 10) {
if (me.alignFault.getBoolValue()) {
me.stopAlignNoAlign();
me._excessMotion = 1;
me.update(); # update operative

View file

@ -1,15 +1,5 @@
# A3XX Electrical System
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp)
# Local vars
var battery1_sw = 0;
var battery2_sw = 0;
var batt1_fail = 0;
var batt2_fail = 0;
var battery1_percent = 0;
var battery2_percent = 0;
var dc1 = 0;
var dc2 = 0;
# Copyright (c) 2021 Jonathan Redpath (legoboyvdlp)
# Main class
var ELEC = {
@ -202,47 +192,33 @@ var ELEC = {
me.Fail.tr1Fault.setBoolValue(0);
me.Fail.tr2Fault.setBoolValue(0);
},
_FMGC1: 0,
_FMGC2: 0,
_activeFMGC: nil,
_timer1On: 0,
_timer2On: 0,
loop: func(notification) {
# Autopilot Disconnection routines
me._activeFMGC = fcu.FCUController.activeFMGC.getValue();
me._FMGC1 = fmgc.Output.ap1.getValue();
me._FMGC2 = fmgc.Output.ap2.getValue();
if (notification.dcEssShed < 25) {
if (me._FMGC1 and !me._timer1On) { # delay 1 cycle to avoid spurious
me._timer1On = 1;
} elsif (me._FMGC1) {
if (notification.dcEssShed < 25) {
fcu.apOff("hard", 1);
if (me._activeFMGC == 1) {
fcu.athrOff("hard");
}
}
me._timer1On = 0;
}
}
if (notification.dc2 < 25) {
if (me._FMGC2 and !me._timer2On) { # delay 1 cycle to avoid spurious
me._timer2On = 1;
} elsif (me._FMGC2) {
if (notification.dc2 < 25) {
fcu.apOff("hard", 2);
if (me._activeFMGC == 2) {
fcu.athrOff("hard");
}
}
me._timer2On = 0;
}
}
loop: func() {
# Empty
},
};
setlistener("/systems/fmgc/power/power-1-on", func(val) {
if (!val.getBoolValue()) {
if (fmgc.Output.ap1.getValue()) {
fcu.apOff("hard", 1);
}
if (fcu.FCUController.activeFMGC.getValue() == 1 and fmgc.Output.athr.getValue()) {
fcu.athrOff("hard");
}
}
}, 0, 0);
setlistener("/systems/fmgc/power/power-2-on", func(val) {
if (!val.getBoolValue()) {
if (fmgc.Output.ap2.getValue()) {
fcu.apOff("hard", 2);
}
if (fcu.FCUController.activeFMGC.getValue() == 2 and fmgc.Output.athr.getValue()) {
fcu.athrOff("hard");
}
}
}, 0, 0);
# Emesary
var A320Electrical = notifications.SystemRecipient.new("A320 Electrical",ELEC.loop,ELEC);
emesary.GlobalTransmitter.Register(A320Electrical);

14
README.copyright.md Normal file
View file

@ -0,0 +1,14 @@
Copyright (C) 2022 Josh Davidson, Jonathan Redpath, merspieler, Matthew Maring, Thorsten Herrmann, Semir Gebran
This program is free software; you can redistribute it and/or
modify it under the terms of version 2 of the GNU General Public License
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

View file

@ -1013,7 +1013,7 @@
<autolandwarning>
<name>autolandwarning-single</name>
<mode>once</mode>
<path>Aircraft/A320-family/Sounds/Cockpit/calvary-charge-once.wav</path>
<path>Aircraft/A320-family/Sounds/Cockpit/click.wav</path>
<condition>
<equals>
<property>/instrumentation/pfd/logic/autoland/autoland-alarm</property>

View file

@ -4,6 +4,34 @@
<system name="A320: ADR">
<channel name="ADR Align Fault" execrate="8">
<lag_filter name="velocities/r-aero-deg_sec_filter">
<input>velocities/r-aero-deg_sec</input>
<c1>1</c1>
</lag_filter>
<lag_filter name="velocities/v-north-fps_filter">
<input>velocities/v-north-fps</input>
<c1>1</c1>
</lag_filter>
<lag_filter name="velocities/v-east-fps_filter">
<input>velocities/v-east-fps</input>
<c1>1</c1>
</lag_filter>
<switch name="/systems/navigation/align-fault">
<default value="0"/>
<test logic="OR" value="1">
velocities/r-aero-deg_sec_filter ge 2
velocities/v-north-fps_filter ge 0.5
velocities/v-east-fps_filter ge 0.5
</test>
</switch>
</channel>
<channel name="ADR Inputs" execrate="2">
<fcs_function name="aero/alpha-deg-corrected">

View file

@ -4,7 +4,120 @@
<system name="A320: FMGC">
<channel name="FMGC Power" execrate="8">
<switch name="/systems/fmgc/power/power-1">
<default value="0"/>
<test logic="OR" value="1">
/systems/electrical/bus/dc-ess-shed ge 25
</test>
</switch>
<switch name="/systems/fmgc/power/power-2">
<default value="0"/>
<test logic="OR" value="1">
/systems/electrical/bus/dc-2 ge 25
</test>
</switch>
<actuator name="/systems/fmgc/power/power-1-timer">
<input>/systems/fmgc/power/power-1</input>
<rate_limit sense="decr">5</rate_limit>
<rate_limit sense="incr">100</rate_limit>
</actuator>
<actuator name="/systems/fmgc/power/power-2-timer">
<input>/systems/fmgc/power/power-2</input>
<rate_limit sense="decr">5</rate_limit>
<rate_limit sense="incr">100</rate_limit>
</actuator>
<switch name="/systems/fmgc/power/power-1-on">
<default value="0"/>
<test logic="OR" value="1">
/systems/fmgc/power/power-1-timer ne 0
</test>
</switch>
<switch name="/systems/fmgc/power/power-2-on">
<default value="0"/>
<test logic="OR" value="1">
/systems/fmgc/power/power-2-timer ne 0
</test>
</switch>
</channel>
<channel name="Envelope Protection" execrate="8">
<!-- VMCA -->
<fcs_function name="/FMGC/internal/vmca-kt">
<function>
<table>
<independentVar lookup="row">/position/altitude-ft</independentVar>
<tableData>
-2000 112.0
0 110.0
2000 108.0
4000 107.5
6000 105.5
8000 103.0
9200 101.2
10000 100.0
12000 96.5
14100 93.5
</tableData>
</table>
</function>
</fcs_function>
<!-- VMCG -->
<fcs_function name="/FMGC/internal/vmcg-kt">
<function>
<table>
<independentVar lookup="row">/position/altitude-ft</independentVar>
<independentVar lookup="column">fcs/flap-pos-deg</independentVar>
<tableData>
10 15 20
-2000 111.5 109.5 109.0
0 109.5 107.5 107.0
2000 107.5 105.5 105.0
4000 107.0 105.0 104.5
6000 105.0 103.0 103.0
8000 103.0 101.0 100.5
9200 101.0 99.0 98.5
10000 100.0 98.0 97.5
12000 96.5 94.5 94.0
14100 93.0 91.0 91.0
</tableData>
</table>
</function>
</fcs_function>
</channel>
<channel name="FMGC" execrate="8">
<switch name="/systems/fmgc/airborne">
<default value="0"/>
<test logic="OR" value="1">
/gear/gear[1]/wow eq 0
/gear/gear[2]/wow eq 0
</test>
</switch>
<actuator name="/systems/fmgc/airborne-timer">
<input>/systems/fmgc/airborne</input>
<rate_limit sense="decr">100</rate_limit>
<rate_limit sense="incr">0.2</rate_limit>
</actuator>
<switch name="/systems/fmgc/airborne-5-secs">
<default value="0"/>
<test logic="OR" value="1">
/systems/fmgc/airborne-timer eq 1
</test>
</switch>
<fcs_function name="/systems/fmgc/cas-compare/cas-1-to-3">
<function>

View file

@ -2499,6 +2499,7 @@
<switch name="/instrumentation/pfd/logic/autoland/autoland-armed">
<default value="0"/>
<test logic="AND" value="1">
/instrumentation/pfd/logic/autoland/pitch-land eq 1
<test logic="OR">
/systems/electrical/bus/ac-2 ge 110
/systems/electrical/bus/ac-ess-shed ge 110
@ -2519,32 +2520,33 @@
<switch name="/instrumentation/pfd/logic/autoland/autoland-alarm">
<default value="0"/>
<test logic="AND" value="1">
/instrumentation/pfd/logic/autoland/autoland-armed eq 1
/instrumentation/pfd/logic/autoland/pitch-land eq 1
<test logic="OR">
<test logic="AND">
/it-autoflight/output/ap1 eq 0
/it-autoflight/output/ap2 eq 0
</test>
/instrumentation/radar-altimeter-difference-ft gt 15
<test logic="AND">
<test logic="OR">
/instrumentation/nav[0]/gs-needle-deflection-norm gt 0.5
/instrumentation/nav[0]/gs-needle-deflection-norm lt -0.5
/instrumentation/pfd/logic/autoland/autoland-armed eq 1
<test logic="OR">
<test logic="AND">
/it-autoflight/output/ap1 eq 0
/it-autoflight/output/ap2 eq 0
/instrumentation/pfd/logic/autoland/ap-disc-ft lt 200
/instrumentation/pfd/logic/autoland/ap-disc-ft gt 0
</test>
/instrumentation/radar-altimeter-difference-ft gt 15
<test logic="AND">
<test logic="OR">
/instrumentation/nav[0]/gs-needle-deflection-norm gt 0.5
/instrumentation/nav[0]/gs-needle-deflection-norm lt -0.5
</test>
/position/gear-agl-ft ge 100
</test>
/position/gear-agl-ft ge 100
</test>
<test logic="AND">
<test logic="OR">
/instrumentation/nav[0]/heading-needle-deflection-norm gt 0.125
/instrumentation/nav[0]/heading-needle-deflection-norm lt -0.125
<test logic="AND">
<test logic="OR">
/instrumentation/nav[0]/heading-needle-deflection-norm gt 0.125
/instrumentation/nav[0]/heading-needle-deflection-norm lt -0.125
</test>
/position/gear-agl-ft ge 15
</test>
/position/gear-agl-ft ge 15
<!-- TODO
- Loss of localizer signal
-->
</test>
<!-- TODO
- Loss of localizer signal
-->
</test>
</test>
</switch>

View file

@ -502,7 +502,7 @@
</channel>
<channel name="FMGC">
<channel name="FMGC" execrate="8">
<fcs_function name="/FMGC/internal/kts-to-mach-factor">
<function>
@ -524,4 +524,58 @@
</channel>
<channel name="IESI" execrate="8">
<switch name="/instrumentation/iesi/display/show-mach">
<default value="0"/>
<test logic="OR" value="1">
/instrumentation/airspeed-indicator/indicated-mach ge 0.5
</test>
<test logic="AND" value="1">
/instrumentation/airspeed-indicator/indicated-mach ge 0.45
/instrumentation/iesi/display/show-mach eq 1
</test>
</switch>
<switch name="/instrumentation/iesi/power/power-command">
<default value="0"/>
<test logic="OR" value="1">
/systems/electrical/bus/dc-ess ge 25
<test logic="AND">
/systems/electrical/sources/si-1/inverter-control/relay-7xb ne 0
/systems/electrical/bus/sub-bus/dc-hot-1-703 ge 25
</test>
</test>
</switch>
<actuator name="/instrumentation/iesi/power/power-transient-timer">
<input>/instrumentation/iesi/power/power-command</input>
<rate_limit sense="decr">5</rate_limit>
<rate_limit sene="incr">100</rate_limit>
</actuator>
<switch name="/instrumentation/iesi/power/power-on">
<default value="0"/>
<test logic="OR" value="1">
/instrumentation/iesi/power/power-transient-timer ne 0
</test>
</switch>
<fcs_function name="/instrumentation/iesi/power/power-consumption-w">
<function>
<sum>
<product>
<value>16</value>
<property>/instrumentation/iesi/power/power-on</property>
</product>
<product>
<value>4</value>
<property>/controls/lighting/DU/iesi</property>
</product>
</sum>
</function>
</fcs_function>
</channel>
</system>

View file

@ -168,11 +168,6 @@
<suction>/systems/vacuum/suction-inhg</suction>
</heading-indicator>
<KT-70>
<name>kt-70</name>
<number>0</number>
</KT-70>
<magnetic-compass>
<name>magnetic-compass</name>
<number>0</number>

View file

@ -23,6 +23,14 @@
<filter-gain>0.0</filter-gain>
</predict-simple>
<filter>
<name>Heading Rate Degrees Per Second</name>
<type>gain</type>
<gain>57.2957795131</gain>
<input>/fdm/jsbsim/velocities/r-aero-rad_sec</input>
<output>/fdm/jsbsim/velocities/r-aero-deg_sec</output>
</filter>
<filter>
<name>Gear AGL Altitude FT</name>
<type>gain</type>

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View file

Before

Width:  |  Height:  |  Size: 181 KiB

After

Width:  |  Height:  |  Size: 181 KiB

View file

@ -1,6 +1,5 @@
<!DOCTYPE html>
<html lang="en" translate="no">
<head>
<title>A320 MCDU</title>
<meta charset="utf-8">
@ -8,113 +7,6 @@
<link rel="manifest" href="mcdu_manifest.json" />
<meta name="apple-mobile-web-app-status-bar" content="#db4938" />
<meta name="theme-color" content="#db4938" />
<script>
let screen;
let screen_src;
let blank_src;
let loading = 0;
let scheduled_load = 0;
function refresh_screen(force) {
if (loading && !force) {
scheduled_load = 1;
}
else {
loading = 1;
screen.src = screen_src + '&random=' + (new Date).getTime()
}
}
function press_button(type, text) {
let request = new XMLHttpRequest;
request.open(
"POST",
window.location.protocol + "//" + window.location.host + "/run.cgi?value=nasal"
);
request.setRequestHeader("Content-Type", "application/json");
let body = JSON.stringify({
"name": "",
"children": [
{
"name": "script",
"index": 0,
"value": "mcdu." + type + "(\"" + text + "\", 0);"
}
]
});
request.send(body);
request.addEventListener('load', function () {
refresh_screen();
}, true);
}
var preventzoomaction = function(e) { //https://exceptionshub.com/disable-double-tap-zoom-option-in-browser-on-touch-devices.html
var t2 = e.timeStamp;
var t1 = e.currentTarget.dataset.lastTouch || t2;
var dt = t2 - t1;
var fingers = e.touches.length;
e.currentTarget.dataset.lastTouch = t2;
if (!dt || dt > 500 || fingers > 1) return; // not double-tap
e.preventDefault();
e.target.click();
};
window.addEventListener('load', function () {
let tds = document.querySelectorAll('.input td');
for (const td of tds) {
td.addEventListener('click', function () {
if (td.className == "disabled") return;
press_button("button", td.textContent);
}, true);
td.addEventListener('touchstart', preventzoomaction, true);
}
tds = document.querySelectorAll('.enter td');
for (const td of tds) {
td.addEventListener('click', function () {
press_button(td.getAttribute("button-side") == "l" ? "lskbutton" : "rskbutton", td.getAttribute("button-id"));
}, true);
td.addEventListener('touchstart', preventzoomaction, true);
}
tds = document.querySelectorAll('.menu td');
for (const td of tds) {
td.addEventListener('click', function () {
press_button("pagebutton", td.className);
}, true);
td.addEventListener('touchstart', preventzoomaction, true);
}
tds = document.querySelectorAll('.arrows td');
for (const td of tds) {
td.addEventListener('click', function () {
press_button(td.className == 'airport' ? "pagebutton" : "arrowbutton", td.className);
}, true);
td.addEventListener('touchstart', preventzoomaction, true);
}
screen = document.querySelector('img');
screen.addEventListener('load', function () {
loading = 0;
if (scheduled_load) {
scheduled_load = 0;
refresh_screen();
}
});
blank_src = screen_src;
screen_src = "/screenshot?canvasindex=10&type=png";
screen.addEventListener('error', function () {
loading = 0;
if (scheduled_load) {
refresh_screen();
}
});
screen.addEventListener('abort', function () {
loading = 0;
if (scheduled_load) {
refresh_screen();
}
});
setInterval(function () { refresh_screen(true); }, 1000);
}, true);
</script>
<style>
body {
font-size: 5rem;
@ -201,33 +93,32 @@
<table class="enter" style="width: 100%">
<tr>
<td><br></td>
<td rowspan="8" style="vertical-align: top"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAANgAQMAAACIgIgUAAAAA1BMVEUAAACnej3aAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAgklEQVR42u3BAQEAAACCIP+vbkhAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7wazbwABRxu5owAAAABJRU5ErkJggg=="
style="width: 100%" /></td>
<td rowspan="8" style="vertical-align: top"><img data-element="lcdimage" src="" style="width: 100%" /></td>
<td><br></td>
</tr>
<tr>
<td button-id="1" button-side="l"></td>
<td button-id="1" button-side="r"></td>
<td data-button="lskbutton:1"></td>
<td data-button="rskbutton:1"></td>
</tr>
<tr>
<td button-id="2" button-side="l"></td>
<td button-id="2" button-side="r"></td>
<td data-button="lskbutton:2"></td>
<td data-button="rskbutton:2"></td>
</tr>
<tr>
<td button-id="3" button-side="l"></td>
<td button-id="3" button-side="r"></td>
<td data-button="lskbutton:3"></td>
<td data-button="rskbutton:3"></td>
</tr>
<tr>
<td button-id="4" button-side="l"></td>
<td button-id="4" button-side="r"></td>
<td data-button="lskbutton:4"></td>
<td data-button="rskbutton:4"></td>
</tr>
<tr>
<td button-id="5" button-side="l"></td>
<td button-id="5" button-side="r"></td>
<td data-button="lskbutton:5"></td>
<td data-button="rskbutton:5"></td>
</tr>
<tr>
<td button-id="6" button-side="l"></td>
<td button-id="6" button-side="r"></td>
<td data-button="lskbutton:6"></td>
<td data-button="rskbutton:6"></td>
</tr>
<tr>
<td><br></td>
@ -236,107 +127,110 @@
</table>
<table class="menu" style="width: 100%">
<tr>
<td class="dirto">DIR</td>
<td class="prog">PROG</td>
<td class="perf">PERF</td>
<td class="init">INIT</td>
<td class="data">DATA</td>
<td data-button="pagebutton:dirto" class="dirto">DIR</td>
<td data-button="pagebutton:prog" class="prog">PROG</td>
<td data-button="pagebutton:perf" class="perf">PERF</td>
<td data-button="pagebutton:init" class="init">INIT</td>
<td data-button="pagebutton:data" class="data">DATA</td>
<td></td>
<td>BRT</td>
</tr>
<tr>
<td class="f-pln">F-PLN</td>
<td class="radnav">RAD<br>NAV</td>
<td class="fuel-pred">FUEL<br>PRED</td>
<td>SEC<br>F-PLN</td>
<td class="atc">ATC<br>COMM</td>
<td class="mcdu">MCDU<br>MENU</td>
<td data-button="pagebutton:f-pln" class="f-pln">F-PLN</td>
<td data-button="pagebutton:radnav" class="radnav">RAD<br>NAV</td>
<td data-button="pagebutton:fuel-pred" class="fuel-pred">FUEL<br>PRED</td>
<td data-button="" >SEC<br>F-PLN</td>
<td data-button="pagebutton:atc" class="atc">ATC<br>COMM</td>
<td data-button="pagebutton:mcdu" class="mcdu">MCDU<br>MENU</td>
<td>DIM</td>
</tr>
</table>
<table class="input" style="float: right; width: 62.5%">
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
<td>E</td>
<td data-button="button:A">A</td>
<td data-button="button:B">B</td>
<td data-button="button:C">C</td>
<td data-button="button:D">D</td>
<td data-button="button:E">E</td>
</tr>
<tr>
<td>F</td>
<td>G</td>
<td>H</td>
<td>I</td>
<td>J</td>
<td data-button="button:F">F</td>
<td data-button="button:G">G</td>
<td data-button="button:H">H</td>
<td data-button="button:I">I</td>
<td data-button="button:J">J</td>
</tr>
<tr>
<td>K</td>
<td>L</td>
<td>M</td>
<td>N</td>
<td>O</td>
<td data-button="button:K">K</td>
<td data-button="button:L">L</td>
<td data-button="button:M">M</td>
<td data-button="button:N">N</td>
<td data-button="button:O">O</td>
</tr>
<tr>
<td>P</td>
<td>Q</td>
<td>R</td>
<td>S</td>
<td>T</td>
<td data-button="button:P">P</td>
<td data-button="button:Q">Q</td>
<td data-button="button:R">R</td>
<td data-button="button:S">S</td>
<td data-button="button:T">T</td>
</tr>
<tr>
<td>U</td>
<td>V</td>
<td>W</td>
<td>X</td>
<td>Y</td>
<td data-button="button:U">U</td>
<td data-button="button:V">V</td>
<td data-button="button:W">W</td>
<td data-button="button:X">X</td>
<td data-button="button:Y">Y</td>
</tr>
<tr>
<td>Z</td>
<td>/</td>
<td style="font-size: 50%">SP</td>
<td style="font-size: 33%" class="disabled">OVFY<br></td>
<td style="font-size: 33%">CLR</td>
<td data-button="button:Z">Z</td>
<td data-button="button:SLASH">/</td>
<td style="font-size: 50%" data-button="button:SP">SP</td>
<td style="font-size: 33%" data-button="button:OVFY">OVFY<br></td>
<td style="font-size: 33%" data-button="button:CLR">CLR</td>
</tr>
</table>
<table class="arrows" style="width: 29.5%">
<tr>
<td class="airport">AIR<br>PORT</td>
<td data-button="pagebutton:airport" class="airport">AIR<br>PORT</td>
<td></td>
</tr>
<tr>
<td class="left"></td>
<td class="up"></td>
<td data-button="arrowbutton:left" class="left"></td>
<td data-button="arrowbutton:up" class="up"></td>
</tr>
<tr>
<td class="right"></td>
<td class="down"></td>
<td data-button="arrowbutton:right" class="right"></td>
<td data-button="arrowbutton:down" class="down"></td>
</tr>
</table>
<table class="input" style="width: 30%">
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td data-button="button:1">1</td>
<td data-button="button:2">2</td>
<td data-button="button:3">3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
<td data-button="button:4">4</td>
<td data-button="button:5">5</td>
<td data-button="button:6">6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
<td>9</td>
<td data-button="button:7">7</td>
<td data-button="button:8">8</td>
<td data-button="button:9">9</td>
</tr>
<tr>
<td>.</td>
<td>0</td>
<td data-button="button:DOT">.</td>
<td data-button="button:0">0</td>
<td
style="font-size: 3vw; width: 33.333333333333333333333333333333333333333333333333333333333333333333333%; /* :) */" class="disabled">
style="font-size: 3vw; width: 33.34%;" data-button="button:PLUSMINUS">
+/-
</td>
</tr>
</table>
<script src="../js/mcdu.js"></script>
</body>
</html>

View file

@ -0,0 +1,19 @@
{
"short_name": "A320MCDU",
"name": "A320 Remote MCDU for FG",
"icons": [
{
"src": "img/icon-192.png",
"type": "image/png",
"sizes": "192x192"
}
],
"start_url": "/aircraft-dir/WebPanel/WebPanel1/?source=home",
"background_color": "#000",
"display": "standalone",
"scope": "/",
"theme_color": "#db4938",
"shortcuts": [ ],
"description": "Airbus 320 Remote MCDU for Flightgear",
"screenshots": [ ]
}

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<html>
<html lang="en" translate="no">
<head>
<title>A320 MCDU</title>
<meta charset="utf-8">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar" content="#333333" />
@ -83,9 +84,9 @@
<div data-button="button:9" class="numberbutton number-col3"></div>
</div>
<div class="number-row4">
<div data-button="button:." class="numberbutton number-col1"></div>
<div data-button="button:DOT" class="numberbutton number-col1"></div>
<div data-button="button:0" class="numberbutton number-col2"></div>
<div data-button="button:-" class="numberbutton number-col3"></div>
<div data-button="button:PLUSMINUS" class="numberbutton number-col3"></div>
</div>
<div class="alphabutton-row1">
@ -130,7 +131,7 @@
<div class="alphabutton-row6">
<div data-button="button:Z" class="alphabutton alphabutton-col1"></div>
<div data-button="button:/" class="alphabutton alphabutton-col2"></div>
<div data-button="button:SLASH" class="alphabutton alphabutton-col2"></div>
<div data-button="button:SP" class="alphabutton alphabutton-col3"></div>
<div data-button="button:OVFY" class="alphabutton alphabutton-col4"></div>
<div data-button="button:CLR" class="alphabutton alphabutton-col5"></div>
@ -140,7 +141,7 @@
</div>
</div>
</div>
<script src="js/mcdu.js">
<script src="../js/mcdu.js">
</script>
</body>
</html>

View file

@ -1,185 +1,166 @@
const MCDU = (function () {
const screenImageBaseUrl = '/screenshot?canvasindex=10&type=jpg';
const refreshInterval = 2000;
const body = document.body;
let currentCacheBust = 0;
let lastSentText = '';
init();
return {
toggleUsedUniverse
}
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
function init()
{
body.dataset.lastTouch = 0;
body.addEventListener('touchstart', preventZoomAction, { passive: false });
registerButtons();
registerKeyboardInput();
setInterval(refreshScreen, refreshInterval);
refreshScreen();
}
function refreshScreen() {
loadScreenImage(screenImageBaseUrl)
.then(setScreenSrc)
.catch(setScreenSrc);
}
function setScreenSrc(url) {
url = typeof url === 'string' ? url : '';
showScreenImageLoadState(url !== '');
document.querySelectorAll('[data-element="lcdimage"]').forEach((imageElement) => {
imageElement.src = url;
});
}
function loadScreenImage(baseUrl) {
currentCacheBust = new Date().getTime();
return new Promise((resolve, reject) => {
const url = baseUrl + '?cacheBust=' + currentCacheBust;
const img = new Image;
img.addEventListener('error', reject);
img.addEventListener('load', (event) => {
showScreenImageLoadState(true);
resolve(url);
});
img.src = url;
});
}
function showScreenImageLoadState(isOK) {
if (!isOK) {
console.log('fail');
}
}
function toggleUsedUniverse() {
body.setAttribute('data-used-universe', body.getAttribute('data-used-universe') === '1' ? '0' : '1');
}
function registerButtons() {
document.querySelectorAll('[data-button]').forEach((buttonElement) => {
const buttonFunction = getButtonFunction(buttonElement);
if (!(typeof buttonFunction === 'function')) {
return;
}
buttonElement.addEventListener('click', buttonFunction);
buttonElement.addEventListener('touchstart', preventZoomAction, true);
});
}
function registerKeyboardInput() {
const keyTranslation = {
BACKSPACE: 'CLR'
};
body.addEventListener('keyup', (event) => {
const key = event.key.toUpperCase();
if (key.match(/^[A-Z0-9/\-+.\ ]$/)) {
if (key === '+' || key === '-') {
return sendPlusMinusKey();
}
return sendButtonpress('button', key);
}
const translatedKey = keyTranslation[key];
if (translatedKey) {
return sendButtonpress('button', translatedKey);
}
});
}
function getButtonFunction(buttonElement) {
const buttonActions = buttonElement.getAttribute('data-button').split(':');
const actionKey = buttonActions[0];
const actionValue = buttonActions[1];
if(!actionKey) {
return;
}
if (actionKey === 'toggleUsedUniverse') {
return toggleUsedUniverse;
}
if (actionKey === 'button' && actionValue === '-') {
return sendPlusMinusKey;
}
return function () {
sendButtonpress(actionKey, actionValue);
};
}
function sendPlusMinusKey() {
if (lastSentText === '-') {
sendButtonpress('button', 'CLR')
.then(() => {
sendButtonpress('button', '+');
})
return;
}
if (lastSentText === '+') {
sendButtonpress('button', 'CLR')
.then(() => {
sendButtonpress('button', '-');
})
return;
}
sendButtonpress('button', '-');
}
function sendButtonpress(type, text) {
// console.log({ type, text });
let request = new XMLHttpRequest;
request.open("POST", "/run.cgi?value=nasal");
request.setRequestHeader("Content-Type", "application/json");
let body = JSON.stringify({
"name": "",
"children": [
{
"name": "script",
"index": 0,
"value": "mcdu." + type + "(\"" + text + "\", 0);"
}
]
});
request.send(body);
return new Promise((resolve) => {
request.addEventListener('load', () => {
lastSentText = text;
refreshScreen();
resolve();
}, true);
});
}
//https://exceptionshub.com/disable-double-tap-zoom-option-in-browser-on-touch-devices.html
function preventZoomAction(event) {
const t2 = event.timeStamp;
const touchedElement = event.currentTarget;
const t1 = touchedElement.dataset.lastTouch || t2;
const dt = t2 - t1;
const fingers = event.touches.length;
touchedElement.dataset.lastTouch = t2;
if (!dt || dt > 500 || fingers > 1) {
// no double-tap
return;
}
event.preventDefault();
event.target.click();
}
})();
const MCDU = (function () {
const screenImageBaseUrl = '/screenshot?canvasindex=10&type=jpg';
const refreshInterval = 2000;
const body = document.body;
let currentCacheBust = 0;
let lastSentText = '';
init();
return {
toggleUsedUniverse
}
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
function init() {
body.dataset.lastTouch = 0;
body.addEventListener('touchstart', preventZoomAction, { passive: false });
registerButtons();
registerKeyboardInput();
setInterval(refreshScreen, refreshInterval);
refreshScreen();
}
function refreshScreen() {
loadScreenImage(screenImageBaseUrl)
.then(setScreenSrc)
.catch(setScreenSrc);
}
function setScreenSrc(url) {
url = typeof url === 'string' ? url : '';
showScreenImageLoadState(url !== '');
document.querySelectorAll('[data-element="lcdimage"]').forEach((imageElement) => {
imageElement.src = url;
});
}
function loadScreenImage(baseUrl) {
currentCacheBust = new Date().getTime();
return new Promise((resolve, reject) => {
const url = baseUrl + '?cacheBust=' + currentCacheBust;
const img = new Image;
img.addEventListener('error', reject);
img.addEventListener('load', (event) => {
showScreenImageLoadState(true);
resolve(url);
});
img.src = url;
});
}
function showScreenImageLoadState(isOK) {
if (!isOK) {
console.log('fail');
}
}
function toggleUsedUniverse() {
body.setAttribute('data-used-universe', body.getAttribute('data-used-universe') === '1' ? '0' : '1');
}
function registerButtons() {
document.querySelectorAll('[data-button]').forEach((buttonElement) => {
const buttonFunction = getButtonFunction(buttonElement);
if (!(typeof buttonFunction === 'function')) {
return;
}
buttonElement.addEventListener('click', buttonFunction);
buttonElement.addEventListener('touchstart', preventZoomAction, true);
});
let btn = document.querySelector("[data-button=\"button:CLR\"]");
if (btn) btn.addEventListener("contextmenu",function(e){
e.preventDefault();
sendButtonpress('button', 'LONGCLR');
});
}
function registerKeyboardInput() {
const keyTranslation = {
BACKSPACE: 'CLR',
DELETE: 'LONGCLR',
'+': 'PLUSMINUS',
'-': 'PLUSMINUS',
'/': 'SLASH',
'.': 'DOT',
'^': 'OVFY',
' ': 'SP'
};
body.addEventListener('keyup', (event) => {
const key = event.key.toUpperCase();
if (key.match(/^[A-Z0-9]$/)) {
return sendButtonpress('button', key);
}
const translatedKey = keyTranslation[key]||false;
if (translatedKey) return sendButtonpress('button', translatedKey);
});
}
function getButtonFunction(buttonElement) {
const buttonActions = buttonElement.getAttribute('data-button').split(':');
const actionKey = buttonActions[0];
const actionValue = buttonActions[1];
if(!actionKey) {
return;
}
if (actionKey === 'toggleUsedUniverse') {
return toggleUsedUniverse;
}
return function () {
sendButtonpress(actionKey, actionValue);
};
}
function sendButtonpress(type, text) {
//console.log({ type, text });
let request = new XMLHttpRequest;
request.open("POST", "/run.cgi?value=nasal");
request.setRequestHeader("Content-Type", "application/json");
let body = JSON.stringify({
"name": "",
"children": [
{
"name": "script",
"index": 0,
"value": "mcdu." + type + "(\"" + text + "\", 0);"
}
]
});
request.send(body);
return new Promise((resolve) => {
request.addEventListener('load', () => {
lastSentText = text;
refreshScreen();
resolve();
}, true);
});
}
//https://exceptionshub.com/disable-double-tap-zoom-option-in-browser-on-touch-devices.html
function preventZoomAction(event) {
const t2 = event.timeStamp;
const touchedElement = event.currentTarget;
const t1 = touchedElement.dataset.lastTouch || t2;
const dt = t2 - t1;
const fingers = event.touches.length;
touchedElement.dataset.lastTouch = t2;
if (!dt || dt > 500 || fingers > 1) {
// no double-tap
return;
}
event.preventDefault();
event.target.click();
}
})();

View file

@ -17,12 +17,14 @@
background-color: #005670;
text-align: center;
color: #e4e4e4;
font-size: 16px;
padding: 0;
margin: 0;
}
body {
height: 100vh;
width: 100vw;
color: #8db9ca;
padding-top: 1rem;
}
h1 {
@ -55,8 +57,9 @@
.choice {
display: inline-block;
position: relative;
width: calc(49% - 2vw);
padding: 1vh 1vw 75% 1vw;
width: calc(50% - 40px);
padding: 15px;
padding-bottom: 75%;
color: inherit;
text-decoration: none;
border: 1px solid transparent;
@ -69,11 +72,12 @@
.choice img {
position: absolute;
top: 0;
top: 1rem;
left: 0;
right: 0;
margin: auto;
max-height: 100%;
max-height: auto;
max-width: 100%;
border-radius: 8px;
box-shadow: 4px 4px 6px #00000063;
}
@ -99,9 +103,9 @@
<div class="chooser">
<a href="WebPanel1/index.html" class="choice choice--1">
<span class="button">
abstract
basic
</span>
<img src="WebPanel1/screenshot.jpg">
<img src="WebPanel1/img/screenshot.jpg">
</a>
<a href="WebPanel2/index.html" class="choice choice--2">
<span class="button">