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/PERFTO.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/RADNAV.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/DATA.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/STATUS.nas</file>
</mcdu> </mcdu>
<!-- Traffic layer from E-jet --> <!-- Traffic layer from E-jet -->
<traffic> <traffic>

View file

@ -34,39 +34,44 @@
<text> <text>
<halign>left</halign> <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>
<text> <text>
<halign>left</halign> <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>
<text> <text>
<halign>left</halign> <halign>left</halign>
<label>ALS, and custom shader settings must be on.</label> <label>For the best experience:</label>
</text> </text>
<text> <text>
<halign>left</halign> <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>
<text> <text>
<halign>left</halign> <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> </text>
<hrule/> <hrule/>
<text> <text>
<halign>left</halign> <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>
<text> <text>
<halign>left</halign> <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> </text>
</group> </group>
@ -105,8 +110,8 @@
<button> <button>
<halign>center</halign> <halign>center</halign>
<legend>Yes, fix all settings</legend> <legend>Apply minimum settings</legend>
<pref-width>180</pref-width> <pref-width>200</pref-width>
<binding> <binding>
<command>nasal</command> <command>nasal</command>
<script> <script>
@ -120,8 +125,8 @@
<button> <button>
<halign>center</halign> <halign>center</halign>
<legend>Yes, but I'll fix shaders myself</legend> <legend>Advanced: View Shader Settings</legend>
<pref-width>180</pref-width> <pref-width>200</pref-width>
<binding> <binding>
<command>nasal</command> <command>nasal</command>
<script> <script>
@ -143,8 +148,8 @@
<button> <button>
<halign>center</halign> <halign>center</halign>
<legend>I don't care</legend> <legend>Ignore</legend>
<pref-width>180</pref-width> <pref-width>150</pref-width>
<binding> <binding>
<command>dialog-close</command> <command>dialog-close</command>
</binding> </binding>

View file

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

View file

