Merge branch 'dev' into 3D
This commit is contained in:
commit
e028870b51
17 changed files with 1063 additions and 884 deletions
|
@ -4698,6 +4698,8 @@
|
|||
<file>Aircraft/A320-family/Nasal/Systems/tyresmoke.nas</file>
|
||||
</systems>
|
||||
<ecam>
|
||||
<file>Aircraft/A320-family/Nasal/ECAM/SystemDisplay.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/ECAM/ECAM-nodes.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/ECAM/ECAM-main.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/ECAM/ECAM-controller.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/ECAM/ECAM-logic.nas</file>
|
||||
|
|
|
@ -2167,7 +2167,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("sts");</script>
|
||||
<script>ecam.ECAMControlPanel.stsBtn();</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2186,7 +2186,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("apu");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("apuPage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2205,7 +2205,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("bleed");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("bleedPage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2224,7 +2224,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("press");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("cabPressPage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2243,7 +2243,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("elec");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("elecPage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2262,7 +2262,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("hyd");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("hydraulicPage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2281,7 +2281,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("fuel");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("fuelPage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2300,7 +2300,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("eng");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("enginePage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2319,7 +2319,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("cond");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("condPage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2338,7 +2338,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("door");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("doorPage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2357,7 +2357,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("wheel");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("wheelPage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
@ -2376,7 +2376,7 @@
|
|||
</greater-than-equals>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("fctl");</script>
|
||||
<script>ecam.ECAMControlPanel.sysPageBtn("fctlPage");</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
|
|
@ -297,7 +297,7 @@ var canvas_lowerECAM_base = {
|
|||
lowerECAM_hyd.page.hide();
|
||||
lowerECAM_wheel.page.hide();
|
||||
lowerECAM_cond.update();
|
||||
} else if (page == "crz") {
|
||||
} else if (page == "cruise") {
|
||||
lowerECAM_apu.page.hide();
|
||||
lowerECAM_bleed.page.hide();
|
||||
lowerECAM_cond.page.hide();
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="airbusND.svg"
|
||||
inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)"
|
||||
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||
xml:space="preserve"
|
||||
id="svg5180"
|
||||
height="1024"
|
||||
width="1024"
|
||||
version="1.1"><sodipodi:namedview
|
||||
version="1.1"
|
||||
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/"><sodipodi:namedview
|
||||
pagecolor="#000000"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
|
@ -26,13 +26,13 @@
|
|||
inkscape:window-height="1017"
|
||||
id="namedview102"
|
||||
showgrid="false"
|
||||
inkscape:zoom="3.1081105"
|
||||
inkscape:cx="904.96427"
|
||||
inkscape:cy="819.41055"
|
||||
inkscape:zoom="0.5494415"
|
||||
inkscape:cx="505.96833"
|
||||
inkscape:cy="727.10197"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="terrGroup"
|
||||
inkscape:current-layer="layer7"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
|
@ -41,7 +41,8 @@
|
|||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:snap-text-baseline="true"><sodipodi:guide
|
||||
inkscape:snap-text-baseline="true"
|
||||
inkscape:pagecheckerboard="0"><sodipodi:guide
|
||||
id="guide3167"
|
||||
orientation="1,0"
|
||||
position="512,811.5" /><sodipodi:guide
|
||||
|
@ -1466,7 +1467,26 @@
|
|||
sodipodi:role="line"
|
||||
id="tspan1346"
|
||||
x="935.7326"
|
||||
y="993.85461">.9</tspan></text></g></g><g
|
||||
y="993.85461">.9</tspan></text></g><g
|
||||
id="rangeRingMap"
|
||||
style="display:inline"
|
||||
inkscape:label="g5254-3"
|
||||
transform="matrix(0.86976028,0,0,0.86976028,66.2654,369.90654)"><path
|
||||
id="path4614-5"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 512.33846,407.68674 -1e-5,21.86538" /><path
|
||||
id="path5199-2"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:4.36902;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 414.34242,464.79018 17.39829,10.04491" /><path
|
||||
id="path5203-8"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:4.36902;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 569.56382,422.53255 -10.9327,18.93597" /><path
|
||||
id="path5207-2"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:4.36902;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 455.91753,422.9266 10.04491,17.3983" /><path
|
||||
id="path5211-5"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:4.36902;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 611.47202,463.94112 592.53604,474.8738" /></g></g><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="CTR"
|
||||
|
@ -2164,7 +2184,46 @@
|
|||
transform="matrix(1.02827,0,0,1.02827,9.2744,-29.1838)"
|
||||
inkscape:label="#g3956"
|
||||
id="g3230"
|
||||
style="display:inline" /></g><g
|
||||
style="display:inline" /><g
|
||||
id="rangeRingPlan"
|
||||
style="display:inline"
|
||||
inkscape:label="#g48782"><path
|
||||
id="path3028"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 605.60382,521.89362 h 21.85153" /><path
|
||||
id="path4632"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 399.0416,521.89362 h 20.08981" /><path
|
||||
id="path4618"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 512.33845,616.03005 V 636.1005" /><path
|
||||
id="path4614"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 512.33846,407.68674 -1e-5,21.86538" /><path
|
||||
id="path5197"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 593.23055,568.07129 18.92398,10.92577" /><path
|
||||
id="path5199"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 414.34242,464.79018 17.39829,10.04491" /><path
|
||||
id="path5201"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 465.39216,602.96315 -10.03523,17.38152" /><path
|
||||
id="path5203"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 569.56382,422.53255 -10.9327,18.93597" /><path
|
||||
id="path5205"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 559.19864,601.81473 10.92577,18.92399" /><path
|
||||
id="path5207"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 455.91753,422.9266 10.04491,17.3983" /><path
|
||||
id="path5209"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 431.04142,568.11278 413.6599,578.148" /><path
|
||||
id="path5211"
|
||||
style="display:inline;opacity:1;mix-blend-mode:screen;fill:none;stroke:#ffffff;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 611.47202,463.94112 592.53604,474.8738" /></g></g><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer9"
|
||||
inkscape:label="ND_BOTTOM_MEMO"
|
||||
|
@ -2271,7 +2330,11 @@
|
|||
id="tspan2199"
|
||||
x="510.7153"
|
||||
y="399.58936"
|
||||
style="font-size:53.3333px;line-height:1.25;fill:#ff0000">MAP NOT AVAIL</tspan></text></g><text
|
||||
style="font-size:53.3333px;line-height:1.25;fill:#ff0000">MAP NOT AVAIL</tspan></text></g><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer7"
|
||||
inkscape:label="ND_MAIN_MSG"
|
||||
style="display:inline"><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:53.3333px;line-height:0%;font-family:'Liberation Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
|
||||
x="510.7153"
|
||||
|
@ -2282,4 +2345,4 @@
|
|||
id="tspan3544"
|
||||
x="510.7153"
|
||||
y="537.58936"
|
||||
style="font-size:53.3333px;line-height:1.25;fill:#0dc04b">RANGE CHANGE</tspan></text></svg>
|
||||
style="font-size:53.3333px;line-height:1.25;fill:#0dc04b">RANGE CHANGE</tspan></text></g></svg>
|
||||
|
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 149 KiB |
|
@ -1094,6 +1094,16 @@ canvas.NDStyles["Airbus"] = {
|
|||
is_false: func(nd) nd.symbols.planArcs.hide(),
|
||||
}, # of planArcs.impl
|
||||
}, # of planArcs
|
||||
{
|
||||
id:"rangeRingPlan",
|
||||
impl: {
|
||||
init: func(nd,symbol),
|
||||
predicate: func(nd) (((nd.in_mode("toggle_display_mode", ["PLAN"])) or ((nd.get_switch("toggle_display_mode") == "MAP") and (nd.get_switch("toggle_centered"))))
|
||||
and (pts.Instrumentation.TCAS.Inputs.mode.getValue() >= 2) and (nd.rangeNm() <= 20) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))),
|
||||
is_true: func(nd) nd.symbols.rangeRingPlan.show(),
|
||||
is_false: func(nd) nd.symbols.rangeRingPlan.hide(),
|
||||
}, # of rangeRingPlan.impl
|
||||
}, # of rangeRingPlan
|
||||
{
|
||||
id:"rangeArcs",
|
||||
impl: {
|
||||
|
@ -1104,6 +1114,16 @@ canvas.NDStyles["Airbus"] = {
|
|||
is_false: func(nd) nd.symbols.rangeArcs.hide(),
|
||||
}, # of rangeArcs.impl
|
||||
}, # of rangeArcs
|
||||
{
|
||||
id:"rangeRingMap",
|
||||
impl: {
|
||||
init: func(nd,symbol),
|
||||
predicate: func(nd) ((nd.get_switch("toggle_display_mode") == "MAP") and (!nd.get_switch("toggle_centered"))
|
||||
and (pts.Instrumentation.TCAS.Inputs.mode.getValue() >= 2) and (nd.rangeNm() <= 20) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))),
|
||||
is_true: func(nd) nd.symbols.rangeRingMap.show(),
|
||||
is_false: func(nd) nd.symbols.rangeRingMap.hide(),
|
||||
}, # of rangeRingMap.impl
|
||||
}, # of rangeRingMap
|
||||
{
|
||||
id:"rangePln1",
|
||||
impl: {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# A3XX Electronic Centralised Aircraft Monitoring System
|
||||
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp)
|
||||
# Copyright (c) 2021 Jonathan Redpath (legoboyvdlp)
|
||||
|
||||
var lines = [props.globals.getNode("ECAM/msg/line1", 1), props.globals.getNode("ECAM/msg/line2", 1), props.globals.getNode("ECAM/msg/line3", 1), props.globals.getNode("ECAM/msg/line4", 1), props.globals.getNode("ECAM/msg/line5", 1), props.globals.getNode("ECAM/msg/line6", 1), props.globals.getNode("ECAM/msg/line7", 1), props.globals.getNode("ECAM/msg/line8", 1)];
|
||||
var linesCol = [props.globals.getNode("ECAM/msg/linec1", 1), props.globals.getNode("ECAM/msg/linec2", 1), props.globals.getNode("ECAM/msg/linec3", 1), props.globals.getNode("ECAM/msg/linec4", 1), props.globals.getNode("ECAM/msg/linec5", 1), props.globals.getNode("ECAM/msg/linec6", 1), props.globals.getNode("ECAM/msg/linec7", 1), props.globals.getNode("ECAM/msg/linec8", 1)];
|
||||
|
@ -29,145 +29,6 @@ var counterClear = 0;
|
|||
var noMainMsg = 0;
|
||||
var storeFirstWarning = nil;
|
||||
|
||||
var warningNodes = {
|
||||
Logic: {
|
||||
altitudeAlert: props.globals.initNode("/ECAM/warnings/altitude-alert/c-chord"),
|
||||
altitudeAlertSteady: props.globals.initNode("/ECAM/warnings/altitude-alert/altitude-alert-steady"),
|
||||
altitudeAlertFlash: props.globals.initNode("/ECAM/warnings/altitude-alert/altitude-alert-flash"),
|
||||
crossbleedFault: props.globals.initNode("/ECAM/warnings/logic/crossbleed-fault"),
|
||||
crossbleedWai: props.globals.initNode("/ECAM/warnings/logic/crossbleed-wai"),
|
||||
bleed1LoTempUnsuc: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-unsucc"),
|
||||
bleed1LoTempXbleed: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-xbleed"),
|
||||
bleed1LoTempBleed: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-bleed"),
|
||||
bleed1LoTempPack: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-pack"),
|
||||
bleed1WaiAvail: props.globals.initNode("/ECAM/warnings/logic/bleed-1-wai-avail"),
|
||||
bleed2LoTempUnsuc: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-unsucc"),
|
||||
bleed2LoTempXbleed: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-xbleed"),
|
||||
bleed2LoTempBleed: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-bleed"),
|
||||
bleed2LoTempPack: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-pack"),
|
||||
bleed2WaiAvail: props.globals.initNode("/ECAM/warnings/logic/bleed-2-wai-avail"),
|
||||
waiSysfault: props.globals.initNode("/ECAM/warnings/logic/wing-anti-ice-sys-fault"),
|
||||
waiLclosed: props.globals.initNode("/ECAM/warnings/flipflop/wing-anti-ice-left-closed"),
|
||||
waiRclosed: props.globals.initNode("/ECAM/warnings/flipflop/wing-anti-ice-right-closed"),
|
||||
procWaiShutdown: props.globals.initNode("/ECAM/warnings/logic/proc-wai-shutdown-output"),
|
||||
waiGndFlight: props.globals.initNode("/ECAM/warnings/logic/wing-anti-ice-gnd-fault"),
|
||||
pack12Fault: props.globals.initNode("/ECAM/warnings/logic/pack-1-2-fault"),
|
||||
pack1ResetPb: props.globals.initNode("/ECAM/warnings/logic/reset-pack-1-switch-cmd"),
|
||||
pack2ResetPb: props.globals.initNode("/ECAM/warnings/logic/reset-pack-2-switch-cmd"),
|
||||
cabinFans: props.globals.initNode("/ECAM/warnings/logic/cabin-fans-fault"),
|
||||
rtlu1Fault: props.globals.initNode("/ECAM/warnings/logic/rud-trav-lim-sys-1-fault"),
|
||||
rtlu2Fault: props.globals.initNode("/ECAM/warnings/logic/rud-trav-lim-sys-2-fault"),
|
||||
rtlu12Fault: props.globals.initNode("/ECAM/warnings/logic/rud-trav-lim-sys-fault"),
|
||||
fac12Fault: props.globals.initNode("/ECAM/warnings/logic/fac-12-fault"),
|
||||
fac1Fault: props.globals.initNode("/ECAM/warnings/logic/fac-1-fault"),
|
||||
fac2Fault: props.globals.initNode("/ECAM/warnings/logic/fac-2-fault"),
|
||||
stallWarn: props.globals.initNode("/ECAM/warnings/logic/stall/stall-warn-on"),
|
||||
yawDamper12Fault: props.globals.initNode("/ECAM/warnings/logic/yaw-damper-12-fault"),
|
||||
gearNotDown1: props.globals.initNode("/ECAM/warnings/fctl/gear-not-down-not-cancellable"),
|
||||
gearNotDown2: props.globals.initNode("/ECAM/warnings/fctl/gear-not-down-cancellable"),
|
||||
gearNotDownLocked: props.globals.initNode("/ECAM/warnings/fctl/gear-not-down-locked"),
|
||||
gearNotDownLockedFlipflop: props.globals.initNode("/ECAM/warnings/fctl/gear-not-downlocked-output"),
|
||||
blueGreen: props.globals.initNode("/ECAM/warnings/hyd/blue-green-failure"),
|
||||
blueGreenFuel: props.globals.initNode("/ECAM/warnings/hyd/blue-green-fuel-consumpt"),
|
||||
blueYellow: props.globals.initNode("/ECAM/warnings/hyd/blue-yellow-failure"),
|
||||
blueYellowFuel: props.globals.initNode("/ECAM/warnings/hyd/blue-yellow-fuel-consumpt"),
|
||||
greenYellow: props.globals.initNode("/ECAM/warnings/hyd/green-yellow-failure"),
|
||||
greenYellowFuel: props.globals.initNode("/ECAM/warnings/hyd/green-yellow-fuel-consumpt"),
|
||||
leftElevFail: props.globals.initNode("/ECAM/warnings/fctl/leftElevFault"),
|
||||
rightElevFail: props.globals.initNode("/ECAM/warnings/fctl/rightElevFault"),
|
||||
flapNotZero: props.globals.initNode("/ECAM/warnings/fctl/flaps-not-zero"),
|
||||
slatsConfig: props.globals.initNode("/ECAM/warnings/fctl/slats-config-output"),
|
||||
flapsConfig: props.globals.initNode("/ECAM/warnings/fctl/flaps-config-output"),
|
||||
spdBrkConfig: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-config-output"),
|
||||
pitchTrimConfig: props.globals.initNode("/ECAM/warnings/fctl/pitch-trim-config-output"),
|
||||
rudTrimConfig: props.globals.initNode("/ECAM/warnings/fctl/rudder-trim-config-output"),
|
||||
parkBrkConfig: props.globals.initNode("/ECAM/warnings/fctl/park-brk-config-output"),
|
||||
slatsConfig2: props.globals.initNode("/ECAM/warnings/fctl/slats-config-range"),
|
||||
flapsConfig2: props.globals.initNode("/ECAM/warnings/fctl/flaps-config-range"),
|
||||
spdBrkConfig2: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-config-range"),
|
||||
pitchTrimConfig2: props.globals.initNode("/ECAM/warnings/fctl/pitch-trim-config-range"),
|
||||
rudTrimConfig2: props.globals.initNode("/ECAM/warnings/fctl/rudder-trim-config-range"),
|
||||
dcEssFuelConsumptionIncreased: props.globals.initNode("/ECAM/warnings/logic/dc-ess-fuel-consumption-increased"),
|
||||
dcEssFMSPredictions: props.globals.initNode("/ECAM/warnings/logic/dc-ess-fms-predictions-unreliable"),
|
||||
dc2FuelConsumptionIncreased: props.globals.initNode("/ECAM/warnings/logic/dc-2-fuel-consumption-increased"),
|
||||
dc2FMSPredictions: props.globals.initNode("/ECAM/warnings/logic/dc-2-fms-predictions-unreliable"),
|
||||
thrLeversNotSet: props.globals.initNode("/ECAM/warnings/logic/eng/thr-lever-not-set"),
|
||||
revSet: props.globals.initNode("/ECAM/warnings/logic/eng/reverse-set"),
|
||||
eng1Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-fail"),
|
||||
eng2Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-fail"),
|
||||
phase5Trans: props.globals.initNode("/ECAM/warnings/logic/eng/phase-5-output"),
|
||||
eng1Shutdown: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-shutdown"),
|
||||
eng2Shutdown: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-shutdown"),
|
||||
acEssBusAltn: props.globals.initNode("/ECAM/warnings/logic/ac-ess-bus-altn-feed"),
|
||||
gen1Off: props.globals.initNode("/ECAM/warnings/logic/elec/gen-1-off"),
|
||||
gen2Off: props.globals.initNode("/ECAM/warnings/logic/elec/gen-2-off"),
|
||||
spdBrkOut: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-still-out"),
|
||||
},
|
||||
Timers: {
|
||||
apuFaultOutput: props.globals.initNode("/ECAM/warnings/timer/apu-fault-output"),
|
||||
bleed1Fault: props.globals.initNode("/ECAM/warnings/timer/bleed-1-fault"),
|
||||
bleed1FaultOutput: props.globals.initNode("/ECAM/warnings/timer/bleed-1-fault-output"),
|
||||
bleed2Fault: props.globals.initNode("/ECAM/warnings/timer/bleed-2-fault"),
|
||||
bleed2FaultOutput: props.globals.initNode("/ECAM/warnings/timer/bleed-2-fault-output"),
|
||||
bleed1NotShutOutput: props.globals.initNode("/ECAM/warnings/timer/prv-1-not-shut-output"),
|
||||
bleed2NotShutOutput: props.globals.initNode("/ECAM/warnings/timer/prv-2-not-shut-output"),
|
||||
bleed1And2LoTemp: props.globals.initNode("/ECAM/warnings/timer/bleed-1-and-2-low-temp"),
|
||||
bleed1And2LoTempOutput: props.globals.initNode("/ECAM/warnings/timer/bleed-1-and-2-low-temp-output"),
|
||||
bleed1Off60Output: props.globals.initNode("/ECAM/warnings/logic/bleed-1-off-60-output"),
|
||||
bleed1Off5Output: props.globals.initNode("/ECAM/warnings/logic/bleed-1-off-5-output"),
|
||||
bleed2Off60Output: props.globals.initNode("/ECAM/warnings/logic/bleed-2-off-60-output"),
|
||||
bleed2Off5Output: props.globals.initNode("/ECAM/warnings/logic/bleed-2-off-5-output"),
|
||||
eng1AiceNotClsd: props.globals.initNode("/ECAM/warnings/timer/eng-aice-1-open-output"),
|
||||
eng2AiceNotClsd: props.globals.initNode("/ECAM/warnings/timer/eng-aice-2-open-output"),
|
||||
eng1AiceNotOpen: props.globals.initNode("/ECAM/warnings/timer/eng-aice-1-closed-output"),
|
||||
eng2AiceNotOpen: props.globals.initNode("/ECAM/warnings/timer/eng-aice-2-closed-output"),
|
||||
LRElevFault: props.globals.initNode("/ECAM/warnings/fctl/lrElevFault-output"),
|
||||
altnLaw: props.globals.initNode("/ECAM/warnings/fctl/altn-law-output"),
|
||||
directLaw: props.globals.initNode("/ECAM/warnings/fctl/direct-law-output"),
|
||||
waiLhiPr: props.globals.initNode("/ECAM/warnings/timer/wing-hi-pr-left"),
|
||||
waiRhiPr: props.globals.initNode("/ECAM/warnings/timer/wing-hi-pr-right"),
|
||||
pack1Fault: props.globals.initNode("/ECAM/warnings/timer/pack-1-fault-2"),
|
||||
pack2Fault: props.globals.initNode("/ECAM/warnings/timer/pack-2-fault-2"),
|
||||
pack1Off: props.globals.initNode("/ECAM/warnings/timer/pack-1-off"),
|
||||
pack2Off: props.globals.initNode("/ECAM/warnings/timer/pack-2-off"),
|
||||
trimAirFault: props.globals.initNode("/ECAM/warnings/timer/trim-air-fault"),
|
||||
yawDamper1Fault: props.globals.initNode("/ECAM/warnings/timer/yaw-damper-1-fault"),
|
||||
yawDamper2Fault: props.globals.initNode("/ECAM/warnings/timer/yaw-damper-2-fault"),
|
||||
navTerrFault: props.globals.initNode("/ECAM/warnings/timer/nav-gpws-terr-fault"),
|
||||
leftElevFail: props.globals.initNode("/ECAM/warnings/fctl/leftElevFault-output"),
|
||||
rightElevFail: props.globals.initNode("/ECAM/warnings/fctl/rightElevFault-output"),
|
||||
staticInverter: props.globals.initNode("/systems/electrical/some-electric-thingie/static-inverter-timer"),
|
||||
dcEmerConfig: props.globals.initNode("/ECAM/warnings/logic/dc-emer-config-output"),
|
||||
dc12Fault: props.globals.initNode("/ECAM/warnings/logic/dc-1-2-output"),
|
||||
dcEssFault: props.globals.initNode("/ECAM/warnings/logic/dc-ess-output"),
|
||||
dc1Fault: props.globals.initNode("/ECAM/warnings/logic/dc-1-output"),
|
||||
dc2Fault: props.globals.initNode("/ECAM/warnings/logic/dc-2-output"),
|
||||
dcBatFault: props.globals.initNode("/ECAM/warnings/logic/dc-bat-output"),
|
||||
ac1Fault: props.globals.initNode("/ECAM/warnings/logic/ac-1-output"),
|
||||
ac2Fault: props.globals.initNode("/ECAM/warnings/logic/ac-2-output"),
|
||||
acEssFault: props.globals.initNode("/ECAM/warnings/logic/ac-ess-output"),
|
||||
dcEssShed: props.globals.initNode("/ECAM/warnings/logic/dc-ess-shed-output"),
|
||||
acEssShed: props.globals.initNode("/ECAM/warnings/logic/ac-ess-shed-output"),
|
||||
centerPumpsOff: props.globals.initNode("/ECAM/warnings/fuel/center-pumps-off-output"),
|
||||
lowLevelBoth: props.globals.initNode("/ECAM/warnings/fuel/lo-level-l-r-output"),
|
||||
},
|
||||
Flipflops: {
|
||||
apuGenFault: props.globals.initNode("/ECAM/warnings/flipflop/apu-gen-fault"),
|
||||
apuGenFaultOnOff: props.globals.initNode("/ECAM/warnings/flipflop/apu-gen-fault-on-off"),
|
||||
bleed1LowTemp: props.globals.initNode("/ECAM/warnings/logic/bleed-1-low-temp-flipflop-output"),
|
||||
bleed2LowTemp: props.globals.initNode("/ECAM/warnings/logic/bleed-2-low-temp-flipflop-output"),
|
||||
gen1Fault: props.globals.initNode("/ECAM/warnings/flipflop/gen-1-fault"),
|
||||
gen2Fault: props.globals.initNode("/ECAM/warnings/flipflop/gen-2-fault"),
|
||||
gen1FaultOnOff: props.globals.initNode("/ECAM/warnings/flipflop/gen-1-fault-on-off"),
|
||||
gen2FaultOnOff: props.globals.initNode("/ECAM/warnings/flipflop/gen-2-fault-on-off"),
|
||||
pack1Ovht: props.globals.initNode("/ECAM/warnings/flipflop/pack-1-ovht"),
|
||||
pack2Ovht: props.globals.initNode("/ECAM/warnings/flipflop/pack-2-ovht"),
|
||||
parkBrk: props.globals.initNode("/ECAM/warnings/config/park-brk/park-brk-output"),
|
||||
eng1ThrLvrAbvIdle: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-thr-lvr-abv-idle"),
|
||||
eng2ThrLvrAbvIdle: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-thr-lvr-abv-idle"),
|
||||
},
|
||||
};
|
||||
|
||||
var warning = {
|
||||
new: func(msg,colour = "g",aural = 9,light = 9,isMainMsg = 0,lastSubmsg = 0, sdPage = "nil", isMemo = 0) {
|
||||
var t = {parents:[warning]};
|
||||
|
@ -243,7 +104,7 @@ var warning = {
|
|||
},
|
||||
callPage: func() {
|
||||
if (me.sdPage == "nil" or me.hasCalled == 1) { return; }
|
||||
ecam.SystemDisplay.failCall(me.sdPage);
|
||||
ecam.SystemDisplayController.failureCall(me.sdPage);
|
||||
me.hasCalled = 1;
|
||||
}
|
||||
};
|
||||
|
@ -352,6 +213,7 @@ var ECAM_controller = {
|
|||
if (counter < 9) {
|
||||
w.write();
|
||||
counter += 1;
|
||||
w.callPage();
|
||||
}
|
||||
w.warnlight();
|
||||
w.sound();
|
||||
|
@ -477,9 +339,14 @@ var ECAM_controller = {
|
|||
}
|
||||
}
|
||||
|
||||
if (statusFlag == 1 and lines[0].getValue() == "") {
|
||||
ecam.SystemDisplay.manCall("sts");
|
||||
if (!hasCleared and statusFlag) {
|
||||
statusFlag = 0;
|
||||
ecam.SystemDisplayController.manCall("statusPage");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasCleared and !statusFlag) {
|
||||
SystemDisplayController.manCall("CLR");
|
||||
}
|
||||
},
|
||||
recall: func() {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
# A3XX Electronic Centralised Aircraft Monitoring System
|
||||
|
||||
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp)
|
||||
# Copyright (c) 2021 Jonathan Redpath (legoboyvdlp)
|
||||
|
||||
# props.nas:
|
||||
|
||||
|
@ -211,19 +210,19 @@ var messages_priority_3 = func {
|
|||
}
|
||||
|
||||
# ENG FIRE
|
||||
if ((eng1FireFlAgent2.clearFlag == 0 and systems.eng1FireWarn.getValue() == 1 and phaseVar3 >= 5 and phaseVar3 <= 7) or (eng1FireGnEvac.clearFlag == 0 and systems.eng1FireWarn.getValue() == 1 and (phaseVar3 < 5 or phaseVar3 > 7))) {
|
||||
if ((eng1Fire.clearFlag == 0 and systems.eng1FireWarn.getValue() == 1 and phaseVar3 >= 5 and phaseVar3 <= 7) or (eng1FireGnEvac.clearFlag == 0 and systems.eng1FireWarn.getValue() == 1 and (phaseVar3 < 5 or phaseVar3 > 7))) {
|
||||
eng1Fire.active = 1;
|
||||
} else {
|
||||
ECAM_controller.warningReset(eng1Fire);
|
||||
}
|
||||
|
||||
if ((eng2FireFlAgent2.clearFlag == 0 and systems.eng2FireWarn.getValue() == 1 and phaseVar3 >= 5 and phaseVar3 <= 7) or (eng2FireGnEvac.clearFlag == 0 and systems.eng2FireWarn.getValue() == 1 and (phaseVar3 < 5 or phaseVar3 > 7))) {
|
||||
if ((eng2Fire.clearFlag == 0 and systems.eng2FireWarn.getValue() == 1 and phaseVar3 >= 5 and phaseVar3 <= 7) or (eng2FireGnEvac.clearFlag == 0 and systems.eng2FireWarn.getValue() == 1 and (phaseVar3 < 5 or phaseVar3 > 7))) {
|
||||
eng2Fire.active = 1;
|
||||
} else {
|
||||
ECAM_controller.warningReset(eng2Fire);
|
||||
}
|
||||
|
||||
if (apuFireMaster.clearFlag == 0 and systems.apuFireWarn.getValue() == 1) {
|
||||
if (apuFire.clearFlag == 0 and systems.apuFireWarn.getValue() == 1) {
|
||||
apuFire.active = 1;
|
||||
} else {
|
||||
ECAM_controller.warningReset(apuFire);
|
||||
|
@ -551,13 +550,13 @@ var messages_priority_3 = func {
|
|||
apuFireAgentTimer.msg = " -AGENT AFT " ~ systems.apuAgentTimer.getValue() ~ " S...DISCH";
|
||||
}
|
||||
|
||||
if (apuFireAgent.clearFlag == 0 and systems.APUNodes.Controls.fire.getValue() and !systems.extinguisherBottles.vector[5].lightProp.getValue() and systems.apuAgentTimer.getValue() != 0) {
|
||||
if (apuFireAgent.clearFlag == 0 and systems.APUNodes.Controls.fire.getValue() and !systems.extinguisherBottles.vector[4].lightProp.getValue() and systems.apuAgentTimer.getValue() != 0) {
|
||||
apuFireAgentTimer.active = 1;
|
||||
} else {
|
||||
ECAM_controller.warningReset(apuFireAgentTimer);
|
||||
}
|
||||
|
||||
if (apuFireAgent.clearFlag == 0 and systems.APUNodes.Controls.fire.getValue() and !systems.extinguisherBottles.vector[5].lightProp.getValue() and systems.apuAgentTimer.getValue() == 0) {
|
||||
if (apuFireAgent.clearFlag == 0 and systems.APUNodes.Controls.fire.getValue() and !systems.extinguisherBottles.vector[4].lightProp.getValue() and systems.apuAgentTimer.getValue() == 0) {
|
||||
apuFireAgent.active = 1;
|
||||
} else {
|
||||
ECAM_controller.warningReset(apuFireAgent);
|
||||
|
|
|
@ -5,9 +5,6 @@
|
|||
|
||||
var ap_active = 0;
|
||||
var athr_active = 0;
|
||||
var engModeSel = 0;
|
||||
var APUMaster = 0;
|
||||
var APURPM = 0;
|
||||
var apOffTime = props.globals.initNode("/ECAM/warnings/ap-off-time", 0, "INT");
|
||||
var athrOffTime = props.globals.initNode("/ECAM/warnings/athr-off-time", 0, "INT");
|
||||
var engStrtTimeSw = props.globals.initNode("/ECAM/engine-start-time-switch", 0, "BOOL");
|
||||
|
@ -28,6 +25,7 @@ var ECAM = {
|
|||
engStrtTime.setValue(0);
|
||||
apWarnNode.setValue(0);
|
||||
athrWarnNode.setValue(0);
|
||||
SystemDisplayController.init();
|
||||
me.reset();
|
||||
},
|
||||
update_items: [
|
||||
|
@ -71,13 +69,12 @@ var ECAM = {
|
|||
},
|
||||
reset: func() {
|
||||
for (var i = 0; i <= 8; i = i + 1) {
|
||||
setprop("ECAM/msg/line" ~ i, "");
|
||||
setprop("ECAM/rightmsg/line" ~ i, "");
|
||||
setprop("ECAM/msg/linec" ~ i, "w");
|
||||
setprop("ECAM/rightmsg/linec" ~ i, "w");
|
||||
setprop("/ECAM/msg/line" ~ i, "");
|
||||
setprop("/ECAM/rightmsg/line" ~ i, "");
|
||||
setprop("/ECAM/msg/linec" ~ i, "w");
|
||||
setprop("/ECAM/rightmsg/linec" ~ i, "w");
|
||||
}
|
||||
|
||||
page.setValue("door");
|
||||
me.lights.apu.setValue(0);
|
||||
me.lights.bleed.setValue(0);
|
||||
me.lights.cond.setValue(0);
|
||||
|
@ -124,143 +121,19 @@ var ECAM = {
|
|||
update_item.update(notification);
|
||||
}
|
||||
|
||||
SystemDisplay.update(notification);
|
||||
|
||||
if (me._cachePage != SystemDisplay.page) {
|
||||
me.updateSDPage(SystemDisplay.page);
|
||||
if (me._cachePage != SystemDisplayController.displayedPage.name) {
|
||||
me.updateSDPage(SystemDisplayController.displayedPage.name);
|
||||
}
|
||||
},
|
||||
updateSDPage: func(newPage) {
|
||||
me._cachePage = newPage;
|
||||
page.setValue(newPage);
|
||||
},
|
||||
clrLight: func() {
|
||||
me.lights.clr.setValue(1);
|
||||
},
|
||||
};
|
||||
|
||||
var SystemDisplay = {
|
||||
page: "",
|
||||
|
||||
manShownPage: 0,
|
||||
failShownPage: 0,
|
||||
APU10sec: 9,
|
||||
eng10sec: 9,
|
||||
fctl20sc: 9,
|
||||
_apuTime: 0,
|
||||
_engTime: 0,
|
||||
_fctlTime: 0,
|
||||
|
||||
failCall: func(page) {
|
||||
if (me.manShownPage) {
|
||||
me.manShownPage = 0;
|
||||
ECAMControlPanel.lightOff(me.page);
|
||||
}
|
||||
ECAMControlPanel.lightOn(page);
|
||||
me.page = page;
|
||||
me.failShownPage = 1;
|
||||
},
|
||||
manCall: func(page) {
|
||||
ECAMControlPanel.lightOff(me.page);
|
||||
ECAMControlPanel.lightOn(page);
|
||||
me.page = page;
|
||||
me.manShownPage = 1;
|
||||
},
|
||||
autoCall: func(page) {
|
||||
if (me.manShownPage or me.failShownPage) { return; }
|
||||
if (me.page != page) {
|
||||
me.page = page;
|
||||
}
|
||||
},
|
||||
update: func(notification) {
|
||||
APUMaster = systems.APUNodes.Controls.master.getValue();
|
||||
APURPM = pts.APU.rpm.getValue();
|
||||
engModeSel = pts.Controls.Engines.startSw.getValue();
|
||||
|
||||
if (APUMaster == 1 and me.APU10sec != 1) {
|
||||
me.autoCall("apu");
|
||||
me.fctl20sec = 0;
|
||||
|
||||
if (me.APU10sec == 9 and APURPM >= 95.0) {
|
||||
me.APU10sec = 0;
|
||||
me._apuTime = notification.elapsedTime;
|
||||
}
|
||||
|
||||
if (me.APU10sec != 9 and notification.elapsedTime > me._apuTime + 10) {
|
||||
me.APU10sec = 1;
|
||||
}
|
||||
} elsif (engModeSel == 0 or engModeSel == 2 or (engModeSel == 1 and me.eng10sec == 0)) {
|
||||
me.autoCall("eng");
|
||||
me.fctl20sec = 0;
|
||||
|
||||
if (me.eng10sec == 9 and engModeSel == 1) {
|
||||
me.eng10sec = 0;
|
||||
me._engTime = notification.elapsedTime;
|
||||
}
|
||||
|
||||
if (me.eng10sec != 9 and notification.elapsedTime > me._engTime + 10) {
|
||||
me.eng10sec = 1;
|
||||
}
|
||||
} else {
|
||||
# Reset variables
|
||||
if (APUMaster == 0) {
|
||||
me.APU10sec = 9;
|
||||
}
|
||||
me.eng10sec = 9;
|
||||
|
||||
# Phase logic
|
||||
if (notification.FWCPhase == 1) {
|
||||
me.autoCall("door");
|
||||
me.fctl20sec = 9;
|
||||
} elsif (notification.FWCPhase == 2) {
|
||||
if (notification.aileronFBW >= 0.15 or notification.elevatorFBW >= 0.15 and me.fctl20sec == 9) {
|
||||
me.autoCall("fctl");
|
||||
|
||||
if (me.fctl20sec == 9) {
|
||||
me.fctl20sec = 0;
|
||||
me._fctlTime = notification.elapsedTime;
|
||||
}
|
||||
|
||||
if (me.fctl20sec != 9 and notification.elapsedTime > me._fctlTime + 20) {
|
||||
me.fctl20sec = 1;
|
||||
}
|
||||
} elsif (me.fctl20sec == 0) {
|
||||
if (me.fctl20sec != 9 and notification.elapsedTime > me._fctlTime + 20) {
|
||||
me.fctl20sec = 1;
|
||||
}
|
||||
} else {
|
||||
me.autoCall("wheel");
|
||||
me.fctl20sec = 9;
|
||||
}
|
||||
} elsif (notification.FWCPhase >= 3 and notification.FWCPhase <= 5) {
|
||||
me.autoCall("eng");
|
||||
me.fctl20sec = 9;
|
||||
} elsif (notification.FWCPhase == 6) {
|
||||
if (notification.gearLever and notification.agl <= 16000) {
|
||||
me.autoCall("wheel");
|
||||
} else {
|
||||
me.autoCall("crz");
|
||||
}
|
||||
me.fctl20sec = 9;
|
||||
} elsif (notification.FWCPhase >= 7 and notification.FWCPhase <= 9) {
|
||||
me.autoCall("wheel");
|
||||
me.fctl20sec = 9;
|
||||
} elsif (notification.FWCPhase == 10) {
|
||||
me.autoCall("door");
|
||||
me.fctl20sec = 9;
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
var ECAMControlPanel = {
|
||||
sysPageBtn: func(page) {
|
||||
if (SystemDisplay.page != page) {
|
||||
SystemDisplay.manCall(page);
|
||||
} else {
|
||||
me.lightOff(SystemDisplay.page);
|
||||
SystemDisplay.manShownPage = 0;
|
||||
}
|
||||
SystemDisplayController.manCall(page);
|
||||
},
|
||||
rclBtn: func() {
|
||||
ecam.ECAM_controller.recall();
|
||||
|
@ -278,22 +151,12 @@ var ECAMControlPanel = {
|
|||
return;
|
||||
}
|
||||
|
||||
if (SystemDisplay.manShownPage) {
|
||||
me.lightOff(SystemDisplay.page);
|
||||
SystemDisplay.manShownPage = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (SystemDisplay.failShownPage) {
|
||||
me.lightOff(SystemDisplay.page);
|
||||
SystemDisplay.failShownPage = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
ecam.ECAM_controller.clear();
|
||||
},
|
||||
stsBtn: func() {
|
||||
SystemDisplay.manCall("sts");
|
||||
if (SystemDisplayController.displayedPage.name != "statusPage") {
|
||||
SystemDisplayController.manCall("statusPage");
|
||||
}
|
||||
},
|
||||
allBtn: func() {
|
||||
# todo
|
||||
|
@ -305,11 +168,11 @@ var ECAMControlPanel = {
|
|||
# todo
|
||||
},
|
||||
lightOff: func(pageLightOff) {
|
||||
if (pageLightOff == "crz") { return; }
|
||||
if (pageLightOff == "cruise") { return; }
|
||||
ECAM.lights[pageLightOff].setBoolValue(0);
|
||||
},
|
||||
lightOn: func(pageLightOn) {
|
||||
if (pageLightOn == "crz") { return; }
|
||||
if (pageLightOn == "cruise") { return; }
|
||||
ECAM.lights[pageLightOn].setBoolValue(1);
|
||||
},
|
||||
};
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
# A3XX Electronic Centralised Aircraft Monitoring System
|
||||
|
||||
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp)
|
||||
# Copyright (c) 2021 Jonathan Redpath (legoboyvdlp)
|
||||
|
||||
# messages stored in vectors
|
||||
|
||||
|
@ -101,7 +100,7 @@ var warnings = std.Vector.new([
|
|||
var ADR123FaultPROC = warning.new(msg: " -ALL ADR OFF PROC.APPLY", colour: "c"),
|
||||
|
||||
# APU FIRE
|
||||
var apuFire = warning.new(msg: "APU FIRE ", colour: "r", aural: 0, light: 0, isMainMsg: 1, sdPage: "apu"),
|
||||
var apuFire = warning.new(msg: "APU FIRE ", colour: "r", aural: 0, light: 0, isMainMsg: 1, sdPage: "apuPage"),
|
||||
var apuFirePB = warning.new(msg: " -APU FIRE P/B......PUSH", colour: "c"),
|
||||
var apuFireAgentTimer = warning.new(msg: " -AGENT AFT 10 S...DISCH", colour: "c"),
|
||||
var apuFireAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"),
|
||||
|
|
212
Nasal/ECAM/ECAM-nodes.nas
Normal file
212
Nasal/ECAM/ECAM-nodes.nas
Normal file
|
@ -0,0 +1,212 @@
|
|||
# A3XX Electronic Centralised Aircraft Monitoring System
|
||||
# Copyright (c) 2021 Jonathan Redpath (legoboyvdlp)
|
||||
|
||||
var FWC = {
|
||||
Btn: {
|
||||
clr: props.globals.initNode("/ECAM/buttons/clear-btn", 0, "BOOL"),
|
||||
recall: props.globals.initNode("/ECAM/buttons/recall-btn", 0, "BOOL"),
|
||||
recallStsNormal: props.globals.initNode("/ECAM/buttons/recall-status-normal", 0, "BOOL"),
|
||||
recallStsNormalOutput: props.globals.initNode("/ECAM/buttons/recall-status-normal-output", 0, "BOOL"),
|
||||
},
|
||||
Monostable: {
|
||||
phase1: props.globals.initNode("/ECAM/phases/monostable/phase-1-300", 0, "BOOL"),
|
||||
phase5: props.globals.initNode("/ECAM/phases/monostable/phase-5", 0, "BOOL"),
|
||||
phase5Temp: 0,
|
||||
phase7: props.globals.initNode("/ECAM/phases/monostable/phase-7", 0, "BOOL"),
|
||||
phase7Temp: 0,
|
||||
phase9: props.globals.initNode("/ECAM/phases/monostable/phase-9", 0, "BOOL"),
|
||||
phase1Output: props.globals.initNode("/ECAM/phases/monostable/phase-1-300-output"),
|
||||
phase1OutputTemp: 0,
|
||||
phase5Output: props.globals.initNode("/ECAM/phases/monostable/phase-5-output"),
|
||||
phase5OutputTemp: 0,
|
||||
phase7Output: props.globals.initNode("/ECAM/phases/monostable/phase-7-output"),
|
||||
phase7OutputTemp: 0,
|
||||
phase9Output: props.globals.initNode("/ECAM/phases/monostable/phase-9-output"),
|
||||
toPowerOutput: props.globals.getNode("/ECAM/phases/monostable/to-power-set-output"),
|
||||
m80kt: props.globals.getNode("/ECAM/phases/monostable-80kt"),
|
||||
altAlert1: props.globals.initNode("/ECAM/altitude-alert-monostable-set", 0, "BOOL"),
|
||||
altAlert1Output: props.globals.initNode("/ECAM/altitude-alert-monostable-output"),
|
||||
altAlert2: props.globals.initNode("/ECAM/flipflop/altitude-alert-rs-set", 0, "BOOL"),
|
||||
},
|
||||
Flipflop: {
|
||||
phase2Set: props.globals.initNode("/ECAM/phases/flipflop/phase-2-set", 0, "BOOL"),
|
||||
phase2Reset: props.globals.initNode("/ECAM/phases/flipflop/phase-2-reset", 0, "BOOL"),
|
||||
phase2Output: props.globals.initNode("/ECAM/phases/flipflop/phase-2-output", 0, "BOOL"),
|
||||
phase2OutputTemp: 0,
|
||||
phase10Set: props.globals.initNode("/ECAM/phases/flipflop/phase-10-set", 0, "BOOL"),
|
||||
phase10Reset: props.globals.initNode("/ECAM/phases/flipflop/phase-10-reset", 0, "BOOL"),
|
||||
phase10Output: props.globals.initNode("/ECAM/phases/flipflop/phase-10-output", 0, "BOOL"),
|
||||
recallSet: props.globals.initNode("/ECAM/flipflop/recall-set", 0, "BOOL"),
|
||||
recallReset: props.globals.initNode("/ECAM/flipflop/recall-reset", 0, "BOOL"),
|
||||
recallOutput: props.globals.initNode("/ECAM/flipflop/recall-output", 0, "BOOL"),
|
||||
recallOutputTemp: 0,
|
||||
},
|
||||
Logic: {
|
||||
gnd: props.globals.getNode("/ECAM/logic/ground-calc-immediate"),
|
||||
IRSinAlign: props.globals.initNode("/ECAM/irs-in-align", 0, "BOOL"),
|
||||
feet1500: props.globals.getNode("/ECAM/phases/phase-calculation/altitude-ge-1500"),
|
||||
feet800: props.globals.getNode("/ECAM/phases/phase-calculation/altitude-ge-800"),
|
||||
},
|
||||
Timer: {
|
||||
eng1idle: props.globals.getNode("/ECAM/phases/timer/eng1idle"),
|
||||
eng2idle: props.globals.getNode("/ECAM/phases/timer/eng2idle"),
|
||||
eng1or2: props.globals.getNode("/ECAM/phases/phase-calculation/one-engine-running"),
|
||||
toInhibit: props.globals.initNode("/ECAM/phases/timer/to-inhibit", 0, "INT"),
|
||||
ldgInhibit: props.globals.initNode("/ECAM/phases/timer/ldg-inhibit", 0, "INT"),
|
||||
eng1idleOutput: props.globals.getNode("/ECAM/phases/timer/eng1idle-output"),
|
||||
eng2idleOutput: props.globals.getNode("/ECAM/phases/timer/eng2idle-output"),
|
||||
eng1and2Off: props.globals.getNode("/ECAM/phases/phase-calculation/engines-1-2-not-running"),
|
||||
eng1and2OffTemp: 0,
|
||||
eng1or2Output: props.globals.getNode("/ECAM/phases/phase-calculation/engine-1-or-2-running"),
|
||||
eng1or2OutputTemp: 0,
|
||||
toInhibitOutput: props.globals.getNode("/ECAM/phases/timer/to-inhibit-output"),
|
||||
ldgInhibitOutput: props.globals.getNode("/ECAM/phases/timer/ldg-inhibit-output"),
|
||||
gnd: props.globals.getNode("/ECAM/timer/ground-calc"), # ZGND
|
||||
gnd2Sec: props.globals.getNode("/ECAM/phases/monostable/gnd-output"),
|
||||
gnd2SecHalf: props.globals.getNode("/ECAM/phases/monostable/gnd-output-2"), # hack to prevent getting confused between phase 5 / 6
|
||||
},
|
||||
speed80: props.globals.initNode("/ECAM/phases/speed-gt-80", 0, "BOOL"),
|
||||
speed80Temp: 0,
|
||||
toPower: props.globals.getNode("/ECAM/phases/phase-calculation/takeoff-power"),
|
||||
toPowerTemp: 0,
|
||||
altChg: props.globals.getNode("/it-autoflight/input/alt-is-changing", 1),
|
||||
};
|
||||
|
||||
var warningNodes = {
|
||||
Logic: {
|
||||
altitudeAlert: props.globals.initNode("/ECAM/warnings/altitude-alert/c-chord"),
|
||||
altitudeAlertSteady: props.globals.initNode("/ECAM/warnings/altitude-alert/altitude-alert-steady"),
|
||||
altitudeAlertFlash: props.globals.initNode("/ECAM/warnings/altitude-alert/altitude-alert-flash"),
|
||||
crossbleedFault: props.globals.initNode("/ECAM/warnings/logic/crossbleed-fault"),
|
||||
crossbleedWai: props.globals.initNode("/ECAM/warnings/logic/crossbleed-wai"),
|
||||
bleed1LoTempUnsuc: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-unsucc"),
|
||||
bleed1LoTempXbleed: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-xbleed"),
|
||||
bleed1LoTempBleed: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-bleed"),
|
||||
bleed1LoTempPack: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-pack"),
|
||||
bleed1WaiAvail: props.globals.initNode("/ECAM/warnings/logic/bleed-1-wai-avail"),
|
||||
bleed2LoTempUnsuc: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-unsucc"),
|
||||
bleed2LoTempXbleed: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-xbleed"),
|
||||
bleed2LoTempBleed: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-bleed"),
|
||||
bleed2LoTempPack: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-pack"),
|
||||
bleed2WaiAvail: props.globals.initNode("/ECAM/warnings/logic/bleed-2-wai-avail"),
|
||||
waiSysfault: props.globals.initNode("/ECAM/warnings/logic/wing-anti-ice-sys-fault"),
|
||||
waiLclosed: props.globals.initNode("/ECAM/warnings/flipflop/wing-anti-ice-left-closed"),
|
||||
waiRclosed: props.globals.initNode("/ECAM/warnings/flipflop/wing-anti-ice-right-closed"),
|
||||
procWaiShutdown: props.globals.initNode("/ECAM/warnings/logic/proc-wai-shutdown-output"),
|
||||
waiGndFlight: props.globals.initNode("/ECAM/warnings/logic/wing-anti-ice-gnd-fault"),
|
||||
pack12Fault: props.globals.initNode("/ECAM/warnings/logic/pack-1-2-fault"),
|
||||
pack1ResetPb: props.globals.initNode("/ECAM/warnings/logic/reset-pack-1-switch-cmd"),
|
||||
pack2ResetPb: props.globals.initNode("/ECAM/warnings/logic/reset-pack-2-switch-cmd"),
|
||||
cabinFans: props.globals.initNode("/ECAM/warnings/logic/cabin-fans-fault"),
|
||||
rtlu1Fault: props.globals.initNode("/ECAM/warnings/logic/rud-trav-lim-sys-1-fault"),
|
||||
rtlu2Fault: props.globals.initNode("/ECAM/warnings/logic/rud-trav-lim-sys-2-fault"),
|
||||
rtlu12Fault: props.globals.initNode("/ECAM/warnings/logic/rud-trav-lim-sys-fault"),
|
||||
fac12Fault: props.globals.initNode("/ECAM/warnings/logic/fac-12-fault"),
|
||||
fac1Fault: props.globals.initNode("/ECAM/warnings/logic/fac-1-fault"),
|
||||
fac2Fault: props.globals.initNode("/ECAM/warnings/logic/fac-2-fault"),
|
||||
stallWarn: props.globals.initNode("/ECAM/warnings/logic/stall/stall-warn-on"),
|
||||
yawDamper12Fault: props.globals.initNode("/ECAM/warnings/logic/yaw-damper-12-fault"),
|
||||
gearNotDown1: props.globals.initNode("/ECAM/warnings/fctl/gear-not-down-not-cancellable"),
|
||||
gearNotDown2: props.globals.initNode("/ECAM/warnings/fctl/gear-not-down-cancellable"),
|
||||
gearNotDownLocked: props.globals.initNode("/ECAM/warnings/fctl/gear-not-down-locked"),
|
||||
gearNotDownLockedFlipflop: props.globals.initNode("/ECAM/warnings/fctl/gear-not-downlocked-output"),
|
||||
blueGreen: props.globals.initNode("/ECAM/warnings/hyd/blue-green-failure"),
|
||||
blueGreenFuel: props.globals.initNode("/ECAM/warnings/hyd/blue-green-fuel-consumpt"),
|
||||
blueYellow: props.globals.initNode("/ECAM/warnings/hyd/blue-yellow-failure"),
|
||||
blueYellowFuel: props.globals.initNode("/ECAM/warnings/hyd/blue-yellow-fuel-consumpt"),
|
||||
greenYellow: props.globals.initNode("/ECAM/warnings/hyd/green-yellow-failure"),
|
||||
greenYellowFuel: props.globals.initNode("/ECAM/warnings/hyd/green-yellow-fuel-consumpt"),
|
||||
leftElevFail: props.globals.initNode("/ECAM/warnings/fctl/leftElevFault"),
|
||||
rightElevFail: props.globals.initNode("/ECAM/warnings/fctl/rightElevFault"),
|
||||
flapNotZero: props.globals.initNode("/ECAM/warnings/fctl/flaps-not-zero"),
|
||||
slatsConfig: props.globals.initNode("/ECAM/warnings/fctl/slats-config-output"),
|
||||
flapsConfig: props.globals.initNode("/ECAM/warnings/fctl/flaps-config-output"),
|
||||
spdBrkConfig: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-config-output"),
|
||||
pitchTrimConfig: props.globals.initNode("/ECAM/warnings/fctl/pitch-trim-config-output"),
|
||||
rudTrimConfig: props.globals.initNode("/ECAM/warnings/fctl/rudder-trim-config-output"),
|
||||
parkBrkConfig: props.globals.initNode("/ECAM/warnings/fctl/park-brk-config-output"),
|
||||
slatsConfig2: props.globals.initNode("/ECAM/warnings/fctl/slats-config-range"),
|
||||
flapsConfig2: props.globals.initNode("/ECAM/warnings/fctl/flaps-config-range"),
|
||||
spdBrkConfig2: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-config-range"),
|
||||
pitchTrimConfig2: props.globals.initNode("/ECAM/warnings/fctl/pitch-trim-config-range"),
|
||||
rudTrimConfig2: props.globals.initNode("/ECAM/warnings/fctl/rudder-trim-config-range"),
|
||||
dcEssFuelConsumptionIncreased: props.globals.initNode("/ECAM/warnings/logic/dc-ess-fuel-consumption-increased"),
|
||||
dcEssFMSPredictions: props.globals.initNode("/ECAM/warnings/logic/dc-ess-fms-predictions-unreliable"),
|
||||
dc2FuelConsumptionIncreased: props.globals.initNode("/ECAM/warnings/logic/dc-2-fuel-consumption-increased"),
|
||||
dc2FMSPredictions: props.globals.initNode("/ECAM/warnings/logic/dc-2-fms-predictions-unreliable"),
|
||||
thrLeversNotSet: props.globals.initNode("/ECAM/warnings/logic/eng/thr-lever-not-set"),
|
||||
revSet: props.globals.initNode("/ECAM/warnings/logic/eng/reverse-set"),
|
||||
eng1Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-fail"),
|
||||
eng2Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-fail"),
|
||||
phase5Trans: props.globals.initNode("/ECAM/warnings/logic/eng/phase-5-output"),
|
||||
eng1Shutdown: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-shutdown"),
|
||||
eng2Shutdown: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-shutdown"),
|
||||
acEssBusAltn: props.globals.initNode("/ECAM/warnings/logic/ac-ess-bus-altn-feed"),
|
||||
gen1Off: props.globals.initNode("/ECAM/warnings/logic/elec/gen-1-off"),
|
||||
gen2Off: props.globals.initNode("/ECAM/warnings/logic/elec/gen-2-off"),
|
||||
spdBrkOut: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-still-out"),
|
||||
},
|
||||
Timers: {
|
||||
apuFaultOutput: props.globals.initNode("/ECAM/warnings/timer/apu-fault-output"),
|
||||
bleed1Fault: props.globals.initNode("/ECAM/warnings/timer/bleed-1-fault"),
|
||||
bleed1FaultOutput: props.globals.initNode("/ECAM/warnings/timer/bleed-1-fault-output"),
|
||||
bleed2Fault: props.globals.initNode("/ECAM/warnings/timer/bleed-2-fault"),
|
||||
bleed2FaultOutput: props.globals.initNode("/ECAM/warnings/timer/bleed-2-fault-output"),
|
||||
bleed1NotShutOutput: props.globals.initNode("/ECAM/warnings/timer/prv-1-not-shut-output"),
|
||||
bleed2NotShutOutput: props.globals.initNode("/ECAM/warnings/timer/prv-2-not-shut-output"),
|
||||
bleed1And2LoTemp: props.globals.initNode("/ECAM/warnings/timer/bleed-1-and-2-low-temp"),
|
||||
bleed1And2LoTempOutput: props.globals.initNode("/ECAM/warnings/timer/bleed-1-and-2-low-temp-output"),
|
||||
bleed1Off60Output: props.globals.initNode("/ECAM/warnings/logic/bleed-1-off-60-output"),
|
||||
bleed1Off5Output: props.globals.initNode("/ECAM/warnings/logic/bleed-1-off-5-output"),
|
||||
bleed2Off60Output: props.globals.initNode("/ECAM/warnings/logic/bleed-2-off-60-output"),
|
||||
bleed2Off5Output: props.globals.initNode("/ECAM/warnings/logic/bleed-2-off-5-output"),
|
||||
eng1AiceNotClsd: props.globals.initNode("/ECAM/warnings/timer/eng-aice-1-open-output"),
|
||||
eng2AiceNotClsd: props.globals.initNode("/ECAM/warnings/timer/eng-aice-2-open-output"),
|
||||
eng1AiceNotOpen: props.globals.initNode("/ECAM/warnings/timer/eng-aice-1-closed-output"),
|
||||
eng2AiceNotOpen: props.globals.initNode("/ECAM/warnings/timer/eng-aice-2-closed-output"),
|
||||
LRElevFault: props.globals.initNode("/ECAM/warnings/fctl/lrElevFault-output"),
|
||||
altnLaw: props.globals.initNode("/ECAM/warnings/fctl/altn-law-output"),
|
||||
directLaw: props.globals.initNode("/ECAM/warnings/fctl/direct-law-output"),
|
||||
waiLhiPr: props.globals.initNode("/ECAM/warnings/timer/wing-hi-pr-left"),
|
||||
waiRhiPr: props.globals.initNode("/ECAM/warnings/timer/wing-hi-pr-right"),
|
||||
pack1Fault: props.globals.initNode("/ECAM/warnings/timer/pack-1-fault-2"),
|
||||
pack2Fault: props.globals.initNode("/ECAM/warnings/timer/pack-2-fault-2"),
|
||||
pack1Off: props.globals.initNode("/ECAM/warnings/timer/pack-1-off"),
|
||||
pack2Off: props.globals.initNode("/ECAM/warnings/timer/pack-2-off"),
|
||||
trimAirFault: props.globals.initNode("/ECAM/warnings/timer/trim-air-fault"),
|
||||
yawDamper1Fault: props.globals.initNode("/ECAM/warnings/timer/yaw-damper-1-fault"),
|
||||
yawDamper2Fault: props.globals.initNode("/ECAM/warnings/timer/yaw-damper-2-fault"),
|
||||
navTerrFault: props.globals.initNode("/ECAM/warnings/timer/nav-gpws-terr-fault"),
|
||||
leftElevFail: props.globals.initNode("/ECAM/warnings/fctl/leftElevFault-output"),
|
||||
rightElevFail: props.globals.initNode("/ECAM/warnings/fctl/rightElevFault-output"),
|
||||
staticInverter: props.globals.initNode("/systems/electrical/some-electric-thingie/static-inverter-timer"),
|
||||
dcEmerConfig: props.globals.initNode("/ECAM/warnings/logic/dc-emer-config-output"),
|
||||
dc12Fault: props.globals.initNode("/ECAM/warnings/logic/dc-1-2-output"),
|
||||
dcEssFault: props.globals.initNode("/ECAM/warnings/logic/dc-ess-output"),
|
||||
dc1Fault: props.globals.initNode("/ECAM/warnings/logic/dc-1-output"),
|
||||
dc2Fault: props.globals.initNode("/ECAM/warnings/logic/dc-2-output"),
|
||||
dcBatFault: props.globals.initNode("/ECAM/warnings/logic/dc-bat-output"),
|
||||
ac1Fault: props.globals.initNode("/ECAM/warnings/logic/ac-1-output"),
|
||||
ac2Fault: props.globals.initNode("/ECAM/warnings/logic/ac-2-output"),
|
||||
acEssFault: props.globals.initNode("/ECAM/warnings/logic/ac-ess-output"),
|
||||
dcEssShed: props.globals.initNode("/ECAM/warnings/logic/dc-ess-shed-output"),
|
||||
acEssShed: props.globals.initNode("/ECAM/warnings/logic/ac-ess-shed-output"),
|
||||
centerPumpsOff: props.globals.initNode("/ECAM/warnings/fuel/center-pumps-off-output"),
|
||||
lowLevelBoth: props.globals.initNode("/ECAM/warnings/fuel/lo-level-l-r-output"),
|
||||
},
|
||||
Flipflops: {
|
||||
apuGenFault: props.globals.initNode("/ECAM/warnings/flipflop/apu-gen-fault"),
|
||||
apuGenFaultOnOff: props.globals.initNode("/ECAM/warnings/flipflop/apu-gen-fault-on-off"),
|
||||
bleed1LowTemp: props.globals.initNode("/ECAM/warnings/logic/bleed-1-low-temp-flipflop-output"),
|
||||
bleed2LowTemp: props.globals.initNode("/ECAM/warnings/logic/bleed-2-low-temp-flipflop-output"),
|
||||
gen1Fault: props.globals.initNode("/ECAM/warnings/flipflop/gen-1-fault"),
|
||||
gen2Fault: props.globals.initNode("/ECAM/warnings/flipflop/gen-2-fault"),
|
||||
gen1FaultOnOff: props.globals.initNode("/ECAM/warnings/flipflop/gen-1-fault-on-off"),
|
||||
gen2FaultOnOff: props.globals.initNode("/ECAM/warnings/flipflop/gen-2-fault-on-off"),
|
||||
pack1Ovht: props.globals.initNode("/ECAM/warnings/flipflop/pack-1-ovht"),
|
||||
pack2Ovht: props.globals.initNode("/ECAM/warnings/flipflop/pack-2-ovht"),
|
||||
parkBrk: props.globals.initNode("/ECAM/warnings/config/park-brk/park-brk-output"),
|
||||
eng1ThrLvrAbvIdle: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-thr-lvr-abv-idle"),
|
||||
eng2ThrLvrAbvIdle: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-thr-lvr-abv-idle"),
|
||||
},
|
||||
};
|
|
@ -1,76 +1,7 @@
|
|||
# A3XX FWC Phases
|
||||
# Copyright (c) 2021 Jonathan Redpath (legoboyvdlp)
|
||||
|
||||
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp)
|
||||
|
||||
var myPhase = nil;
|
||||
var eng = nil;
|
||||
var eng1epr = nil;
|
||||
var eng2epr = nil;
|
||||
var eng1n1 = nil;
|
||||
var eng2n1 = nil;
|
||||
var master1 = nil;
|
||||
var master2 = nil;
|
||||
var gear_agl_cur = nil;
|
||||
|
||||
var FWC = {
|
||||
Btn: {
|
||||
clr: props.globals.initNode("/ECAM/buttons/clear-btn", 0, "BOOL"),
|
||||
recall: props.globals.initNode("/ECAM/buttons/recall-btn", 0, "BOOL"),
|
||||
recallStsNormal: props.globals.initNode("/ECAM/buttons/recall-status-normal", 0, "BOOL"),
|
||||
recallStsNormalOutput: props.globals.initNode("/ECAM/buttons/recall-status-normal-output", 0, "BOOL"),
|
||||
},
|
||||
Monostable: {
|
||||
phase1: props.globals.initNode("/ECAM/phases/monostable/phase-1-300", 0, "BOOL"),
|
||||
phase5: props.globals.initNode("/ECAM/phases/monostable/phase-5", 0, "BOOL"),
|
||||
phase7: props.globals.initNode("/ECAM/phases/monostable/phase-7", 0, "BOOL"),
|
||||
phase9: props.globals.initNode("/ECAM/phases/monostable/phase-9", 0, "BOOL"),
|
||||
phase1Output: props.globals.initNode("/ECAM/phases/monostable/phase-1-300-output"),
|
||||
phase5Output: props.globals.initNode("/ECAM/phases/monostable/phase-5-output"),
|
||||
phase7Output: props.globals.initNode("/ECAM/phases/monostable/phase-7-output"),
|
||||
phase9Output: props.globals.initNode("/ECAM/phases/monostable/phase-9-output"),
|
||||
toPowerOutput: props.globals.getNode("/ECAM/phases/monostable/to-power-set-output"),
|
||||
m80kt: props.globals.getNode("/ECAM/phases/monostable-80kt"),
|
||||
altAlert1: props.globals.initNode("/ECAM/altitude-alert-monostable-set", 0, "BOOL"),
|
||||
altAlert1Output: props.globals.initNode("/ECAM/altitude-alert-monostable-output"),
|
||||
altAlert2: props.globals.initNode("/ECAM/flipflop/altitude-alert-rs-set", 0, "BOOL"),
|
||||
},
|
||||
Flipflop: {
|
||||
phase2Set: props.globals.initNode("/ECAM/phases/flipflop/phase-2-set", 0, "BOOL"),
|
||||
phase2Reset: props.globals.initNode("/ECAM/phases/flipflop/phase-2-reset", 0, "BOOL"),
|
||||
phase2Output: props.globals.initNode("/ECAM/phases/flipflop/phase-2-output", 0, "BOOL"),
|
||||
phase10Set: props.globals.initNode("/ECAM/phases/flipflop/phase-10-set", 0, "BOOL"),
|
||||
phase10Reset: props.globals.initNode("/ECAM/phases/flipflop/phase-10-reset", 0, "BOOL"),
|
||||
phase10Output: props.globals.initNode("/ECAM/phases/flipflop/phase-10-output", 0, "BOOL"),
|
||||
recallSet: props.globals.initNode("/ECAM/flipflop/recall-set", 0, "BOOL"),
|
||||
recallReset: props.globals.initNode("/ECAM/flipflop/recall-reset", 0, "BOOL"),
|
||||
recallOutput: props.globals.initNode("/ECAM/flipflop/recall-output", 0, "BOOL"),
|
||||
},
|
||||
Logic: {
|
||||
gnd: props.globals.getNode("/ECAM/logic/ground-calc-immediate"),
|
||||
IRSinAlign: props.globals.initNode("/ECAM/irs-in-align", 0, "BOOL"),
|
||||
feet1500: props.globals.getNode("/ECAM/phases/phase-calculation/altitude-ge-1500"),
|
||||
feet800: props.globals.getNode("/ECAM/phases/phase-calculation/altitude-ge-800"),
|
||||
},
|
||||
Timer: {
|
||||
eng1idle: props.globals.getNode("/ECAM/phases/timer/eng1idle"),
|
||||
eng2idle: props.globals.getNode("/ECAM/phases/timer/eng2idle"),
|
||||
eng1or2: props.globals.getNode("/ECAM/phases/phase-calculation/one-engine-running"),
|
||||
toInhibit: props.globals.initNode("/ECAM/phases/timer/to-inhibit", 0, "INT"),
|
||||
ldgInhibit: props.globals.initNode("/ECAM/phases/timer/ldg-inhibit", 0, "INT"),
|
||||
eng1idleOutput: props.globals.getNode("/ECAM/phases/timer/eng1idle-output"),
|
||||
eng2idleOutput: props.globals.getNode("/ECAM/phases/timer/eng2idle-output"),
|
||||
eng1and2Off: props.globals.getNode("/ECAM/phases/phase-calculation/engines-1-2-not-running"),
|
||||
eng1or2Output: props.globals.getNode("/ECAM/phases/phase-calculation/engine-1-or-2-running"),
|
||||
toInhibitOutput: props.globals.getNode("/ECAM/phases/timer/to-inhibit-output"),
|
||||
ldgInhibitOutput: props.globals.getNode("/ECAM/phases/timer/ldg-inhibit-output"),
|
||||
gnd: props.globals.getNode("/ECAM/timer/ground-calc"), # ZGND
|
||||
gnd2Sec: props.globals.getNode("/ECAM/phases/monostable/gnd-output"),
|
||||
gnd2SecHalf: props.globals.getNode("/ECAM/phases/monostable/gnd-output-2"), # hack to prevent getting confused between phase 5 / 6
|
||||
},
|
||||
speed80: props.globals.initNode("/ECAM/phases/speed-gt-80", 0, "BOOL"),
|
||||
toPower: props.globals.getNode("/ECAM/phases/phase-calculation/takeoff-power"),
|
||||
altChg: props.globals.getNode("/it-autoflight/input/alt-is-changing", 1),
|
||||
};
|
||||
var currentPhase = nil;
|
||||
|
||||
var gnd = nil;
|
||||
var gndTimer = nil;
|
||||
|
@ -79,124 +10,77 @@ var phaseLoop = func() {
|
|||
if ((systems.ELEC.Bus.acEss.getValue() < 110 and systems.ELEC.Bus.ac2.getValue() < 110) or pts.Acconfig.running.getBoolValue()) { return; }
|
||||
if (pts.Sim.Replay.replayActive.getBoolValue()) { return; }
|
||||
|
||||
myPhase = pts.ECAM.fwcWarningPhase.getValue();
|
||||
eng = pts.Options.eng.getValue();
|
||||
eng1epr = pts.Engines.Engine.eprActual[0].getValue();
|
||||
eng2epr = pts.Engines.Engine.eprActual[1].getValue();
|
||||
eng1n1 = pts.Engines.Engine.n1Actual[0].getValue();
|
||||
eng2n1 = pts.Engines.Engine.n1Actual[1].getValue();
|
||||
master1 = pts.Controls.Engines.Engine.cutoffSw[0].getBoolValue();
|
||||
master2 = pts.Controls.Engines.Engine.cutoffSw[1].getBoolValue();
|
||||
currentPhase = pts.ECAM.fwcWarningPhase.getValue();
|
||||
gnd = FWC.Logic.gnd.getBoolValue();
|
||||
gndTimer = FWC.Timer.gnd.getValue();
|
||||
|
||||
if (FWC.Flipflop.recallReset.getValue() != 0) {
|
||||
FWC.Flipflop.recallReset.setValue(0);
|
||||
|
||||
# Various things
|
||||
|
||||
if (myPhase == 9) {
|
||||
FWC.Monostable.phase9.setBoolValue(1);
|
||||
} else {
|
||||
FWC.Monostable.phase9.setBoolValue(0);
|
||||
}
|
||||
|
||||
# Phase 1 / 10 flipflop
|
||||
if (myPhase == 9) {
|
||||
FWC.Flipflop.phase10Set.setBoolValue(1);
|
||||
} else {
|
||||
FWC.Flipflop.phase10Set.setBoolValue(0);
|
||||
}
|
||||
FWC.toPowerTemp = FWC.toPower.getBoolValue();
|
||||
FWC.Timer.eng1and2OffTemp = FWC.Timer.eng1and2Off.getValue();
|
||||
FWC.Timer.eng1or2OutputTemp = FWC.Timer.eng1or2Output.getBoolValue();
|
||||
FWC.speed80Temp = FWC.speed80.getBoolValue();
|
||||
|
||||
if (gndTimer == 1 and pts.Controls.Engines.Engine.firePb[0].getBoolValue()) {
|
||||
FWC.Flipflop.phase10Reset.setBoolValue(1);
|
||||
} else {
|
||||
FWC.Flipflop.phase10Reset.setBoolValue(0);
|
||||
}
|
||||
FWC.Monostable.phase1OutputTemp = FWC.Monostable.phase1Output.getBoolValue();
|
||||
FWC.Flipflop.phase2OutputTemp = FWC.Flipflop.phase2Output.getBoolValue();
|
||||
FWC.Monostable.phase5Temp = FWC.Monostable.phase5.getBoolValue();
|
||||
FWC.Monostable.phase5OutputTemp = FWC.Monostable.phase5Output.getBoolValue();
|
||||
FWC.Monostable.phase7Temp = FWC.Monostable.phase7.getBoolValue();
|
||||
FWC.Monostable.phase7OutputTemp = FWC.Monostable.phase7Output.getBoolValue();
|
||||
|
||||
if ((gnd and FWC.Timer.eng1and2Off.getValue() and myPhase == 9) and FWC.Flipflop.phase10Output.getBoolValue()) {
|
||||
FWC.Monostable.phase1.setBoolValue(1); # true for 300 sec then false
|
||||
} else {
|
||||
FWC.Monostable.phase1.setBoolValue(0);
|
||||
}
|
||||
|
||||
# Phase 2 flipflop
|
||||
if (myPhase == 3 or myPhase == 8) {
|
||||
FWC.Flipflop.phase2Set.setBoolValue(1);
|
||||
} else {
|
||||
FWC.Flipflop.phase2Set.setBoolValue(0);
|
||||
}
|
||||
|
||||
if (!FWC.Monostable.m80kt.getBoolValue() and myPhase != 9 and ((!FWC.Monostable.phase9Output.getBoolValue() and gndTimer == 1) or (!FWC.Monostable.toPowerOutput.getBoolValue() and gndTimer == 1))) {
|
||||
FWC.Flipflop.phase2Reset.setBoolValue(1);
|
||||
} else {
|
||||
FWC.Flipflop.phase2Reset.setBoolValue(0);
|
||||
}
|
||||
|
||||
gear_agl_cur = pts.Position.gearAglFt.getValue();
|
||||
|
||||
# Phase 5 monostable
|
||||
if (FWC.toPower.getBoolValue() and (!FWC.Logic.feet1500.getBoolValue() and !gnd and FWC.Timer.gnd2Sec.getValue() != 1)) {
|
||||
FWC.Monostable.phase5.setBoolValue(1);
|
||||
} else {
|
||||
FWC.Monostable.phase5.setBoolValue(0);
|
||||
}
|
||||
|
||||
# Phase 7 monostable
|
||||
if (!FWC.toPower.getBoolValue() and !FWC.Logic.feet1500.getBoolValue() and !FWC.Logic.feet800.getBoolValue() and !gnd and FWC.Timer.gnd2Sec.getValue() != 1) {
|
||||
FWC.Monostable.phase7.setBoolValue(1);
|
||||
} else {
|
||||
FWC.Monostable.phase7.setBoolValue(0);
|
||||
}
|
||||
|
||||
# Actual Phases
|
||||
if ((gnd and FWC.Timer.eng1and2Off.getValue() and myPhase != 9) and !FWC.Monostable.phase1Output.getBoolValue()) {
|
||||
# Set Phases
|
||||
if ((gnd and FWC.Timer.eng1and2OffTemp and currentPhase != 9) and !FWC.Monostable.phase1OutputTemp) {
|
||||
setPhase(1);
|
||||
}
|
||||
|
||||
if (FWC.Timer.eng1or2Output.getBoolValue() and (gnd and !FWC.toPower.getBoolValue() and !FWC.speed80.getBoolValue()) and !FWC.Flipflop.phase2Output.getBoolValue()) {
|
||||
if (FWC.Timer.eng1or2OutputTemp and (gnd and !FWC.toPowerTemp and !FWC.speed80Temp) and !FWC.Flipflop.phase2OutputTemp) {
|
||||
setPhase(2);
|
||||
}
|
||||
|
||||
if (FWC.Timer.eng1or2Output.getBoolValue() and (gndTimer == 1 and FWC.toPower.getBoolValue()) and !FWC.speed80.getBoolValue()) {
|
||||
if (FWC.Timer.eng1or2OutputTemp and (gndTimer == 1 and FWC.toPowerTemp) and !FWC.speed80Temp) {
|
||||
setPhase(3);
|
||||
}
|
||||
|
||||
if ((gndTimer == 1 and FWC.toPower.getBoolValue()) and FWC.speed80.getBoolValue()) {
|
||||
if ((gndTimer == 1 and FWC.toPowerTemp) and FWC.speed80Temp) {
|
||||
setPhase(4);
|
||||
}
|
||||
|
||||
if (FWC.Monostable.phase5.getBoolValue() and FWC.Monostable.phase5Output.getBoolValue()) {
|
||||
if (FWC.Monostable.phase5Temp and FWC.Monostable.phase5OutputTemp) {
|
||||
setPhase(5);
|
||||
}
|
||||
|
||||
if (!gnd and FWC.Timer.gnd2SecHalf.getValue() != 1 and (!FWC.Monostable.phase5.getBoolValue() or !FWC.Monostable.phase5Output.getBoolValue()) and (!FWC.Monostable.phase7.getBoolValue() or !FWC.Monostable.phase7Output.getBoolValue())) {
|
||||
if (!gnd and FWC.Timer.gnd2SecHalf.getValue() != 1 and (!FWC.Monostable.phase5Temp or !FWC.Monostable.phase5OutputTemp) and (!FWC.Monostable.phase7Temp or !FWC.Monostable.phase7OutputTemp)) {
|
||||
setPhase(6);
|
||||
}
|
||||
|
||||
if ((FWC.Monostable.phase7.getBoolValue() and FWC.Monostable.phase7Output.getBoolValue()) and myPhase != 8) {
|
||||
if ((FWC.Monostable.phase7Temp and FWC.Monostable.phase7OutputTemp) and currentPhase != 8) {
|
||||
setPhase(7);
|
||||
}
|
||||
|
||||
if (!FWC.toPower.getBoolValue() and FWC.speed80.getBoolValue() and (gnd or FWC.Timer.gnd2Sec.getValue == 1)) {
|
||||
if (!FWC.toPowerTemp and FWC.speed80Temp and (gnd or FWC.Timer.gnd2Sec.getValue() == 1)) {
|
||||
setPhase(8);
|
||||
}
|
||||
|
||||
if (FWC.Flipflop.phase2Output.getBoolValue() and (gnd and !FWC.toPower.getBoolValue() and !FWC.speed80.getBoolValue()) and FWC.Timer.eng1or2.getBoolValue()) {
|
||||
if (FWC.Flipflop.phase2OutputTemp and (gnd and !FWC.toPowerTemp and !FWC.speed80Temp) and FWC.Timer.eng1or2.getBoolValue()) {
|
||||
setPhase(9);
|
||||
}
|
||||
|
||||
if ((gnd and FWC.Timer.eng1and2Off.getValue() and myPhase == 9) and FWC.Monostable.phase1Output.getBoolValue()) {
|
||||
if ((gnd and FWC.Timer.eng1and2OffTemp and currentPhase == 9) and FWC.Monostable.phase1OutputTemp) {
|
||||
setPhase(10);
|
||||
}
|
||||
|
||||
# FWC Inhibiting
|
||||
myPhase = pts.ECAM.fwcWarningPhase.getValue();
|
||||
if (myPhase >= 3 and myPhase <= 5 and !FWC.Flipflop.recallOutput.getValue()) {
|
||||
currentPhase = pts.ECAM.fwcWarningPhase.getValue();
|
||||
FWC.Flipflop.recallOutputTemp = FWC.Flipflop.recallOutput.getValue();
|
||||
if (currentPhase >= 3 and currentPhase <= 5 and !FWC.Flipflop.recallOutputTemp) {
|
||||
FWC.Timer.toInhibit.setValue(1);
|
||||
} else {
|
||||
FWC.Timer.toInhibit.setValue(0);
|
||||
}
|
||||
|
||||
if (myPhase == 7 or myPhase == 8 and !FWC.Flipflop.recallOutput.getValue()) {
|
||||
if (currentPhase == 7 or currentPhase == 8 and !FWC.Flipflop.recallOutputTemp) {
|
||||
FWC.Timer.ldgInhibit.setValue(1);
|
||||
} else {
|
||||
FWC.Timer.ldgInhibit.setValue(0);
|
||||
|
@ -215,7 +99,3 @@ var setPhase = func(newPhase) {
|
|||
setlistener("/ECAM/buttons/recall-btn", func() {
|
||||
FWC.Flipflop.recallSet.setValue(FWC.Btn.recall.getBoolValue());
|
||||
}, 0, 0);
|
||||
|
||||
var clrBtn = func(btn) {
|
||||
FWC.Btn.clr.setValue(btn);
|
||||
}
|
||||
|
|
335
Nasal/ECAM/SystemDisplay.nas
Normal file
335
Nasal/ECAM/SystemDisplay.nas
Normal file
|
@ -0,0 +1,335 @@
|
|||
# A3XX System Display Controller
|
||||
# Copyright (c) 2021 Jonathan Redpath (legoboyvdlp)
|
||||
|
||||
var Page = {
|
||||
new: func(name) {
|
||||
var page = {parents:[Page]};
|
||||
page.name = name;
|
||||
return page;
|
||||
},
|
||||
};
|
||||
|
||||
var SystemDisplayController = {
|
||||
PageList: {
|
||||
apuPage: Page.new("apu"),
|
||||
bleedPage: Page.new("bleed"),
|
||||
cabPressPage: Page.new("press"),
|
||||
condPage: Page.new("cond"),
|
||||
cruisePage: Page.new("cruise"),
|
||||
doorPage: Page.new("door"),
|
||||
enginePage: Page.new("eng"),
|
||||
elecPage: Page.new("elec"),
|
||||
fctlPage: Page.new("fctl"),
|
||||
fuelPage: Page.new("fuel"),
|
||||
hydraulicPage: Page.new("hyd"),
|
||||
statusPage: Page.new("sts"),
|
||||
wheelPage: Page.new("wheel"),
|
||||
},
|
||||
displayedPage: nil,
|
||||
lastDisplayedPage: nil,
|
||||
lastMode: nil,
|
||||
mode: 0, # 0 = man, 1 = warning, 2 = advisory (not used yet), 3 = auto
|
||||
tempFWCPhase: nil,
|
||||
tempElapsedTime: nil,
|
||||
tempEngineModeSel: nil,
|
||||
init: func() {
|
||||
me.displayedPage = me.PageList.doorPage;
|
||||
ECAMTimer.start();
|
||||
},
|
||||
autoCallLoop: func() {
|
||||
me.tempFWCPhase = pts.ECAM.fwcWarningPhase.getValue();
|
||||
|
||||
if (me.Display.APU) {
|
||||
me.displayedPage = me.PageList.apuPage;
|
||||
} else if (me.Display.Engine) {
|
||||
me.displayedPage = me.PageList.enginePage;
|
||||
} else if (me.tempFWCPhase == 1) {
|
||||
if (me.Display.Elec) {
|
||||
me.displayedPage = me.PageList.elecPage;
|
||||
} else {
|
||||
me.displayedPage = me.PageList.doorPage;
|
||||
}
|
||||
} else if (me.tempFWCPhase == 2) {
|
||||
if (me.Display.Elec) {
|
||||
me.displayedPage = me.PageList.elecPage;
|
||||
} else if (me.Display.FCTL) {
|
||||
me.displayedPage = me.PageList.fctlPage;
|
||||
} else {
|
||||
me.displayedPage = me.PageList.wheelPage;
|
||||
}
|
||||
} else if (me.tempFWCPhase == 3 or me.tempFWCPhase == 4 or me.tempFWCPhase == 5) {
|
||||
me.displayedPage = me.PageList.enginePage;
|
||||
} else if (me.tempFWCPhase == 6) {
|
||||
if (pts.Controls.Gear.gearDown.getValue() and me.altitudeBelow16000) {
|
||||
me.displayedPage = me.PageList.wheelPage;
|
||||
} else if (me.Display.Cruise) {
|
||||
me.displayedPage = me.PageList.cruisePage;
|
||||
} else {
|
||||
me.displayedPage = me.PageList.enginePage;
|
||||
}
|
||||
} else if (me.tempFWCPhase == 7) {
|
||||
me.displayedPage = me.PageList.wheelPage;
|
||||
} else if (me.tempFWCPhase == 8 or me.tempFWCPhase == 9) {
|
||||
if (me.Display.Elec) {
|
||||
me.displayedPage = me.PageList.elecPage;
|
||||
} else {
|
||||
me.displayedPage = me.PageList.wheelPage;
|
||||
}
|
||||
} else if (me.tempFWCPhase == 10) {
|
||||
if (me.Display.Elec) {
|
||||
me.displayedPage = me.PageList.elecPage;
|
||||
} else {
|
||||
me.displayedPage = me.PageList.doorPage;
|
||||
}
|
||||
}
|
||||
},
|
||||
Timers: {
|
||||
APUTimeOn: 0,
|
||||
APUTime: 0,
|
||||
CruiseTime: 0,
|
||||
CruiseTimeOn: 0,
|
||||
EngineTime: 0,
|
||||
EngineTimeStart: 0,
|
||||
EngineTimeOn: 0,
|
||||
FCTLTimeStart: 0,
|
||||
FCTLTimeOn: 0,
|
||||
FCTLTime: 0,
|
||||
},
|
||||
Display: {
|
||||
APU: 0,
|
||||
Cruise: 0,
|
||||
Elec: 0,
|
||||
Engine: 0,
|
||||
FCTL: 0,
|
||||
},
|
||||
altitudeBelow16000: 0,
|
||||
update: func() {
|
||||
me.tempElapsedTime = pts.Sim.Time.elapsedSec.getValue();
|
||||
|
||||
me.altitude = pts.Position.altitudeFt.getValue();
|
||||
if (me.altitude < 16000) {
|
||||
if (!me.altitudeBelow16000) {
|
||||
me.altitudeBelow16000 = 1;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
} else {
|
||||
if (me.altitudeBelow16000) {
|
||||
me.altitudeBelow16000 = 0;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
}
|
||||
|
||||
if (systems.ELEC.Switch.emerGenTest.getValue()) {
|
||||
if (!me.Display.Elec) {
|
||||
me.Display.Elec = 1;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
} else {
|
||||
if (me.Display.Elec) {
|
||||
me.Display.Elec = 0;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
}
|
||||
|
||||
if (systems.APUNodes.Controls.master.getValue()) {
|
||||
if (pts.APU.rpm.getValue() > 95 and !me.Timers.APUTimeOn) {
|
||||
me.Timers.APUTimeOn = 1;
|
||||
me.Timers.APUTime = me.tempElapsedTime;
|
||||
}
|
||||
|
||||
if ((me.Timers.APUTimeOn and (me.tempElapsedTime - me.Timers.APUTime) < 10) or !me.Timers.APUTimeOn) {
|
||||
if (!me.Display.APU) {
|
||||
me.Display.APU = 1;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
} else {
|
||||
if (me.Display.APU) {
|
||||
me.Display.APU = 0;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
me.Timers.APUTimeOn = 0;
|
||||
me.Timers.APUTime = 0;
|
||||
if (me.Display.APU) {
|
||||
me.Display.APU = 0;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
}
|
||||
|
||||
if (abs(pts.Controls.Flight.aileron.getValue()) > 0.05 or abs(pts.Controls.Flight.elevator.getValue()) > 0.05 or abs(pts.Controls.Flight.rudder.getValue()) > 0.50) {
|
||||
me.Timers.FCTLTimeStart = 1;
|
||||
if (!me.Display.FCTL) {
|
||||
me.Display.FCTL = 1;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
me.autoCallLoop();
|
||||
} else {
|
||||
if (!me.Timers.FCTLTimeOn and me.Timers.FCTLTimeStart) {
|
||||
me.Timers.FCTLTimeOn = 1;
|
||||
me.Timers.FCTLTimeStart = 0;
|
||||
me.Timers.FCTLTime = me.tempElapsedTime;
|
||||
} else if (me.Timers.FCTLTimeOn) {
|
||||
if ((me.tempElapsedTime - me.Timers.FCTLTime) < 20) {
|
||||
if (!me.Display.FCTL) {
|
||||
me.Display.FCTL = 1;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
} else {
|
||||
me.Timers.FCTLTimeOn = 0;
|
||||
me.Timers.FCTLTime = 0;
|
||||
}
|
||||
} else {
|
||||
if (me.Display.FCTL) {
|
||||
me.Display.FCTL = 0;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
me.Timers.FCTLTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
me.tempFWCPhase = pts.ECAM.fwcWarningPhase.getValue();
|
||||
if (me.tempFWCPhase == 6) {
|
||||
if (!ecam.FWC.toPower.getValue() and pts.Controls.Flight.flapsPos.getValue() == 0) {
|
||||
if (!me.Display.Cruise) {
|
||||
me.Display.Cruise = 1;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
} else if (!me.Display.Cruise) {
|
||||
if (!me.Timers.CruiseTimeOn) {
|
||||
me.Timers.CruiseTimeOn = 1;
|
||||
me.Timers.CruiseTime = me.tempElapsedTime;
|
||||
} else {
|
||||
if ((me.tempElapsedTime - me.Timers.CruiseTime) > 60) {
|
||||
if (!me.Display.Cruise) {
|
||||
me.Display.Cruise = 1;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
me.Timers.CruiseTime = 0;
|
||||
me.Timers.CruiseTimeOn = 0;
|
||||
if (me.Display.Cruise) {
|
||||
me.Display.Cruise = 0;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
}
|
||||
|
||||
me.tempEngineModeSel = pts.Controls.Engines.startSw.getValue();
|
||||
if (me.tempEngineModeSel == 0 or me.tempEngineModeSel == 2) {
|
||||
if (!me.Display.Engine) {
|
||||
me.Display.Engine = 1;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
|
||||
if (me.tempEngineModeSel == 2) {
|
||||
me.Timers.EngineTimeStart = 1;
|
||||
}
|
||||
} else {
|
||||
if (me.Timers.EngineTimeStart and !me.Timers.EngineTimeOn) {
|
||||
me.Timers.EngineTimeOn = 1;
|
||||
me.Timers.EngineTime = me.tempElapsedTime;
|
||||
}
|
||||
|
||||
if (me.Timers.EngineTimeOn) {
|
||||
if ((me.tempElapsedTime - me.Timers.EngineTime) < 10) {
|
||||
if (!me.Display.Engine) {
|
||||
me.Display.Engine = 1;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
} else {
|
||||
me.Timers.EngineTimeStart = 0;
|
||||
me.Timers.EngineTimeOn = 0;
|
||||
me.Timers.EngineTime = 0;
|
||||
if (me.Display.Engine) {
|
||||
me.Display.Engine = 0;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (me.Display.Engine) {
|
||||
me.Display.Engine = 0;
|
||||
me.autoCallLoop();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
autoCall: func() {
|
||||
me.mode = 3;
|
||||
me.autoCallLoop();
|
||||
},
|
||||
failureCall: func(newPage) {
|
||||
if (contains(me.PageList, newPage)) {
|
||||
ECAMControlPanel.lightOff(me.displayedPage.name);
|
||||
me.lastDisplayedPage = me.displayedPage;
|
||||
me.displayedPage = me.PageList[newPage];
|
||||
me.lastMode = me.mode;
|
||||
me.mode = 1;
|
||||
ECAMControlPanel.lightOn(me.displayedPage.name);
|
||||
} else {
|
||||
debug.dump("Attempted to set page to unknown page", newPage);
|
||||
}
|
||||
},
|
||||
manCall: func(newPage) {
|
||||
if (contains(me.PageList, newPage)) {
|
||||
if (me.displayedPage == me.PageList[newPage] and me.mode != 3) {
|
||||
ECAMControlPanel.lightOff(me.displayedPage.name);
|
||||
me.displayedPage = me.autoCall();
|
||||
} else {
|
||||
ECAMControlPanel.lightOff(me.displayedPage.name);
|
||||
if (me.mode == 1) {
|
||||
me.lastDisplayedPage = me.displayedPage;
|
||||
me.lastMode = me.mode;
|
||||
}
|
||||
me.displayedPage = me.PageList[newPage];
|
||||
me.mode = 0;
|
||||
ECAMControlPanel.lightOn(me.displayedPage.name);
|
||||
}
|
||||
} elsif (newPage == "CLR") {
|
||||
if (me.mode == 1) {
|
||||
if (me.lastMode == 0) {
|
||||
ECAMControlPanel.lightOff(me.displayedPage.name);
|
||||
me.displayedPage = me.lastDisplayedPage;
|
||||
ECAMControlPanel.lightOn(me.displayedPage.name);
|
||||
me.lastDisplayedPage = nil;
|
||||
me.mode = 0;
|
||||
} else {
|
||||
ECAMControlPanel.lightOff(me.displayedPage.name);
|
||||
me.displayedPage = me.autoCall();
|
||||
}
|
||||
} elsif (me.mode == 0) {
|
||||
if (me.lastMode == 1) {
|
||||
ECAMControlPanel.lightOff(me.displayedPage.name);
|
||||
me.displayedPage = me.lastDisplayedPage;
|
||||
ECAMControlPanel.lightOn(me.displayedPage.name);
|
||||
me.lastDisplayedPage = nil;
|
||||
me.mode = 1;
|
||||
} else {
|
||||
ECAMControlPanel.lightOff(me.displayedPage.name);
|
||||
me.displayedPage = me.autoCall();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
debug.dump("Attempted to set page to unknown page", newPage);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
setlistener("/ECAM/warning-phase", func() {
|
||||
if (SystemDisplayController.mode == 3) {
|
||||
SystemDisplayController.autoCall();
|
||||
}
|
||||
}, 0, 0);
|
||||
|
||||
setlistener("/controls/gear/gear-down", func() {
|
||||
if (SystemDisplayController.mode == 3) {
|
||||
SystemDisplayController.autoCall();
|
||||
}
|
||||
}, 0, 0);
|
||||
|
||||
|
||||
var ECAMTimer = maketimer(1, func() {
|
||||
SystemDisplayController.update();
|
||||
});
|
|
@ -2,407 +2,254 @@
|
|||
# in east/north/up coordinates the renderer uses
|
||||
# Thanks to BAWV12 / Thorsten
|
||||
|
||||
|
||||
var als_on = props.globals.getNode("/sim/rendering/shaders/skydome");
|
||||
var als_on = props.globals.getNode("");
|
||||
var alt_agl = props.globals.getNode("position/gear-agl-ft");
|
||||
var cur_alt = 0;
|
||||
|
||||
var light_manager = {
|
||||
var Light = {
|
||||
new: func(n) {
|
||||
var light = {parents: [Light]};
|
||||
light.isOn = 0;
|
||||
|
||||
run: 0,
|
||||
light.Pos = {
|
||||
x: 0,
|
||||
y: 0,
|
||||
z: 0,
|
||||
};
|
||||
|
||||
light.Color = {
|
||||
r: 0,
|
||||
g: 0,
|
||||
b: 0,
|
||||
};
|
||||
|
||||
light.colorr = props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[" ~ n ~ "]", 1);
|
||||
light.colorg = props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[" ~ n ~ "]", 1);
|
||||
light.colorb = props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[" ~ n ~ "]", 1);
|
||||
light.dir = props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir[" ~ n ~ "]", 1);
|
||||
light.size = props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/size[" ~ n ~ "]", 1);
|
||||
light.posx = props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[" ~ n ~ "]", 1);
|
||||
light.posy = props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[" ~ n ~ "]", 1);
|
||||
light.posz = props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[" ~ n ~ "]", 1);
|
||||
|
||||
if (n <= 1) {
|
||||
light.stretch = props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/stretch[" ~ n ~ "]", 1);
|
||||
}
|
||||
return light;
|
||||
},
|
||||
setColor: func(r,g,b) {
|
||||
me.Color.r = r;
|
||||
me.Color.g = g;
|
||||
me.Color.b = b;
|
||||
},
|
||||
setDir: func(dir) {
|
||||
me.dir.setValue(dir);
|
||||
},
|
||||
setSize: func(size) {
|
||||
me.size.setValue(size);
|
||||
},
|
||||
setStretch: func(stretch) {
|
||||
me.stretch.setValue(stretch);
|
||||
},
|
||||
setPos: func(x,y,z) {
|
||||
me.Pos.x = x;
|
||||
me.Pos.y = y;
|
||||
me.Pos.z = z;
|
||||
},
|
||||
on: func() {
|
||||
if (me.isOn) { return; }
|
||||
me.colorr.setValue(me.Color.r);
|
||||
me.colorg.setValue(me.Color.g);
|
||||
me.colorb.setValue(me.Color.b);
|
||||
me.isOn = 1;
|
||||
},
|
||||
off: func() {
|
||||
if (!me.isOn) { return; }
|
||||
me.colorr.setValue(0);
|
||||
me.colorg.setValue(0);
|
||||
me.colorb.setValue(0);
|
||||
me.isOn = 0;
|
||||
},
|
||||
};
|
||||
|
||||
var lightManager = {
|
||||
lat_to_m: 110952.0,
|
||||
lon_to_m: 0.0,
|
||||
|
||||
light1_xpos: 0.0,
|
||||
light1_ypos: 0.0,
|
||||
light1_zpos: 0.0,
|
||||
light1_r: 0.0,
|
||||
light1_g: 0.0,
|
||||
light1_b: 0.0,
|
||||
light1_size: 0.0,
|
||||
light1_stretch: 0.0,
|
||||
light1_is_on: 0,
|
||||
|
||||
light2_xpos: 0.0,
|
||||
light2_ypos: 0.0,
|
||||
light2_zpos: 0.0,
|
||||
light2_r: 0.0,
|
||||
light2_g: 0.0,
|
||||
light2_b: 0.0,
|
||||
light2_size: 0.0,
|
||||
light2_stretch: 0.0,
|
||||
light2_is_on: 0,
|
||||
|
||||
light3_xpos: 0.0,
|
||||
light3_ypos: 0.0,
|
||||
light3_zpos: 0.0,
|
||||
light3_r: 0.0,
|
||||
light3_g: 0.0,
|
||||
light3_b: 0.0,
|
||||
light3_size: 0.0,
|
||||
light3_stretch: 0.0,
|
||||
light3_is_on: 0,
|
||||
|
||||
light4_xpos: 0.0,
|
||||
light4_ypos: 0.0,
|
||||
light4_zpos: 0.0,
|
||||
light4_r: 0.0,
|
||||
light4_g: 0.0,
|
||||
light4_b: 0.0,
|
||||
light4_size: 0.0,
|
||||
light4_stretch: 0.0,
|
||||
light4_is_on: 0,
|
||||
|
||||
light5_xpos: 0.0,
|
||||
light5_ypos: 0.0,
|
||||
light5_zpos: 0.0,
|
||||
light5_r: 0.0,
|
||||
light5_g: 0.0,
|
||||
light5_b: 0.0,
|
||||
light5_size: 0.0,
|
||||
light5_stretch: 0.0,
|
||||
light5_is_on: 0,
|
||||
|
||||
flcpt: 0,
|
||||
prev_view : 1,
|
||||
|
||||
nd_ref_light1_x: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m", 1),
|
||||
nd_ref_light1_y: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m", 1),
|
||||
nd_ref_light1_z: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m", 1),
|
||||
nd_ref_light1_dir: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir", 1),
|
||||
|
||||
nd_ref_light2_x: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[1]", 1),
|
||||
nd_ref_light2_y: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[1]", 1),
|
||||
nd_ref_light2_z: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[1]", 1),
|
||||
nd_ref_light2_dir: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir[1]", 1),
|
||||
|
||||
nd_ref_light3_x: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[2]", 1),
|
||||
nd_ref_light3_y: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[2]", 1),
|
||||
nd_ref_light3_z: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[2]", 1),
|
||||
nd_ref_light3_dir: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir[2]", 1),
|
||||
|
||||
nd_ref_light4_x: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[3]", 1),
|
||||
nd_ref_light4_y: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[3]", 1),
|
||||
nd_ref_light4_z: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[3]", 1),
|
||||
nd_ref_light4_dir: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir[3]", 1),
|
||||
|
||||
nd_ref_light5_x: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[4]", 1),
|
||||
nd_ref_light5_y: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[4]", 1),
|
||||
nd_ref_light5_z: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[4]", 1),
|
||||
nd_ref_light5_dir: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir[4]", 1),
|
||||
|
||||
init: func {
|
||||
# define your lights here
|
||||
|
||||
# lights ########
|
||||
# offsets to aircraft center
|
||||
|
||||
me.light1_xpos = 100.0;
|
||||
me.light1_ypos = 0.0;
|
||||
me.light1_zpos = 2.0;
|
||||
|
||||
me.light2_xpos = 60.0;
|
||||
me.light2_ypos = 0.0;
|
||||
me.light2_zpos = 2.0;
|
||||
|
||||
me.light3_xpos = 1.86;
|
||||
me.light3_ypos = 16.66;
|
||||
me.light3_zpos = 2.0;
|
||||
|
||||
me.light4_xpos = 1.86;
|
||||
me.light4_ypos = -16.66;
|
||||
me.light3_zpos = 2.0;
|
||||
|
||||
me.light5_xpos = -19.8;
|
||||
me.light5_ypos = 0.0;
|
||||
me.light3_zpos = 2.0;
|
||||
|
||||
|
||||
# color values
|
||||
me.light1_r = 0.7;
|
||||
me.light1_g = 0.7;
|
||||
me.light1_b = 0.7;
|
||||
me.light2_r = 0.6;
|
||||
me.light2_g = 0.6;
|
||||
me.light2_b = 0.6;
|
||||
me.light3_r = 0.6;
|
||||
me.light3_g = 0.0;
|
||||
me.light3_b = 0.0;
|
||||
me.light4_r = 0.0;
|
||||
me.light4_g = 0.6;
|
||||
me.light4_b = 0.0;
|
||||
me.light5_r = 0.6;
|
||||
me.light5_g = 0.6;
|
||||
me.light5_b = 0.6;
|
||||
|
||||
# spot size
|
||||
me.light1_size = 12;
|
||||
me.light1_stretch = 6;
|
||||
me.light2_size = 6;
|
||||
me.light2_stretch = 6;
|
||||
me.light3_size = 6;
|
||||
me.light4_size = 6;
|
||||
me.light5_size = 6;
|
||||
|
||||
|
||||
setprop("/sim/rendering/als-secondary-lights/flash-radius", 13);
|
||||
|
||||
#me.start();
|
||||
Lights: {
|
||||
light1: Light.new(0),
|
||||
light2: Light.new(1),
|
||||
light3: Light.new(2),
|
||||
light4: Light.new(3),
|
||||
light5: Light.new(4),
|
||||
},
|
||||
|
||||
start: func {
|
||||
init: func() {
|
||||
setprop("/sim/rendering/als-secondary-lights/flash-radius", 13);
|
||||
setprop("/sim/rendering/als-secondary-lights/num-lightspots", 5);
|
||||
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/size", me.light1_size);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/size[1]", me.light2_size);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/size[2]", me.light3_size);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/size[3]", me.light4_size);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/size[4]", me.light5_size);
|
||||
me.Lights.light1.setPos(100,0,2);
|
||||
me.Lights.light2.setPos(60,0,2);
|
||||
me.Lights.light3.setPos(-2,18,2);
|
||||
me.Lights.light4.setPos(-2,-18,2);
|
||||
me.Lights.light5.setPos(-25,0,2);
|
||||
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/stretch", me.light1_stretch);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/stretch[1]", me.light2_stretch);
|
||||
me.Lights.light1.setColor(0.7,0.7,0.7);
|
||||
me.Lights.light2.setColor(0.7,0.7,0.7);
|
||||
me.Lights.light3.setColor(0.4,0.0,0.0);
|
||||
me.Lights.light4.setColor(0.0,0.4,0.0);
|
||||
me.Lights.light5.setColor(0.4,0.4,0.4);
|
||||
|
||||
me.run = 1;
|
||||
me.Lights.light1.setSize(12);
|
||||
me.Lights.light2.setSize(6);
|
||||
me.Lights.light3.setSize(4);
|
||||
me.Lights.light4.setSize(4);
|
||||
me.Lights.light5.setSize(5);
|
||||
|
||||
me.Lights.light1.setStretch(6);
|
||||
me.Lights.light2.setStretch(6);
|
||||
>>>>>>> dev
|
||||
me.update();
|
||||
},
|
||||
|
||||
stop: func {
|
||||
me.run = 0;
|
||||
apos: 0,
|
||||
curAlt: 0,
|
||||
ELEC: [0, 0],
|
||||
ll1: 0,
|
||||
ll2: 0,
|
||||
ll3: 0,
|
||||
nav: 0,
|
||||
run: 0,
|
||||
vpos: 0,
|
||||
Pos: {
|
||||
alt: 0,
|
||||
heading: 0,
|
||||
headingSine: 0,
|
||||
headingCosine: 0,
|
||||
lat: 0,
|
||||
lon: 0,
|
||||
},
|
||||
|
||||
update: func {
|
||||
if (me.run == 0) {
|
||||
update: func() {
|
||||
if (!me.run) {
|
||||
settimer ( func me.update(), 0.00);
|
||||
return;
|
||||
}
|
||||
|
||||
cur_alt = alt_agl.getValue();
|
||||
if (als_on.getValue() == 1 and alt_agl.getValue() < 100.0) {
|
||||
ll1 = getprop("/controls/lighting/landing-lights[1]");
|
||||
ll2 = getprop("/controls/lighting/landing-lights[2]");
|
||||
ll3 = getprop("/sim/model/lights/nose-lights");
|
||||
nav = getprop("/sim/model/lights/nav-lights");
|
||||
|
||||
var apos = geo.aircraft_position();
|
||||
var vpos = geo.viewer_position();
|
||||
|
||||
me.lon_to_m = math.cos(apos.lat()*math.pi/180.0) * me.lat_to_m;
|
||||
|
||||
var heading = getprop("orientation/heading-deg") * math.pi/180.0;
|
||||
|
||||
var lat = apos.lat();
|
||||
var lon = apos.lon();
|
||||
var alt = apos.alt();
|
||||
|
||||
var sh = math.sin(heading);
|
||||
var ch = math.cos(heading);
|
||||
|
||||
if ((ll1 == 1 and systems.ELEC.Bus.ac1.getValue() != 0) and (ll2 == 1 and systems.ELEC.Bus.ac2.getValue() != 0)) {
|
||||
me.light1_ypos = 0.0;
|
||||
me.light1_setSize(16);
|
||||
me.light1_on();
|
||||
} else if (ll1 == 1 and systems.ELEC.Bus.ac1.getValue() != 0) {
|
||||
me.light1_ypos = 3.0;
|
||||
me.light1_setSize(12);
|
||||
me.light1_on();
|
||||
} else if (ll2 == 1 and systems.ELEC.Bus.ac2.getValue() != 0) {
|
||||
me.light1_ypos = -3.0;
|
||||
me.light1_setSize(12);
|
||||
me.light1_on();
|
||||
} else {
|
||||
me.light1_off();
|
||||
me.curAlt = pts.Position.gearAglFt.getValue();
|
||||
if (me.curAlt > 100) {
|
||||
settimer ( func me.update(), 1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ll3 != 0) {
|
||||
me.light2_on();
|
||||
me.ll1 = pts.Controls.Lighting.landingLights[1].getValue();
|
||||
me.ll2 = pts.Controls.Lighting.landingLights[2].getValue();
|
||||
me.ll3 = pts.Sim.Model.Lights.noseLights.getValue();
|
||||
me.nav = pts.Sim.Model.Lights.navLights.getValue();
|
||||
|
||||
me.apos = geo.aircraft_position();
|
||||
me.vpos = geo.viewer_position();
|
||||
|
||||
|
||||
me.Pos.lat = me.apos.lat();
|
||||
me.Pos.lon = me.apos.lon();
|
||||
me.Pos.alt = me.apos.alt();
|
||||
me.Pos.heading = pts.Orientation.heading.getValue() * D2R;
|
||||
me.Pos.headingSine = math.sin(me.Pos.heading);
|
||||
me.Pos.headingCosine = math.cos(me.Pos.heading);
|
||||
me.lon_to_m = math.cos(me.Pos.lat*D2R) * me.lat_to_m;
|
||||
|
||||
me.ELEC[0] = systems.ELEC.Bus.ac1.getValue();
|
||||
me.ELEC[1] = systems.ELEC.Bus.ac2.getValue();
|
||||
|
||||
if ((me.ll1 == 1 and me.ELEC[0] >= 110) and (me.ll2 == 1 and me.ELEC[1] >= 110)) {
|
||||
me.Lights.light1.setPos(100,0,2);
|
||||
me.Lights.light1.setSize(16);
|
||||
me.Lights.light1.on();
|
||||
} else if (me.ll1 == 1 and me.ELEC[0] >= 110) {
|
||||
me.Lights.light1.setPos(100,3,2);
|
||||
me.Lights.light1.setSize(12);
|
||||
me.Lights.light1.on();
|
||||
} else if (me.ll2 == 1 and me.ELEC[1] >= 110) {
|
||||
me.Lights.light1.setPos(100,-3,2);
|
||||
me.Lights.light1.setSize(12);
|
||||
me.Lights.light1.on();
|
||||
} else {
|
||||
me.light2_off();
|
||||
me.Lights.light1.off();
|
||||
}
|
||||
|
||||
if (ll3 == 1) {
|
||||
me.light2_setSize(8);
|
||||
me.light2_xpos = 65.0;
|
||||
if (me.ll3 != 0) {
|
||||
me.Lights.light2.on();
|
||||
} else {
|
||||
me.light2_setSize(6);
|
||||
me.light2_xpos = 60.0;
|
||||
me.Lights.light2.off();
|
||||
}
|
||||
|
||||
if (nav == 1) {
|
||||
me.light3_on();
|
||||
me.light4_on();
|
||||
me.light5_on();
|
||||
if (me.ll3 == 1) {
|
||||
me.Lights.light2.setSize(8);
|
||||
me.Lights.light2.setPos(65,0,2);
|
||||
} else {
|
||||
me.light3_off();
|
||||
me.light4_off();
|
||||
me.light5_off();
|
||||
me.Lights.light2.setSize(6);
|
||||
me.Lights.light2.setPos(60,0,2);
|
||||
}
|
||||
|
||||
if (me.nav == 1) {
|
||||
me.Lights.light3.on();
|
||||
me.Lights.light4.on();
|
||||
me.Lights.light5.on();
|
||||
} else {
|
||||
me.Lights.light3.off();
|
||||
me.Lights.light4.off();
|
||||
me.Lights.light5.off();
|
||||
}
|
||||
|
||||
|
||||
# light 1 position
|
||||
var proj_x = cur_alt;
|
||||
var proj_z = cur_alt/10.0;
|
||||
|
||||
apos.set_lat(lat + ((me.light1_xpos + proj_x) * ch + me.light1_ypos * sh) / me.lat_to_m);
|
||||
apos.set_lon(lon + ((me.light1_xpos + proj_x)* sh - me.light1_ypos * ch) / me.lon_to_m);
|
||||
|
||||
delta_x = (apos.lat() - vpos.lat()) * me.lat_to_m;
|
||||
delta_y = -(apos.lon() - vpos.lon()) * me.lon_to_m;
|
||||
var delta_z = apos.alt()- proj_z - vpos.alt();
|
||||
|
||||
me.nd_ref_light1_x.setValue(delta_x);
|
||||
me.nd_ref_light1_y.setValue(delta_y);
|
||||
me.nd_ref_light1_z.setValue(delta_z);
|
||||
me.nd_ref_light1_dir.setValue(heading);
|
||||
|
||||
me.apos.set_lat(me.Pos.lat + ((me.Lights.light1.Pos.x + me.curAlt) * me.Pos.headingCosine + me.Lights.light1.Pos.y * me.Pos.headingSine) / me.lat_to_m);
|
||||
me.apos.set_lon(me.Pos.lon + ((me.Lights.light1.Pos.x + me.curAlt) * me.Pos.headingSine - me.Lights.light1.Pos.y * me.Pos.headingCosine) / me.lon_to_m);
|
||||
|
||||
me.Lights.light1.posx.setValue((me.apos.lat() - me.vpos.lat()) * me.lat_to_m);
|
||||
me.Lights.light1.posy.setValue(-(me.apos.lon() - me.vpos.lon()) * me.lon_to_m);
|
||||
me.Lights.light1.posz.setValue(me.apos.alt()- (me.curAlt / 10) - me.vpos.alt());
|
||||
me.Lights.light1.dir.setValue(me.Pos.heading);
|
||||
|
||||
# light 2 position
|
||||
me.apos.set_lat(me.Pos.lat + ((me.Lights.light2.Pos.x + me.curAlt) * me.Pos.headingCosine + me.Lights.light2.Pos.y * me.Pos.headingSine) / me.lat_to_m);
|
||||
me.apos.set_lon(me.Pos.lon + ((me.Lights.light2.Pos.x + me.curAlt) * me.Pos.headingSine - me.Lights.light2.Pos.y * me.Pos.headingCosine) / me.lon_to_m);
|
||||
|
||||
apos.set_lat(lat + (me.light2_xpos * ch + me.light2_ypos * sh) / me.lat_to_m);
|
||||
apos.set_lon(lon + (me.light2_xpos * sh - me.light2_ypos * ch) / me.lon_to_m);
|
||||
|
||||
delta_x = (apos.lat() - vpos.lat()) * me.lat_to_m;
|
||||
delta_y = -(apos.lon() - vpos.lon()) * me.lon_to_m;
|
||||
delta_z = apos.alt() - vpos.alt();
|
||||
|
||||
me.nd_ref_light2_x.setValue(delta_x);
|
||||
me.nd_ref_light2_y.setValue(delta_y);
|
||||
me.nd_ref_light2_z.setValue(delta_z);
|
||||
me.nd_ref_light2_dir.setValue(heading);
|
||||
|
||||
me.Lights.light2.posx.setValue((me.apos.lat() - me.vpos.lat()) * me.lat_to_m);
|
||||
me.Lights.light2.posy.setValue(-(me.apos.lon() - me.vpos.lon()) * me.lon_to_m);
|
||||
me.Lights.light2.posz.setValue(me.apos.alt()- (me.curAlt / 10) - me.vpos.alt());
|
||||
me.Lights.light2.dir.setValue(me.Pos.heading);
|
||||
|
||||
# light 3 position
|
||||
me.apos.set_lat(me.Pos.lat + ((me.Lights.light3.Pos.x + me.curAlt) * me.Pos.headingCosine + me.Lights.light3.Pos.y * me.Pos.headingSine) / me.lat_to_m);
|
||||
me.apos.set_lon(me.Pos.lon + ((me.Lights.light3.Pos.x + me.curAlt) * me.Pos.headingSine - me.Lights.light3.Pos.y * me.Pos.headingCosine) / me.lon_to_m);
|
||||
|
||||
apos.set_lat(lat + (me.light3_xpos * ch + me.light3_ypos * sh) / me.lat_to_m);
|
||||
apos.set_lon(lon + (me.light3_xpos * sh - me.light3_ypos * ch) / me.lon_to_m);
|
||||
|
||||
delta_x = (apos.lat() - vpos.lat()) * me.lat_to_m;
|
||||
delta_y = -(apos.lon() - vpos.lon()) * me.lon_to_m;
|
||||
delta_z = apos.alt() - vpos.alt();
|
||||
|
||||
me.nd_ref_light3_x.setValue(delta_x);
|
||||
me.nd_ref_light3_y.setValue(delta_y);
|
||||
me.nd_ref_light3_z.setValue(delta_z);
|
||||
me.nd_ref_light3_dir.setValue(heading);
|
||||
|
||||
me.Lights.light3.posx.setValue((me.apos.lat() - me.vpos.lat()) * me.lat_to_m);
|
||||
me.Lights.light3.posy.setValue(-(me.apos.lon() - me.vpos.lon()) * me.lon_to_m);
|
||||
me.Lights.light3.posz.setValue(me.apos.alt()- (me.curAlt / 10) - me.vpos.alt());
|
||||
me.Lights.light3.dir.setValue(me.Pos.heading);
|
||||
|
||||
# light 4 position
|
||||
me.apos.set_lat(me.Pos.lat + ((me.Lights.light4.Pos.x + me.curAlt) * me.Pos.headingCosine + me.Lights.light4.Pos.y * me.Pos.headingSine) / me.lat_to_m);
|
||||
me.apos.set_lon(me.Pos.lon + ((me.Lights.light4.Pos.x + me.curAlt) * me.Pos.headingSine - me.Lights.light4.Pos.y * me.Pos.headingCosine) / me.lon_to_m);
|
||||
|
||||
apos.set_lat(lat + (me.light4_xpos * ch + me.light4_ypos * sh) / me.lat_to_m);
|
||||
apos.set_lon(lon + (me.light4_xpos * sh - me.light4_ypos * ch) / me.lon_to_m);
|
||||
|
||||
delta_x = (apos.lat() - vpos.lat()) * me.lat_to_m;
|
||||
delta_y = -(apos.lon() - vpos.lon()) * me.lon_to_m;
|
||||
delta_z = apos.alt() - vpos.alt();
|
||||
|
||||
me.nd_ref_light4_x.setValue(delta_x);
|
||||
me.nd_ref_light4_y.setValue(delta_y);
|
||||
me.nd_ref_light4_z.setValue(delta_z);
|
||||
me.nd_ref_light4_dir.setValue(heading);
|
||||
me.Lights.light4.posx.setValue((me.apos.lat() - me.vpos.lat()) * me.lat_to_m);
|
||||
me.Lights.light4.posy.setValue(-(me.apos.lon() - me.vpos.lon()) * me.lon_to_m);
|
||||
me.Lights.light4.posz.setValue(me.apos.alt()- (me.curAlt / 10) - me.vpos.alt());
|
||||
me.Lights.light4.dir.setValue(me.Pos.heading);
|
||||
|
||||
# light 5 position
|
||||
me.apos.set_lat(me.Pos.lat + ((me.Lights.light5.Pos.x + me.curAlt) * me.Pos.headingCosine + me.Lights.light5.Pos.y * me.Pos.headingSine) / me.lat_to_m);
|
||||
me.apos.set_lon(me.Pos.lon + ((me.Lights.light5.Pos.x + me.curAlt) * me.Pos.headingSine - me.Lights.light5.Pos.y * me.Pos.headingCosine) / me.lon_to_m);
|
||||
|
||||
apos.set_lat(lat + (me.light5_xpos * ch + me.light5_ypos * sh) / me.lat_to_m);
|
||||
apos.set_lon(lon + (me.light5_xpos * sh - me.light5_ypos * ch) / me.lon_to_m);
|
||||
|
||||
delta_x = (apos.lat() - vpos.lat()) * me.lat_to_m;
|
||||
delta_y = -(apos.lon() - vpos.lon()) * me.lon_to_m;
|
||||
delta_z = apos.alt() - vpos.alt();
|
||||
|
||||
me.nd_ref_light5_x.setValue(delta_x);
|
||||
me.nd_ref_light5_y.setValue(delta_y);
|
||||
me.nd_ref_light5_z.setValue(delta_z);
|
||||
me.nd_ref_light5_dir.setValue(heading);
|
||||
}
|
||||
me.Lights.light5.posx.setValue((me.apos.lat() - me.vpos.lat()) * me.lat_to_m);
|
||||
me.Lights.light5.posy.setValue(-(me.apos.lon() - me.vpos.lon()) * me.lon_to_m);
|
||||
me.Lights.light5.posz.setValue(me.apos.alt()- (me.curAlt / 10) - me.vpos.alt());
|
||||
me.Lights.light5.dir.setValue(me.Pos.heading);
|
||||
|
||||
settimer ( func me.update(), 0.00);
|
||||
},
|
||||
|
||||
light1_on : func {
|
||||
if (me.light1_is_on == 1) {return;}
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r", me.light1_r);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g", me.light1_g);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b", me.light1_b);
|
||||
me.light1_is_on = 1;
|
||||
},
|
||||
|
||||
light1_off : func {
|
||||
if (me.light1_is_on == 0) {return;}
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r", 0.0);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g", 0.0);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b", 0.0);
|
||||
me.light1_is_on = 0;
|
||||
},
|
||||
|
||||
light1_setSize : func(size) {
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/size[0]", size);
|
||||
},
|
||||
|
||||
light2_on : func {
|
||||
if (me.light2_is_on == 1) {return;}
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[1]", me.light2_r);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[1]", me.light2_g);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[1]", me.light2_b);
|
||||
me.light2_is_on = 1;
|
||||
},
|
||||
|
||||
light2_off : func {
|
||||
if (me.light2_is_on == 0) {return;}
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[1]", 0.0);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[1]", 0.0);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[1]", 0.0);
|
||||
me.light2_is_on = 0;
|
||||
},
|
||||
|
||||
light2_setSize : func(size) {
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/size[1]", size);
|
||||
},
|
||||
|
||||
light3_on : func {
|
||||
if (me.light3_is_on == 1) {return;}
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[2]", me.light3_r);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[2]", me.light3_g);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[2]", me.light3_b);
|
||||
me.light3_is_on = 1;
|
||||
},
|
||||
|
||||
light3_off : func {
|
||||
if (me.light3_is_on == 0) {return;}
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[2]", 0.0);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[2]", 0.0);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[2]", 0.0);
|
||||
me.light3_is_on = 0;
|
||||
},
|
||||
|
||||
light4_on : func {
|
||||
if (me.light4_is_on == 1) {return;}
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[3]", me.light4_r);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[3]", me.light4_g);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[3]", me.light4_b);
|
||||
me.light4_is_on = 1;
|
||||
},
|
||||
|
||||
light4_off : func {
|
||||
if (me.light4_is_on == 0) {return;}
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[3]", 0.0);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[3]", 0.0);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[3]", 0.0);
|
||||
me.light4_is_on = 0;
|
||||
},
|
||||
|
||||
light5_on : func {
|
||||
if (me.light5_is_on == 1) {return;}
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[4]", me.light5_r);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[4]", me.light5_g);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[4]", me.light5_b);
|
||||
me.light5_is_on = 1;
|
||||
},
|
||||
|
||||
light5_off : func {
|
||||
if (me.light5_is_on == 0) {return;}
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[4]", 0.0);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[4]", 0.0);
|
||||
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[4]", 0.0);
|
||||
me.light5_is_on = 0;
|
||||
},
|
||||
};
|
||||
|
||||
setlistener(pts.Sim.Rendering.Shaders.skydome, func(v) {
|
||||
lightManager.run = v.getValue() ? 1 : 0;
|
||||
}, 1, 0);
|
|
@ -84,7 +84,7 @@ var A320Libraries = nil;
|
|||
var systemsInit = func() {
|
||||
systemsInitialized = 0;
|
||||
fbw.FBW.init();
|
||||
effects.light_manager.init();
|
||||
effects.lightManager.init();
|
||||
systems.ELEC.init();
|
||||
systems.PNEU.init();
|
||||
systems.HYD.init();
|
||||
|
|
|
@ -46,6 +46,7 @@ var Controls = {
|
|||
aileron: props.globals.getNode("/controls/flight/aileron"),
|
||||
aileronDrivesTiller: props.globals.getNode("/controls/flight/aileron-drives-tiller"),
|
||||
autoCoordination: props.globals.getNode("/controls/flight/auto-coordination"),
|
||||
elevator: props.globals.getNode("/controls/flight/elevator"),
|
||||
elevatorTrim: props.globals.getNode("/controls/flight/elevator-trim"),
|
||||
flaps: props.globals.getNode("/controls/flight/flaps"),
|
||||
flapsTemp: 0,
|
||||
|
@ -53,6 +54,7 @@ var Controls = {
|
|||
flapsPos: props.globals.getNode("/controls/flight/flaps-pos"),
|
||||
speedbrake: props.globals.getNode("/controls/flight/speedbrake"),
|
||||
speedbrakeArm: props.globals.getNode("/controls/flight/speedbrake-arm"),
|
||||
rudder: props.globals.getNode("/controls/flight/rudder"),
|
||||
rudderTrim: props.globals.getNode("/controls/flight/rudder-trim"),
|
||||
},
|
||||
Gear: {
|
||||
|
@ -61,6 +63,9 @@ var Controls = {
|
|||
parkingBrake: props.globals.getNode("/controls/gear/brake-parking"),
|
||||
chocks: props.globals.getNode("/services/chocks/enable"),
|
||||
},
|
||||
Lighting: {
|
||||
landingLights: [props.globals.getNode("/controls/lighting/landing-lights[0]"),props.globals.getNode("/controls/lighting/landing-lights[1]"),props.globals.getNode("/controls/lighting/landing-lights[2]")],
|
||||
},
|
||||
Switches: {
|
||||
annunTest: props.globals.getNode("/controls/switches/annun-test"),
|
||||
},
|
||||
|
@ -228,12 +233,14 @@ var Options = {
|
|||
};
|
||||
|
||||
var Orientation = {
|
||||
heading: props.globals.getNode("/orientation/heading-deg"),
|
||||
pitch: props.globals.getNode("/orientation/pitch-deg"),
|
||||
roll: props.globals.getNode("/orientation/roll-deg"),
|
||||
yaw: props.globals.getNode("/orientation/yaw-deg"),
|
||||
};
|
||||
|
||||
var Position = {
|
||||
altitudeFt: props.globals.getNode("/position/altitude-ft"),
|
||||
gearAglFt: props.globals.getNode("/position/gear-agl-ft"),
|
||||
latitude: props.globals.getNode("/position/latitude-deg"),
|
||||
longitude: props.globals.getNode("/position/longitude-deg"),
|
||||
|
@ -264,6 +271,12 @@ var Sim = {
|
|||
engine: [props.globals.getNode("/sim/input/selected/engine[0]", 1),props.globals.getNode("/sim/input/selected/engine[1]", 1)],
|
||||
}
|
||||
},
|
||||
Model: {
|
||||
Lights: {
|
||||
navLights: props.globals.getNode("/sim/model/lights/nav-lights"),
|
||||
noseLights: props.globals.getNode("/sim/model/lights/nose-lights"),
|
||||
},
|
||||
},
|
||||
Multiplay: {
|
||||
online: props.globals.getNode("/sim/multiplay/online"),
|
||||
},
|
||||
|
@ -272,6 +285,9 @@ var Sim = {
|
|||
Headshake: {
|
||||
enabled: props.globals.getNode("/sim/rendering/headshake/enabled"),
|
||||
},
|
||||
Shaders: {
|
||||
skydome: props.globals.getNode("/sim/rendering/shaders/skydome"),
|
||||
},
|
||||
},
|
||||
replayState: props.globals.getNode("/sim/freeze/replay-state"),
|
||||
Replay: {
|
||||
|
|
|
@ -183,6 +183,7 @@
|
|||
</function>
|
||||
<output>/systems/apu/oil/level-l</output>
|
||||
</fcs_function>
|
||||
|
||||
</channel>
|
||||
|
||||
</system>
|
||||
|
|
|
@ -19,10 +19,10 @@
|
|||
<rate_limit sense="incr">0.03333333333</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/monostable/phase-1-300-output">
|
||||
<actuator name="/ECAM/phases/monostable/phase-1-300-timer">
|
||||
<input>/ECAM/phases/monostable/phase-1-300</input>
|
||||
<rate_limit sense="incr">0.00333333333</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
<rate_limit sense="decr">0.00333333333</rate_limit>
|
||||
<rate_limit sense="incr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
</channel>
|
||||
|
@ -95,8 +95,8 @@
|
|||
|
||||
<switch name="/ECAM/phases/monostable/phase-1-300-output">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/phases/monostable/phase-1-300-output ne 1
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/phases/monostable/phase-1-300-timer ne 0
|
||||
/ECAM/phases/monostable/phase-1-300 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
@ -230,6 +230,27 @@
|
|||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/monostable/phase-5">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 1
|
||||
/ECAM/phases/phase-calculation/altitude-ge-1500 eq 0
|
||||
/ECAM/logic/ground-calc-immediate eq 0
|
||||
/ECAM/phases/monostable/gnd-output ne 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/monostable/phase-7">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 0
|
||||
/ECAM/phases/phase-calculation/altitude-ge-1500 eq 0
|
||||
/ECAM/phases/phase-calculation/altitude-ge-800 eq 0
|
||||
/ECAM/logic/ground-calc-immediate eq 0
|
||||
/ECAM/phases/monostable/gnd-output ne 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/monostable/phase-8">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
|
@ -237,6 +258,60 @@
|
|||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/monostable/phase-9">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warning-phase eq 9
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/flipflop/phase-10-set">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warning-phase eq 9
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/flipflop/phase-10-reset">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/timer/ground-calc eq 1
|
||||
/controls/engines/engine[0]/fire-btn eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/monostable/phase-1-300">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/phases/phase-calculation/engines-1-2-not-running eq 1
|
||||
/ECAM/logic/ground-calc-immediate eq 1
|
||||
/ECAM/warning-phase eq 9
|
||||
/ECAM/phases/flipflop/phase-10-output eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/flipflop/phase-2-set">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warning-phase eq 3
|
||||
/ECAM/warning-phase eq 8
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/flipflop/phase-2-reset">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/phases/monostable-80kt eq 0
|
||||
/ECAM/warning-phase ne 9
|
||||
/ECAM/timer/ground-calc eq 1
|
||||
<test logic="OR">
|
||||
/ECAM/phases/monostable/phase-9-output eq 0
|
||||
/ECAM/phases/monostable/to-power-set-output eq 0
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
|
||||
</channel>
|
||||
|
||||
</system>
|
||||
|
|
Loading…
Reference in a new issue