@ -49,52 +49,41 @@ var canvas_IESI = {
obj.AI_horizon_trans = obj["AI_horizon"].createTransform(); obj.AI_horizon_trans = obj["AI_horizon"].createTransform();
obj.AI_horizon_rot = obj["AI_horizon"].createTransform(); obj.AI_horizon_rot = obj["AI_horizon"].createTransform();
obj._aiCenter = obj["AI_center"].getCenter();
obj._cachedInhg = nil; obj._cachedInhg = nil;
obj._excessMotion = 0; obj._cachedMode = nil;
obj._fast = 0; obj._canReset = 0;
obj._excessMotionInInit = 0;
obj._fastInit = 0;
obj._IESITime = 0; obj._IESITime = 0;
obj._showIESI = 0; obj._isNegativeAlt = 0;
obj.ASI = 0; obj._middleAltOffset = nil;
obj.canReset = 0; obj._powerResult = 0;
obj.isNegativeAlt = 0; obj._roll = 0;
obj.middleAltOffset = nil;
obj.update_items = [ obj.update_items = [
props.UpdateManager.FromHashValue("airspeed", nil, func(val) { 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 obj["ASI_scale"].setTranslation(0, math.clamp(val - 30, 0, 490) * 8.295);
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);
}), }),
props.UpdateManager.FromHashList(["altitude","altitude_ind"], nil, func(val) { props.UpdateManager.FromHashList(["altitude","altitude_ind"], nil, func(val) {
if (val.altitude > 50000) { val.altitude = math.clamp(val.altitude, -2000, 50000);
val.altitude = 50000;
} elsif (val.altitude < -2000) {
val.altitude = -2000;
}
if (val.altitude < 0) { if (val.altitude < 0) {
obj["negText"].show(); obj["negText"].show();
obj.isNegativeAlt = 1; obj._isNegativeAlt = 1;
} else { } else {
obj["negText"].hide(); obj["negText"].hide();
obj.isNegativeAlt = 0; obj._isNegativeAlt = 0;
} }
obj.altOffset = (val.altitude / 500) - int(val.altitude / 500); obj.altOffset = (val.altitude / 500) - int(val.altitude / 500);
obj.middleAltText = roundaboutAlt(val.altitude / 100); obj.middleAltText = roundaboutAlt(val.altitude / 100);
if (obj.altOffset > 0.5) { if (obj.altOffset > 0.5) {
obj.middleAltOffset = -(obj.altOffset - 1) * 258.5528; obj._middleAltOffset = -(obj.altOffset - 1) * 258.5528;
} else { } 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_scale"].update();
obj["ALT_five"].setText(sprintf("%03d", abs(obj.middleAltText+10))); obj["ALT_five"].setText(sprintf("%03d", abs(obj.middleAltText+10)));
obj["ALT_four"].setText(sprintf("%03d", abs(obj.middleAltText+5))); 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.altTens = num(right(sprintf("%02d", val.altitude), 2));
obj["ALT_tens"].setTranslation(0, obj.altTens * 3.16); obj["ALT_tens"].setTranslation(0, obj.altTens * 3.16);
}), }),
props.UpdateManager.FromHashValue("mach", nil, func(val) { props.UpdateManager.FromHashValue("showMach", nil, func(val) {
if (val >= 0.5) { if (val) {
obj._machWasAbove50 = 1;
obj["ASI_mach_decimal"].show();
obj["ASI_mach"].show();
} elsif (val >= 0.45 and obj._machWasAbove50) {
obj["ASI_mach_decimal"].show(); obj["ASI_mach_decimal"].show();
obj["ASI_mach"].show(); obj["ASI_mach"].show();
} else { } else {
obj._machWasAbove50 = 0;
obj["ASI_mach_decimal"].hide(); obj["ASI_mach_decimal"].hide();
obj["ASI_mach"].hide(); obj["ASI_mach"].hide();
} }
}),
props.UpdateManager.FromHashValue("mach", nil, func(val) {
if (val >= 0.999) { if (val >= 0.999) {
obj["ASI_mach"].setText("99"); obj["ASI_mach"].setText("99");
} else { } else {
@ -138,8 +123,9 @@ var canvas_IESI = {
obj.AI_horizon_trans.setTranslation(0, val * 16.74); obj.AI_horizon_trans.setTranslation(0, val * 16.74);
}), }),
props.UpdateManager.FromHashValue("roll", nil, func(val) { props.UpdateManager.FromHashValue("roll", nil, func(val) {
obj.AI_horizon_rot.setRotation(-val * D2R, obj["AI_center"].getCenter()); obj._roll = -val * D2R;
obj["AI_bank"].setRotation(-val * D2R); obj.AI_horizon_rot.setRotation(obj._roll, obj._aiCenter);
obj["AI_bank"].setRotation(obj._roll);
}), }),
props.UpdateManager.FromHashValue("skid", nil, func(val) { props.UpdateManager.FromHashValue("skid", nil, func(val) {
if (abs(val) >= 84.99) { if (abs(val) >= 84.99) {
@ -149,32 +135,29 @@ var canvas_IESI = {
obj["AI_slipskid"].show(); obj["AI_slipskid"].show();
} }
}), }),
props.UpdateManager.FromHashList(["altimeter_mode","qnh_hpa","qnh_inhg"], nil, func(val) {
obj.updateQNH(val);
}),
]; ];
return obj; return obj;
}, },
getKeys: func() { 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"]; 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) { 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._cachedInhg = notification.qnh_inhg;
me._cachedMode = notification.altimeter_mode;
me.updateQNH(notification); me.updateQNH(notification);
} }
me.updatePower(notification);
if (me.group.getVisible() == 0) {
return;
}
if (me._IESITime + 90 >= notification.elapsedTime) { if (me._IESITime + 90 >= notification.elapsedTime) {
if (notification.groundspeed > 2) { if (!me._fastInit and me.alignFault.getBoolValue()) {
me._excessMotion = 1; me._excessMotionInInit = 1;
} }
if (me._fast) { if (me._fastInit) {
me["IESI"].show(); me["IESI"].show();
me["IESI_Init"].hide(); me["IESI_Init"].hide();
me["AI_bank"].hide(); me["AI_bank"].hide();
@ -195,15 +178,15 @@ var canvas_IESI = {
me["IESI"].hide(); me["IESI"].hide();
me["IESI_Init"].show(); me["IESI_Init"].show();
me["ATTflag"].hide(); me["ATTflag"].hide();
return;
} }
return;
} else { } else {
if (pinPrograms.metricAltitude) { if (pinPrograms.metricAltitude) {
me["ALT_meters"].show(); me["ALT_meters"].show();
me["metricM"].show(); me["metricM"].show();
me["metricBox"].show(); me["metricBox"].show();
if (me.isNegativeAlt) { if (me._isNegativeAlt) {
me["negText2"].show(); me["negText2"].show();
} else { } else {
me["negText2"].hide(); me["negText2"].hide();
@ -215,7 +198,7 @@ var canvas_IESI = {
me["negText2"].hide(); me["negText2"].hide();
} }
if (!me._excessMotion) { if (!me._excessMotionInInit) {
me["IESI_Init"].hide(); me["IESI_Init"].hide();
me["IESI"].show(); me["IESI"].show();
me["AI_bank"].show(); me["AI_bank"].show();
@ -260,57 +243,41 @@ var canvas_IESI = {
} else { } else {
me["QNH_setting"].setText(sprintf("%4.0f", notification.qnh_hpa)); me["QNH_setting"].setText(sprintf("%4.0f", notification.qnh_hpa));
} }
me["QNH_setting"].show();
me["QNH_std"].hide(); me["QNH_std"].hide();
me["QNH_setting"].show();
} }
}, },
_transientVar: 0,
updatePower: func(notification) { updatePower: func(notification) {
# todo 20W power consumption if (notification.attReset == 1 and me._canReset) {
if (notification.attReset == 1 and me.canReset) { me._canReset = 0;
me.canReset = 0; me._excessMotionInInit = 0;
me._excessMotion = 0; me._fastInit = 1;
me._fast = 1;
iesi_init.setBoolValue(0); iesi_init.setBoolValue(0);
} else if (me._IESITime + 90 < notification.elapsedTime and notification.iesiInit and !me.canReset) { } else if (me._IESITime + 90 < notification.elapsedTime and notification.iesiInit and !me._canReset) {
me.canReset = 1; me._canReset = 1;
} }
if (notification.dcEss >= 25 or (notification.relay7XB and notification.dcHot1703 >= 25)) { if (notification.iesiPowered) {
me._showIESI = 1;
if (notification.acconfig != 1 and notification.iesiInit != 1) { if (notification.acconfig != 1 and notification.iesiInit != 1) {
iesi_init.setBoolValue(1); iesi_init.setBoolValue(1);
if (me._fast) { me._IESITime = notification.elapsedTime - (me._fastInit ? 80 : 0);
me._IESITime = notification.elapsedTime - 80;
} else {
me._IESITime = notification.elapsedTime;
}
} else if (notification.acconfig == 1 and notification.iesiInit != 1) { } else if (notification.acconfig == 1 and notification.iesiInit != 1) {
iesi_init.setBoolValue(1); iesi_init.setBoolValue(1);
me._IESITime = notification.elapsedTime - 87; me._IESITime = notification.elapsedTime - 87;
} }
} elsif (notification.iesiInit) { } elsif (notification.iesiInit) {
if (!me._transientVar) { me._canReset = 0;
me._transientVar = 1; me._excessMotionInInit = 0;
settimer(func() { me._fastInit = 0;
if (systems.ELEC.Bus.dcEss.getValue() >= 25 or (systems.ELEC.Bus.dcHot1703.getValue() >= 25 and systems.ELEC.Relay.relay7XB.getValue())) { iesi_init.setBoolValue(0);
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
}
} }
if (me._showIESI and notification.iesiBrt > 0.01) { if (notification.iesiPowered and notification.iesiBrt > 0.01) {
me.group.setVisible(1); me.group.setVisible(1);
return 1;
} else { } else {
me.group.setVisible(0); me.group.setVisible(0);
return 0;
} }
}, },
}; };
@ -352,13 +319,14 @@ var input = {
"attReset": "/instrumentation/iesi/att-reset", "attReset": "/instrumentation/iesi/att-reset",
"iesiBrt": "/controls/lighting/DU/iesi", "iesiBrt": "/controls/lighting/DU/iesi",
"iesiInit": "/instrumentation/iesi/iesi-init", "iesiInit": "/instrumentation/iesi/iesi-init",
"iesiPowered": "/instrumentation/iesi/power/power-on",
"mach": "/instrumentation/airspeed-indicator/indicated-mach", "mach": "/instrumentation/airspeed-indicator/indicated-mach",
"pitch": "/instrumentation/iesi/pitch-deg", "pitch": "/instrumentation/iesi/pitch-deg",
"qnh_hpa": "/instrumentation/altimeter[6]/setting-hpa", "qnh_hpa": "/instrumentation/altimeter[6]/setting-hpa",
"qnh_inhg": "/instrumentation/altimeter[6]/setting-inhg", "qnh_inhg": "/instrumentation/altimeter[6]/setting-inhg",
"roll": "/orientation/roll-deg", "roll": "/orientation/roll-deg",
"skid": "/instrumentation/iesi/slip-skid", "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)) { foreach (var name; keys(input)) {

View file

@ -5,7 +5,7 @@
viewBox="0 0 1024 1024" viewBox="0 0 1024 1024"
version="1.1" version="1.1"
id="svg2" id="svg2"
inkscape:version="1.1 (c68e22c387, 2021-05-23)" inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
sodipodi:docname="iesi.svg" sodipodi:docname="iesi.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
@ -38,16 +38,16 @@
inkscape:pageopacity="1" inkscape:pageopacity="1"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:window-width="1920" inkscape:window-width="1920"
inkscape:window-height="986" inkscape:window-height="974"
id="namedview371" id="namedview371"
showgrid="true" showgrid="true"
inkscape:zoom="0.93517029" inkscape:zoom="0.66126526"
inkscape:cx="815.35952" inkscape:cx="369.74572"
inkscape:cy="762.42799" inkscape:cy="772.76099"
inkscape:window-x="-11" inkscape:window-x="-11"
inkscape:window-y="-11" inkscape:window-y="-11"
inkscape:window-maximized="1" inkscape:window-maximized="1"
inkscape:current-layer="ATTflag" inkscape:current-layer="MsgBox"
showguides="true" showguides="true"
inkscape:snap-global="false" inkscape:snap-global="false"
units="pt" units="pt"
@ -72,11 +72,11 @@
inkscape:label="MsgBox"> inkscape:label="MsgBox">
<rect <rect
y="720.3349" y="720.3349"
x="304.32764" x="260.241"
height="91.330338" height="91.330338"
width="406.27161" width="490.202"
id="rect4448" 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 <text
inkscape:label="#text979" inkscape:label="#text979"
transform="scale(1.0000144,0.9999856)" transform="scale(1.0000144,0.9999856)"
@ -142,11 +142,11 @@
<g <g
id="ATTwarn"> id="ATTwarn">
<rect <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" id="rect4484"
width="243.81277" width="283.81299"
height="91.330353" height="91.330353"
x="390.0936" x="360.09399"
y="287.07605" /> y="287.07605" />
<text <text
id="text4486" id="text4486"
@ -164,14 +164,15 @@
</g> </g>
</g> </g>
<g <g
id="ATTflag"> id="ATTflag"
style="display:inline">
<rect <rect
y="720.3349" y="720.3349"
x="304.32764" x="260.241"
height="91.330338" height="91.330338"
width="406.27161" width="490.202"
id="attRstRect" 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 <text
inkscape:label="#text979" inkscape:label="#text979"
transform="scale(1.0000144,0.9999856)" transform="scale(1.0000144,0.9999856)"
@ -186,12 +187,12 @@
y="796.4032" 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> 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 <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" id="ATTflag_rect"
width="243.81277" width="280.59842"
height="91.330353" height="91.115768"
x="390.0936" x="361.70129"
y="287.07605" /> y="287.18335" />
<text <text
id="ATTflag_text" id="ATTflag_text"
y="363.13785" y="363.13785"
@ -212,7 +213,8 @@
inkscape:label="IESI"> inkscape:label="IESI">
<g <g
id="AI_horizon" id="AI_horizon"
inkscape:label="#g4573"> inkscape:label="#g4573"
style="display:inline">
<g <g
transform="translate(824.0447,-40.79798)" transform="translate(824.0447,-40.79798)"
inkscape:label="#g4312" inkscape:label="#g4312"
@ -618,7 +620,7 @@
</g> </g>
</g> </g>
<rect <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" id="AI_sky_bank"
width="663.18652" width="663.18652"
height="124.96" height="124.96"
@ -626,7 +628,7 @@
y="138.78481" y="138.78481"
inkscape:label="#rect5809" /> inkscape:label="#rect5809" />
<rect <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" id="AI_bank_scale_clip"
width="663.21997" width="663.21997"
height="229.7616" height="229.7616"
@ -634,7 +636,7 @@
y="138.67441" y="138.67441"
inkscape:label="#rect1094" /> inkscape:label="#rect1094" />
<rect <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" id="AI_horizon_clip"
width="663.21997" width="663.21997"
height="608.67889" 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(""); me.symbols.dmeRDist.setText("");
} }
# Hide heading bug 10 secs after change # Hide heading bug 45 secs after change
var vhdg_bug = getprop("/it-autoflight/input/hdg") or 0; var vhdg_bug = fmgc.Input.hdg.getValue();
var hdg_bug_active = getprop("/it-autoflight/custom/show-hdg"); var hdg_bug_active = fmgc.Custom.showHdg.getBoolValue();
if (hdg_bug_active == nil)
hdg_bug_active = 1;
if((me.in_mode("toggle_display_mode", ["MAP"]) and me.get_switch("toggle_display_type") == "CRT") 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")) 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{ 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 wp_group = me.element;
var alt = me.model.alt; var alt = me.model.alt;
var i = me.model.idx; var i = me.model.idx;

View file

@ -60,7 +60,7 @@ canvas.NDStyles["Airbus"] = {
lat_ctrl: "/it-autoflight/output/lat", lat_ctrl: "/it-autoflight/output/lat",
managed_val: 1, managed_val: 1,
ver_ctrl: "/it-autoflight/output/vert", 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", current_wp: "/FMGC/flightplan[2]/current-wp",
ap1: "/it-autoflight/output/ap1", ap1: "/it-autoflight/output/ap1",
ap2: "/it-autoflight/output/ap2", ap2: "/it-autoflight/output/ap2",
@ -595,18 +595,18 @@ canvas.NDStyles["Airbus"] = {
isMapStructure: 1, isMapStructure: 1,
update_on: ["toggle_display_mode","toggle_range"], update_on: ["toggle_display_mode","toggle_range"],
predicate: func(nd, layer) { 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 ); layer.group.setVisible( visible );
if (visible) { if (visible) {
layer.update(); layer.update();
} }
}, },
options: { options: {
# Overridable options: decel_node: "/instrumentation/nd/symbols/decel",
# 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
listen: [ listen: [
"fplan_active", "fplan_active",
"current_wp",
"wp_count",
"spd_ctrl", "spd_ctrl",
"ver_ctrl", "ver_ctrl",
"athr" "athr"
@ -746,14 +746,15 @@ canvas.NDStyles["Airbus"] = {
}, },
}, },
{ {
id: "taOnly", # the SVG ID # TODO: taOnly doesn"t need to use getprop polling in update(), use a listener instead!
impl: { # implementation hash id: "taOnly",
init: func(nd, symbol), # for updateCenter stuff, called during initialization in the ctor impl: {
predicate: func(nd) getprop("/instrumentation/tcas/inputs/mode") == 2, # the condition init: func(nd, symbol),
is_true: func(nd) nd.symbols.taOnly.show(), # if true, run this predicate: func(nd) getprop("/instrumentation/tcas/inputs/mode") == 2,
is_false: func(nd) nd.symbols.taOnly.hide(), # if false, run this is_true: func(nd) nd.symbols.taOnly.show(),
}, # end of taOnly behavior/callbacks is_false: func(nd) nd.symbols.taOnly.hide(),
}, # end of taOnly },
},
{ {
id: "tas", id: "tas",
impl: { impl: {
@ -761,7 +762,6 @@ canvas.NDStyles["Airbus"] = {
predicate: func(nd) getprop("/instrumentation/airspeed-indicator/true-speed-kt") >= 60, predicate: func(nd) getprop("/instrumentation/airspeed-indicator/true-speed-kt") >= 60,
is_true: func(nd) { is_true: func(nd) {
nd.symbols.tas.setText(sprintf("%3.0f",getprop("/instrumentation/airspeed-indicator/true-speed-kt"))); nd.symbols.tas.setText(sprintf("%3.0f",getprop("/instrumentation/airspeed-indicator/true-speed-kt")));
nd.symbols.tas.show();
}, },
is_false: func(nd){ is_false: func(nd){
nd.symbols.tas.setText("---"); 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; var deg = math.round(getprop("/FMGC/flightplan[2]/current-leg-course-mag")) or 0;
} }
if (deg != nil) { if (deg != nil) {
nd.symbols.wpActiveCrs.setText(sprintf("%03.0f", deg) ~ "°"); nd.symbols.wpActiveCrs.setText(sprintf("%03.0f°", deg));
nd.symbols.wpActiveCrs.show(); nd.symbols.wpActiveCrs.show();
} else { } else {
nd.symbols.wpActiveCrs.hide(); nd.symbols.wpActiveCrs.hide();
@ -1324,7 +1324,7 @@ canvas.NDStyles["Airbus"] = {
id:"curTrkPtr", id:"curTrkPtr",
impl: { impl: {
init: func(nd,symbol), 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 (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), and abs(nd.aircraft_source.get_trk_mag() - nd.aircraft_source.get_hdg_mag()) <= 42),
is_true: func(nd) { is_true: func(nd) {
@ -1368,7 +1368,7 @@ canvas.NDStyles["Airbus"] = {
impl: { impl: {
init: func(nd,symbol), init: func(nd,symbol),
predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and 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 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))), (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))),
is_true: func(nd) { is_true: func(nd) {
@ -1531,6 +1531,8 @@ canvas.NDStyles["Airbus"] = {
predicate: func(nd) (getprop("/instrumentation/airspeed-indicator/true-speed-kt") >= 100), predicate: func(nd) (getprop("/instrumentation/airspeed-indicator/true-speed-kt") >= 100),
is_true: func(nd) { is_true: func(nd) {
var windDir = pts.Instrumentation.PFD.windDirection.getValue() or 0; 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)); nd.symbols.wind.setText(sprintf("%03.0f / %02.0f",windDir,pts.Instrumentation.PFD.windSpeed.getValue() or 0));
}, },
is_false: func(nd) { 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), 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) { is_true: func(nd) {
nd.symbols.windArrow.show(); 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); nd.symbols.windArrow.setRotation(windArrowRot*D2R);
}, },
is_false: func(nd) nd.symbols.windArrow.hide(), 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_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_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_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 = { var canvas_pfd = {
middleOffset: 0, middleOffset: 0,
@ -776,7 +777,7 @@ var canvas_pfd = {
getKeys: func() { 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", 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_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", "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", "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", "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; me.tgt_kts = notification.targetKts;
if (notification.managedSpd) { 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_ias = fmgc.FMGCInternal.vappSpeedSet ? fmgc.FMGCInternal.vapp_appr : fmgc.FMGCInternal.vapp;
me.tgt_kts = 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) { } else if (fmgc.FMGCInternal.phase == 6) {
@ -1279,16 +1280,14 @@ var canvas_pfd = {
me["machError"].hide(); me["machError"].hide();
if (me.ind_mach >= 0.999) { if (me.ind_mach >= 0.999) {
me["ASI_mach"].setText("999"); me["ASI_mach"].setText(".999");
} else { } 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) { if (me.ind_mach >= 0.5) {
me["ASI_mach_decimal"].show();
me["ASI_mach"].show(); me["ASI_mach"].show();
} else { } else {
me["ASI_mach_decimal"].hide();
me["ASI_mach"].hide(); me["ASI_mach"].hide();
} }
} else { } else {
@ -2052,7 +2051,6 @@ var input = {
thr2: "/controls/engines/engine[1]/throttle-pos", thr2: "/controls/engines/engine[1]/throttle-pos",
decision: "/instrumentation/mk-viii/inputs/arinc429/decision-height", decision: "/instrumentation/mk-viii/inputs/arinc429/decision-height",
decel: "/FMGC/internal/decel",
radio: "/FMGC/internal/radio", radio: "/FMGC/internal/radio",
baro: "/FMGC/internal/baro", baro: "/FMGC/internal/baro",

View file

@ -1,19 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg <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" sodipodi:docname="pfd.svg"
inkscape:version="0.91 r13725" inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
id="svg2" id="svg2"
version="1.1" version="1.1"
viewBox="0 0 1024 1024" viewBox="0 0 1024 1024"
height="1024pt" 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 <metadata
id="metadata375"> id="metadata375">
<rdf:RDF> <rdf:RDF>
@ -37,17 +37,17 @@
units="pt" units="pt"
inkscape:snap-global="false" inkscape:snap-global="false"
showguides="true" showguides="true"
inkscape:current-layer="svg2" inkscape:current-layer="ALT_group"
inkscape:window-maximized="1" inkscape:window-maximized="1"
inkscape:window-y="-8" inkscape:window-y="-11"
inkscape:window-x="-8" inkscape:window-x="-11"
inkscape:cy="245.80636" inkscape:cy="673.69595"
inkscape:cx="411.71903" inkscape:cx="1065.6983"
inkscape:zoom="0.35355341" inkscape:zoom="5.6568545"
showgrid="false" showgrid="false"
id="namedview371" id="namedview371"
inkscape:window-height="657" inkscape:window-height="974"
inkscape:window-width="1280" inkscape:window-width="1920"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:pageopacity="1" inkscape:pageopacity="1"
guidetolerance="10" guidetolerance="10"
@ -230,8 +230,7 @@
y="480.29712" y="480.29712"
id="text4718" id="text4718"
transform="scale(0.95383277,1.0484018)" transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4720" id="tspan4720"
x="381.24359" x="381.24359"
@ -244,8 +243,7 @@
y="480.29608" y="480.29608"
x="593.11237" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="480.29608"
x="593.11237" x="593.11237"
@ -258,8 +256,7 @@
y="367.48999" y="367.48999"
x="381.24359" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="367.48999"
x="381.24359" x="381.24359"
@ -272,8 +269,7 @@
y="367.4892" y="367.4892"
id="text5097" id="text5097"
transform="scale(0.95383069,1.0484041)" transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5099" id="tspan5099"
x="593.11237" x="593.11237"
@ -286,8 +282,7 @@
y="268.78375" y="268.78375"
id="text5125" id="text5125"
transform="scale(0.95383277,1.0484018)" transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5127" id="tspan5127"
x="381.24359" x="381.24359"
@ -300,8 +295,7 @@
y="268.78317" y="268.78317"
x="593.11237" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="268.78317"
x="593.11237" x="593.11237"
@ -314,8 +308,7 @@
y="155.97633" y="155.97633"
x="373.38058" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="155.97633"
x="373.38058" x="373.38058"
@ -328,8 +321,7 @@
y="155.976" y="155.976"
id="text5145" id="text5145"
transform="scale(0.95383069,1.0484041)" transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5147" id="tspan5147"
x="600.9754" x="600.9754"
@ -342,8 +334,7 @@
y="-13.234788" y="-13.234788"
x="365.51758" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="-13.234788"
x="365.51758" x="365.51758"
@ -356,8 +347,7 @@
y="-13.234759" y="-13.234759"
id="text5209" id="text5209"
transform="scale(0.95383069,1.0484041)" transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5211" id="tspan5211"
x="608.83844" x="608.83844"
@ -374,8 +364,7 @@
y="705.91138" y="705.91138"
x="381.24359" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="705.91138"
x="381.24359" x="381.24359"
@ -388,8 +377,7 @@
y="705.90985" y="705.90985"
id="text4517" id="text4517"
transform="scale(0.95383069,1.0484041)" transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4519" id="tspan4519"
x="593.11237" x="593.11237"
@ -402,8 +390,7 @@
y="790.51678" y="790.51678"
id="text4541" id="text4541"
transform="scale(0.95383277,1.0484018)" transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4543" id="tspan4543"
x="381.24359" x="381.24359"
@ -416,8 +403,7 @@
y="790.51508" y="790.51508"
x="593.11237" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="790.51508"
x="593.11237" x="593.11237"
@ -430,8 +416,7 @@
y="846.91992" y="846.91992"
x="381.24359" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="846.91992"
x="381.24359" x="381.24359"
@ -444,8 +429,7 @@
y="846.91803" y="846.91803"
id="text4553" id="text4553"
transform="scale(0.95383069,1.0484041)" transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4555" id="tspan4555"
x="593.11237" x="593.11237"
@ -458,8 +442,7 @@
y="959.72705" y="959.72705"
id="text4581" id="text4581"
transform="scale(0.95383277,1.0484018)" transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4583" id="tspan4583"
x="373.38058" x="373.38058"
@ -472,8 +455,7 @@
y="959.72498" y="959.72498"
x="600.9754" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="959.72498"
x="600.9754" x="600.9754"
@ -486,8 +468,7 @@
y="1128.9375" y="1128.9375"
x="365.51758" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="1128.9375"
x="365.51758" x="365.51758"
@ -500,8 +481,7 @@
y="1128.9351" y="1128.9351"
id="text4593" id="text4593"
transform="scale(0.95383069,1.0484041)" transform="scale(0.95383069,1.0484041)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4595" id="tspan4595"
x="608.83844" x="608.83844"
@ -688,10 +668,9 @@
id="text4924" id="text4924"
y="178.57314" y="178.57314"
x="392.94345" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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"
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"
y="178.57314" y="178.57314"
x="392.94345" x="392.94345"
id="tspan4926" id="tspan4926"
@ -703,8 +682,7 @@
y="178.57445" y="178.57445"
id="text4958" id="text4958"
inkscape:label="#text4314" inkscape:label="#text4314"
transform="scale(0.97051544,1.0303803)" transform="scale(0.97051544,1.0303803)"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4960" id="tspan4960"
x="530.78998" x="530.78998"
@ -717,8 +695,7 @@
y="666.06818" y="666.06818"
id="text4970" id="text4970"
inkscape:label="#text4314" inkscape:label="#text4314"
transform="scale(0.97051987,1.0303756)" transform="scale(0.97051987,1.0303756)"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4972" id="tspan4972"
x="420.73514" x="420.73514"
@ -731,8 +708,7 @@
y="666.06818" y="666.06818"
x="502.99374" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="666.06818"
x="502.99374" x="502.99374"
@ -1142,8 +1118,7 @@
y="404.63544" y="404.63544"
id="text4314" id="text4314"
inkscape:label="#text4314" inkscape:label="#text4314"
transform="scale(0.97051454,1.0303813)" transform="scale(0.97051454,1.0303813)"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4407" id="tspan4407"
x="202.60973" x="202.60973"
@ -1156,8 +1131,7 @@
y="404.63544" y="404.63544"
x="721.12775" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="404.63544"
x="721.12775" x="721.12775"
@ -1245,17 +1219,16 @@
inkscape:transform-center-y="245.55937" inkscape:transform-center-y="245.55937"
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="511.25748"
y="680.72845" y="680.72845"
id="AI_agl" id="AI_agl"
transform="scale(0.87678236,1.1405339)" transform="scale(0.87678236,1.1405339)"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4624" id="tspan4624"
x="511.25748" x="511.25748"
y="680.72845" 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>
<g <g
id="AI_stick" id="AI_stick"
@ -1523,7 +1496,7 @@
id="tspan5094" id="tspan5094"
x="1019.0017" x="1019.0017"
y="569.32635" 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 <text
transform="scale(0.87676975,1.1405503)" transform="scale(0.87676975,1.1405503)"
id="text5100" id="text5100"
@ -1531,7 +1504,7 @@
x="1019.0017" 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" 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 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" y="628.34387"
x="1019.0017" x="1019.0017"
id="tspan5098" id="tspan5098"
@ -1547,7 +1520,7 @@
id="tspan5102" id="tspan5102"
x="1019.0017" x="1019.0017"
y="687.27924" 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>
<g <g
id="g5092" id="g5092"
@ -1605,7 +1578,7 @@
x="1086.9194" 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" 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 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" y="183.6866"
x="1086.9194" x="1086.9194"
id="tspan5128" id="tspan5128"
@ -1621,7 +1594,7 @@
id="tspan5132" id="tspan5132"
x="1086.9194" x="1086.9194"
y="246.63768" 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 <text
transform="scale(0.87678236,1.1405339)" transform="scale(0.87678236,1.1405339)"
id="text5138" id="text5138"
@ -1629,7 +1602,7 @@
x="1086.9194" 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" 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 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" y="309.50116"
x="1086.9194" x="1086.9194"
id="tspan5136" id="tspan5136"
@ -1723,7 +1696,7 @@
id="tspan5136-1" id="tspan5136-1"
x="1147.7107" x="1147.7107"
y="405.05588" 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>
</g> </g>
<rect <rect
@ -1986,10 +1959,10 @@
id="FMA_manmode" id="FMA_manmode"
y="74.429817" y="74.429817"
x="125.31013" 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" xml:space="preserve"
inkscape:label="#text983"><tspan 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" y="74.429817"
x="125.31013" x="125.31013"
id="tspan4307" id="tspan4307"
@ -1997,7 +1970,7 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="125.84993"
y="33.759209" y="33.759209"
id="FMA_man" id="FMA_man"
@ -2006,7 +1979,7 @@
id="tspan4303" id="tspan4303"
x="125.84993" x="125.84993"
y="33.759209" 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 <path
inkscape:label="#path987" inkscape:label="#path987"
sodipodi:nodetypes="cc" sodipodi:nodetypes="cc"
@ -2017,7 +1990,7 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="505.48523"
y="115.0584" y="115.0584"
id="FMA_ctr_msg" id="FMA_ctr_msg"
@ -2026,7 +1999,7 @@
id="tspan4614" id="tspan4614"
x="505.48523" x="505.48523"
y="115.0584" 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 <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" 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" 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" 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" xml:space="preserve"
inkscape:label="#text983"><tspan 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" y="34.986706"
x="370.20218" x="370.20218"
id="tspan4244" id="tspan4244"
@ -2059,7 +2032,7 @@
id="tspan4248" id="tspan4248"
x="422.80801" x="422.80801"
y="74.709473" 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 <text
transform="scale(0.87678236,1.1405339)" transform="scale(0.87678236,1.1405339)"
id="FMA_pitcharm2" 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" 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" xml:space="preserve"
inkscape:label="#text983"><tspan 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" y="74.709473"
x="305.3663" x="305.3663"
id="tspan4252" id="tspan4252"
@ -2076,7 +2049,7 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="629.61298"
y="34.635147" y="34.635147"
id="FMA_roll" id="FMA_roll"
@ -2085,11 +2058,11 @@
id="tspan4256" id="tspan4256"
x="629.61298" x="629.61298"
y="34.635147" 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 <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="629.22266"
y="74.709473" y="74.709473"
id="FMA_rollarm" id="FMA_rollarm"
@ -2098,7 +2071,7 @@
id="tspan4260" id="tspan4260"
x="629.22266" x="629.22266"
y="74.709473" 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 <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" 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" id="FMA_pitch_box"
@ -2206,7 +2179,7 @@
id="tspan4618" id="tspan4618"
x="859.21783" x="859.21783"
y="885.26117" 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 <g
id="ALT_target" id="ALT_target"
inkscape:label="#g4832"> inkscape:label="#g4832">
@ -2253,7 +2226,7 @@
id="tspan4800" id="tspan4800"
x="890.99316" x="890.99316"
y="506.26898" 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> </g>
<text <text
xml:space="preserve" xml:space="preserve"
@ -2262,8 +2235,7 @@
y="787.28491" y="787.28491"
id="ALT_digit_DN" id="ALT_digit_DN"
transform="scale(0.95382558,1.0484097)" transform="scale(0.95382558,1.0484097)"
inkscape:label="#text975" inkscape:label="#text975"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5112" id="tspan5112"
x="802.7406" x="802.7406"
@ -2276,8 +2248,7 @@
y="220.32645" y="220.32645"
x="802.7406" 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" 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" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><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" 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" y="220.32645"
x="802.7406" x="802.7406"
@ -2303,7 +2274,7 @@
id="tspan5024" id="tspan5024"
x="887.71545" x="887.71545"
y="775.94104" 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 <text
id="QNH_setting" id="QNH_setting"
y="885.26117" y="885.26117"
@ -2312,7 +2283,7 @@
xml:space="preserve" xml:space="preserve"
transform="scale(1.0000144,0.9999856)" transform="scale(1.0000144,0.9999856)"
inkscape:label="#text979"><tspan 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" y="885.26117"
x="907.61713" x="907.61713"
id="tspan977" id="tspan977"
@ -2443,16 +2414,16 @@
<text <text
xml:space="preserve" 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" 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" y="506.23941"
id="ALT_digits" id="ALT_digits"
transform="scale(0.95383277,1.0484018)" transform="scale(0.95383277,1.0484018)"
inkscape:label="#text975"><tspan inkscape:label="#text975"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan973" id="tspan973"
x="890.99316" x="895.2074"
y="506.23941" 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> </g>
<rect <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" 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" id="FMA_ap"
y="34.635155" y="34.635155"
x="1080.6229" 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" xml:space="preserve"
inkscape:label="#text983"><tspan 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" y="34.635155"
x="1080.6229" x="1080.6229"
id="tspan4268" id="tspan4268"
@ -2496,7 +2467,7 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="1080.6229"
y="74.709656" y="74.709656"
id="FMA_fd" id="FMA_fd"
@ -2505,16 +2476,16 @@
id="tspan4272" id="tspan4272"
x="1080.6229" x="1080.6229"
y="74.709656" 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 <text
transform="scale(0.87678236,1.1405339)" transform="scale(0.87678236,1.1405339)"
id="FMA_athr" id="FMA_athr"
y="115.05846" y="115.05846"
x="1080.6229" 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" xml:space="preserve"
inkscape:label="#text983"><tspan 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" y="115.05846"
x="1080.6229" x="1080.6229"
id="tspan4276" id="tspan4276"
@ -2522,7 +2493,7 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="874.48682"
y="34.635155" y="34.635155"
id="FMA_catmode" id="FMA_catmode"
@ -2531,16 +2502,16 @@
id="tspan4280" id="tspan4280"
x="874.48682" x="874.48682"
y="34.635155" 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 <text
transform="scale(0.87678236,1.1405339)" transform="scale(0.87678236,1.1405339)"
id="FMA_cattype" id="FMA_cattype"
y="74.709656" y="74.709656"
x="874.48682" 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" xml:space="preserve"
inkscape:label="#text983"><tspan 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" y="74.709656"
x="874.48682" x="874.48682"
id="tspan4284" id="tspan4284"
@ -2548,7 +2519,7 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="874.48682"
y="115.05846" y="115.05846"
id="FMA_nodh" id="FMA_nodh"
@ -2557,7 +2528,7 @@
id="tspan4288" id="tspan4288"
x="874.48682" x="874.48682"
y="115.05846" 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 <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" 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" id="FMA_catmode_box"
@ -2609,7 +2580,7 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="123.23077"
y="34.635437" y="34.635437"
id="FMA_thrust" id="FMA_thrust"
@ -2618,7 +2589,7 @@
id="tspan981" id="tspan981"
x="123.23077" x="123.23077"
y="34.635437" 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 <rect
inkscape:label="#rect4290" inkscape:label="#rect4290"
y="7.4160867" 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" 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" xml:space="preserve"
inkscape:label="#text983"><tspan 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" y="34.635437"
x="505.48523" x="505.48523"
id="tspan4354" id="tspan4354"
@ -2661,10 +2632,10 @@
id="FMA_dh" id="FMA_dh"
y="115.05846" y="115.05846"
x="831.23047" 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" xml:space="preserve"
inkscape:label="#text983"><tspan 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" y="115.05846"
x="831.23047" x="831.23047"
id="tspan4301" id="tspan4301"
@ -2672,7 +2643,7 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="934.0097"
y="115.05846" y="115.05846"
id="FMA_dhn" id="FMA_dhn"
@ -2681,7 +2652,7 @@
id="tspan4305" id="tspan4305"
x="934.0097" x="934.0097"
y="115.05846" 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 <g
inkscape:label="#g4375" inkscape:label="#g4375"
id="ALPHA_bars"> id="ALPHA_bars">
@ -4083,7 +4054,7 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="185.85408"
y="74.429558" y="74.429558"
id="FMA_flxtemp" id="FMA_flxtemp"
@ -4092,16 +4063,16 @@
id="tspan4316" id="tspan4316"
x="185.85408" x="185.85408"
y="74.429558" 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 <text
transform="scale(0.87678236,1.1405339)" transform="scale(0.87678236,1.1405339)"
id="FMA_lvrclb" id="FMA_lvrclb"
y="114.70684" y="114.70684"
x="123.23077" 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" xml:space="preserve"
inkscape:label="#text983"><tspan 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" y="114.70684"
x="123.23077" x="123.23077"
id="tspan4294" id="tspan4294"
@ -5665,28 +5636,15 @@
inkscape:label="#text975" inkscape:label="#text975"
transform="scale(0.95383277,1.0484018)" transform="scale(0.95383277,1.0484018)"
id="ASI_mach" id="ASI_mach"
y="835.1153" y="785.1153"
x="69.848434" 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" 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 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" y="835.1153"
x="69.848434" x="69.848434"
id="tspan4664" id="tspan4664"
sodipodi:role="line">000</tspan></text> 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 <text
inkscape:label="#text975" inkscape:label="#text975"
transform="scale(0.95382555,1.0484097)" transform="scale(0.95382555,1.0484097)"
@ -5777,12 +5735,11 @@
id="text4326" id="text4326"
y="348.03003" y="348.03003"
x="71.731003" 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" xml:space="preserve"
inkscape:label="#text983" inkscape:label="#text983"><tspan
sodipodi:linespacing="0%"><tspan
dx="0" 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" y="348.03003"
x="71.731003" x="71.731003"
id="tspan4328" id="tspan4328"
@ -5796,17 +5753,16 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="71.731506"
y="659.0799" y="659.0799"
id="text4332" id="text4332"
transform="scale(0.92333871,1.0830262)" transform="scale(0.92333871,1.0830262)"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4334" id="tspan4334"
x="71.731506" x="71.731506"
y="659.0799" 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>
<g <g
id="ASI_buss_ref" id="ASI_buss_ref"
@ -5883,14 +5839,14 @@
<text <text
xml:space="preserve" 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" 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" y="505.93329"
id="ALT_error" id="ALT_error"
transform="scale(0.95383278,1.0484018)" transform="scale(0.95383278,1.0484018)"
inkscape:label="#text975"><tspan inkscape:label="#text975"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4386-4-0" id="tspan4386-4-0"
x="851.70166" x="855.8645"
y="505.93329" 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> 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 <text
@ -5959,7 +5915,7 @@
x="34.684372" 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" 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 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" y="935.95209"
x="34.684372" x="34.684372"
id="tspan978" id="tspan978"
@ -5970,7 +5926,7 @@
x="34.684372" 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" 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 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" y="974.72784"
x="34.684372" x="34.684372"
id="tspan979" id="tspan979"
@ -5981,7 +5937,7 @@
x="34.684372" 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" 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 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" y="1013.5292"
x="34.684372" x="34.684372"
id="tspan780" id="tspan780"
@ -6092,52 +6048,52 @@
xml:space="preserve" xml:space="preserve"
inkscape:label="#text913" inkscape:label="#text913"
transform="scale(0.96366556,1.0377044)"><tspan 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" y="317.73038"
x="898.703" x="898.703"
sodipodi:role="line" sodipodi:role="line"
id="tspan919">40</tspan><tspan 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" y="344.55804"
x="898.703" x="898.703"
sodipodi:role="line" sodipodi:role="line"
id="tspan4300">20</tspan><tspan 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" y="371.38571"
x="898.703" x="898.703"
sodipodi:role="line" sodipodi:role="line"
id="tspan931">00</tspan><tspan 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" y="398.21338"
x="898.703" x="898.703"
sodipodi:role="line" sodipodi:role="line"
id="tspan927">80</tspan><tspan 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" y="425.04105"
x="898.703" x="898.703"
sodipodi:role="line" sodipodi:role="line"
id="tspan925">60</tspan><tspan 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" y="451.86871"
x="898.703" x="898.703"
sodipodi:role="line" sodipodi:role="line"
id="tspan923">40</tspan><tspan 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" y="478.69638"
x="898.703" x="898.703"
sodipodi:role="line" sodipodi:role="line"
id="tspan921">20</tspan><tspan 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" y="505.52405"
x="898.703" x="898.703"
sodipodi:role="line" sodipodi:role="line"
id="tspan917">00</tspan><tspan 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" y="532.35175"
x="898.703" x="898.703"
sodipodi:role="line" sodipodi:role="line"
id="tspan915">80</tspan><tspan 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" y="559.17938"
x="898.703" x="898.703"
sodipodi:role="line" sodipodi:role="line"
@ -6307,7 +6263,7 @@
<text <text
inkscape:label="#text983" inkscape:label="#text983"
xml:space="preserve" 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" x="61.095329"
y="74.429939" y="74.429939"
id="FMA_flxmode" id="FMA_flxmode"
@ -6316,7 +6272,7 @@
id="tspan4307-3" id="tspan4307-3"
x="61.095329" x="61.095329"
y="74.429939" 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 <text
inkscape:label="#text1607" inkscape:label="#text1607"
id="spdLimError" id="spdLimError"
@ -6375,17 +6331,17 @@
x="823.7511" 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" 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 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" y="453.28622"
x="823.7511" x="823.7511"
id="tspan1791" id="tspan1791"
sodipodi:role="line">N</tspan><tspan 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" y="506.08621"
x="823.7511" x="823.7511"
sodipodi:role="line" sodipodi:role="line"
id="tspan1795">E</tspan><tspan 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" y="558.88623"
x="823.7511" x="823.7511"
sodipodi:role="line" sodipodi:role="line"
@ -6402,7 +6358,7 @@
id="tspan1777" id="tspan1777"
x="417.56354" x="417.56354"
y="34.634907" 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 <rect
inkscape:label="#rect4290" inkscape:label="#rect4290"
y="896.48456" y="896.48456"
@ -6419,9 +6375,9 @@
xml:space="preserve" xml:space="preserve"
transform="scale(1.0000144,0.9999856)" transform="scale(1.0000144,0.9999856)"
inkscape:label="#text979"><tspan 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" y="928.04248"
x="852.95343" x="852.96283"
id="tspan977-3" id="tspan977-3"
sodipodi:role="line">11070 </tspan></text> sodipodi:role="line">11070 </tspan></text>
<text <text
@ -6435,7 +6391,7 @@
id="tspan1813" id="tspan1813"
x="909.43152" x="909.43152"
y="928.62128" 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 <text
inkscape:label="#text975" inkscape:label="#text975"
transform="scale(0.95382559,1.0484097)" 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]; var thrustState = [nil, nil];
# local variables # local variables
var takeoffConfig = 0;
var transmitFlag1 = 0; var transmitFlag1 = 0;
var transmitFlag2 = 0; var transmitFlag2 = 0;
var phaseVar3 = nil; var phaseVar3 = nil;
@ -2325,6 +2326,40 @@ var messages_priority_2 = func {
ECAM_controller.warningReset(fctlSpdBrkStillOut); 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(); 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) { 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; 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 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 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 overspeedVMO = warning.new(msg: " -VMO/MMO.......350 /.82", colour: "r"),
var overspeedGear = warning.new(msg: "-VLE...........280 /.67", colour: "r"), var overspeedGear = warning.new(msg: " -VLE...........280 /.67", colour: "r"),
var overspeedFlap = warning.new(msg: "-VFE................XXX", 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 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"), 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 cargoSmokeFwdGrdClsd = warning.new(msg: " .IF FWD CRG CLSD:", colour: "w"),
var cargoSmokeFwdAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"), var cargoSmokeFwdAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"),
var cargoSmokeFwdGrd = warning.new(msg: " .WHEN ON GROUND", colour: "w"), var cargoSmokeFwdGrd = warning.new(msg: " .WHEN ON GROUND", colour: "w"),
var cargoSmokeFwdDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"), var cargoSmokeFwdDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
var cargoSmokeFwdDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"), 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 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 cargoSmokeAftFans = warning.new(msg: " -CAB FANS...........OFF", colour: "c"),
var cargoSmokeAftGrdClsd = warning.new(msg: " .IF AFT CRG CLSD:", colour: "w"), var cargoSmokeAftGrdClsd = warning.new(msg: " .IF AFT CRG CLSD:", colour: "w"),
var cargoSmokeAftAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"), var cargoSmokeAftAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"),
var cargoSmokeAftGrd = warning.new(msg: " .WHEN ON GROUND", colour: "w"), var cargoSmokeAftGrd = warning.new(msg: " .WHEN ON GROUND", colour: "w"),
var cargoSmokeAftDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"), var cargoSmokeAftDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
var cargoSmokeAftDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"), var cargoSmokeAftDisemb = warning.new(msg: " -PAX..........DISEMBARK", colour: "c"),
# Lavatory SMOKE # Lavatory SMOKE
var lavatorySmoke = warning.new(msg: "SMOKE LAVATORY SMOKE ", colour: "r", aural: 0, light: 0, isMainMsg: 1), 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 # EXCES RESID PR
var excessResidPress = warning.new(msg: "CAB PR EXCES RESIDUAL PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1, sdPage: "cabPressPage"), 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 excessResidPressPack1 = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var excessResidPressPack2 = warning.new(msg: "-PACK 2.............OFF", colour: "c"), var excessResidPressPack2 = warning.new(msg: " -PACK 2.............OFF", colour: "c"),
var excessResidPressCabCr = warning.new(msg: "-CABIN CREW.......ALERT", colour: "c"), var excessResidPressCabCr = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
# ESS Bus on Bat # ESS Bus on Bat
# NEW EMER CONFIG # NEW EMER CONFIG
@ -494,6 +494,12 @@ var warnings = std.Vector.new([
# F/CTL SPD BRK STILL OUT # 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 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 # DIRECT LAW
var directLaw = warning.new(msg: "F/CTL DIRECT LAW", colour: "a", aural: 1, light: 1, isMainMsg: 1), 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 # Autothrust
var athr_offw = warning.new(msg: "AUTO FLT A/THR OFF", colour: "a", aural: 1, light: 1, isMainMsg: 1), 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 = 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 = 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 # TCAS FAULT
var tcasFault = warning.new(msg: "NAV TCAS FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1), 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 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 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 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 # FAC and Rudder System
var fac12Fault = warning.new(msg: "AUTO FLT FAC 1+2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1), 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) { } elsif (side == 2) {
fmgc.Input.ap2.setValue(0); 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 # Autothrust Disconnection

View file

@ -46,6 +46,7 @@ var Misc = {
}; };
var Position = { var Position = {
airborne5Secs: props.globals.getNode("/systems/fmgc/airborne-5-secs"),
gearAglFtTemp: 0, gearAglFtTemp: 0,
gearAglFt: props.globals.getNode("/position/gear-agl-ft", 1), gearAglFt: props.globals.getNode("/position/gear-agl-ft", 1),
indicatedAltitudeFt: props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1), indicatedAltitudeFt: props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1),
@ -365,9 +366,9 @@ var ITAF = {
# Preselect Heading # Preselect Heading
if (Output.latTemp != 0 and Output.latTemp != 9) { # Modes that always show HDG if (Output.latTemp != 0 and Output.latTemp != 9) { # Modes that always show HDG
if (Custom.hdgTime.getValue() + 45 >= Misc.elapsedSec.getValue()) { if (Custom.hdgTime.getValue() + 45 >= Misc.elapsedSec.getValue()) {
setprop("it-autoflight/custom/show-hdg", 1); Custom.showHdg.setBoolValue(1);
} else { } else {
setprop("it-autoflight/custom/show-hdg", 0); Custom.showHdg.setBoolValue(0);
} }
} }
@ -442,7 +443,7 @@ var ITAF = {
}, },
ap1Master: func(s) { ap1Master: func(s) {
if (s == 1) { 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); Output.ap1.setBoolValue(1);
me.updateFma(); me.updateFma();
Output.latTemp = Output.lat.getValue(); Output.latTemp = Output.lat.getValue();
@ -464,7 +465,7 @@ var ITAF = {
}, },
ap2Master: func(s) { ap2Master: func(s) {
if (s == 1) { 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); Output.ap2.setBoolValue(1);
me.updateFma(); me.updateFma();
Output.latTemp = Output.lat.getValue(); Output.latTemp = Output.lat.getValue();
@ -495,7 +496,7 @@ var ITAF = {
}, },
athrMaster: func(s) { athrMaster: func(s) {
if (s == 1) { 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); Output.athr.setBoolValue(1);
Custom.ThrLock.setValue(0); Custom.ThrLock.setValue(0);
Custom.Sound.enableAthrOff = 1; Custom.Sound.enableAthrOff = 1;

View file

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

View file

@ -195,7 +195,7 @@ var MessageController = {
typeIIMessages: std.Vector.new([ 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("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("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("CHECK DEST DATA", "amb", 0), #p.533
TypeIIMessage.new("GPS PRIMARY"),TypeIIMessage.new("GPS PRIMARY LOST", "amb", 0), TypeIIMessage.new("GPS PRIMARY"),TypeIIMessage.new("GPS PRIMARY LOST", "amb", 0),
]), ]),

View file

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

View file

@ -5,7 +5,6 @@ var isNoVia = [0, 0, 0];
var arrivalPage = { var arrivalPage = {
title: [nil, nil, nil], title: [nil, nil, nil],
subtitle: [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]], 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour L1: [nil, nil, "ack"], # content, title, colour
@ -132,7 +131,6 @@ var arrivalPage = {
_setupPageWithData: func() { _setupPageWithData: func() {
me.title = ["ARRIVAL", " TO ", left(me.id, 4)]; 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.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.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.R4 = [nil, nil, "ack"];
me.R5 = [nil, nil, "ack"]; me.R5 = [nil, nil, "ack"];
me.R6 = [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.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"]]; 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], title: [nil, nil, nil],
titleColour: "wht", titleColour: "wht",
subtitle: [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]], 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour L1: [nil, nil, "ack"], # content, title, colour

View file

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

View file

@ -1,6 +1,5 @@
var closestAirportPage = { var closestAirportPage = {
title: nil, 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]], 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour L1: [nil, nil, "ack"], # content, title, colour
@ -40,12 +39,13 @@ var closestAirportPage = {
me.title = "CLOSEST AIRPORTS"; me.title = "CLOSEST AIRPORTS";
me.C1[1] = " BRG DIST"; me.C1[1] = " BRG DIST";
me.R1[1] = "UTC "; 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.L6 = [" FREEZE", nil, "blu"];
me.R6 = ["EFOB/WIND ", nil, "wht"]; me.R6 = ["EFOB/WIND ", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 1]]; 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.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); canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
me.update(); me.update();
me.updateBrgDist(); me.updateBrgDist();
@ -98,31 +98,64 @@ var closestAirportPage = {
var magvarLocal = magvar(); var magvarLocal = magvar();
if (size(me.airports) >= 1) { if (size(me.airports) >= 1) {
me.cdVector[0] = courseAndDistance(me.airports[0]); 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) { if (size(me.airports) >= 2) {
me.cdVector[1] = courseAndDistance(me.airports[1]); 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) { if (size(me.airports) >= 3) {
me.cdVector[2] = courseAndDistance(me.airports[2]); 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) { if (size(me.airports) >= 4) {
me.cdVector[3] = courseAndDistance(me.airports[3]); 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) { 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); canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
}, },
manAirportCall: func(id) { manAirportCall: func(id) {
if (id == "CLR") { if (id == "CLR") {
me.manAirport = nil; me.manAirport = nil;
me.L5 = [nil, nil, "grn"]; me._setupPageWithData();
me.C5 = [nil, nil, "grn"];
me.R5 = [nil, nil, "grn"];
return; return;
} }
if (size(id) > 4) { if (size(id) > 4) {
@ -133,6 +166,7 @@ var closestAirportPage = {
me.manAirport = airportinfo(id); me.manAirport = airportinfo(id);
me.L5 = [id, nil, "grn"]; me.L5 = [id, nil, "grn"];
me.R5 = ["----", nil, "grn"]; me.R5 = ["----", nil, "grn"];
mcdu_scratchpad.scratchpads[me.computer].empty();
} }
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0); canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
} }

View file

@ -4,7 +4,6 @@ var isNoTransDep = [0, 0, 0];
var departurePage = { var departurePage = {
title: [nil, nil, nil], title: [nil, nil, nil],
subtitle: [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]], 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour L1: [nil, nil, "ack"], # content, title, colour
@ -106,7 +105,6 @@ var departurePage = {
_setupPageWithData: func() { _setupPageWithData: func() {
me.title = ["DEPARTURE", " FROM ", left(me.id, 4)]; 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.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.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.R4 = [nil, nil, "ack"];
me.R5 = [nil, nil, "ack"]; me.R5 = [nil, nil, "ack"];
me.R6 = [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.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"]]; 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.selectedRunway = me.depAirport[0].runway(me.runways[index - 2 + me.scrollRwy]);
me.makeTmpy(); me.makeTmpy();
fmgc.flightPlanController.flightplans[me.computer].departure_runway = me.selectedRunway; 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.updateRunways();
me.updatePage(); me.updatePage();
fmgc.flightPlanController.flightPlanChanged(me.computer); fmgc.flightPlanController.flightPlanChanged(me.computer);

View file

@ -3,7 +3,6 @@ var dirToFlag = 0;
var dirTo = { var dirTo = {
title: [nil], title: [nil],
subtitle: [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]], 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour L1: [nil, nil, "ack"], # content, title, colour
@ -46,7 +45,6 @@ var dirTo = {
me.R5 = ["[ ] ", "RADIAL OUT ", "blu"]; me.R5 = ["[ ] ", "RADIAL OUT ", "blu"];
me.arrowsMatrix = [[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", "blu", "blu", "blu", "blu", "ack"], ["ack", "blu", "blu", "ack", "ack", "ack"]]; 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.updateFromFpln();
me.updateTmpy(); me.updateTmpy();
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0); canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
@ -82,7 +80,7 @@ var dirTo = {
var x = 0; var x = 0;
me.vector = []; me.vector = [];
for (var i = 1 + (me.scroll); i < size(canvas_mcdu.myFpln[me.computer].planList) - 2; i = i + 1) { 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]) { if (canvas_mcdu.myFpln[me.computer].planList[i].index > fmgc.flightPlanController.arrivalIndex[2]) {
continue; continue;
} }
@ -148,7 +146,6 @@ var dirTo = {
fieldL1: func(text, override = 0, overrideIndex = -1) { fieldL1: func(text, override = 0, overrideIndex = -1) {
me.makeTmpy(); me.makeTmpy();
me.L1[0] = text; me.L1[0] = text;
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0]];
if (size(text) == 16) { if (size(text) == 16) {
# lat lon # lat lon
var lat = split("/", text)[0]; var lat = split("/", text)[0];
@ -237,7 +234,6 @@ var dirTo = {
leftFieldBtn: func(index) { leftFieldBtn: func(index) {
me.makeTmpy(); me.makeTmpy();
me.L1[0] = me.vector[index - 2].wp_name; 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); fmgc.flightPlanController.directTo(me.vector[index - 2], me.computer);
me.arrowsMatrix[0][1] = 0; 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 # 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; dirToFlag = 0;
fmgc.flightPlanController.destroyTemporaryFlightPlan(me.computer, 0); fmgc.flightPlanController.destroyTemporaryFlightPlan(me.computer, 0);
me.L1 = [" [ ]", " WAYPOINT", "blu"]; me.L1 = [" [ ]", " WAYPOINT", "blu"];
me.fontMatrix = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0]];
me.R1 = ["---- --- ", "UTC DIST ", "wht"]; me.R1 = ["---- --- ", "UTC DIST ", "wht"];
} else { } else {
mcdu_message(me.computer, "NOT ALLOWED"); mcdu_message(me.computer, "NOT ALLOWED");
@ -265,7 +260,6 @@ var dirTo = {
dirToFlag = 0; dirToFlag = 0;
fmgc.flightPlanController.destroyTemporaryFlightPlan(me.computer, 1); fmgc.flightPlanController.destroyTemporaryFlightPlan(me.computer, 1);
me.L1 = [" [ ]", " WAYPOINT", "blu"]; me.L1 = [" [ ]", " WAYPOINT", "blu"];
me.fontMatrix = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0]];
me.R1 = ["---- --- ", "UTC DIST ", "wht"]; me.R1 = ["---- --- ", "UTC DIST ", "wht"];
setprop("MCDU[" ~ me.computer ~ "]/page", "F-PLNA"); # todo - remember horizontal srcoll of f-plna? setprop("MCDU[" ~ me.computer ~ "]/page", "F-PLNA"); # todo - remember horizontal srcoll of f-plna?
} else { } else {

View file

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

View file

@ -160,22 +160,22 @@ var fplnItem = {
if (me.wp.wp_name == "DISCONTINUITY") { if (me.wp.wp_name == "DISCONTINUITY") {
canvas_mcdu.myLatRev[me.computer] = latRev.new(4, me.wp, me.index, me.computer); canvas_mcdu.myLatRev[me.computer] = latRev.new(4, me.wp, me.index, me.computer);
} elsif (fmgc.flightPlanController.temporaryFlag[me.computer]) { } elsif (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (me.index == fmgc.flightPlanController.arrivalIndex[me.computer]) { if (me.wp.wp_name == "PPOS" or me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
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)) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(2, me.wp, me.index, me.computer); 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 { } else {
canvas_mcdu.myLatRev[me.computer] = latRev.new(3, me.wp, me.index, me.computer); canvas_mcdu.myLatRev[me.computer] = latRev.new(3, me.wp, me.index, me.computer);
} }
} else { } else {
if (me.index == fmgc.flightPlanController.arrivalIndex[2]) { if (me.wp.wp_name == "PPOS" or me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
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)) {
canvas_mcdu.myLatRev[me.computer] = latRev.new(2, me.wp, me.index, me.computer); 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 { } else {
canvas_mcdu.myLatRev[me.computer] = latRev.new(3, me.wp, me.index, me.computer); 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; canvas_mcdu.myVertRev[me.computer] = nil;
if (fmgc.flightPlanController.temporaryFlag[me.computer]) { if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (me.index == fmgc.flightPlanController.arrivalIndex[me.computer]) { if (me.wp.wp_name == "PPOS" or me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
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)) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(3, me.wp.wp_name, me.index, me.computer, me.wp, me.plan); 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 { } else {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(2, me.wp.wp_name, me.index, me.computer, me.wp, me.plan); canvas_mcdu.myVertRev[me.computer] = vertRev.new(2, me.wp.wp_name, me.index, me.computer, me.wp, me.plan);
} }
} else { } else {
if (me.index == fmgc.flightPlanController.arrivalIndex[2]) { if (me.wp.wp_name == "PPOS" or me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
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)) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(3, me.wp.wp_name, me.index, me.computer, me.wp, me.plan); 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 { } else {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(2, me.wp.wp_name, me.index, me.computer, me.wp, me.plan); 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 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 L1: [nil, nil, "ack"], # content, title, colour
L2: [nil, nil, "ack"], L2: [nil, nil, "ack"],
L3: [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---"; return "----END OF ALTN F-PLN---";
} else if (type == "noAltnFpln") { } else if (type == "noAltnFpln") {
return "------NO ALTN F-PLN-----"; return "------NO ALTN F-PLN-----";
} else if (type == "decel") {
return "(DECEL)";
} else if (type == "empty") { } else if (type == "empty") {
return ""; return "";
} }
@ -509,9 +535,18 @@ var fplnPage = { # this one is only created once, and then updated - remember th
setprop("MCDU[" ~ me.computer ~ "]/page", "LATREV"); setprop("MCDU[" ~ me.computer ~ "]/page", "LATREV");
} }
} else { } 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) { 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) { if (returny == 3) {
mcdu_message(me.computer, "DIR TO IN PROGRESS"); mcdu_message(me.computer, "DIR TO IN PROGRESS");
} elsif (returny == 0) { } 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); removelistener(engine_one_chk_OOOI);
waitingOOOIChange.start(); waitingOOOIChange.start();
} }
},0,0); },0,0);

View file

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

View file

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

View file

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

View file

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

View file

@ -2,7 +2,6 @@ var latRev = {
title: [nil, nil, nil], title: [nil, nil, nil],
titleColour: "wht", titleColour: "wht",
subtitle: [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]], 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour L1: [nil, nil, "ack"], # content, title, colour
@ -48,22 +47,22 @@ var latRev = {
_setupPageWithData: func() { _setupPageWithData: func() {
if (me.type == 2) { if (me.type == 2) {
me.title = ["LAT REV", " FROM ", "PPOS"]; 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.L2 = [" OFFSET", nil, "wht"];
me.L3 = [" HOLD", nil, "wht"]; me.L3 = [" HOLD", nil, "wht"];
me.L6 = [" RETURN", nil, "wht"]; me.L6 = [" RETURN", nil, "wht"];
me.R1 = ["FIX INFO ", 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.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.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) { } elsif (me.type == 4) {
me.title = ["LAT REV", " FROM ", "DISCON"]; me.title = ["LAT REV", " FROM ", "DISCON"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"]; me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.R4 = ["[ ]", "NEW DEST", "blu"]; me.R4 = ["[ ]", "NEW DEST ", "blu"];
me.L6 = [" RETURN", nil, "wht"]; me.L6 = [" RETURN", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [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"]]; 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 { } else {
if (me.type == 0) { if (me.type == 0) {
me.title = ["LAT REV", " FROM ", left(me.wpt.wp_name, 4)]; me.title = ["LAT REV", " FROM ", left(me.wpt.wp_name, 4)];
@ -72,17 +71,18 @@ var latRev = {
} else { } else {
me.depAirport = findAirportsByICAO(me.wpt.wp_name); 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.L1 = [" DEPARTURE", nil, "wht"];
me.L2 = [" OFFSET", nil, "wht"]; me.L2 = [" OFFSET", nil, "wht"];
me.L6 = [" RETURN", nil, "wht"]; me.L6 = [" RETURN", nil, "wht"];
me.R1 = ["FIX INFO ", nil, "wht"]; me.R1 = ["FIX INFO ", nil, "wht"];
me.R2 = ["[ ]°/[ ]°/[ ]", "LL XING/INCR/NO", "blu"]; me.R2 = ["[ ]°/[]°/[]", "LL XING/INCR/NO", "blu"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"]; me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.R4 = ["[ ]", "NEW DEST", "blu"]; me.R4 = ["[ ]", "NEW DEST ", "blu"];
me.arrowsMatrix = [[1, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0]]; 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.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) { } elsif (me.type == 1) {
me.title = ["LAT REV", " FROM ", left(me.wpt.wp_name, 4)]; 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]]; me.arrowsMatrix = [[0, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0]];
@ -92,7 +92,9 @@ var latRev = {
} else { } else {
me.arrAirport = findAirportsByICAO(me.wpt.wp_name); 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"]; me.L3 = [" ALTN", nil, "wht"];
if (fmgc.FMGCInternal.altAirportSet) { if (fmgc.FMGCInternal.altAirportSet) {
me.L4 = [" ALTN", " ENABLE", "blu"]; me.L4 = [" ALTN", " ENABLE", "blu"];
@ -102,8 +104,7 @@ var latRev = {
} }
me.L6 = [" RETURN", nil, "wht"]; me.L6 = [" RETURN", nil, "wht"];
me.R1 = ["ARRIVAL ", nil, "wht"]; me.R1 = ["ARRIVAL ", nil, "wht"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"]; me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0]];
} elsif (me.type == 3) { } elsif (me.type == 3) {
me.title = ["LAT REV", " FROM ", me.wpt.wp_name]; me.title = ["LAT REV", " FROM ", me.wpt.wp_name];
me.arrowsMatrix = [[0, 0, 1, 1, 0, 1], [1, 0, 0, 0, 1, 0]]; 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.L6 = [" RETURN", nil, "wht"];
me.R1 = ["FIX INFO ", nil, "wht"]; me.R1 = ["FIX INFO ", nil, "wht"];
me.R3 = ["[ ]", "NEXT WPT ", "blu"]; me.R3 = ["[ ]", "NEXT WPT ", "blu"];
me.R4 = ["[ ]", "NEW DEST", "blu"]; me.R4 = ["[ ]", "NEW DEST ", "blu"];
me.R5 = ["AIRWAYS ", nil, "wht"]; 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 { } else {
var sign = degrees >= 0 ? "E" : "W"; 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.vrset = 0;
fmgc.FMGCInternal.v2 = 0; fmgc.FMGCInternal.v2 = 0;
fmgc.FMGCInternal.v2set = 0; fmgc.FMGCInternal.v2set = 0;
setprop("/FMGC/internal/accel-agl-ft", 1500); #eventually set to 1500 above runway setprop("/FMGC/internal/accel-agl-ft", 1500); #eventually set to 1500 above runway
setprop("/MCDUC/thracc-set", 0); setprop("/MCDUC/thracc-set", 0);
setprop("/FMGC/internal/to-flap", 0); fmgc.FMGCInternal.toFlap = 0;
setprop("/FMGC/internal/to-ths", "0.0"); fmgc.FMGCInternal.toThs = 0.0;
setprop("/FMGC/internal/flap-ths-set", 0); fmgc.FMGCInternal.toFlapThsSet = 0;
setprop("/FMGC/internal/flex", 0); setprop("/FMGC/internal/flex", 0);
setprop("/FMGC/internal/flex-set", 0); setprop("/FMGC/internal/flex-set", 0);
setprop("/FMGC/internal/eng-out-reduc", "1500"); setprop("/FMGC/internal/eng-out-reduc", "1500");
@ -524,7 +523,7 @@ var lskbutton = func(btn, i) {
} else if (page == "PERFAPPR") { } else if (page == "PERFAPPR") {
perfAPPRInput("L3",i); perfAPPRInput("L3",i);
} else if (page == "STATUS") { } else if (page == "STATUS") {
statusInput("L3",i); fmgc.switchDatabase();
} else if (page == "RADNAV") { } else if (page == "RADNAV") {
radnavInput("L3",i); radnavInput("L3",i);
} else if (page == "DATA") { } else if (page == "DATA") {
@ -788,7 +787,6 @@ var lskbutton = func(btn, i) {
canvas_mcdu.myDuplicate[i].pushButtonLeft(5); canvas_mcdu.myDuplicate[i].pushButtonLeft(5);
} else if (page == "CLOSESTAIRPORT") { } else if (page == "CLOSESTAIRPORT") {
canvas_mcdu.myClosestAirport[i].manAirportCall(mcdu_scratchpad.scratchpads[i].scratchpad); canvas_mcdu.myClosestAirport[i].manAirportCall(mcdu_scratchpad.scratchpads[i].scratchpad);
mcdu_scratchpad.scratchpads[i].empty();
} else if (page == "ATCMENU") { } else if (page == "ATCMENU") {
pageNode[i].setValue("NOTIFICATION"); pageNode[i].setValue("NOTIFICATION");
} else if (page == "FLTLOG") { } else if (page == "FLTLOG") {
@ -1173,7 +1171,16 @@ var rskbutton = func(btn, i) {
} }
pageNode[i].setValue("WINDDES"); pageNode[i].setValue("WINDDES");
} else if (page == "STATUS") { } 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") { } else if (page == "PERFTO") {
perfTOInput("R5",i); perfTOInput("R5",i);
} else if (page == "PERFAPPR") { } else if (page == "PERFAPPR") {
@ -1524,17 +1531,25 @@ var button = func(btn, i, event = "") {
} else { # up with buttonCLRDown[i]>4 } else { # up with buttonCLRDown[i]>4
buttonCLRDown[i] = 0; buttonCLRDown[i] = 0;
} }
} else if (btn == "LONGCLR") {
mcdu_scratchpad.scratchpads[i].empty();
} else if (btn == "DOT") { } else if (btn == "DOT") {
mcdu_scratchpad.scratchpads[i].addChar("."); mcdu_scratchpad.scratchpads[i].addChar(".");
} else if (btn == "PLUSMINUS") { } 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].clear();
mcdu_scratchpad.scratchpads[i].addChar("+"); mcdu_scratchpad.scratchpads[i].addChar(_toggle);
} else { } else {
mcdu_scratchpad.scratchpads[i].addChar("-"); mcdu_scratchpad.scratchpads[i].addChar("-");
} }
} else if (btn == "OVFY") { } 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 { } else {
mcdu_scratchpad.scratchpads[i].addChar(btn); mcdu_scratchpad.scratchpads[i].addChar(btn);
} }

View file

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

View file

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

View file

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

View file

@ -3,19 +3,55 @@
# Copyright (c) 2020 Josh Davidson (Octal450) # Copyright (c) 2020 Josh Davidson (Octal450)
# Copyright (c) 2020 Matthew Maring (mattmaring) # 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)) # TODO - DepArp elevation or current elevation (on ground only!!) -> math.round(fmgc.flightPlanController.flightplans[2].departure.elevation * M2FT))
var perfTOCheckVSpeeds = func(i) { var doneMessageCheck = 0;
if (fmgc.FMGCInternal.v1set == 1 and fmgc.FMGCInternal.vrset == 1 and fmgc.FMGCInternal.v2set == 1) { # only when v1/vr/v2 all sets var perfToCheckTakeoffData = func(i) {
if (fmgc.FMGCInternal.v1>fmgc.FMGCInternal.vr or fmgc.FMGCInternal.vr > fmgc.FMGCInternal.v2) mcdu_messageTypeII(i,"V1/VR/V2 DISAGREE"); if (fmgc.FMGCInternal.v1set and fmgc.FMGCInternal.vrset and fmgc.FMGCInternal.v2set) {
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"); if (doneMessageCheck) {
#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 :/ 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); fmgc.FMGCNodes.v1set.setValue(1);
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeeds(i); # do V-speeds validation perfTOCheckVSpeedsConsistency(i);
perfTOCheckVSpeedsLimitations(i);
} else { } else {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");
} }
@ -63,7 +100,8 @@ var perfTOInput = func(key, i) {
fmgc.FMGCInternal.vrset = 1; fmgc.FMGCInternal.vrset = 1;
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeeds(i); # do V-speeds validation perfTOCheckVSpeedsConsistency(i);
perfTOCheckVSpeedsLimitations(i);
} else { } else {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");
} }
@ -87,7 +125,8 @@ var perfTOInput = func(key, i) {
setprop("/it-autoflight/settings/togaspd", scratchpad); setprop("/it-autoflight/settings/togaspd", scratchpad);
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeeds(i); # do V-speeds validation perfTOCheckVSpeedsConsistency(i);
perfTOCheckVSpeedsLimitations(i);
} else { } else {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");
} }
@ -152,9 +191,9 @@ var perfTOInput = func(key, i) {
} }
} else if (key == "R3" and modifiable) { } else if (key == "R3" and modifiable) {
if (scratchpad == "CLR") { if (scratchpad == "CLR") {
setprop("/FMGC/internal/to-flap", 0); fmgc.FMGCInternal.toFlap = 0;
setprop("/FMGC/internal/to-ths", "0.0"); fmgc.FMGCInternal.toThs = 0;
setprop("/FMGC/internal/flap-ths-set", 0); fmgc.FMGCInternal.toFlapThsSet = 0;
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
} else { } else {
if (find("/", scratchpad) != -1) { if (find("/", scratchpad) != -1) {
@ -165,45 +204,71 @@ var perfTOInput = func(key, i) {
var trims = size(trim); var trims = size(trim);
var trima = substr(trim, 2); var trima = substr(trim, 2);
var trimb = substr(trim, 0, 3); var trimb = substr(trim, 0, 3);
var validtrima = num(trima) != nil and num(trima) >= 0 and num(trima) <= 7.0; 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; 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) { 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(); mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
perfToCheckTakeoffData(i);
} else if (trims == 5 and find("DN", trim) != -1 and validtrimb) { } 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(); mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
perfToCheckTakeoffData(i);
} else if (trims == 5 and find("UP", trim) != -1 and validtrima) { } 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(); mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
perfToCheckTakeoffData(i);
} else if (trims == 5 and find("UP", trim) != -1 and validtrimb) { } 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(); mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
perfToCheckTakeoffData(i);
} else { } else {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");
} }
} else if (flaps == 1 and num(flap) != nil and flap >= 0 and flap <= 3) { } else if (flaps == 1 and num(flap) != nil and flap >= 0 and flap <= 3) {
if (trims == 5 and find("DN", trim) != -1 and validtrima) { if (trims == 5 and find("DN", trim) != -1 and validtrima) {
setprop("/FMGC/internal/to-flap", flap); fmgc.FMGCInternal.toFlap = flap;
setprop("/FMGC/internal/to-ths", -1 * trima); fmgc.FMGCInternal.toThs = -1 * trima;
setprop("/FMGC/internal/flap-ths-set", 1);
mcdu_scratchpad.scratchpads[i].empty(); 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) { } else if (trims == 5 and find("DN", trim) != -1 and validtrimb) {
setprop("/FMGC/internal/to-flap", flap); fmgc.FMGCInternal.toFlap = flap;
setprop("/FMGC/internal/to-ths", -1 * trimb); fmgc.FMGCInternal.toThs = -1 * trimb;
setprop("/FMGC/internal/flap-ths-set", 1);
mcdu_scratchpad.scratchpads[i].empty(); 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) { } else if (trims == 5 and find("UP", trim) != -1 and validtrima) {
setprop("/FMGC/internal/to-flap", flap); fmgc.FMGCInternal.toFlap = flap;
setprop("/FMGC/internal/to-ths", trima); fmgc.FMGCInternal.toThs = trima;
setprop("/FMGC/internal/flap-ths-set", 1);
mcdu_scratchpad.scratchpads[i].empty(); 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) { } else if (trims == 5 and find("UP", trim) != -1 and validtrimb) {
setprop("/FMGC/internal/to-flap", flap); fmgc.FMGCInternal.toFlap = flap;
setprop("/FMGC/internal/to-ths", trimb); fmgc.FMGCInternal.toThs = trimb;
setprop("/FMGC/internal/flap-ths-set", 1);
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
if (fmgc.FMGCInternal.toFlapThsSet) {
perfToCheckTakeoffData(i);
}
fmgc.FMGCInternal.toFlapThsSet = 1;
} else { } else {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");
} }
@ -211,11 +276,13 @@ var perfTOInput = func(key, i) {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");
} }
} else if (size(scratchpad) == 1 and num(scratchpad) != nil and scratchpad >= 0 and scratchpad <= 3) { } else if (size(scratchpad) == 1 and num(scratchpad) != nil and scratchpad >= 0 and scratchpad <= 3) {
setprop("/FMGC/internal/to-flap", scratchpad); fmgc.FMGCInternal.toFlap = scratchpad;
if (!getprop("/FMGC/internal/flap-ths-set")) {
setprop("/FMGC/internal/flap-ths-set", 1);
}
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeedsLimitations(i);
if (fmgc.FMGCInternal.toFlapThsSet) {
perfToCheckTakeoffData(i);
}
fmgc.FMGCInternal.toFlapThsSet = 1;
} else { } else {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");
} }
@ -233,6 +300,8 @@ var perfTOInput = func(key, i) {
setprop("/FMGC/internal/flex-set", 1); setprop("/FMGC/internal/flex-set", 1);
var flex_calc = getprop("/FMGC/internal/flex") - getprop("environment/temperature-degc"); var flex_calc = getprop("/FMGC/internal/flex") - getprop("environment/temperature-degc");
setprop("/FMGC/internal/flex-cmd", flex_calc); setprop("/FMGC/internal/flex-cmd", flex_calc);
perfTOCheckVSpeedsLimitations(i);
perfToCheckTakeoffData(i);
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
} else { } else {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");

View file

@ -1,6 +1,5 @@
var pilotWaypointPage = { var pilotWaypointPage = {
title: nil, 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]], 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour L1: [nil, nil, "ack"], # content, title, colour

View file

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

View file

@ -1,6 +1,5 @@
var receivedMessagesPage = { var receivedMessagesPage = {
title: nil, 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]], 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour L1: [nil, nil, "ack"], # content, title, colour
@ -63,7 +62,6 @@ var receivedMessagesPage = {
me.L6 = [" RETURN", nil, "wht"]; me.L6 = [" RETURN", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]]; 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.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); canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
}, },
update: func() { update: func() {
@ -155,8 +153,6 @@ var receivedMessagesPage = {
var receivedMessagePage = { var receivedMessagePage = {
title: nil, 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour L1: [nil, nil, "ack"], # content, title, colour
L2: [nil, nil, "ack"], L2: [nil, nil, "ack"],
@ -229,7 +225,6 @@ var receivedMessagePage = {
me.L6 = [" RETURN", nil, "wht"]; me.L6 = [" RETURN", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]]; 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.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); canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
}, },
update: func() { 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 = { var vertRev = {
title: [nil, nil, nil], title: [nil, nil, nil],
subtitle: [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]], 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour L1: [nil, nil, "ack"], # content, title, colour
@ -85,20 +84,16 @@ var vertRev = {
me.R2 = ["RTA ", nil, "wht"]; me.R2 = ["RTA ", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 1, 1, 1], [0, 1, 0, 0, 0, 0]]; 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.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) { } elsif (me.type == 2) {
me.title = ["VERT REV", " AT ", me.id]; 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.L1 = ["", " EFOB ---.-", "wht"];
me.R1 = ["", "EXTRA ---.- ", "wht"]; me.R1 = ["", "EXTRA ---.- ", "wht"];
me.L2 = [fmgc.FMGCInternal.clbSpdLim ~ "/" ~ fmgc.FMGCInternal.clbSpdLimAlt, " CLB SPD LIM", "mag"]; me.L2 = [fmgc.FMGCInternal.clbSpdLim ~ "/" ~ fmgc.FMGCInternal.clbSpdLimAlt, " CLB SPD LIM", "mag"];
me.speed = me.getSpd(); me.speed = me.getSpd();
if (me.speed[0] == nil) { if (me.speed[0] == nil) {
me.L3 = [" [ ]", " SPD CSTR", "blu"]; me.L3 = ["[ ]", " SPD CSTR", "blu"];
me.fontMatrix[0][2] = 1;
} else { } else {
me.L3 = [me.speed[0], " SPD CSTR", me.speed[1]]; me.L3 = [me.speed[0], " SPD CSTR", me.speed[1]];
me.fontMatrix[0][2] = 0;
} }
me.L4 = [" CONSTANT MACH", nil, "wht"]; me.L4 = [" CONSTANT MACH", nil, "wht"];
me.L5 = [" WIND DATA", nil, "wht"]; me.L5 = [" WIND DATA", nil, "wht"];
@ -106,11 +101,9 @@ var vertRev = {
me.R2 = ["RTA ", nil, "wht"]; me.R2 = ["RTA ", nil, "wht"];
me.alt = me.getAlt(); me.alt = me.getAlt();
if (me.alt[0] == nil) { if (me.alt[0] == nil) {
me.R3 = ["[ ] ", "ALT CSTR ", "blu"]; me.R3 = ["[ ]", "ALT CSTR ", "blu"];
me.fontMatrix[1][2] = 1;
} else { } else {
me.R3 = [me.alt[0], "ALT CSTR ", me.alt[1]]; me.R3 = [me.alt[0], "ALT CSTR ", me.alt[1]];
me.fontMatrix[1][2] = 0;
} }
me.R6 = ["DES ", nil, "amb"]; 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. # 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.R2 = ["RTA ", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 1, 1, 1], [0, 1, 0, 0, 0, 0]]; 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.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) { } elsif (me.type == 1) {
if (size(me.id) > 4) { if (size(me.id) > 4) {
me.arrAirport = findAirportsByICAO(left(me.id, 4)); me.arrAirport = findAirportsByICAO(left(me.id, 4));
@ -155,7 +147,6 @@ var vertRev = {
me.R3 = ["3000", "G/S INTCP", "grn"]; me.R3 = ["3000", "G/S INTCP", "grn"];
me.arrowsMatrix = [[0, 0, 0, 1, 1, 1], [0, 1, 0, 0, 0, 0]]; 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.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(); me.updateR5();

View file

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

View file

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

View file

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

View file

@ -4,7 +4,6 @@
var windHISTPage = { var windHISTPage = {
title: nil, 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]], 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"]], arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour 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.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.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); canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
}, },
# makeTmpy: func() { # makeTmpy: func() {

View file

@ -144,13 +144,9 @@ var ADIRU = {
} }
}, },
_excessMotion: 0, _excessMotion: 0,
alignFault: props.globals.getNode("/systems/navigation/align-fault"),
alignLoop: func() { alignLoop: func() {
me._roll = pts.Orientation.roll.getValue(); if (me.alignFault.getBoolValue()) {
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) {
me.stopAlignNoAlign(); me.stopAlignNoAlign();
me._excessMotion = 1; me._excessMotion = 1;
me.update(); # update operative me.update(); # update operative

View file

@ -1,15 +1,5 @@
# A3XX Electrical System # A3XX Electrical System
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp) # Copyright (c) 2021 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;
# Main class # Main class
var ELEC = { var ELEC = {
@ -202,47 +192,33 @@ var ELEC = {
me.Fail.tr1Fault.setBoolValue(0); me.Fail.tr1Fault.setBoolValue(0);
me.Fail.tr2Fault.setBoolValue(0); me.Fail.tr2Fault.setBoolValue(0);
}, },
_FMGC1: 0, loop: func() {
_FMGC2: 0, # Empty
_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;
}
}
}, },
}; };
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 # Emesary
var A320Electrical = notifications.SystemRecipient.new("A320 Electrical",ELEC.loop,ELEC); var A320Electrical = notifications.SystemRecipient.new("A320 Electrical",ELEC.loop,ELEC);
emesary.GlobalTransmitter.Register(A320Electrical); 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> <autolandwarning>
<name>autolandwarning-single</name> <name>autolandwarning-single</name>
<mode>once</mode> <mode>once</mode>
<path>Aircraft/A320-family/Sounds/Cockpit/calvary-charge-once.wav</path> <path>Aircraft/A320-family/Sounds/Cockpit/click.wav</path>
<condition> <condition>
<equals> <equals>
<property>/instrumentation/pfd/logic/autoland/autoland-alarm</property> <property>/instrumentation/pfd/logic/autoland/autoland-alarm</property>

View file

@ -4,6 +4,34 @@
<system name="A320: ADR"> <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"> <channel name="ADR Inputs" execrate="2">
<fcs_function name="aero/alpha-deg-corrected"> <fcs_function name="aero/alpha-deg-corrected">

View file

@ -4,7 +4,120 @@
<system name="A320: FMGC"> <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"> <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"> <fcs_function name="/systems/fmgc/cas-compare/cas-1-to-3">
<function> <function>

View file

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

View file

@ -502,7 +502,7 @@
</channel> </channel>
<channel name="FMGC"> <channel name="FMGC" execrate="8">
<fcs_function name="/FMGC/internal/kts-to-mach-factor"> <fcs_function name="/FMGC/internal/kts-to-mach-factor">
<function> <function>
@ -524,4 +524,58 @@
</channel> </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> </system>

View file

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

View file

@ -23,6 +23,14 @@
<filter-gain>0.0</filter-gain> <filter-gain>0.0</filter-gain>
</predict-simple> </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> <filter>
<name>Gear AGL Altitude FT</name> <name>Gear AGL Altitude FT</name>
<type>gain</type> <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> <!DOCTYPE html>
<html lang="en" translate="no"> <html lang="en" translate="no">
<head> <head>
<title>A320 MCDU</title> <title>A320 MCDU</title>
<meta charset="utf-8"> <meta charset="utf-8">
@ -8,113 +7,6 @@
<link rel="manifest" href="mcdu_manifest.json" /> <link rel="manifest" href="mcdu_manifest.json" />
<meta name="apple-mobile-web-app-status-bar" content="#db4938" /> <meta name="apple-mobile-web-app-status-bar" content="#db4938" />
<meta name="theme-color" 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> <style>
body { body {
font-size: 5rem; font-size: 5rem;
@ -201,33 +93,32 @@
<table class="enter" style="width: 100%"> <table class="enter" style="width: 100%">
<tr> <tr>
<td><br></td> <td><br></td>
<td rowspan="8" style="vertical-align: top"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAANgAQMAAACIgIgUAAAAA1BMVEUAAACnej3aAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAgklEQVR42u3BAQEAAACCIP+vbkhAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7wazbwABRxu5owAAAABJRU5ErkJggg==" <td rowspan="8" style="vertical-align: top"><img data-element="lcdimage" src="" style="width: 100%" /></td>
style="width: 100%" /></td>
<td><br></td> <td><br></td>
</tr> </tr>
<tr> <tr>
<td button-id="1" button-side="l"></td> <td data-button="lskbutton:1"></td>
<td button-id="1" button-side="r"></td> <td data-button="rskbutton:1"></td>
</tr> </tr>
<tr> <tr>
<td button-id="2" button-side="l"></td> <td data-button="lskbutton:2"></td>
<td button-id="2" button-side="r"></td> <td data-button="rskbutton:2"></td>
</tr> </tr>
<tr> <tr>
<td button-id="3" button-side="l"></td> <td data-button="lskbutton:3"></td>
<td button-id="3" button-side="r"></td> <td data-button="rskbutton:3"></td>
</tr> </tr>
<tr> <tr>
<td button-id="4" button-side="l"></td> <td data-button="lskbutton:4"></td>
<td button-id="4" button-side="r"></td> <td data-button="rskbutton:4"></td>
</tr> </tr>
<tr> <tr>
<td button-id="5" button-side="l"></td> <td data-button="lskbutton:5"></td>
<td button-id="5" button-side="r"></td> <td data-button="rskbutton:5"></td>
</tr> </tr>
<tr> <tr>
<td button-id="6" button-side="l"></td> <td data-button="lskbutton:6"></td>
<td button-id="6" button-side="r"></td> <td data-button="rskbutton:6"></td>
</tr> </tr>
<tr> <tr>
<td><br></td> <td><br></td>
@ -236,107 +127,110 @@
</table> </table>
<table class="menu" style="width: 100%"> <table class="menu" style="width: 100%">
<tr> <tr>
<td class="dirto">DIR</td> <td data-button="pagebutton:dirto" class="dirto">DIR</td>
<td class="prog">PROG</td> <td data-button="pagebutton:prog" class="prog">PROG</td>
<td class="perf">PERF</td> <td data-button="pagebutton:perf" class="perf">PERF</td>
<td class="init">INIT</td> <td data-button="pagebutton:init" class="init">INIT</td>
<td class="data">DATA</td> <td data-button="pagebutton:data" class="data">DATA</td>
<td></td> <td></td>
<td>BRT</td> <td>BRT</td>
</tr> </tr>
<tr> <tr>
<td class="f-pln">F-PLN</td> <td data-button="pagebutton:f-pln" class="f-pln">F-PLN</td>
<td class="radnav">RAD<br>NAV</td> <td data-button="pagebutton:radnav" class="radnav">RAD<br>NAV</td>
<td class="fuel-pred">FUEL<br>PRED</td> <td data-button="pagebutton:fuel-pred" class="fuel-pred">FUEL<br>PRED</td>
<td>SEC<br>F-PLN</td> <td data-button="" >SEC<br>F-PLN</td>
<td class="atc">ATC<br>COMM</td> <td data-button="pagebutton:atc" class="atc">ATC<br>COMM</td>
<td class="mcdu">MCDU<br>MENU</td> <td data-button="pagebutton:mcdu" class="mcdu">MCDU<br>MENU</td>
<td>DIM</td> <td>DIM</td>
</tr> </tr>
</table> </table>
<table class="input" style="float: right; width: 62.5%"> <table class="input" style="float: right; width: 62.5%">
<tr> <tr>
<td>A</td> <td data-button="button:A">A</td>
<td>B</td> <td data-button="button:B">B</td>
<td>C</td> <td data-button="button:C">C</td>
<td>D</td> <td data-button="button:D">D</td>
<td>E</td> <td data-button="button:E">E</td>
</tr> </tr>
<tr> <tr>
<td>F</td> <td data-button="button:F">F</td>
<td>G</td> <td data-button="button:G">G</td>
<td>H</td> <td data-button="button:H">H</td>
<td>I</td> <td data-button="button:I">I</td>
<td>J</td> <td data-button="button:J">J</td>
</tr> </tr>
<tr> <tr>
<td>K</td> <td data-button="button:K">K</td>
<td>L</td> <td data-button="button:L">L</td>
<td>M</td> <td data-button="button:M">M</td>
<td>N</td> <td data-button="button:N">N</td>
<td>O</td> <td data-button="button:O">O</td>
</tr> </tr>
<tr> <tr>
<td>P</td> <td data-button="button:P">P</td>
<td>Q</td> <td data-button="button:Q">Q</td>
<td>R</td> <td data-button="button:R">R</td>
<td>S</td> <td data-button="button:S">S</td>
<td>T</td> <td data-button="button:T">T</td>
</tr> </tr>
<tr> <tr>
<td>U</td> <td data-button="button:U">U</td>
<td>V</td> <td data-button="button:V">V</td>
<td>W</td> <td data-button="button:W">W</td>
<td>X</td> <td data-button="button:X">X</td>
<td>Y</td> <td data-button="button:Y">Y</td>
</tr> </tr>
<tr> <tr>
<td>Z</td> <td data-button="button:Z">Z</td>
<td>/</td> <td data-button="button:SLASH">/</td>
<td style="font-size: 50%">SP</td> <td style="font-size: 50%" data-button="button:SP">SP</td>
<td style="font-size: 33%" class="disabled">OVFY<br></td> <td style="font-size: 33%" data-button="button:OVFY">OVFY<br></td>
<td style="font-size: 33%">CLR</td> <td style="font-size: 33%" data-button="button:CLR">CLR</td>
</tr> </tr>
</table> </table>
<table class="arrows" style="width: 29.5%"> <table class="arrows" style="width: 29.5%">
<tr> <tr>
<td class="airport">AIR<br>PORT</td> <td data-button="pagebutton:airport" class="airport">AIR<br>PORT</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
<td class="left"></td> <td data-button="arrowbutton:left" class="left"></td>
<td class="up"></td> <td data-button="arrowbutton:up" class="up"></td>
</tr> </tr>
<tr> <tr>
<td class="right"></td> <td data-button="arrowbutton:right" class="right"></td>
<td class="down"></td> <td data-button="arrowbutton:down" class="down"></td>
</tr> </tr>
</table> </table>
<table class="input" style="width: 30%"> <table class="input" style="width: 30%">
<tr> <tr>
<td>1</td> <td data-button="button:1">1</td>
<td>2</td> <td data-button="button:2">2</td>
<td>3</td> <td data-button="button:3">3</td>
</tr> </tr>
<tr> <tr>
<td>4</td> <td data-button="button:4">4</td>
<td>5</td> <td data-button="button:5">5</td>
<td>6</td> <td data-button="button:6">6</td>
</tr> </tr>
<tr> <tr>
<td>7</td> <td data-button="button:7">7</td>
<td>8</td> <td data-button="button:8">8</td>
<td>9</td> <td data-button="button:9">9</td>
</tr> </tr>
<tr> <tr>
<td>.</td> <td data-button="button:DOT">.</td>
<td>0</td> <td data-button="button:0">0</td>
<td <td
style="font-size: 3vw; width: 33.333333333333333333333333333333333333333333333333333333333333333333333%; /* :) */" class="disabled"> style="font-size: 3vw; width: 33.34%;" data-button="button:PLUSMINUS">
+/- +/-
</td> </td>
</tr> </tr>
</table> </table>
<script src="../js/mcdu.js"></script>
</body> </body>
</html> </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> <!DOCTYPE html>
<html> <html lang="en" translate="no">
<head> <head>
<title>A320 MCDU</title> <title>A320 MCDU</title>
<meta charset="utf-8">
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
<meta name="apple-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" /> <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 data-button="button:9" class="numberbutton number-col3"></div>
</div> </div>
<div class="number-row4"> <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: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>
<div class="alphabutton-row1"> <div class="alphabutton-row1">
@ -130,7 +131,7 @@
<div class="alphabutton-row6"> <div class="alphabutton-row6">
<div data-button="button:Z" class="alphabutton alphabutton-col1"></div> <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:SP" class="alphabutton alphabutton-col3"></div>
<div data-button="button:OVFY" class="alphabutton alphabutton-col4"></div> <div data-button="button:OVFY" class="alphabutton alphabutton-col4"></div>
<div data-button="button:CLR" class="alphabutton alphabutton-col5"></div> <div data-button="button:CLR" class="alphabutton alphabutton-col5"></div>
@ -140,7 +141,7 @@
</div> </div>
</div> </div>
</div> </div>
<script src="js/mcdu.js"> <script src="../js/mcdu.js">
</script> </script>
</body> </body>
</html> </html>

View file

@ -1,185 +1,166 @@
const MCDU = (function () { const MCDU = (function () {
const screenImageBaseUrl = '/screenshot?canvasindex=10&type=jpg'; const screenImageBaseUrl = '/screenshot?canvasindex=10&type=jpg';
const refreshInterval = 2000; const refreshInterval = 2000;
const body = document.body; const body = document.body;
let currentCacheBust = 0; let currentCacheBust = 0;
let lastSentText = ''; let lastSentText = '';
init(); init();
return { return {
toggleUsedUniverse toggleUsedUniverse
} }
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
function init() function init() {
{ body.dataset.lastTouch = 0;
body.dataset.lastTouch = 0; body.addEventListener('touchstart', preventZoomAction, { passive: false });
body.addEventListener('touchstart', preventZoomAction, { passive: false });
registerButtons();
registerButtons(); registerKeyboardInput();
registerKeyboardInput(); setInterval(refreshScreen, refreshInterval);
setInterval(refreshScreen, refreshInterval); refreshScreen();
refreshScreen(); }
}
function refreshScreen() {
function refreshScreen() { loadScreenImage(screenImageBaseUrl)
loadScreenImage(screenImageBaseUrl) .then(setScreenSrc)
.then(setScreenSrc) .catch(setScreenSrc);
.catch(setScreenSrc); }
}
function setScreenSrc(url) {
function setScreenSrc(url) { url = typeof url === 'string' ? url : '';
url = typeof url === 'string' ? url : ''; showScreenImageLoadState(url !== '');
showScreenImageLoadState(url !== ''); document.querySelectorAll('[data-element="lcdimage"]').forEach((imageElement) => {
document.querySelectorAll('[data-element="lcdimage"]').forEach((imageElement) => { imageElement.src = url;
imageElement.src = url; });
}); }
}
function loadScreenImage(baseUrl) {
function loadScreenImage(baseUrl) { currentCacheBust = new Date().getTime();
currentCacheBust = new Date().getTime(); return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => { const url = baseUrl + '?cacheBust=' + currentCacheBust;
const url = baseUrl + '?cacheBust=' + currentCacheBust; const img = new Image;
const img = new Image;
img.addEventListener('error', reject);
img.addEventListener('error', reject);
img.addEventListener('load', (event) => {
img.addEventListener('load', (event) => { showScreenImageLoadState(true);
showScreenImageLoadState(true); resolve(url);
resolve(url); });
}); img.src = url;
img.src = url; });
}); }
}
function showScreenImageLoadState(isOK) {
function showScreenImageLoadState(isOK) { if (!isOK) {
if (!isOK) { console.log('fail');
console.log('fail'); }
} }
}
function toggleUsedUniverse() {
function toggleUsedUniverse() { body.setAttribute('data-used-universe', body.getAttribute('data-used-universe') === '1' ? '0' : '1');
body.setAttribute('data-used-universe', body.getAttribute('data-used-universe') === '1' ? '0' : '1'); }
}
function registerButtons() {
function registerButtons() { document.querySelectorAll('[data-button]').forEach((buttonElement) => {
document.querySelectorAll('[data-button]').forEach((buttonElement) => { const buttonFunction = getButtonFunction(buttonElement);
const buttonFunction = getButtonFunction(buttonElement); if (!(typeof buttonFunction === 'function')) {
if (!(typeof buttonFunction === 'function')) { return;
return; }
} buttonElement.addEventListener('click', buttonFunction);
buttonElement.addEventListener('click', buttonFunction); buttonElement.addEventListener('touchstart', preventZoomAction, true);
buttonElement.addEventListener('touchstart', preventZoomAction, true); });
}); let btn = document.querySelector("[data-button=\"button:CLR\"]");
} if (btn) btn.addEventListener("contextmenu",function(e){
e.preventDefault();
function registerKeyboardInput() { sendButtonpress('button', 'LONGCLR');
const keyTranslation = { });
BACKSPACE: 'CLR' }
};
body.addEventListener('keyup', (event) => { function registerKeyboardInput() {
const key = event.key.toUpperCase(); const keyTranslation = {
if (key.match(/^[A-Z0-9/\-+.\ ]$/)) { BACKSPACE: 'CLR',
if (key === '+' || key === '-') { DELETE: 'LONGCLR',
return sendPlusMinusKey(); '+': 'PLUSMINUS',
} '-': 'PLUSMINUS',
return sendButtonpress('button', key); '/': 'SLASH',
} '.': 'DOT',
'^': 'OVFY',
const translatedKey = keyTranslation[key]; ' ': 'SP'
if (translatedKey) { };
return sendButtonpress('button', translatedKey); body.addEventListener('keyup', (event) => {
} const key = event.key.toUpperCase();
}); if (key.match(/^[A-Z0-9]$/)) {
} return sendButtonpress('button', key);
}
function getButtonFunction(buttonElement) { const translatedKey = keyTranslation[key]||false;
const buttonActions = buttonElement.getAttribute('data-button').split(':'); if (translatedKey) return sendButtonpress('button', translatedKey);
const actionKey = buttonActions[0]; });
const actionValue = buttonActions[1]; }
if(!actionKey) { function getButtonFunction(buttonElement) {
return; const buttonActions = buttonElement.getAttribute('data-button').split(':');
} const actionKey = buttonActions[0];
const actionValue = buttonActions[1];
if (actionKey === 'toggleUsedUniverse') {
return toggleUsedUniverse; if(!actionKey) {
} return;
}
if (actionKey === 'button' && actionValue === '-') {
return sendPlusMinusKey; if (actionKey === 'toggleUsedUniverse') {
} return toggleUsedUniverse;
}
return function () {
sendButtonpress(actionKey, actionValue); return function () {
}; sendButtonpress(actionKey, actionValue);
} };
}
function sendPlusMinusKey() {
if (lastSentText === '-') { function sendButtonpress(type, text) {
sendButtonpress('button', 'CLR') //console.log({ type, text });
.then(() => { let request = new XMLHttpRequest;
sendButtonpress('button', '+'); request.open("POST", "/run.cgi?value=nasal");
}) request.setRequestHeader("Content-Type", "application/json");
return; let body = JSON.stringify({
} "name": "",
"children": [
if (lastSentText === '+') { {
sendButtonpress('button', 'CLR') "name": "script",
.then(() => { "index": 0,
sendButtonpress('button', '-'); "value": "mcdu." + type + "(\"" + text + "\", 0);"
}) }
return; ]
} });
request.send(body);
sendButtonpress('button', '-'); return new Promise((resolve) => {
} request.addEventListener('load', () => {
lastSentText = text;
function sendButtonpress(type, text) { refreshScreen();
// console.log({ type, text }); resolve();
let request = new XMLHttpRequest; }, true);
request.open("POST", "/run.cgi?value=nasal"); });
request.setRequestHeader("Content-Type", "application/json"); }
let body = JSON.stringify({
"name": "", //https://exceptionshub.com/disable-double-tap-zoom-option-in-browser-on-touch-devices.html
"children": [ function preventZoomAction(event) {
{ const t2 = event.timeStamp;
"name": "script", const touchedElement = event.currentTarget;
"index": 0, const t1 = touchedElement.dataset.lastTouch || t2;
"value": "mcdu." + type + "(\"" + text + "\", 0);" const dt = t2 - t1;
} const fingers = event.touches.length;
] touchedElement.dataset.lastTouch = t2;
});
request.send(body); if (!dt || dt > 500 || fingers > 1) {
return new Promise((resolve) => { // no double-tap
request.addEventListener('load', () => { return;
lastSentText = text; }
refreshScreen();
resolve(); event.preventDefault();
}, true); event.target.click();
}); }
} })();
//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; background-color: #005670;
text-align: center; text-align: center;
color: #e4e4e4; color: #e4e4e4;
font-size: 16px;
padding: 0;
margin: 0;
} }
body { body {
height: 100vh;
width: 100vw;
color: #8db9ca; color: #8db9ca;
padding-top: 1rem;
} }
h1 { h1 {
@ -55,8 +57,9 @@
.choice { .choice {
display: inline-block; display: inline-block;
position: relative; position: relative;
width: calc(49% - 2vw); width: calc(50% - 40px);
padding: 1vh 1vw 75% 1vw; padding: 15px;
padding-bottom: 75%;
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
border: 1px solid transparent; border: 1px solid transparent;
@ -69,11 +72,12 @@
.choice img { .choice img {
position: absolute; position: absolute;
top: 0; top: 1rem;
left: 0; left: 0;
right: 0; right: 0;
margin: auto; margin: auto;
max-height: 100%; max-height: auto;
max-width: 100%;
border-radius: 8px; border-radius: 8px;
box-shadow: 4px 4px 6px #00000063; box-shadow: 4px 4px 6px #00000063;
} }
@ -99,9 +103,9 @@
<div class="chooser"> <div class="chooser">
<a href="WebPanel1/index.html" class="choice choice--1"> <a href="WebPanel1/index.html" class="choice choice--1">
<span class="button"> <span class="button">
abstract basic
</span> </span>
<img src="WebPanel1/screenshot.jpg"> <img src="WebPanel1/img/screenshot.jpg">
</a> </a>
<a href="WebPanel2/index.html" class="choice choice--2"> <a href="WebPanel2/index.html" class="choice choice--2">
<span class="button"> <span class="button">