Merge branch 'dev' into alignND
159
A320-main.xml
|
@ -12,9 +12,48 @@
|
|||
|
||||
<author>Josh Davidson/Octal450 (Flight Dynamics, Systems, Displays), Jonathan Redpath/legoboyvdlp, merspieler, Matthew Maring/mattmaring (Systems, Displays), Thorsten Herrmann/TH-555, Semir Gebran/CaptB (3D, Textures)</author>
|
||||
|
||||
<authors>
|
||||
<author>
|
||||
<name>Josh Davidson</name>
|
||||
<description>Flight Dynamics, Systems, Displays</description>
|
||||
<nick>Octal450</nick>
|
||||
</author>
|
||||
<author>
|
||||
<name>Jonathan Redpath</name>
|
||||
<description>Systems, Displays, FMGC</description>
|
||||
<nick>legoboyvdlp</nick>
|
||||
</author>
|
||||
<author>
|
||||
<name>merspieler</name>
|
||||
<description>Systems, Displays</description>
|
||||
</author>
|
||||
<author>
|
||||
<name>Matthew Maring</name>
|
||||
<description>Fuel predictions, FMGC</description>
|
||||
<nick>mattmaring</nick>
|
||||
</author>
|
||||
<author>
|
||||
<name>Thorsten Herrmann</name>
|
||||
<description>Cockpit 3D model</description>
|
||||
<nick>TH-555</nick>
|
||||
</author>
|
||||
<author>
|
||||
<name>Semir Gebran</name>
|
||||
<description>3D model</description>
|
||||
<nick>CaptB</nick>
|
||||
</author>
|
||||
<author>
|
||||
<name>vezza</name>
|
||||
<description>Systems, Displays</description>
|
||||
</author>
|
||||
</authors>
|
||||
|
||||
<checklists include="A32X-Checklists.xml"/>
|
||||
|
||||
<status>Pre V1.0</status>
|
||||
<description>Airbus A320</description>
|
||||
<long-description>The Airbus A320 is a family of narrow body airliners built by Airbus Industrie. First flown in 1987,
|
||||
the aircraft is the most produced airliner ever, with over 9,500 built to date. It was one of the first airliners
|
||||
to use digital flight controls and fly by wire, and a fully glass cockpit.</long-description>
|
||||
|
||||
<hud n="0">
|
||||
<enable3d n="0">false</enable3d>
|
||||
|
@ -138,6 +177,8 @@
|
|||
<model type="int">4</model>
|
||||
</rating>
|
||||
|
||||
<status>Pre V1.0</status>
|
||||
|
||||
<tags>
|
||||
<tag>transport</tag>
|
||||
<tag>airbus</tag>
|
||||
|
@ -153,6 +194,13 @@
|
|||
<tag>2-engine</tag>
|
||||
</tags>
|
||||
|
||||
<urls>
|
||||
<home-page>http://wiki.flightgear.org/Airbus_A320_Family</home-page>
|
||||
<support>https://forum.flightgear.org</support>
|
||||
<wikipedia>https://en.wikipedia.org/wiki/Airbus_A320_family</wikipedia>
|
||||
<code-repository>https://github.com/legoboyvdlp/A320-family</code-repository>
|
||||
</urls>
|
||||
|
||||
<systems n="0">
|
||||
<electrical>
|
||||
<path></path>
|
||||
|
@ -512,8 +560,33 @@
|
|||
</current-view>
|
||||
|
||||
<minimum-fg-version>2019.2.0</minimum-fg-version>
|
||||
|
||||
<navdb>
|
||||
<min-runway-length-ft>3000</min-runway-length-ft>
|
||||
</navdb>
|
||||
|
||||
</sim>
|
||||
|
||||
<aircraft>
|
||||
<icao>
|
||||
<wake-turbulence-category>M</wake-turbulence-category>
|
||||
<type type="string">A320</type>
|
||||
<equipment type="string">SDE2FGHIRWXY</equipment>
|
||||
<surveillance type="string">S</surveillance>
|
||||
</icao>
|
||||
<performance>
|
||||
<minimum>
|
||||
<takeoff-length-ft type="int">4500</takeoff-length-ft>
|
||||
<landing-length-ft type="int">4500</landing-length-ft>
|
||||
</minimum>
|
||||
<maximum>
|
||||
<altitude-ft type="int">41000</altitude-ft>
|
||||
<mach type="double">0.82</mach>
|
||||
<airspeed-knots type="int">350</airspeed-knots>
|
||||
</maximum>
|
||||
</performance>
|
||||
</aircraft>
|
||||
|
||||
<consumables>
|
||||
<fuel>
|
||||
<tank n="0">
|
||||
|
@ -543,6 +616,39 @@
|
|||
</fuel>
|
||||
</consumables>
|
||||
|
||||
<ECAM>
|
||||
<Upper>
|
||||
<FlapX type="double">0</FlapX>
|
||||
<FlapY type="double">0</FlapY>
|
||||
<SlatX type="double">0</SlatX>
|
||||
<SlatY type="double">0</SlatY>
|
||||
<FlapXtrans type="double">0</FlapXtrans>
|
||||
<FlapYtrans type="double">0</FlapYtrans>
|
||||
<SlatXtrans type="double">0</SlatXtrans>
|
||||
<SlatYtrans type="double">0</SlatYtrans>
|
||||
</Upper>
|
||||
<msg>
|
||||
<line1 type="string"></line1>
|
||||
<line2 type="string"></line2>
|
||||
<line3 type="string"></line3>
|
||||
<line4 type="string"></line4>
|
||||
<line5 type="string"></line5>
|
||||
<line6 type="string"></line6>
|
||||
<line7 type="string"></line7>
|
||||
<line8 type="string"></line8>
|
||||
</msg>
|
||||
<rightmsg>
|
||||
<line1 type="string"></line1>
|
||||
<line2 type="string"></line2>
|
||||
<line3 type="string"></line3>
|
||||
<line4 type="string"></line4>
|
||||
<line5 type="string"></line5>
|
||||
<line6 type="string"></line6>
|
||||
<line7 type="string"></line7>
|
||||
<line8 type="string"></line8>
|
||||
</rightmsg>
|
||||
</ECAM>
|
||||
|
||||
<environment>
|
||||
<aircraft-effects>
|
||||
<frost-inch type="double">0</frost-inch>
|
||||
|
@ -846,6 +952,7 @@
|
|||
<du4 type="double">1</du4>
|
||||
<du5 type="double">1</du5>
|
||||
<du6 type="double">1</du6>
|
||||
<iesi type="double">1</iesi>
|
||||
<mcdu1 type="double">1</mcdu1>
|
||||
<mcdu2 type="double">1</mcdu2>
|
||||
</DU>
|
||||
|
@ -1085,6 +1192,10 @@
|
|||
<transponder-code type="string">2000</transponder-code>
|
||||
<failed type="bool">0</failed>
|
||||
</atc>
|
||||
<atsu>
|
||||
<atis-server type="string">faa</atis-server>
|
||||
<wxr-server type="string">faa</wxr-server>
|
||||
</atsu>
|
||||
<apu>
|
||||
<oil>
|
||||
<level-l type="double">5.4</level-l>
|
||||
|
@ -1109,6 +1220,7 @@
|
|||
</comm>
|
||||
<electrical n="0">
|
||||
<bus>
|
||||
<ac-ess type="double">0</ac-ess>
|
||||
<dc-1 type="double">0</dc-1>
|
||||
<dc-2 type="double">0</dc-2>
|
||||
</bus>
|
||||
|
@ -1381,6 +1493,7 @@
|
|||
</pneumatics>
|
||||
|
||||
<pressurization>
|
||||
<cabinalt-norm type="double">0</cabinalt-norm>
|
||||
<cabinpsi type="double">14.7</cabinpsi>
|
||||
<ditchingpb type="double">14.7</ditchingpb>
|
||||
</pressurization>
|
||||
|
@ -1573,6 +1686,10 @@
|
|||
<range type="double">1.0</range>
|
||||
</groundradar>
|
||||
|
||||
<iesi>
|
||||
<att-reset-cmd type="bool">false</att-reset-cmd>
|
||||
</iesi>
|
||||
|
||||
<marker-beacon n="0">
|
||||
<serviceable type="bool">true</serviceable>
|
||||
</marker-beacon>
|
||||
|
@ -1722,6 +1839,10 @@
|
|||
<max-range-m type="int">1219</max-range-m>
|
||||
<serviceable type="bool">true</serviceable>
|
||||
</radar-altimeter>
|
||||
|
||||
<wxr>
|
||||
<enabled type="bool">false</enabled>
|
||||
</wxr>
|
||||
</instrumentation>
|
||||
|
||||
<modes>
|
||||
|
@ -4254,6 +4375,9 @@
|
|||
</aircraft>
|
||||
|
||||
<nasal>
|
||||
<notifications>
|
||||
<file>Aircraft/A320-family/Nasal/emesary/M_frame_notification.nas</file>
|
||||
</notifications>
|
||||
<pts>
|
||||
<file>Aircraft/A320-family/Nasal/Libraries/property-tree-setup.nas</file>
|
||||
</pts>
|
||||
|
@ -4316,21 +4440,22 @@
|
|||
</fmgc>
|
||||
<mcdu>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/DUPLICATE.nas</file> <!-- dynamic page - init before others as used in various pages -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/DIRTO.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/LATREV.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/VERTREV.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/DEPARTURE.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/ARRIVAL.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/AIRWAYS.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/CLOSESTAIRPORT.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/RECEIVEDMESSAGES.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/PILOTWAYPOINT.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/HOLD.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/F-PLN.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/WINDCLB.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/WINDCRZ.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/WINDDES.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/WINDHIST.nas</file> <!-- dynamic page - init before MCDU -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/DIRTO.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/LATREV.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/VERTREV.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/DEPARTURE.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/ARRIVAL.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/AIRWAYS.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/CLOSESTAIRPORT.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/RECEIVEDMESSAGES.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/PILOTWAYPOINT.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/HOLD.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/F-PLN.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/WINDCLB.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/WINDCRZ.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/WINDDES.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/WINDHIST.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/ATIS.nas</file> <!-- Last Dynamic Page -->
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/MCDU.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/INITA.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/IRSINIT.nas</file>
|
||||
|
@ -4360,6 +4485,7 @@
|
|||
<file>Aircraft/A320-family/Models/Instruments/ND/canvas/ND.nas</file>
|
||||
</canvas_nd>
|
||||
<canvas_ecam>
|
||||
<file>Aircraft/A320-family/Nasal/emesary/exec.nas</file>
|
||||
<file>Aircraft/A320-family/Models/Instruments/Upper-ECAM/Upper-ECAM.nas</file>
|
||||
<file>Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM.nas</file>
|
||||
</canvas_ecam>
|
||||
|
@ -4399,6 +4525,7 @@
|
|||
<file>Aircraft/A320-family/Nasal/Panels/atc.nas</file>
|
||||
</atc>
|
||||
<atsu>
|
||||
<file>Aircraft/A320-family/Nasal/Systems/Comm/Dictionary.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/Systems/Comm/Notification.nas</file>
|
||||
</atsu>
|
||||
<dmc>
|
||||
|
|
|
@ -76,6 +76,8 @@ setprop("/systems/acconfig/options/keyboard-mode", 0);
|
|||
setprop("/systems/acconfig/options/weight-kgs", 0);
|
||||
setprop("/systems/acconfig/options/adirs-skip", 0);
|
||||
setprop("/systems/acconfig/options/allow-oil-consumption", 0);
|
||||
setprop("/systems/acconfig/options/atis-server", "faa");
|
||||
setprop("/systems/acconfig/options/wxr-server", "noaa");
|
||||
setprop("/systems/acconfig/options/welcome-skip", 0);
|
||||
setprop("/systems/acconfig/options/no-rendering-warn", 0);
|
||||
setprop("/systems/acconfig/options/save-state", 0);
|
||||
|
@ -231,6 +233,8 @@ var readSettings = func {
|
|||
setprop("/sim/model/autopush/route/show-wingtip", getprop("/systems/acconfig/options/autopush/show-wingtip"));
|
||||
setprop("/options/system/fo-view", getprop("/systems/acconfig/options/fo-view"));
|
||||
setprop("/FMGC/simbrief-username", getprop("/systems/acconfig/options/simbrief-username"));
|
||||
setprop("/systems/atsu/atis-server", getprop("/systems/acconfig/options/atis-server"));
|
||||
setprop("/systems/atsu/wxr-server", getprop("/systems/acconfig/options/wxr-server"));
|
||||
}
|
||||
|
||||
var writeSettings = func {
|
||||
|
@ -243,6 +247,8 @@ var writeSettings = func {
|
|||
setprop("/systems/acconfig/options/autopush/show-wingtip", getprop("/sim/model/autopush/route/show-wingtip"));
|
||||
setprop("/systems/acconfig/options/fo-view", getprop("/options/system/fo-view"));
|
||||
setprop("/systems/acconfig/options/simbrief-username", getprop("/FMGC/simbrief-username"));
|
||||
setprop("/systems/acconfig/options/atis-server", getprop("/systems/atsu/atis-server"));
|
||||
setprop("/systems/acconfig/options/wxr-server", getprop("/systems/atsu/wxr-server"));
|
||||
io.write_properties(getprop("/sim/fg-home") ~ "/Export/A320-family-config.xml", "/systems/acconfig/options");
|
||||
}
|
||||
|
||||
|
|
|
@ -7251,6 +7251,128 @@
|
|||
<object-name>iesi_btn_rst</object-name>
|
||||
</effect>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>iesi_btn_rst</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/iesi/att-reset-cmd</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/iesi/att-reset-cmd</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>iesi_btn_rst</object-name>
|
||||
<property>/instrumentation/iesi/att-reset-cmd</property>
|
||||
<factor>0.0025</factor>
|
||||
<axis>
|
||||
<x1-m>-0.53312</x1-m>
|
||||
<y1-m>-0.16166</y1-m>
|
||||
<z1-m>0.16956</z1-m>
|
||||
<x2-m>-0.53977</x2-m>
|
||||
<y2-m>-0.16166</y2-m>
|
||||
<z2-m>0.16765</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>iesi_btn_plus</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>true</repeatable>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/iesi/plus</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>controls/lighting/DU/iesi</property>
|
||||
<step>0.05</step>
|
||||
<min>0</min>
|
||||
<max>1</max>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/iesi/plus</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>iesi_btn_plus</object-name>
|
||||
<property>/instrumentation/iesi/plus</property>
|
||||
<factor>0.0025</factor>
|
||||
<axis>
|
||||
<x1-m>-0.53312</x1-m>
|
||||
<y1-m>-0.16166</y1-m>
|
||||
<z1-m>0.16956</z1-m>
|
||||
<x2-m>-0.53977</x2-m>
|
||||
<y2-m>-0.16166</y2-m>
|
||||
<z2-m>0.16765</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>iesi_btn_minus</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>true</repeatable>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/iesi/minus</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>controls/lighting/DU/iesi</property>
|
||||
<step>-0.05</step>
|
||||
<min>0</min>
|
||||
<max>1</max>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/iesi/minus</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>iesi_btn_minus</object-name>
|
||||
<property>/instrumentation/iesi/minus</property>
|
||||
<factor>0.0025</factor>
|
||||
<axis>
|
||||
<x1-m>-0.53312</x1-m>
|
||||
<y1-m>-0.16166</y1-m>
|
||||
<z1-m>0.16956</z1-m>
|
||||
<x2-m>-0.53977</x2-m>
|
||||
<y2-m>-0.16166</y2-m>
|
||||
<z2-m>0.16765</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<effect>
|
||||
<inherits-from>Aircraft/A320-family/Models/Effects/clock</inherits-from>
|
||||
<!-- <object-name>clock</object-name>-->
|
||||
|
@ -8459,4 +8581,48 @@
|
|||
</action>
|
||||
</animation>
|
||||
|
||||
<!-- WX Radar -->
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>radar_sys</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/instrumentation/efis[0]/inputs/wxr</property>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/instrumentation/efis[1]/inputs/wxr</property>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/instrumentation/wxr/enabled</property>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>setprop("sim/sounde/switch1", 1);</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>radar_sys</object-name>
|
||||
<factor>-20</factor>
|
||||
<property>/instrumentation/wxr/enabled</property>
|
||||
<center>
|
||||
<x-m>0.020282</x-m>
|
||||
<y-m>-0.210647</y-m>
|
||||
<z-m>-0.140496</z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
</PropertyList>
|
||||
|
|
Before Width: | Height: | Size: 520 KiB After Width: | Height: | Size: 534 KiB |
|
@ -13,16 +13,16 @@ var mach_act = 0;
|
|||
|
||||
# props.nas nodes
|
||||
var iesi_init = props.globals.initNode("/instrumentation/iesi/iesi-init", 0, "BOOL");
|
||||
var iesi_time = props.globals.initNode("/instrumentation/iesi/iesi-init-time", 0.0, "DOUBLE");
|
||||
var iesi_reset = props.globals.initNode("/instrumentation/iesi/att-reset", 0, "DOUBLE");
|
||||
var iesi_brt = props.globals.getNode("/controls/lighting/DU/iesi", 1);
|
||||
var iesi_rate = props.globals.getNode("/systems/acconfig/options/iesi-rate", 1);
|
||||
var et = props.globals.getNode("/sim/time/elapsed-sec", 1);
|
||||
var aconfig = props.globals.getNode("/systems/acconfig/autoconfig-running", 1);
|
||||
|
||||
var airspeed = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt", 1);
|
||||
var mach = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach", 1);
|
||||
var pitch = props.globals.getNode("/orientation/pitch-deg", 1);
|
||||
var roll = props.globals.getNode("/orientation/roll-deg", 1);
|
||||
var skid = props.globals.getNode("/instrumentation/slip-skid-ball/indicated-slip-skid", 1);
|
||||
var pitch = props.globals.getNode("/instrumentation/iesi/pitch-deg", 1);
|
||||
var skid = props.globals.getNode("/instrumentation/iesi/slip-skid", 1);
|
||||
var altitude = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1);
|
||||
var altitude_ind = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft-pfd", 1);
|
||||
|
||||
|
@ -30,6 +30,10 @@ var altimeter_mode = props.globals.getNode("/instrumentation/altimeter[0]/std",
|
|||
var qnh_hpa = props.globals.getNode("/instrumentation/altimeter/setting-hpa", 1);
|
||||
var qnh_inhg = props.globals.getNode("/instrumentation/altimeter/setting-inhg", 1);
|
||||
|
||||
var _showIESI = 0;
|
||||
var _fast = 0;
|
||||
var _IESITime = 0;
|
||||
|
||||
var canvas_IESI_base = {
|
||||
init: func(canvas_group, file) {
|
||||
var font_mapper = func(family, weight) {
|
||||
|
@ -66,6 +70,10 @@ var canvas_IESI_base = {
|
|||
me.AI_horizon_trans = me["AI_horizon"].createTransform();
|
||||
me.AI_horizon_rot = me["AI_horizon"].createTransform();
|
||||
|
||||
_showIESI = 0;
|
||||
_fast = 0;
|
||||
_IESITime = 0.0;
|
||||
|
||||
me.page = canvas_group;
|
||||
|
||||
return me;
|
||||
|
@ -75,19 +83,42 @@ var canvas_IESI_base = {
|
|||
},
|
||||
update: func() {
|
||||
cur_time = et.getValue();
|
||||
# todo consider relay 7XB for power of DC HOT 1
|
||||
# todo transient max 0.2s
|
||||
# todo 20W power consumption
|
||||
if (iesi_reset.getValue() == 1) {
|
||||
if (iesi_init.getBoolValue() and _IESITime + 90 >= et.getValue()) {
|
||||
_fast = 1;
|
||||
} else {
|
||||
_fast = 0;
|
||||
}
|
||||
iesi_init.setBoolValue(0);
|
||||
}
|
||||
|
||||
if (systems.ELEC.Bus.dcEss.getValue() >= 25 or (systems.ELEC.Bus.dcHot1.getValue() >= 25 and airspeed.getValue() >= 50 and cur_time >= 5)) {
|
||||
IESI.page.show();
|
||||
_showIESI = 1;
|
||||
IESI.update();
|
||||
|
||||
if (aconfig.getValue() != 1 and iesi_init.getValue() != 1) {
|
||||
iesi_init.setBoolValue(1);
|
||||
iesi_time.setValue(cur_time);
|
||||
if (_fast) {
|
||||
_IESITime = cur_time - 80;
|
||||
_fast = 0;
|
||||
} else {
|
||||
_IESITime = cur_time;
|
||||
}
|
||||
} else if (aconfig.getValue() == 1 and iesi_init.getValue() != 1) {
|
||||
iesi_init.setBoolValue(1);
|
||||
iesi_time.setValue(cur_time - 87);
|
||||
_IESITime = cur_time - 87;
|
||||
}
|
||||
} else {
|
||||
_showIESI = 0;
|
||||
iesi_init.setBoolValue(0);
|
||||
}
|
||||
|
||||
if (_showIESI and iesi_brt.getValue() > 0.01) {
|
||||
IESI.page.show();
|
||||
} else {
|
||||
IESI.page.hide();
|
||||
}
|
||||
},
|
||||
|
@ -98,14 +129,20 @@ var canvas_IESI = {
|
|||
var m = {parents: [canvas_IESI, canvas_IESI_base]};
|
||||
m.init(canvas_group, file);
|
||||
m._cachedInhg = -99;
|
||||
|
||||
m._machWasAbove50 = 0;
|
||||
m._roll = 0;
|
||||
return m;
|
||||
},
|
||||
getKeys: func() {
|
||||
return ["IESI","IESI_Init","ASI_scale","ASI_mach","ASI_mach_decimal","AI_center","AI_horizon","AI_bank","AI_slipskid","ALT_scale","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_meters","QNH_setting","QNH_std"];
|
||||
return ["IESI","IESI_Init","ASI_scale","ASI_mach","ASI_mach_decimal","AI_center","AI_horizon","AI_bank","AI_slipskid","ALT_scale","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_meters","QNH_setting","QNH_std","negText","negText2","AI_bank_scale"];
|
||||
},
|
||||
update: func() {
|
||||
if (iesi_time.getValue() + 90 >= et.getValue()) {
|
||||
if (qnh_inhg.getValue() != me._cachedInhg) {
|
||||
me._cachedInhg = qnh_inhg.getValue();
|
||||
me.updateQNH();
|
||||
}
|
||||
|
||||
if (_IESITime + 90 >= et.getValue()) {
|
||||
me["IESI"].hide();
|
||||
me["IESI_Init"].show();
|
||||
return;
|
||||
|
@ -115,22 +152,27 @@ var canvas_IESI = {
|
|||
}
|
||||
|
||||
# Airspeed
|
||||
# Subtract 30, since the scale starts at 30, but don"t allow less than 0, or more than 420 situations
|
||||
# Subtract 30, since the scale starts at 30, but don't allow less than 0, or more than 520 knots
|
||||
airspeed_act = airspeed.getValue();
|
||||
mach_act = mach.getValue();
|
||||
if (airspeed_act <= 30) {
|
||||
ASI = 0;
|
||||
} else if (airspeed_act >= 420) {
|
||||
ASI = 390;
|
||||
} else if (airspeed_act >= 520) {
|
||||
ASI = 490;
|
||||
} else {
|
||||
ASI = airspeed_act - 30;
|
||||
}
|
||||
me["ASI_scale"].setTranslation(0, ASI * 8.295);
|
||||
|
||||
if (mach_act >= 0.5) {
|
||||
me._machWasAbove50 = 1;
|
||||
me["ASI_mach_decimal"].show();
|
||||
me["ASI_mach"].show();
|
||||
} elsif (mach_act >= 0.45 and me._machWasAbove50) {
|
||||
me["ASI_mach_decimal"].show();
|
||||
me["ASI_mach"].show();
|
||||
} else {
|
||||
me._machWasAbove50 = 0;
|
||||
me["ASI_mach_decimal"].hide();
|
||||
me["ASI_mach"].hide();
|
||||
}
|
||||
|
@ -142,14 +184,29 @@ var canvas_IESI = {
|
|||
}
|
||||
|
||||
# Attitude
|
||||
me._roll = pts.Orientation.roll.getValue();
|
||||
me.AI_horizon_trans.setTranslation(0, pitch.getValue() * 16.74);
|
||||
me.AI_horizon_rot.setRotation(-roll.getValue() * D2R, me["AI_center"].getCenter());
|
||||
me.AI_horizon_rot.setRotation(-me._roll * D2R, me["AI_center"].getCenter());
|
||||
|
||||
me["AI_slipskid"].setTranslation(math.clamp(skid.getValue(), -7, 7) * -15, 0);
|
||||
me["AI_bank"].setRotation(-roll.getValue() * D2R);
|
||||
me["AI_slipskid"].setTranslation(skid.getValue(), 0);
|
||||
me["AI_bank"].setRotation(-me._roll * D2R);
|
||||
|
||||
# Altitude
|
||||
me.altitude = altitude.getValue();
|
||||
if (me.altitude > 50000) {
|
||||
me.altitude = 50000;
|
||||
} elsif (me.altitude < -2000) {
|
||||
me.altitude = -2000;
|
||||
}
|
||||
|
||||
if (me.altitude < 0) {
|
||||
me["negText"].show();
|
||||
me["negText2"].show();
|
||||
} else {
|
||||
me["negText"].hide();
|
||||
me["negText2"].hide();
|
||||
}
|
||||
|
||||
me.altOffset = me.altitude / 500 - int(me.altitude / 500);
|
||||
me.middleAltText = roundaboutAlt(me.altitude / 100);
|
||||
me.middleAltOffset = nil;
|
||||
|
@ -166,15 +223,17 @@ var canvas_IESI = {
|
|||
me["ALT_two"].setText(sprintf("%03d", abs(me.middleAltText-5)));
|
||||
me["ALT_one"].setText(sprintf("%03d", abs(me.middleAltText-10)));
|
||||
|
||||
me["ALT_digits"].setText(sprintf("%s", altitude_ind.getValue()));
|
||||
me["ALT_meters"].setText(sprintf("%5.0f", me.altitude * 0.3048));
|
||||
altTens = num(right(sprintf("%02d", altitude.getValue()), 2));
|
||||
me["ALT_tens"].setTranslation(0, altTens * 3.16);
|
||||
|
||||
if (qnh_inhg.getValue() != me._cachedInhg) {
|
||||
me._cachedInhg = qnh_inhg.getValue();
|
||||
me.updateQNH();
|
||||
me.altitudeText = altitude_ind.getValue();
|
||||
if (me.altitude < 0 and me.altitudeText > 20) {
|
||||
me.altitudeText = 20;
|
||||
} elsif (me.altitude > 0 and me.altitudeText > 500) {
|
||||
me.altitudeText = 500;
|
||||
}
|
||||
|
||||
me["ALT_digits"].setText(sprintf("%s", me.altitudeText));
|
||||
me["ALT_meters"].setText(sprintf("%5.0f", math.round(me.altitude * 0.3048, 10)));
|
||||
altTens = num(right(sprintf("%02d", me.altitude), 2));
|
||||
me["ALT_tens"].setTranslation(0, altTens * 3.16);
|
||||
},
|
||||
updateQNH: func() {
|
||||
if (altimeter_mode.getBoolValue()) {
|
||||
|
|
|
@ -19,15 +19,15 @@
|
|||
</action>
|
||||
</animation>
|
||||
|
||||
<!--animation>
|
||||
<animation>
|
||||
<type>material</type>
|
||||
<object-name>pfd1.screen</object-name>
|
||||
<object-name>iesi.screen</object-name>
|
||||
<emission>
|
||||
<red>1</red>
|
||||
<green>1</green>
|
||||
<blue>1</blue>
|
||||
<factor-prop>controls/lighting/DU/iesi</factor-prop>
|
||||
</emission>
|
||||
</animation-->
|
||||
</animation>
|
||||
|
||||
</PropertyList>
|
||||
|
|
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 115 KiB |
|
@ -25,6 +25,7 @@ var myCLBWIND = [nil, nil];
|
|||
var myCRZWIND = [nil, nil];
|
||||
var myDESWIND = [nil, nil];
|
||||
var myHISTWIND = [nil, nil];
|
||||
var myAtis = [nil, nil];
|
||||
var default = "BoeingCDU-Large.ttf";
|
||||
#var symbol = "helvetica_medium.txf";
|
||||
var symbol = "LiberationMonoCustom.ttf";
|
||||
|
@ -231,7 +232,8 @@ var canvas_MCDU_base = {
|
|||
"PERFAPPR_FE","PERFAPPR_SE","PERFAPPR_OE","PERFAPPR_LDG_3","PERFAPPR_LDG_F","PERFGA","PERFGA_FE","PERFGA_SE","PERFGA_OE","FPLN","FPLN_From",
|
||||
"FPLN_TMPY_group","FPLN_FROM","FPLN_Callsign","departureTMPY", "arrowsDepArr","arrow1L","arrow2L","arrow3L","arrow4L","arrow5L","arrow1R","arrow2R",
|
||||
"arrow3R","arrow4R","arrow5R","DIRTO_TMPY_group","IRSINIT","IRSINIT_1","IRSINIT_2","IRSINIT_star","NOTIFY","NOTIFY_FLTNBR","NOTIFY_AIRPORT","WEATHERREQSEND",
|
||||
"WIND","WIND_CANCEL","WIND_INSERT_star","WIND_UPDOWN","MODEVHF3","PRINTPAGE","COMM-ADS","COCALL","COCALLTUNE"];
|
||||
"WIND","WIND_CANCEL","WIND_INSERT_star","WIND_UPDOWN","MODEVHF3","PRINTPAGE","COMM-ADS","COCALL","COCALLTUNE","ATISSend1","ATISSend2","ATISSend3","ATISSend4",
|
||||
"ATISArrows"];
|
||||
},
|
||||
update: func() {
|
||||
if (systems.ELEC.Bus.ac1.getValue() >= 110 and mcdu1_lgt.getValue() > 0.01) {
|
||||
|
@ -362,6 +364,15 @@ var canvas_MCDU_base = {
|
|||
me["PRINTPAGE"].setColor(WHITE);
|
||||
}
|
||||
}
|
||||
if (page != "ATIS") {
|
||||
me["ATISSend1"].hide();
|
||||
me["ATISSend2"].hide();
|
||||
me["ATISSend3"].hide();
|
||||
me["ATISSend4"].hide();
|
||||
}
|
||||
if (page != "ATISDETAIL") {
|
||||
me["ATISArrows"].hide();
|
||||
}
|
||||
if (page == "F-PLNA" or page == "F-PLNB") {
|
||||
if (!pageSwitch[i].getBoolValue()) {
|
||||
me["Simple"].show();
|
||||
|
@ -545,12 +556,14 @@ var canvas_MCDU_base = {
|
|||
me.showLeftArrow(1, 1, 1, -1, 1, 1);
|
||||
me.showRight(1, 1, 1, 1, 1, -1);
|
||||
me.showRightS(-1, -1, -1, -1, -1, -1);
|
||||
me.showRightArrow(1, 1, 1, 1, 1, -1);
|
||||
me.showRightArrow(1, 1, 1, 1, 1, 1);
|
||||
me["Simple_C3B"].hide();
|
||||
me["Simple_C4B"].hide();
|
||||
|
||||
me.standardFontSize();
|
||||
me.standardFontColour();
|
||||
me["Simple_R6"].setColor(BLUE);
|
||||
me["Simple_R6_Arrow"].setColor(BLUE);
|
||||
|
||||
me["Simple_L1"].setText(" PREFLIGHT");
|
||||
me["Simple_L2"].setText(" ENROUTE");
|
||||
|
@ -564,8 +577,72 @@ var canvas_MCDU_base = {
|
|||
me["Simple_R3"].setText("RCVD MSGS ");
|
||||
me["Simple_R4"].setText("REPORTS ");
|
||||
me["Simple_R5"].setText("CONFIG ");
|
||||
me["Simple_R6"].setText("MESSAGE ");
|
||||
pageSwitch[i].setBoolValue(1);
|
||||
}
|
||||
|
||||
if (mcdu.ReceivedMessagesDatabase.firstUnviewed() != -99) {
|
||||
me["Simple_R6"].show();
|
||||
me["Simple_R6_Arrow"].show();
|
||||
} else {
|
||||
me["Simple_R6"].hide();
|
||||
me["Simple_R6_Arrow"].hide();
|
||||
}
|
||||
} else if (page == "AOCCONFIG") {
|
||||
if (!pageSwitch[i].getBoolValue()) {
|
||||
me.defaultHideWithCenter();
|
||||
me["Simple_Title"].setText("AOC CONFIGURATION");
|
||||
me.defaultPageNumbers();
|
||||
|
||||
me.showLeft(1, -1, -1, -1, -1, 1);
|
||||
me["Simple_L0S"].hide();
|
||||
me.showLeftS(1, -1, -1, -1, -1, 1);
|
||||
me.showLeftArrow(-1, -1, -1, -1, -1, 1);
|
||||
me.showCenter(1, 1, 1, 1, 1, -1);
|
||||
me.showCenterS(1, -1, 1, -1, 1, -1);
|
||||
me.showRight(1, -1, -1, -1, -1, 1);
|
||||
me.showRightS(1, -1, -1, -1, -1, -1);
|
||||
me.showRightArrow(-1, -1, -1, -1, -1, -1);
|
||||
me["Simple_C3B"].hide();
|
||||
me["Simple_C4B"].hide();
|
||||
|
||||
me.standardFontSize();
|
||||
me.standardFontColour();
|
||||
|
||||
me["Simple_L1S"].setText("A/C REG");
|
||||
me["Simple_L1"].setFontSize(small);
|
||||
me["Simple_L1"].setColor(GREEN);
|
||||
me["Simple_C1S"].setColor(GREEN);
|
||||
me["Simple_R1"].setFontSize(small);
|
||||
me["Simple_R1"].setColor(GREEN);
|
||||
me["Simple_R1S"].setText("TYPE");
|
||||
me["Simple_L6S"].setText(" RETURN TO");
|
||||
me["Simple_L6"].setText(" AOC MENU");
|
||||
me["Simple_C2"].setText("ATSU SW AND DB PN");
|
||||
me["Simple_C3S"].setText("998.2459.501");
|
||||
me["Simple_C3S"].setFontSize(small);
|
||||
me["Simple_C3S"].setColor(GREEN);
|
||||
me["Simple_C3"].setText("998.2460.501");
|
||||
me["Simple_C3"].setFontSize(small);
|
||||
me["Simple_C3"].setColor(GREEN);
|
||||
me["Simple_C4"].setText("ATSU AOC ID");
|
||||
me["Simple_C5S"].setText("AS2TOC1015010F1");
|
||||
me["Simple_C5S"].setFontSize(small);
|
||||
me["Simple_C5S"].setColor(GREEN);
|
||||
me["Simple_C5"].setText("AS2TOC1012001F2");
|
||||
me["Simple_C5"].setFontSize(small);
|
||||
me["Simple_C5"].setColor(GREEN);
|
||||
me["Simple_R6"].setText("PRINT ");
|
||||
me["Simple_R6"].setColor(BLUE);
|
||||
me["Simple_C1"].setFontSize(small);
|
||||
me["Simple_C1"].setColor(GREEN);
|
||||
pageSwitch[i].setBoolValue(1);
|
||||
}
|
||||
me["Simple_L1"].setText(getprop("/options/model-options/registration"));
|
||||
me["Simple_C1S"].setText(sprintf("%02.0f", getprop("/sim/time/utc/hour")) ~ sprintf("%02.0f", getprop("/sim/time/utc/minute")));
|
||||
me["Simple_C1"].setText(sprintf("%02.0f", getprop("/sim/time/utc/day")) ~ "/" ~ sprintf("%02.0f", getprop("/sim/time/utc/month")) ~ "/" ~ right(sprintf(getprop("/sim/time/utc/year")), 2));
|
||||
me["Simple_R1S"].setText("TYPE");
|
||||
me["Simple_R1"].setText(getprop("/MCDUC/type"));
|
||||
} else if (page == "WEATHERREQ") {
|
||||
if (!pageSwitch[i].getBoolValue()) {
|
||||
me.defaultHide();
|
||||
|
@ -913,6 +990,217 @@ var canvas_MCDU_base = {
|
|||
me["Simple_R1"].setText("ATIS ");
|
||||
pageSwitch[i].setBoolValue(1);
|
||||
}
|
||||
} else if (page == "ATISDETAIL") {
|
||||
if (!pageSwitch[i].getBoolValue()) {
|
||||
me.defaultHide();
|
||||
me["Simple_PageNum"].hide();
|
||||
me["ArrowLeft"].hide();
|
||||
me["ArrowRight"].hide();
|
||||
|
||||
me["Simple_L0S"].hide();
|
||||
me["Simple_C3B"].hide();
|
||||
me["Simple_C4B"].hide();
|
||||
|
||||
me.fontLeft(default, default, default, default, default, default);
|
||||
me.fontLeftS(default, default, default, default, default, default);
|
||||
me.fontRight(default, default, default, default, default, default);
|
||||
me.fontRightS(default, default, default, default, default, default);
|
||||
|
||||
me.fontSizeLeft(small, small, small, small, normal, normal);
|
||||
me.fontSizeCenter(normal, normal, normal, normal, normal, normal);
|
||||
me.fontSizeRight(normal, normal, normal, normal, normal, normal);
|
||||
|
||||
me.colorLeftS("grn", "wht", "wht", "wht", "wht", "wht");
|
||||
me.colorRightS("grn", "wht", "wht", "wht", "wht", "wht");
|
||||
|
||||
|
||||
if (myAtis[i] != nil) {
|
||||
me["Simple_Title"].setText(sprintf("%s", myAtis[i].title));
|
||||
|
||||
me.dynamicPageArrowFunc(myAtis[i]);
|
||||
me.colorLeftArrow(myAtis[i].arrowsColour[0][0],myAtis[i].arrowsColour[0][1],myAtis[i].arrowsColour[0][2],myAtis[i].arrowsColour[0][3],myAtis[i].arrowsColour[0][4],myAtis[i].arrowsColour[0][5]);
|
||||
me.colorRightArrow(myAtis[i].arrowsColour[1][0],myAtis[i].arrowsColour[1][1],myAtis[i].arrowsColour[1][2],myAtis[i].arrowsColour[1][3],myAtis[i].arrowsColour[1][4],myAtis[i].arrowsColour[1][5]);
|
||||
|
||||
me.dynamicPageFunc(myAtis[i].L1, "Simple_L1");
|
||||
me.dynamicPageFunc(myAtis[i].L2, "Simple_L2");
|
||||
me.dynamicPageFunc(myAtis[i].L3, "Simple_L3");
|
||||
me.dynamicPageFunc(myAtis[i].L4, "Simple_L4");
|
||||
me.dynamicPageFunc(myAtis[i].L5, "Simple_L5");
|
||||
me.dynamicPageFunc(myAtis[i].L6, "Simple_L6");
|
||||
|
||||
me.colorLeft(myAtis[i].L1[2],myAtis[i].L2[2],myAtis[i].L3[2],myAtis[i].L4[2],myAtis[i].L5[2],myAtis[i].L6[2]);
|
||||
|
||||
me.dynamicPageFunc(myAtis[i].R1, "Simple_R1");
|
||||
me.dynamicPageFunc(myAtis[i].R2, "Simple_R2");
|
||||
me.dynamicPageFunc(myAtis[i].R3, "Simple_R3");
|
||||
me.dynamicPageFunc(myAtis[i].R4, "Simple_R4");
|
||||
me.dynamicPageFunc(myAtis[i].R5, "Simple_R5");
|
||||
me.dynamicPageFunc(myAtis[i].R6, "Simple_R6");
|
||||
|
||||
me.colorRight(myAtis[i].R1[2],myAtis[i].R2[2],myAtis[i].R3[2],myAtis[i].R4[2],myAtis[i].R5[2],myAtis[i].R6[2]);
|
||||
}
|
||||
|
||||
if (myAtis[i].getNumPages() > 1) {
|
||||
me["Simple_PageNum"].show();
|
||||
me["ATISArrows"].show();
|
||||
me["Simple_PageNum"].setText(myAtis[i].page ~ "/" ~ myAtis[i].getNumPages());
|
||||
} else {
|
||||
me["Simple_PageNum"].hide();
|
||||
me["ATISArrows"].hide();
|
||||
}
|
||||
|
||||
pageSwitch[i].setBoolValue(1);
|
||||
}
|
||||
} else if (page == "ATIS") {
|
||||
if (!pageSwitch[i].getBoolValue()) {
|
||||
me.defaultHideWithCenter();
|
||||
me["Simple_Title"].setText("ATS623 ATIS MENU");
|
||||
me["Simple_Title"].setColor(1, 1, 1);
|
||||
me["Simple_PageNum"].hide();
|
||||
me["ArrowLeft"].hide();
|
||||
me["ArrowRight"].hide();
|
||||
|
||||
me.showLeft(1, 1, 1, 1, -1, 1);
|
||||
me["Simple_L0S"].hide();
|
||||
me.showLeftS(1, -1, -1, -1, -1, 1);
|
||||
me.showLeftArrow(1, 1, 1, -1, -1, 1);
|
||||
me.showCenter(-1, -1, -1, -1, -1, -1);
|
||||
me.showCenterS(-1, -1, -1, -1, -1, -1);
|
||||
me.showRight(1, 1, 1, 1, 1, 1);
|
||||
me.showRightS(1, 1, 1, 1, 1, 1);
|
||||
me.showRightArrow(-1, -1, -1, -1, 1, -1);
|
||||
me["Simple_C3B"].hide();
|
||||
me["Simple_C4B"].hide();
|
||||
|
||||
me.standardFontSize();
|
||||
|
||||
me.colorLeft("blu", "blu", "blu", "blu", "wht", "wht");
|
||||
me.colorLeftS("wht", "wht", "wht", "wht", "wht", "wht");
|
||||
me.colorLeftArrow("wht", "wht", "wht", "wht", "wht", "wht");
|
||||
me.colorCenter("grn", "grn", "grn", "grn", "wht", "wht");
|
||||
me.colorCenterS("wht", "wht", "wht", "wht", "wht", "wht");
|
||||
me.colorRight("wht", "wht", "wht", "wht", "wht", "wht");
|
||||
me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht");
|
||||
me.colorRightArrow("wht", "wht", "wht", "wht", "wht", "wht");
|
||||
|
||||
|
||||
me["Simple_L1S"].setText(" ARPT/TYPE");
|
||||
me["Simple_L6S"].setText(" ATC MENU");
|
||||
me["Simple_L4"].setText(" [ ]/[ ]");
|
||||
me["Simple_L4"].setFont(symbol);
|
||||
me["Simple_L6"].setText(" RETURN");
|
||||
|
||||
me["Simple_C1"].setFontSize(small);
|
||||
me["Simple_C2"].setFontSize(small);
|
||||
me["Simple_C3"].setFontSize(small);
|
||||
me["Simple_C4"].setFontSize(small);
|
||||
|
||||
me["Simple_R1S"].setText("REQ ");
|
||||
me["Simple_R1"].setText("SEND ");
|
||||
me["Simple_R2S"].setText("REQ ");
|
||||
me["Simple_R2"].setText("SEND ");
|
||||
me["Simple_R3S"].setText("REQ ");
|
||||
me["Simple_R3"].setText("SEND ");
|
||||
me["Simple_R4S"].setText("REQ ");
|
||||
me["Simple_R4"].setText("SEND ");
|
||||
me["Simple_R5S"].setText("AUTO ");
|
||||
me["Simple_R5"].setText("UPDATE ");
|
||||
me["Simple_R6S"].setText("PRINT MANUAL ");
|
||||
me["Simple_R6"].setText("SET AUTO ");
|
||||
pageSwitch[i].setBoolValue(1);
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[0].station != nil) {
|
||||
me["Simple_L1"].setText(" " ~ atsu.ATISInstances[0].station ~ "/" ~ (atsu.ATISInstances[0].type == 0 ? "ARR" : "DEP"));
|
||||
me["Simple_L1"].setFont(default);
|
||||
me["Simple_L1_Arrow"].show();
|
||||
} else {
|
||||
me["Simple_L1"].setText(" [ ]/[ ]");
|
||||
me["Simple_L1"].setFont(symbol);
|
||||
me["Simple_L1_Arrow"].hide();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[0].received) {
|
||||
me["Simple_C1"].setText(" " ~ atsu.ATISInstances[0].receivedCode ~ " " ~ atsu.ATISInstances[0].receivedTime);
|
||||
me["Simple_C1"].show();
|
||||
} else {
|
||||
me["Simple_C1"].hide();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[1].station != nil) {
|
||||
me["Simple_L2"].setText(" " ~ atsu.ATISInstances[1].station ~ "/" ~ (atsu.ATISInstances[1].type == 0 ? "ARR" : "DEP"));
|
||||
me["Simple_L2"].setFont(default);
|
||||
me["Simple_L2_Arrow"].show();
|
||||
} else {
|
||||
me["Simple_L2"].setText(" [ ]/[ ]");
|
||||
me["Simple_L2"].setFont(symbol);
|
||||
me["Simple_L2_Arrow"].hide();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[1].received) {
|
||||
me["Simple_C2"].setText(" " ~ atsu.ATISInstances[1].receivedCode ~ " " ~ atsu.ATISInstances[1].receivedTime);
|
||||
me["Simple_C2"].show();
|
||||
} else {
|
||||
me["Simple_C2"].hide();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[2].station != nil) {
|
||||
me["Simple_L3"].setText(" " ~ atsu.ATISInstances[2].station ~ "/" ~ (atsu.ATISInstances[2].type == 0 ? "ARR" : "DEP"));
|
||||
me["Simple_L3"].setFont(default);
|
||||
me["Simple_L3_Arrow"].show();
|
||||
} else {
|
||||
me["Simple_L3"].setText(" [ ]/[ ]");
|
||||
me["Simple_L3"].setFont(symbol);
|
||||
me["Simple_L3_Arrow"].hide();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[2].received) {
|
||||
me["Simple_C3"].setText(" " ~ atsu.ATISInstances[2].receivedCode ~ " " ~ atsu.ATISInstances[2].receivedTime);
|
||||
me["Simple_C3"].show();
|
||||
} else {
|
||||
me["Simple_C3"].hide();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[3].station != nil) {
|
||||
me["Simple_L4"].setText(" " ~ atsu.ATISInstances[3].station ~ "/" ~ (atsu.ATISInstances[3].type == 0 ? "ARR" : "DEP"));
|
||||
me["Simple_L4"].setFont(default);
|
||||
me["Simple_L4_Arrow"].show();
|
||||
} else {
|
||||
me["Simple_L4"].setText(" [ ]/[ ]");
|
||||
me["Simple_L4"].setFont(symbol);
|
||||
me["Simple_L4_Arrow"].hide();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[3].received) {
|
||||
me["Simple_C4"].setText(" " ~ atsu.ATISInstances[3].receivedCode ~ " " ~ atsu.ATISInstances[3].receivedTime);
|
||||
me["Simple_C4"].show();
|
||||
} else {
|
||||
me["Simple_C4"].hide();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[0].sent) {
|
||||
me["ATISSend1"].hide();
|
||||
} else {
|
||||
me["ATISSend1"].show();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[1].sent) {
|
||||
me["ATISSend2"].hide();
|
||||
} else {
|
||||
me["ATISSend2"].show();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[2].sent) {
|
||||
me["ATISSend3"].hide();
|
||||
} else {
|
||||
me["ATISSend3"].show();
|
||||
}
|
||||
|
||||
if (atsu.ATISInstances[3].sent) {
|
||||
me["ATISSend4"].hide();
|
||||
} else {
|
||||
me["ATISSend4"].show();
|
||||
}
|
||||
} else if (page == "NOTIFICATION") {
|
||||
if (!pageSwitch[i].getBoolValue()) {
|
||||
me.defaultHideWithCenter();
|
||||
|
@ -1225,21 +1513,21 @@ var canvas_MCDU_base = {
|
|||
|
||||
pageSwitch[i].setBoolValue(1);
|
||||
}
|
||||
if (atsu.AOC.server == 1) {
|
||||
if (atsu.AOC.server.getValue() == "vatsim") {
|
||||
me["Simple_R1"].setText("VATSIM ");
|
||||
me["Simple_R2_Arrow"].show();
|
||||
me["Simple_R3_Arrow"].hide();
|
||||
} elsif (atsu.AOC.server == 0) {
|
||||
} elsif (atsu.AOC.server.getValue() == "noaa") {
|
||||
me["Simple_R1"].setText("NOAA ");
|
||||
me["Simple_R2_Arrow"].hide();
|
||||
me["Simple_R3_Arrow"].show();
|
||||
}
|
||||
|
||||
if (atsu.ATIS.server == 1) {
|
||||
if (atsu.ATIS.serverSel.getValue() == "vatsim") {
|
||||
me["Simple_L1"].setText(" VATSIM");
|
||||
me["Simple_L2_Arrow"].show();
|
||||
me["Simple_L3_Arrow"].hide();
|
||||
} elsif (atsu.ATIS.server == 0) {
|
||||
} elsif (atsu.ATIS.serverSel.getValue() == "faa") {
|
||||
me["Simple_L1"].setText(" FAA");
|
||||
me["Simple_L2_Arrow"].hide();
|
||||
me["Simple_L3_Arrow"].show();
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
viewBox="0 0 1024 864"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
inkscape:version="1.0beta2 (2b71d25, 2019-12-03)"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="mcdu.svg">
|
||||
<metadata
|
||||
id="metadata375">
|
||||
|
@ -37,17 +37,17 @@
|
|||
guidetolerance="20"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="819"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="705"
|
||||
id="namedview371"
|
||||
showgrid="true"
|
||||
inkscape:zoom="0.78947164"
|
||||
inkscape:cx="929.63178"
|
||||
inkscape:cy="751.57487"
|
||||
inkscape:window-x="481"
|
||||
inkscape:window-y="23"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="WIND"
|
||||
inkscape:zoom="3.1578866"
|
||||
inkscape:cx="1122.1906"
|
||||
inkscape:cy="986.92422"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2"
|
||||
showguides="false"
|
||||
inkscape:snap-global="false"
|
||||
units="px"
|
||||
|
@ -1016,7 +1016,7 @@
|
|||
inkscape:label="#g4241"
|
||||
id="g4241">
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
id="path4480-4"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1026,9 +1026,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path4482-0"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
id="path4484-0"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1069,7 +1069,7 @@
|
|||
inkscape:label="#g4324"
|
||||
id="g4324">
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 998.71909,284.70793 H 970.18944"
|
||||
id="path4490-7"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1079,9 +1079,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path4318-2"
|
||||
d="m 994.54102,294.79468 -20.17351,-20.1735"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 984.45427,298.97275 -10e-6,-28.52964"
|
||||
id="path4320-1"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1091,7 +1091,7 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path4322-2"
|
||||
d="m 974.36752,294.79468 20.17349,-20.1735"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -1103,7 +1103,7 @@
|
|||
x="177.72771"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.2px;line-height:1.25;font-family:BoeingCDULarge;-inkscape-font-specification:BoeingCDULarge;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:1.25;font-family:BoeingCDULarge;-inkscape-font-specification:BoeingCDULarge;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1"
|
||||
y="68.861366"
|
||||
x="177.72771"
|
||||
id="tspan1240"
|
||||
|
@ -1147,7 +1147,7 @@
|
|||
inkscape:label="#g4241"
|
||||
id="g186">
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
id="path180"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1157,9 +1157,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path182"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
id="path184"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1200,7 +1200,7 @@
|
|||
inkscape:label="#g4324"
|
||||
id="g205">
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 998.71909,284.70793 H 970.18944"
|
||||
id="path197"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1210,9 +1210,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path199"
|
||||
d="m 994.54102,294.79468 -20.17351,-20.1735"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 984.45427,298.97275 -10e-6,-28.52964"
|
||||
id="path201"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1222,7 +1222,7 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path203"
|
||||
d="m 974.36752,294.79468 20.17349,-20.1735"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -1235,7 +1235,7 @@
|
|||
inkscape:label="arrow5L"
|
||||
id="arrow5L">
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
id="path301"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1245,9 +1245,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path303"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
id="path305"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1263,9 +1263,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path417"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
id="path419"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1275,7 +1275,7 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path421"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#bb6100;stroke-opacity:1"
|
||||
|
@ -1283,7 +1283,7 @@
|
|||
inkscape:label="arrow3L"
|
||||
id="arrow3L">
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
id="path425"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1293,9 +1293,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path427"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
id="path429"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1311,9 +1311,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path433"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
id="path435"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1323,7 +1323,7 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path437"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#bb6100;stroke-opacity:1"
|
||||
|
@ -1331,7 +1331,7 @@
|
|||
inkscape:label="arrow1L"
|
||||
id="arrow1L">
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
id="path471"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1341,9 +1341,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path473"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
id="path475"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1359,9 +1359,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path479"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
id="path481"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1371,7 +1371,7 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path483"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#bb6100;stroke-opacity:1"
|
||||
|
@ -1379,7 +1379,7 @@
|
|||
inkscape:label="arrow4R"
|
||||
id="arrow4R">
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
id="path487"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1389,9 +1389,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path489"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
id="path491"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1407,9 +1407,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path495"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
id="path497"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1419,7 +1419,7 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path499"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#bb6100;stroke-opacity:1"
|
||||
|
@ -1427,7 +1427,7 @@
|
|||
inkscape:label="arrow2R"
|
||||
id="arrow2R">
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
id="path503"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1437,9 +1437,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path505"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
id="path507"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1455,9 +1455,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path511"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
id="path513"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1467,7 +1467,7 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path515"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -2617,7 +2617,7 @@
|
|||
id="tspan1088"
|
||||
x="478.87796"
|
||||
y="171.04486"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.9924px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1">=</tspan></text>
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.99240112px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1">=</tspan></text>
|
||||
<text
|
||||
inkscape:label="#text4244"
|
||||
transform="scale(0.90642126,1.1032398)"
|
||||
|
@ -2626,7 +2626,7 @@
|
|||
x="478.87796"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.9924px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.99240112px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
y="278.32764"
|
||||
x="478.87796"
|
||||
id="tspan1091"
|
||||
|
@ -2643,7 +2643,7 @@
|
|||
id="tspan1094"
|
||||
x="478.87796"
|
||||
y="385.6102"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.9924px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1">=</tspan></text>
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.99240112px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1">=</tspan></text>
|
||||
<g
|
||||
style="stroke:#179ab7;stroke-opacity:1"
|
||||
id="PERFAPPR_LDG_3"
|
||||
|
@ -2654,9 +2654,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path4376-0"
|
||||
d="M 998.71909,284.70793 H 970.18944"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 994.54102,294.79468 -20.17351,-20.1735"
|
||||
id="path4378-3"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -2666,9 +2666,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path4380-9"
|
||||
d="m 984.45427,298.97275 -10e-6,-28.52964"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 974.36752,294.79468 20.17349,-20.1735"
|
||||
id="path4382-8"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -2680,7 +2680,7 @@
|
|||
id="PERFAPPR_LDG_F"
|
||||
style="stroke:#179ab7;stroke-opacity:1">
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 998.71909,284.70793 H 970.18944"
|
||||
id="path1181"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -2690,9 +2690,9 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path1183"
|
||||
d="m 994.54102,294.79468 -20.17351,-20.1735"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 984.45427,298.97275 -10e-6,-28.52964"
|
||||
id="path1185"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -2702,7 +2702,7 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="path1187"
|
||||
d="m 974.36752,294.79468 20.17349,-20.1735"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
|
@ -2825,7 +2825,7 @@
|
|||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.9924px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1">=</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#179ab7;stroke-opacity:1;opacity:0.94000004"
|
||||
style="opacity:0.94000005;stroke:#179ab7;stroke-opacity:1"
|
||||
id="NOTIFY"
|
||||
inkscape:label="#g4324"
|
||||
transform="matrix(1.0807111,0,0,1.0807111,-76.372598,-23.411021)">
|
||||
|
@ -2833,7 +2833,7 @@
|
|||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1243"
|
||||
d="m 998.71909,284.70793 -28.52965,0"
|
||||
d="M 998.71909,284.70793 H 970.18944"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
|
@ -3129,4 +3129,177 @@
|
|||
d="m 974.36752,294.79468 20.17349,-20.1735"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1.0807111,0,0,1.0807111,-76.372598,-141.09805)"
|
||||
inkscape:label="#g4324"
|
||||
id="ATISSend1"
|
||||
style="opacity:0.94000005;stroke:#179ab7;stroke-opacity:1">
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 998.71909,284.70793 H 970.18944"
|
||||
id="path506"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path508"
|
||||
d="m 994.54102,294.79468 -20.17351,-20.1735"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 984.45427,298.97275 -10e-6,-28.52964"
|
||||
id="path510"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path512"
|
||||
d="m 974.36752,294.79468 20.17349,-20.1735"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1.0807111,0,0,1.0807111,-76.372598,-23.411021)"
|
||||
inkscape:label="#g4324"
|
||||
id="ATISSend2"
|
||||
style="opacity:0.94000005;stroke:#179ab7;stroke-opacity:1">
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 998.71909,284.70793 H 970.18944"
|
||||
id="path1321"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1323"
|
||||
d="m 994.54102,294.79468 -20.17351,-20.1735"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 984.45427,298.97275 -10e-6,-28.52964"
|
||||
id="path1325"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1327"
|
||||
d="m 974.36752,294.79468 20.17349,-20.1735"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1.0807111,0,0,1.0807111,-76.462145,213.12578)"
|
||||
inkscape:label="#g4324"
|
||||
id="ATISSend4"
|
||||
style="stroke:#179ab7;stroke-opacity:1">
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 998.71909,284.70793 H 970.18944"
|
||||
id="path1331"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1333"
|
||||
d="m 994.54102,294.79468 -20.17351,-20.1735"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 984.45427,298.97275 -10e-6,-28.52964"
|
||||
id="path1335"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1337"
|
||||
d="m 974.36752,294.79468 20.17349,-20.1735"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#179ab7;stroke-opacity:1"
|
||||
id="ATISSend3"
|
||||
inkscape:label="#g4324"
|
||||
transform="matrix(1.0807111,0,0,1.0807111,-76.462145,94.951839)">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1341"
|
||||
d="M 998.71909,284.70793 H 970.18944"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 994.54102,294.79468 -20.17351,-20.1735"
|
||||
id="path1343"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1345"
|
||||
d="m 984.45427,298.97275 -10e-6,-28.52964"
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 974.36752,294.79468 20.17349,-20.1735"
|
||||
id="path1347"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(220.36572,-474.55648)"
|
||||
id="ATISArrows"
|
||||
inkscape:label="#WIND_UPDOWN">
|
||||
<g
|
||||
id="g1338"
|
||||
inkscape:label="#g4241"
|
||||
transform="matrix(0,1,1,0,667.65035,-414.17373)"
|
||||
style="stroke:#ffffff;stroke-opacity:1">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1332"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
id="path1334"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1336"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
style="stroke:#ffffff;stroke-opacity:1"
|
||||
transform="matrix(0,-1,-1,0,801.59015,1459.2436)"
|
||||
inkscape:label="#g4241"
|
||||
id="g1346">
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 952.4036,47.432743 H 923.87395"
|
||||
id="path1340"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1342"
|
||||
d="M 936.70791,32.6968 921.8587,47.4328"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 936.70791,62.1688 921.8587,47.4328"
|
||||
id="path1344"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 171 KiB |
|
@ -335,12 +335,12 @@ canvas.NavDisplay.update_sub = func(){
|
|||
canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft specific, cannot easily be reused by other aircraft
|
||||
{
|
||||
var _time = systime();
|
||||
# Disables WXR Live if it"s not enabled. The toggle_weather_live should be common to all
|
||||
# Disables WXR Live if it's not enabled. The toggle_weather_live should be common to all
|
||||
# ND instances.
|
||||
var wxr_live_enabled = getprop(wxr_live_tree~"/enabled");
|
||||
if(wxr_live_enabled == nil or wxr_live_enabled == "")
|
||||
var wxr_live_enabled = getprop(wxr_live_tree~'/enabled');
|
||||
if(wxr_live_enabled == nil or wxr_live_enabled == '')
|
||||
wxr_live_enabled = 0;
|
||||
me.set_switch("toggle_weather_live", wxr_live_enabled);
|
||||
me.set_switch('toggle_weather_live', wxr_live_enabled);
|
||||
call(me.update_sub, nil, nil, caller(0)[0]); # call this in the same namespace to "steal" its variables
|
||||
|
||||
# MapStructure update!
|
||||
|
|
|
@ -25,16 +25,9 @@ var new = func(layer) {
|
|||
};
|
||||
layer.searcher._equals = func(l,r) l.equals(r);
|
||||
m.addVisibilityListener();
|
||||
var aircraft_dir = split('/', getprop("sim/aircraft-dir"))[-1];
|
||||
var saved_conf = getprop("sim/fg-home") ~ "/Export/wxr_api.xml";
|
||||
var df_conf = getprop("sim/fg-root") ~ "/Aircraft/" ~ aircraft_dir ~
|
||||
"/Models/Instruments/ND/canvas/wxr_api.xml";
|
||||
if(io.stat(saved_conf) != nil)
|
||||
io.read_properties(saved_conf, wxr_tree);
|
||||
else
|
||||
io.read_properties(df_conf, wxr_tree);
|
||||
return m;
|
||||
};
|
||||
|
||||
var del = func() {
|
||||
#print(name~".lcontroller.del()");
|
||||
foreach (var l; me.listeners)
|
||||
|
@ -43,9 +36,6 @@ var del = func() {
|
|||
|
||||
var searchCmd = func {
|
||||
if(me.map.getRange() == nil) return [];
|
||||
var api_key = getprop(wxr_tree~"/api-key");
|
||||
if(!api_key or api_key == '' or api_key == 'YOUR API KEY')
|
||||
return [];
|
||||
var lat = getprop(wxr_tree~"/center/latitude-deg");
|
||||
var lon = getprop(wxr_tree~"/center/longitude-deg");
|
||||
|
||||
|
@ -58,14 +48,9 @@ var searchCmd = func {
|
|||
var result = geo.Coord.new();
|
||||
result.set_latlon(lat, lon);
|
||||
result.rangeNm = me.map.getRange();
|
||||
result.key = api_key;
|
||||
result.res = getprop(wxr_tree~"/resolution");
|
||||
result.ltype = getprop(wxr_tree~"/layer-type");
|
||||
result.smooth = getprop(wxr_tree~"/smooth");
|
||||
result.fetchRad = getprop(wxr_tree~"/fetch-radius");
|
||||
result.fetchRad = 184; # is this number accurate?
|
||||
result.equals = func(r){
|
||||
me.ltype == r.ltype and me.fetchRad == r.fetchRad and
|
||||
me.lat == r.lat and me.lon == r.lon
|
||||
me.fetchRad == r.fetchRad and me.lat == r.lat and me.lon == r.lon
|
||||
};
|
||||
|
||||
return [result];
|
||||
|
|
|
@ -11,19 +11,18 @@ var getWXRImageFilePath = func(){
|
|||
var home = getprop('sim/fg-home');
|
||||
var aircraft = getprop('sim/aircraft');
|
||||
var idx = me.layer.getCanvas()._node.getIndex();
|
||||
return home ~ '/Export/' ~ aircraft ~ '-wxr-'~me.ltype~'-'~idx~'.png';
|
||||
return home ~ '/Export/' ~ aircraft ~ '-wxr-'~idx~'.png';
|
||||
};
|
||||
|
||||
var processRequest = func(r) {
|
||||
var splitVector = split(",", r.response);
|
||||
var timeStamp = split("]",splitVector[size(splitVector) - 1]);
|
||||
return timeStamp[0];
|
||||
};
|
||||
|
||||
var getWXRAPIUrl = func(lat, lon){
|
||||
var res = me.res;
|
||||
if(me.ltype == "radar"){
|
||||
return "http://api.wunderground.com/api/"~me.key~
|
||||
"/radar/image.png?centerlat="~lat~"¢erlon="~lon~
|
||||
"&radius="~me.fetchRad~"&width="~res~"&height="~res~
|
||||
"&smooth="~me.smooth;
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
if (me.timeStamp == nil) { return nil; }
|
||||
return "https://tilecache.rainviewer.com/v2/radar/" ~ sprintf("%s",me.timeStamp) ~ "/512/5/" ~ lat ~ "/" ~ lon ~ "/7/0_0.png";
|
||||
};
|
||||
|
||||
var fetchWXRMap = func(size){
|
||||
|
@ -34,15 +33,14 @@ var fetchWXRMap = func(size){
|
|||
var url = me.getWXRAPIUrl(lat, lon);
|
||||
var filePath = me.getWXRImageFilePath();
|
||||
if(url == nil) {
|
||||
print(me.name~': No URL!');
|
||||
logprint(3,me.name,": No URL!");
|
||||
return;
|
||||
}
|
||||
me.fetching = 1;
|
||||
http.save(url, filePath)
|
||||
.fail(func(){
|
||||
print(me.name~': Download failed!');
|
||||
me.wxlayer.hide();
|
||||
})
|
||||
logprint(3,me.name,":Download failed!");}
|
||||
)
|
||||
.done(func(){
|
||||
var sz = size * 2;
|
||||
var transl = -size;
|
||||
|
@ -57,28 +55,28 @@ var fetchWXRMap = func(size){
|
|||
setprop("instrumentation/wxr/center/latitude-deg", lat);
|
||||
setprop("instrumentation/wxr/center/longitude-deg", lon);
|
||||
me.fetching = 0;
|
||||
print("[WXR] Live Layer Request: "~url); # Debugging
|
||||
logprint(4,me.name,": Layer Request: ",url);
|
||||
});
|
||||
};
|
||||
|
||||
var init = func {
|
||||
#print('WXR init');
|
||||
me.fetching = 0;
|
||||
me.key = me.model.key; # API Key from Wunderground API Subscription
|
||||
me.res = me.model.res; # Resolution of image to fetch (default 2048)
|
||||
me.ltype = me.model.ltype; # Layer Type - radar, satellite
|
||||
me.smooth = me.model.smooth; # If we should fetch a smoothened image or the original
|
||||
me.timeStamp = nil;
|
||||
me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch
|
||||
me.range = me.model.rangeNm; # Range of Navigation Display
|
||||
me.viewport_radius = me.getOption('viewport_radius', 670);
|
||||
|
||||
me.wxlayer = me.element.createChild("image").set("z-index", -100).hide();
|
||||
|
||||
me.last_request = -210;
|
||||
me.update_interval = 240;
|
||||
me.last_request = -600;
|
||||
me.update_interval = 600;
|
||||
|
||||
var r_scaled = (me.fetchRad*me.viewport_radius)/me.range;
|
||||
me.fetchWXRMap(r_scaled);
|
||||
|
||||
me.timeStamp = nil;
|
||||
http.load("https://api.rainviewer.com/public/maps.json").done(func(r) me.timeStamp = processRequest(r));
|
||||
};
|
||||
|
||||
var draw = func {
|
||||
|
@ -86,15 +84,12 @@ var draw = func {
|
|||
var update_size = (range != me.range);
|
||||
me.range = range;
|
||||
me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch
|
||||
#var r_scaled = (me.fetchRad*670)/me.range;
|
||||
var r_scaled = (me.fetchRad*me.viewport_radius)/me.range;
|
||||
var hdg = me.layer.map.getHdg();
|
||||
var rot = 0 - hdg;
|
||||
if(rot < 0) rot = 360 + rot;
|
||||
if(rot < 0) rot = 360 + rot + -getprop("/environment/magnetic-variation-deg");
|
||||
me.element.setRotation(rot*D2R);
|
||||
if(update_size){
|
||||
print('WXR draw range:'~ me.range);
|
||||
print('Update size: '~r_scaled~'x2 = '~(r_scaled*2));
|
||||
me.wxlayer.hide();
|
||||
me.wxlayer.setSize(2*r_scaled, 2*r_scaled)
|
||||
.setTranslation(-r_scaled, -r_scaled);
|
||||
|
@ -102,12 +97,6 @@ var draw = func {
|
|||
}
|
||||
|
||||
if(getprop("sim/time/elapsed-sec") - me.last_request > me.update_interval) {
|
||||
#print('Fetching WXR map...');
|
||||
me.key = me.model.key; # API Key from Wunderground API Subscription
|
||||
me.res = me.model.res; # Resolution of image to fetch (default 2048)
|
||||
me.ltype = me.model.ltype; # Layer Type - radar, satellite
|
||||
me.smooth = me.model.smooth; # If we should fetch a smoothened image or the original
|
||||
|
||||
me.fetchWXRMap(r_scaled);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -15,6 +15,8 @@ var updateR = 0;
|
|||
var elapsedtime = 0;
|
||||
var altTens = 0;
|
||||
var altPolarity = "";
|
||||
var track_diff = 0;
|
||||
var AICenter = nil;
|
||||
|
||||
# Fetch nodes:
|
||||
var state1 = props.globals.getNode("/systems/thrust/state1", 1);
|
||||
|
@ -34,7 +36,7 @@ var thr2 = props.globals.getNode("/controls/engines/engine[1]/throttle-pos", 1);
|
|||
var wow0 = props.globals.getNode("/gear/gear[0]/wow");
|
||||
var wow1 = props.globals.getNode("/gear/gear[1]/wow");
|
||||
var wow2 = props.globals.getNode("/gear/gear[2]/wow");
|
||||
var pitch = props.globals.getNode("/orientation/pitch-deg", 1);
|
||||
var pitch = props.globals.getNode("/instrumentation/pfd/pitch-deg-non-linear", 1);
|
||||
var roll = props.globals.getNode("/orientation/roll-deg", 1);
|
||||
var elapsedtime = props.globals.getNode("/sim/time/elapsed-sec", 1);
|
||||
var du1_lgt = props.globals.getNode("/controls/lighting/DU/du1", 1);
|
||||
|
@ -126,6 +128,16 @@ var inner_marker = props.globals.getNode("/instrumentation/marker-beacon/inner",
|
|||
var flap_config = props.globals.getNode("/controls/flight/flaps-input", 1);
|
||||
var hundredAbove = props.globals.getNode("/instrumentation/pfd/hundred-above", 1);
|
||||
var minimum = props.globals.getNode("/instrumentation/pfd/minimums", 1);
|
||||
var aoa_1 = props.globals.getNode("/systems/navigation/adr/output/aoa-1", 1);
|
||||
var aoa_2 = props.globals.getNode("/systems/navigation/adr/output/aoa-2", 1);
|
||||
var aoa_3 = props.globals.getNode("/systems/navigation/adr/output/aoa-3", 1);
|
||||
var adr_1_switch = props.globals.getNode("/controls/navigation/adirscp/switches/adr-1", 1);
|
||||
var adr_2_switch = props.globals.getNode("/controls/navigation/adirscp/switches/adr-2", 1);
|
||||
var adr_3_switch = props.globals.getNode("/controls/navigation/adirscp/switches/adr-3", 1);
|
||||
var adr_1_fault = props.globals.getNode("/controls/navigation/adirscp/lights/adr-1-fault", 1);
|
||||
var adr_2_fault = props.globals.getNode("/controls/navigation/adirscp/lights/adr-2-fault", 1);
|
||||
var adr_3_fault = props.globals.getNode("/controls/navigation/adirscp/lights/adr-3-fault", 1);
|
||||
var air_data_switch = props.globals.getNode("/controls/navigation/switching/air-data", 1);
|
||||
|
||||
# Create Nodes:
|
||||
var alt_diff = props.globals.initNode("/instrumentation/pfd/alt-diff", 0.0, "DOUBLE");
|
||||
|
@ -137,7 +149,7 @@ var horizon_ground = props.globals.initNode("/instrumentation/pfd/horizon-ground
|
|||
var hdg_diff = props.globals.initNode("/instrumentation/pfd/hdg-diff", 0.0, "DOUBLE");
|
||||
var hdg_scale = props.globals.initNode("/instrumentation/pfd/heading-scale", 0.0, "DOUBLE");
|
||||
var track = props.globals.initNode("/instrumentation/pfd/track-deg", 0.0, "DOUBLE");
|
||||
var track_diff = props.globals.initNode("/instrumentation/pfd/track-hdg-diff", 0.0, "DOUBLE");
|
||||
#var track_diff = props.globals.initNode("/instrumentation/pfd/track-hdg-diff", 0.0, "DOUBLE"); # returns incorrect value
|
||||
var du1_test = props.globals.initNode("/instrumentation/du/du1-test", 0, "BOOL");
|
||||
var du1_test_time = props.globals.initNode("/instrumentation/du/du1-test-time", 0.0, "DOUBLE");
|
||||
var du1_offtime = props.globals.initNode("/instrumentation/du/du1-off-time", 0.0, "DOUBLE");
|
||||
|
@ -200,6 +212,9 @@ var canvas_PFD_base = {
|
|||
me.AI_horizon_hdg_trans = me["AI_heading"].createTransform();
|
||||
me.AI_horizon_hdg_rot = me["AI_heading"].createTransform();
|
||||
|
||||
me.AI_fpv_trans = me["FPV"].createTransform();
|
||||
me.AI_fpv_rot = me["FPV"].createTransform();
|
||||
|
||||
me.page = canvas_group;
|
||||
|
||||
return me;
|
||||
|
@ -212,7 +227,7 @@ var canvas_PFD_base = {
|
|||
"AI_agl_g","AI_agl","AI_error","AI_group","FD_roll","FD_pitch","ALT_box_flash","ALT_box","ALT_box_amber","ALT_scale","ALT_target","ALT_target_digit","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_digit_UP",
|
||||
"ALT_digit_DN","ALT_error","ALT_group","ALT_group2","ALT_frame","VS_pointer","VS_box","VS_digit","VS_error","VS_group","QNH","QNH_setting","QNH_std","QNH_box","LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer","HDG_target","HDG_scale",
|
||||
"HDG_one","HDG_two","HDG_three","HDG_four","HDG_five","HDG_six","HDG_seven","HDG_digit_L","HDG_digit_R","HDG_error","HDG_group","HDG_frame","TRK_pointer","machError","ilsError","ils_code","ils_freq","dme_dist","dme_dist_legend","ILS_HDG_R","ILS_HDG_L",
|
||||
"ILS_right","ILS_left","outerMarker","middleMarker","innerMarker","v1_group","v1_text","vr_speed","F_target","S_target","FS_targets","flap_max","clean_speed","ground","ground_ref","spdLimError"];
|
||||
"ILS_right","ILS_left","outerMarker","middleMarker","innerMarker","v1_group","v1_text","vr_speed","F_target","S_target","FS_targets","flap_max","clean_speed","ground","ground_ref","FPV","spdLimError"];
|
||||
},
|
||||
updateDu1: func() {
|
||||
var elapsedtime_act = elapsedtime.getValue();
|
||||
|
@ -961,12 +976,15 @@ var canvas_PFD_base = {
|
|||
me["HDG_target"].hide();
|
||||
}
|
||||
|
||||
me["TRK_pointer"].setTranslation((math.clamp(track_diff.getValue(), -23.62, 23.62) / 10) * 98.5416, 0);
|
||||
|
||||
var heading_deg = heading.getValue();
|
||||
track_diff = geo.normdeg180(track.getValue() - heading_deg);
|
||||
me["TRK_pointer"].setTranslation(me.getTrackDiffPixels(track_diff),0);
|
||||
split_ils = split("/", ils_data1.getValue());
|
||||
|
||||
if (ap_ils_mode.getValue() == 1 and size(split_ils) == 2) {
|
||||
magnetic_hdg = ils_crs.getValue();
|
||||
magnetic_hdg_dif = geo.normdeg180(magnetic_hdg - heading.getValue());
|
||||
magnetic_hdg_dif = geo.normdeg180(magnetic_hdg - heading_deg);
|
||||
if (magnetic_hdg_dif >= -23.62 and magnetic_hdg_dif <= 23.62) {
|
||||
me["CRS_pointer"].setTranslation((magnetic_hdg_dif / 10) * 98.5416, 0);
|
||||
me["ILS_HDG_R"].hide();
|
||||
|
@ -1010,6 +1028,28 @@ var canvas_PFD_base = {
|
|||
me.AI_horizon_hdg_rot.setRotation(-roll_cur * D2R, me["AI_center"].getCenter());
|
||||
me["AI_heading"].update();
|
||||
},
|
||||
|
||||
# Get Angle of Attack from ADR1 or, depending on Switching panel, ADR3
|
||||
getAOAForPFD1: func() {
|
||||
if (air_data_switch.getValue() != -1 and adr_1_switch.getValue() and !adr_1_fault.getValue()) return aoa_1.getValue();
|
||||
if (air_data_switch.getValue() == -1 and adr_3_switch.getValue() and !adr_3_fault.getValue()) return aoa_3.getValue();
|
||||
return nil;
|
||||
},
|
||||
|
||||
# Get Angle of Attack from ADR2 or, depending on Switching panel, ADR3
|
||||
getAOAForPFD2: func() {
|
||||
if (air_data_switch.getValue() != 1 and adr_2_switch.getValue() and !adr_2_fault.getValue()) return aoa_2.getValue();
|
||||
if (air_data_switch.getValue() == 1 and adr_3_switch.getValue() and !adr_3_fault.getValue()) return aoa_3.getValue();
|
||||
return nil;
|
||||
},
|
||||
|
||||
# Convert difference between magnetic heading and track measured in degrees to pixel for display on PFDs
|
||||
# And set max and minimum values
|
||||
getTrackDiffPixels: func(track_diff_deg) {
|
||||
return ((math.clamp(track_diff_deg, -23.62, 23.62) / 10) * 98.5416);
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
|
||||
var canvas_PFD_1 = {
|
||||
|
@ -1087,6 +1127,26 @@ var canvas_PFD_1 = {
|
|||
me["FD_pitch"].hide();
|
||||
}
|
||||
|
||||
# If TRK FPA selected, display FPV on PFD1
|
||||
if (ap_trk_sw.getValue() == 0 ) {
|
||||
me["FPV"].hide();
|
||||
} else {
|
||||
var aoa = me.getAOAForPFD1();
|
||||
if (aoa == nil or (systems.ADIRS.ADIRunits[0].aligned != 1 and att_switch.getValue() == 0) or (systems.ADIRS.ADIRunits[2].aligned != 1 and att_switch.getValue() == -1)){
|
||||
me["FPV"].hide();
|
||||
} else {
|
||||
var roll_deg = roll.getValue() or 0;
|
||||
AICenter = me["AI_center"].getCenter();
|
||||
var track_x_translation = me.getTrackDiffPixels(track_diff);
|
||||
|
||||
me.AI_fpv_trans.setTranslation(track_x_translation, math.clamp(aoa, -20, 20) * 12.5);
|
||||
me.AI_fpv_rot.setRotation(-roll_deg * D2R, AICenter);
|
||||
me["FPV"].setRotation(roll_deg * D2R); # It shouldn't be rotated, only the axis should be
|
||||
me["FPV"].show();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# ILS
|
||||
if (ap_ils_mode.getValue() == 1) {
|
||||
me["LOC_scale"].show();
|
||||
|
@ -1842,6 +1902,25 @@ var canvas_PFD_2 = {
|
|||
me["FD_pitch"].hide();
|
||||
}
|
||||
|
||||
# If TRK FPA selected, display FPV on PFD2
|
||||
if (ap_trk_sw.getValue() == 0 ) {
|
||||
me["FPV"].hide();
|
||||
} else {
|
||||
var aoa = me.getAOAForPFD2();
|
||||
if (aoa == nil or (systems.ADIRS.ADIRunits[1].aligned != 1 and att_switch.getValue() == 0) or (systems.ADIRS.ADIRunits[2].aligned != 1 and att_switch.getValue() == 1)) {
|
||||
me["FPV"].hide();
|
||||
} else {
|
||||
var roll_deg = roll.getValue() or 0;
|
||||
AICenter = me["AI_center"].getCenter();
|
||||
var track_x_translation = me.getTrackDiffPixels(track_diff);
|
||||
|
||||
me.AI_fpv_trans.setTranslation(track_x_translation, math.clamp(aoa, -20, 20) * 12.5);
|
||||
me.AI_fpv_rot.setRotation(-roll_deg * D2R, AICenter);
|
||||
me["FPV"].setRotation(roll_deg * D2R); # It shouldn't be rotated, only the axis should be
|
||||
me["FPV"].show();
|
||||
}
|
||||
}
|
||||
|
||||
# ILS
|
||||
if (ap_ils_mode2.getValue() == 1) {
|
||||
me["LOC_scale"].show();
|
||||
|
|
Before Width: | Height: | Size: 368 KiB After Width: | Height: | Size: 339 KiB |
|
@ -41,9 +41,9 @@
|
|||
inkscape:window-height="705"
|
||||
id="namedview371"
|
||||
showgrid="true"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="718.57047"
|
||||
inkscape:cy="505.8628"
|
||||
inkscape:zoom="0.25"
|
||||
inkscape:cx="971.41703"
|
||||
inkscape:cy="1420.8195"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
|
@ -1428,4 +1428,43 @@
|
|||
width="137.63597"
|
||||
id="SlatLine_clip"
|
||||
style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:3.34691048;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.71383667px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.7928459"
|
||||
x="38.122616"
|
||||
y="47.904297"
|
||||
id="aFloor"
|
||||
transform="scale(0.94595932,1.0571279)"
|
||||
inkscape:label="#text1027"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1025"
|
||||
x="38.122616"
|
||||
y="47.904297"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.99999902px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#c56100;fill-opacity:1;stroke-width:0.7928459">A FLOOR</tspan></text>
|
||||
<text
|
||||
transform="scale(0.97051272,1.0303832)"
|
||||
inkscape:label="#text4314"
|
||||
id="FlxLimTemp"
|
||||
y="122.78025"
|
||||
x="919.25299"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.71494293px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;"
|
||||
y="122.78025"
|
||||
x="919.25299"
|
||||
id="tspan1029"
|
||||
sodipodi:role="line">00</tspan></text>
|
||||
<text
|
||||
inkscape:label="#text4443"
|
||||
id="FlxLimDegreesC"
|
||||
y="108.14707"
|
||||
x="1061.88"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"
|
||||
transform="scale(0.87983286,1.1365795)"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.25978088px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#179ab7;fill-opacity:1"
|
||||
y="108.14707"
|
||||
x="1061.88"
|
||||
id="tspan1033"
|
||||
sodipodi:role="line">°C</tspan></text>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 89 KiB |
|
@ -42,8 +42,8 @@
|
|||
id="namedview371"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.43942712"
|
||||
inkscape:cx="180.81625"
|
||||
inkscape:cy="433.53356"
|
||||
inkscape:cx="623.25944"
|
||||
inkscape:cy="936.15332"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
|
@ -1796,4 +1796,43 @@
|
|||
width="137.63597"
|
||||
id="SlatLine_clip"
|
||||
style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:3.34691048;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.71383667px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.7928459"
|
||||
x="38.122616"
|
||||
y="47.904297"
|
||||
id="aFloor"
|
||||
transform="scale(0.94595932,1.0571279)"
|
||||
inkscape:label="#text1027"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1025"
|
||||
x="38.122616"
|
||||
y="47.904297"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.99999902px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#c56100;fill-opacity:1;stroke-width:0.7928459">A FLOOR</tspan></text>
|
||||
<text
|
||||
transform="scale(0.97051272,1.0303832)"
|
||||
inkscape:label="#text4314"
|
||||
id="FlxLimTemp"
|
||||
y="122.78025"
|
||||
x="919.25299"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.71494293px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;"
|
||||
y="122.78025"
|
||||
x="919.25299"
|
||||
id="tspan1029"
|
||||
sodipodi:role="line">00</tspan></text>
|
||||
<text
|
||||
inkscape:label="#text4443"
|
||||
id="FlxLimDegreesC"
|
||||
y="108.14707"
|
||||
x="1061.88"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"
|
||||
transform="scale(0.87983286,1.1365795)"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.25978088px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#179ab7;fill-opacity:1"
|
||||
y="108.14707"
|
||||
x="1061.88"
|
||||
id="tspan1033"
|
||||
sodipodi:role="line">°C</tspan></text>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 112 KiB |
|
@ -15,7 +15,7 @@ var overflow = props.globals.initNode("/ECAM/warnings/overflow", 0, "BOOL");
|
|||
var dc_ess = props.globals.getNode("/systems/electrical/bus/dc-ess", 1);
|
||||
|
||||
var lights = [props.globals.initNode("/ECAM/warnings/master-warning-light", 0, "BOOL"), props.globals.initNode("/ECAM/warnings/master-caution-light", 0, "BOOL")];
|
||||
var aural = [props.globals.initNode("/sim/sound/warnings/crc", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/chime", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/cricket", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/retard", 0, "BOOL")];
|
||||
var aural = [props.globals.initNode("/sim/sound/warnings/crc", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/chime", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/cricket", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/retard", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/cchord", 0, "BOOL")];
|
||||
var warningFlash = props.globals.initNode("/ECAM/warnings/master-warning-flash", 0, "BOOL");
|
||||
|
||||
var lineIndex = 0;
|
||||
|
@ -31,6 +31,9 @@ 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"),
|
||||
|
|
|
@ -696,78 +696,24 @@ var messages_priority_3 = func {
|
|||
}
|
||||
|
||||
# C-Chord
|
||||
if ((pts.Instrumentation.Altimeter.std.getValue() and abs(fcu.altSet.getValue() - getprop("/systems/navigation/adr/output/baro-alt-1-capt")) < 200) or !pts.Instrumentation.Altimeter.std.getValue() and abs(fcu.altSet.getValue() - getprop("/systems/navigation/adr/output/baro-alt-corrected-1-capt")) < 200) {
|
||||
alt200 = 1;
|
||||
} else {
|
||||
alt200 = 0;
|
||||
}
|
||||
|
||||
if ((pts.Instrumentation.Altimeter.std.getValue() and abs(fcu.altSet.getValue() - getprop("/systems/navigation/adr/output/baro-alt-1-capt")) < 750) or !pts.Instrumentation.Altimeter.std.getValue() and abs(fcu.altSet.getValue() - getprop("/systems/navigation/adr/output/baro-alt-corrected-1-capt")) < 750) {
|
||||
alt750 = 1;
|
||||
} else {
|
||||
alt750 = 0;
|
||||
}
|
||||
|
||||
if (FWC.altChg.getValue() or pts.Gear.position[0].getValue() == 1 or (pts.Controls.Gear.gearDown.getValue() and pts.Fdm.JSBsim.Fcs.slatDeg.getValue() > 4) or fmgc.Output.vert.getValue() == 2) {
|
||||
altAlertInhibit = 1;
|
||||
} else {
|
||||
altAlertInhibit = 0;
|
||||
}
|
||||
|
||||
if (alt750 and !alt200 and !altAlertInhibit) {
|
||||
FWC.Monostable.altAlert2.setValue(1);
|
||||
} else {
|
||||
FWC.Monostable.altAlert2.setValue(0);
|
||||
}
|
||||
|
||||
if ((!fcu.ap1.getBoolValue() and !fcu.ap2.getBoolValue()) and FWC.Monostable.altAlert2.getValue()) {
|
||||
FWC.Monostable.altAlert1.setValue(1);
|
||||
} else {
|
||||
FWC.Monostable.altAlert1.setValue(0);
|
||||
}
|
||||
|
||||
if (alt750 and alt200 and !altAlertInhibit) {
|
||||
setprop("/ECAM/flipflop/alt-alert-2-rs-set", 1);
|
||||
} else {
|
||||
setprop("/ECAM/flipflop/alt-alert-2-rs-set", 0);
|
||||
}
|
||||
|
||||
if (getprop("/ECAM/flipflop/alt-alert-rs-reset") or (!alt750 and !alt200 and !altAlertInhibit)) {
|
||||
setprop("/ECAM/flipflop/alt-alert-2-rs-reset", 1);
|
||||
} else {
|
||||
setprop("/ECAM/flipflop/alt-alert-2-rs-reset", 0);
|
||||
}
|
||||
|
||||
if (alt750 and !alt200 and !altAlertInhibit and getprop("/ECAM/flipflop/alt-alert-2-rs-output")) {
|
||||
setprop("/ECAM/flipflop/alt-alert-3-rs-set", 1);
|
||||
} else {
|
||||
setprop("/ECAM/flipflop/alt-alert-3-rs-set", 0);
|
||||
}
|
||||
|
||||
if ((!alt750 and !alt200 and !altAlertInhibit and getprop("/ECAM/flipflop/alt-alert-rs-output")) or (!alt750 and !alt200 and !altAlertInhibit and getprop("/ECAM/flipflop/alt-alert-3-rs-output")) or getprop("/ECAM/flipflop/alt-alert-3-rs-set")) {
|
||||
bigThree = 1;
|
||||
} else {
|
||||
bigThree = 0;
|
||||
}
|
||||
|
||||
if (FWC.Timer.gnd.getValue() != 1 and (FWC.Monostable.altAlert1Output.getValue() or bigThree)) {
|
||||
if (warningNodes.Logic.altitudeAlert.getValue()) {
|
||||
if (!getprop("/sim/sound/warnings/cchord-inhibit")) {
|
||||
setprop("/sim/sound/warnings/cchord", 1);
|
||||
aural[4].setValue(1);
|
||||
} else {
|
||||
setprop("/sim/sound/warnings/cchord", 0);
|
||||
aural[4].setValue(0);
|
||||
}
|
||||
} else {
|
||||
setprop("/sim/sound/warnings/cchord", 0);
|
||||
aural[4].setValue(0);
|
||||
setprop("/sim/sound/warnings/cchord-inhibit", 0);
|
||||
}
|
||||
|
||||
if (FWC.Timer.gnd.getValue() != 1 and getprop("/ECAM/flipflop/alt-alert-3-rs-set") != 1 and alt750 and !alt200 and !altAlertInhibit) {
|
||||
if (warningNodes.Logic.altitudeAlertSteady.getValue()) {
|
||||
altAlertSteady = 1;
|
||||
} else {
|
||||
altAlertSteady = 0;
|
||||
}
|
||||
|
||||
if (FWC.Timer.gnd.getValue() != 1 and bigThree) {
|
||||
if (warningNodes.Logic.altitudeAlertFlash.getValue()) {
|
||||
altAlertFlash = 1;
|
||||
} else {
|
||||
altAlertFlash = 0;
|
||||
|
@ -1374,10 +1320,10 @@ var messages_priority_2 = func {
|
|||
ECAM_controller.warningReset(tcasFault);
|
||||
}
|
||||
|
||||
if (warningNodes.Timers.navTerrFault.getValue() == 1 and (phaseVar2 == 2 or phaseVar2 == 6 or phaseVar2 == 7 or phaseVar2 == 9)) {
|
||||
if (gpwsTerrFault.clearFlag == 0 and warningNodes.Timers.navTerrFault.getValue() == 1 and (phaseVar2 == 2 or phaseVar2 == 6 or phaseVar2 == 7 or phaseVar2 == 9)) {
|
||||
gpwsTerrFault.active = 1;
|
||||
|
||||
if (!getprop("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit")) {
|
||||
if (gpwsTerrFaultOff.clearFlag == 0 and !getprop("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit")) {
|
||||
gpwsTerrFaultOff.active = 1;
|
||||
} else {
|
||||
ECAM_controller.warningReset(gpwsTerrFaultOff);
|
||||
|
@ -1403,10 +1349,12 @@ var messages_priority_2 = func {
|
|||
|
||||
if (yawDamperSysFault.clearFlag == 0 and phaseVar2 != 4 and phaseVar2 != 5 and phaseVar2 != 7 and phaseVar2 != 8 and phaseVar2 != 10 and warningNodes.Logic.yawDamper12Fault.getBoolValue()) {
|
||||
yawDamperSysFault.active = 1;
|
||||
yawDamperSysFaultFac.active = 1;
|
||||
yawDamperSysFaultFac1.active = 1;
|
||||
yawDamperSysFaultFac2.active = 1;
|
||||
} else {
|
||||
ECAM_controller.warningReset(yawDamperSysFault);
|
||||
ECAM_controller.warningReset(yawDamperSysFaultFac);
|
||||
ECAM_controller.warningReset(yawDamperSysFaultFac1);
|
||||
ECAM_controller.warningReset(yawDamperSysFaultFac2);
|
||||
}
|
||||
|
||||
if (rudTravLimSysFault.clearFlag == 0 and phaseVar2 != 4 and phaseVar2 != 5 and phaseVar2 != 7 and phaseVar2 != 8 and warningNodes.Logic.rtlu12Fault.getBoolValue()) {
|
||||
|
@ -2407,7 +2355,7 @@ var messages_memo = func {
|
|||
|
||||
if ((phaseVarMemo2 == 1 or phaseVarMemo2 == 2) and toMemoLine1.active != 1 and ldgMemoLine1.active != 1 and (systems.ADIRS.ADIRunits[0].inAlign == 1 or systems.ADIRS.ADIRunits[1].inAlign == 1 or systems.ADIRS.ADIRunits[2].inAlign == 1)) {
|
||||
irs_in_align.active = 1;
|
||||
if (getprop("/ECAM/phases/timer/eng1or2-output")) {
|
||||
if (FWC.Timer.eng1or2Output.getValue()) {
|
||||
irs_in_align.colour = "a";
|
||||
} else {
|
||||
irs_in_align.colour = "g";
|
||||
|
@ -2480,6 +2428,11 @@ var messages_memo = func {
|
|||
gpws_flap_mode_off.active = 0;
|
||||
}
|
||||
|
||||
if (!fmgc.FMGCInternal.flightNumSet and toMemoLine1.active != 1 and ldgMemoLine1.active != 1 and (phaseVarMemo2 <= 2 or phaseVarMemo2 == 6 or phaseVarMemo2 >= 9)) {
|
||||
company_datalink_stby.active = 1;
|
||||
} else {
|
||||
company_datalink_stby.active = 0;
|
||||
}
|
||||
}
|
||||
|
||||
var messages_right_memo = func {
|
||||
|
@ -2623,6 +2576,12 @@ var messages_right_memo = func {
|
|||
ldg_lt.active = 0;
|
||||
}
|
||||
|
||||
if (mcdu.ReceivedMessagesDatabase.firstUnviewed() != -99 and (phaseVarMemo2 <= 2 or phaseVarMemo2 == 6 or phaseVarMemo2 >= 9)) {
|
||||
company_msg.active = 1;
|
||||
} else {
|
||||
company_msg.active = 0;
|
||||
}
|
||||
|
||||
if (getprop("/controls/ice-protection/leng") == 1 or getprop("/controls/ice-protection/reng") == 1 or getprop("/systems/electrical/bus/dc-1") == 0 or getprop("/systems/electrical/bus/dc-2") == 0) {
|
||||
eng_aice.active = 1;
|
||||
} else {
|
||||
|
|
|
@ -287,7 +287,8 @@ var warnings = std.Vector.new([
|
|||
var fac12FaultSuccess = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"),
|
||||
var fac12FaultFacOff = warning.new(msg: " -FAC 1+2............OFF", colour: "c"),
|
||||
var yawDamperSysFault = warning.new(msg: "AUTO FLT YAW DAMPER SYS", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var yawDamperSysFaultFac = warning.new(msg: " -FAC 1+2....OFF THEN ON", colour: "c"),
|
||||
var yawDamperSysFaultFac1 = warning.new(msg: " -FAC 1......OFF THEN ON", colour: "c"),
|
||||
var yawDamperSysFaultFac2 = warning.new(msg: " -FAC 2......OFF THEN ON", colour: "c"),
|
||||
# var rudderTrimSysFault = warning.new(msg: "AUTO FLT RUD TRIM SYS", colour: "a", aural: 1, light: 1, isMainMsg: 1), not implemented
|
||||
# var rudderTrimSysFaultFac = warning.new(msg: " -FAC 1+2....OFF THEN ON", colour: "c"),
|
||||
var rudTravLimSysFault = warning.new(msg: "AUTO FLT RUD TRV LIM SYS", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
|
@ -542,11 +543,9 @@ var memos = std.Vector.new([
|
|||
var pred_ws_off = memo.new(msg: "PRED W/S OFF"), # Not yet implemented
|
||||
var terr_stby = memo.new(msg: "TERR STBY" ), # Not yet implemented
|
||||
var tcas_stby = memo.new(msg: "TCAS STBY" ), # Not yet implemented
|
||||
var acars_call = memo.new(msg: "ACARS CALL" ), # Not yet implemented
|
||||
var company_call = memo.new(msg: "COMPANY CALL"),
|
||||
var satcom_alert = memo.new(msg: "SATCOM ALERT"), # Not yet implemented
|
||||
var acars_msg = memo.new(msg: "ACARS MSG" ), # Not yet implemented
|
||||
var company_msg = memo.new(msg: "COMPANY MSG" ), # Not yet implemented
|
||||
var company_msg = memo.new(msg: "COMPANY MSG" ),
|
||||
var eng_aice = memo.new(msg: "ENG A.ICE" ),
|
||||
var wing_aice = memo.new(msg: "WING A.ICE" ),
|
||||
var ice_not_det = memo.new(msg: "ICE NOT DET" ), # Not yet implemented
|
||||
|
@ -560,7 +559,6 @@ var memos = std.Vector.new([
|
|||
var gpws_flap3 = memo.new(msg: "GPWS FLAP 3" ),
|
||||
var hf_data_ovrd = memo.new(msg: "HF DATA OVRD"), # Not yet implemented
|
||||
var hf_voice = memo.new(msg: "HF VOICE" ), # Not yet implemented
|
||||
var acars_stby = memo.new(msg: "ACARS STBY" ), # Not yet implemented
|
||||
var vhf3_voice = memo.new(msg: "VHF3 VOICE" ),
|
||||
var auto_brk_lo = memo.new(msg: "AUTO BRK LO" ),
|
||||
var auto_brk_med = memo.new(msg: "AUTO BRK MED"),
|
||||
|
|
|
@ -2,19 +2,14 @@
|
|||
|
||||
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp)
|
||||
|
||||
var twoEngOff = 0;
|
||||
var myPhase = nil;
|
||||
var eng = nil;
|
||||
var eng1epr = nil;
|
||||
var eng2epr = nil;
|
||||
var eng1n1 = nil;
|
||||
var eng2n1 = nil;
|
||||
var eng1n2 = nil;
|
||||
var eng2n2 = nil;
|
||||
var eprlim = nil;
|
||||
var master1 = nil;
|
||||
var master2 = nil;
|
||||
var n1lim = nil;
|
||||
var gear_agl_cur = nil;
|
||||
|
||||
var FWC = {
|
||||
|
@ -29,7 +24,7 @@ var FWC = {
|
|||
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-output"),
|
||||
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"),
|
||||
|
@ -53,24 +48,28 @@ var FWC = {
|
|||
Logic: {
|
||||
gnd: props.globals.getNode("/ECAM/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.initNode("/ECAM/phases/timer/eng1idle", 0, "INT"),
|
||||
eng2idle: props.globals.initNode("/ECAM/phases/timer/eng2idle", 0, "INT"),
|
||||
eng1or2: props.globals.initNode("/ECAM/phases/timer/eng1or2", 0, "INT"),
|
||||
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"),
|
||||
eng1or2Output: props.globals.initNode("/ECAM/phases/timer/eng1or2-output", 0, "INT"),
|
||||
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"),
|
||||
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.initNode("/ECAM/phases/to-power-set", 0, "BOOL"),
|
||||
altChg: props.globals.getNode("it-autoflight/input/alt-is-changing", 1),
|
||||
toPower: props.globals.getNode("/ECAM/phases/phase-calculation/takeoff-power"),
|
||||
altChg: props.globals.getNode("/it-autoflight/input/alt-is-changing", 1),
|
||||
};
|
||||
|
||||
var phaseLoop = func() {
|
||||
|
@ -82,53 +81,12 @@ var phaseLoop = func() {
|
|||
eng2epr = pts.Engines.Engine.eprActual[1].getValue();
|
||||
eng1n1 = pts.Engines.Engine.n1Actual[0].getValue();
|
||||
eng2n1 = pts.Engines.Engine.n1Actual[1].getValue();
|
||||
eng1n2 = pts.Engines.Engine.n2Actual[0].getValue();
|
||||
eng2n2 = pts.Engines.Engine.n2Actual[1].getValue();
|
||||
master1 = pts.Controls.Engines.Engine.cutoffSw[0].getBoolValue();
|
||||
master2 = pts.Controls.Engines.Engine.cutoffSw[1].getBoolValue();
|
||||
|
||||
FWC.Flipflop.recallReset.setValue(0);
|
||||
|
||||
# Various things
|
||||
if (eng1n2 >= 59.4 and !master1) {
|
||||
FWC.Timer.eng1idle.setValue(1);
|
||||
} else {
|
||||
FWC.Timer.eng1idle.setValue(0);
|
||||
}
|
||||
|
||||
if (eng2n2 >= 59.4 and !master2) {
|
||||
FWC.Timer.eng2idle.setValue(1);
|
||||
} else {
|
||||
FWC.Timer.eng2idle.setValue(0);
|
||||
}
|
||||
|
||||
if (eng1n2 >= 59.4 or eng2n2 >= 59.4) {
|
||||
FWC.Timer.eng1or2.setValue(1);
|
||||
} else {
|
||||
FWC.Timer.eng1or2.setValue(0);
|
||||
}
|
||||
|
||||
if ((FWC.Timer.eng1idleOutput.getBoolValue() == 0 or master1) and (FWC.Timer.eng2idleOutput.getBoolValue() == 0 or master2)) {
|
||||
twoEngOff = 1;
|
||||
} else {
|
||||
twoEngOff = 0;
|
||||
}
|
||||
|
||||
if (eng == "IAE") {
|
||||
eprlim = getprop("/controls/engines/epr-limit");
|
||||
if ((!pts.Controls.Engines.Engine.reverser[0].getBoolValue() and !pts.Controls.Engines.Engine.reverser[1].getBoolValue()) and (((pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.78 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.779) and fadec.Thrust.limFlex.getBoolValue()) or (pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.99 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.99))) {
|
||||
FWC.toPower.setBoolValue(1);
|
||||
} else {
|
||||
FWC.toPower.setBoolValue(0);
|
||||
}
|
||||
} else {
|
||||
n1lim = getprop("/controls/engines/n1-limit");
|
||||
if ((!pts.Controls.Engines.Engine.reverser[0].getBoolValue() and !pts.Controls.Engines.Engine.reverser[1].getBoolValue()) and (((pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.78 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.779) and fadec.Thrust.limFlex.getBoolValue()) or (pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.99 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.99))) {
|
||||
FWC.toPower.setBoolValue(1);
|
||||
} else {
|
||||
FWC.toPower.setBoolValue(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (myPhase == 9) {
|
||||
FWC.Monostable.phase9.setBoolValue(1);
|
||||
|
@ -149,8 +107,8 @@ var phaseLoop = func() {
|
|||
FWC.Flipflop.phase10Reset.setBoolValue(0);
|
||||
}
|
||||
|
||||
if ((FWC.Logic.gnd.getBoolValue() and twoEngOff and myPhase == 9) and FWC.Flipflop.phase10Output.getBoolValue()) {
|
||||
FWC.Monostable.phase1.setBoolValue(1);
|
||||
if ((FWC.Logic.gnd.getBoolValue() 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);
|
||||
}
|
||||
|
@ -171,21 +129,21 @@ var phaseLoop = func() {
|
|||
gear_agl_cur = pts.Position.gearAglFt.getValue();
|
||||
|
||||
# Phase 5 monostable
|
||||
if (FWC.toPower.getBoolValue() and (gear_agl_cur <= 1500 and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1)) {
|
||||
if (FWC.toPower.getBoolValue() and (!FWC.Logic.feet1500.getBoolValue() and !FWC.Logic.gnd.getBoolValue() 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 gear_agl_cur <= 1500 and gear_agl_cur <= 800 and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1) {
|
||||
if (!FWC.toPower.getBoolValue() and !FWC.Logic.feet1500.getBoolValue() and !FWC.Logic.feet800.getBoolValue() and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1) {
|
||||
FWC.Monostable.phase7.setBoolValue(1);
|
||||
} else {
|
||||
FWC.Monostable.phase7.setBoolValue(0);
|
||||
}
|
||||
|
||||
# Actual Phases
|
||||
if ((!FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1 and twoEngOff and myPhase != 9) and !FWC.Monostable.phase1Output.getBoolValue()) {
|
||||
if ((!FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1 and FWC.Timer.eng1and2Off.getValue() and myPhase != 9) and !FWC.Monostable.phase1Output.getBoolValue()) {
|
||||
setPhase(1);
|
||||
}
|
||||
|
||||
|
@ -205,7 +163,7 @@ var phaseLoop = func() {
|
|||
setPhase(5);
|
||||
}
|
||||
|
||||
if (!FWC.Logic.gnd.getValue() and FWC.Timer.gnd2Sec.getValue() != 1 and !(FWC.Monostable.phase5.getBoolValue() and FWC.Monostable.phase5Output.getBoolValue()) and !(FWC.Monostable.phase7.getBoolValue() and FWC.Monostable.phase7Output.getBoolValue())) {
|
||||
if (!FWC.Logic.gnd.getValue() 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())) {
|
||||
setPhase(6);
|
||||
}
|
||||
|
||||
|
@ -221,7 +179,7 @@ var phaseLoop = func() {
|
|||
setPhase(9);
|
||||
}
|
||||
|
||||
if ((FWC.Logic.gnd.getBoolValue() and twoEngOff and myPhase == 9) and FWC.Monostable.phase1Output.getBoolValue()) {
|
||||
if ((FWC.Logic.gnd.getBoolValue() and FWC.Timer.eng1and2Off.getValue() and myPhase == 9) and FWC.Monostable.phase1Output.getBoolValue()) {
|
||||
setPhase(10);
|
||||
}
|
||||
|
||||
|
|
|
@ -247,6 +247,7 @@ var postInit = func() {
|
|||
var FMGCNodes = {
|
||||
costIndex: props.globals.initNode("/FMGC/internal/cost-index", 0, "DOUBLE"),
|
||||
flexSet: props.globals.initNode("/FMGC/internal/flex-set", 0, "BOOL"),
|
||||
flexTemp: props.globals.initNode("/FMGC/internal/flex", 0, "INT"),
|
||||
mngSpdAlt: props.globals.getNode("/FMGC/internal/mng-alt-spd"),
|
||||
mngMachAlt: props.globals.getNode("/FMGC/internal/mng-alt-mach"),
|
||||
toFromSet: props.globals.initNode("/FMGC/internal/tofrom-set", 0, "BOOL"),
|
||||
|
|
|
@ -14,7 +14,14 @@ var SimbriefParser = {
|
|||
var stamp = systime();
|
||||
http.save("https://www.simbrief.com/api/xml.fetcher.php?username=" ~ username, getprop('/sim/fg-home') ~ "/Export/A320-family-simbrief.xml")
|
||||
.fail(func me.failure(i))
|
||||
.done(func me.read(getprop('/sim/fg-home') ~ "/Export/A320-family-simbrief.xml", i));
|
||||
.done(func {
|
||||
var errs = [];
|
||||
call(me.read, [(getprop('/sim/fg-home') ~ "/Export/A320-family-simbrief.xml"),i], SimbriefParser, {}, errs);
|
||||
if (size(errs) > 0) {
|
||||
debug.printerror(errs);
|
||||
me.failure(i);
|
||||
}
|
||||
});
|
||||
},
|
||||
failure: func(i) {
|
||||
mcdu.mcdu_message(i, "SIMBRIEF DOWNLOAD FAILED");
|
||||
|
@ -25,141 +32,202 @@ var SimbriefParser = {
|
|||
if (data != nil) {
|
||||
if (data.getChild("OFP") == nil) {
|
||||
print("XML file " ~ xml ~ " not a valid Simbrief file");
|
||||
me.failure(i);
|
||||
return;
|
||||
} else {
|
||||
me.node = data;
|
||||
me.parseOFP();
|
||||
if (me.parseOFP() == nil) {
|
||||
print("Failure to parse Simbrief OFP");
|
||||
me.failure(i);
|
||||
} else {
|
||||
mcdu.mcdu_message(i, "AOC ACT F-PLN UPLINK");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
print("Error reading " ~ xml);
|
||||
me.failure(i);
|
||||
}
|
||||
},
|
||||
tryFindByCoord: func(coords, id, type) {
|
||||
var result = nil;
|
||||
if (type == "nav") {
|
||||
result = findNavaidsByID(id);
|
||||
} elsif (type == "fix") {
|
||||
result = findFixesByID(id);
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
|
||||
if (size(result) == 0) { return nil; }
|
||||
foreach (var test; result) {
|
||||
if (math.abs(test.lat - coords.lat()) < 0.01666666666 and math.abs(test.lon - coords.lon()) < 0.01666666666) {
|
||||
return test;
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
},
|
||||
buildFlightplan: func() {
|
||||
# Flightplan stuff
|
||||
fmgc.flightPlanController.flightplans[3] = createFlightplan();
|
||||
fmgc.flightPlanController.flightplans[3].cleanPlan();
|
||||
|
||||
# INITA
|
||||
var departureID = me.OFP.getNode("origin/icao_code").getValue();
|
||||
var departures = findAirportsByICAO(departureID);
|
||||
var destinationID = me.OFP.getNode("destination/icao_code").getValue();
|
||||
var destinations = findAirportsByICAO(destinationID);
|
||||
|
||||
if (departures != nil and size(departures) != 0 and destinations != nil and size(destinations) != 0) {
|
||||
fmgc.flightPlanController.flightplans[3].departure = departures[0];
|
||||
fmgc.flightPlanController.flightplans[3].destination = destinations[0];
|
||||
fmgc.FMGCInternal.depApt = departureID;
|
||||
fmgc.FMGCInternal.arrApt = destinationID;
|
||||
|
||||
atsu.ATISInstances[0].newStation(departureID);
|
||||
atsu.ATISInstances[1].newStation(destinationID);
|
||||
|
||||
fmgc.FMGCInternal.toFromSet = 1;
|
||||
fmgc.FMGCNodes.toFromSet.setValue(1);
|
||||
|
||||
fmgc.updateArptLatLon();
|
||||
fmgc.updateARPT();
|
||||
} else {
|
||||
me.cleanupInvalid();
|
||||
return nil;
|
||||
}
|
||||
|
||||
var runwayStore = departures[0].runways[me.OFP.getNode("origin/plan_rwy").getValue()];
|
||||
if (runwayStore != nil) {
|
||||
fmgc.flightPlanController.flightplans[3].departure_runway = runwayStore;
|
||||
}
|
||||
|
||||
runwayStore = destinations[0].runways[me.OFP.getNode("destination/plan_rwy").getValue()];
|
||||
if (runwayStore != nil) {
|
||||
fmgc.flightPlanController.flightplans[3].destination_runway = runwayStore;
|
||||
}
|
||||
|
||||
var alternateID = me.OFP.getNode("alternate/icao_code").getValue();
|
||||
var alternates = findAirportsByICAO(alternateID);
|
||||
if (alternates != nil and size(alternates) != 0) {
|
||||
fmgc.FMGCInternal.altAirport = alternateID;
|
||||
atsu.ATISInstances[2].newStation(alternateID);
|
||||
fmgc.FMGCInternal.altAirportSet = 1;
|
||||
}
|
||||
|
||||
var wps = [];
|
||||
var ofpNavlog = me.OFP.getNode("navlog");
|
||||
var ofpFixes = ofpNavlog.getChildren("fix");
|
||||
var ident = "";
|
||||
var coords = nil;
|
||||
var wp = nil;
|
||||
var _foundSID = 0;
|
||||
var _foundSTAR = 0;
|
||||
var _foundTOC = 0;
|
||||
var _foundTOD = 0;
|
||||
var _sid = nil;
|
||||
var _star = nil;
|
||||
|
||||
foreach (var ofpFix; ofpFixes) {
|
||||
if (ofpFix.getNode("is_sid_star").getBoolValue()) {
|
||||
if (!_foundSID) {
|
||||
_sid = fmgc.flightPlanController.flightplans[3].departure.getSid(ofpFix.getNode("via_airway").getValue());
|
||||
if (_sid != nil) {
|
||||
_foundSID = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ofpFix.getNode("is_sid_star").getBoolValue()) {
|
||||
if (!_foundSTAR) {
|
||||
_star = fmgc.flightPlanController.flightplans[3].destination.getStar(ofpFix.getNode("via_airway").getValue());
|
||||
if (_star != nil) {
|
||||
_foundSTAR = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ofpFix.getNode("is_sid_star").getBoolValue() and _foundSID and _foundSTAR) {
|
||||
continue;
|
||||
} # todo what happens if you don't find one but find the other
|
||||
|
||||
ident = ofpFix.getNode("ident").getValue();
|
||||
if (find(departureID, ident) != -1 or find(destinationID, ident) != -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ident == "TOC") {
|
||||
_foundTOC = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ident == "TOD") {
|
||||
_foundTOC = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
coords = geo.Coord.new();
|
||||
coords.set_latlon(
|
||||
ofpFix.getNode("pos_lat").getValue(),
|
||||
ofpFix.getNode("pos_long").getValue());
|
||||
|
||||
wp = me.tryFindByCoord(coords,ident,"fix");
|
||||
wp = me.tryFindByCoord(coords,ident,"nav");
|
||||
if (wp == nil) {
|
||||
wp = createWP(coords, ident);
|
||||
}
|
||||
|
||||
append(wps, wp);
|
||||
}
|
||||
|
||||
fmgc.flightPlanController.flightplans[3].insertWaypoints(wps, 1);
|
||||
if (_sid != nil) {
|
||||
fmgc.flightPlanController.flightplans[3].sid = _sid;
|
||||
}
|
||||
if (_star != nil) {
|
||||
fmgc.flightPlanController.flightplans[3].star = _star;
|
||||
}
|
||||
fmgc.flightPlanController.destroyTemporaryFlightPlan(3, 1);
|
||||
fmgc.windController.updatePlans();
|
||||
fmgc.updateRouteManagerAlt();
|
||||
|
||||
return 1;
|
||||
},
|
||||
parseOFP: func() {
|
||||
me.OFP = me.node.getChild("OFP");
|
||||
me.store1 = nil;
|
||||
me.store2 = nil;
|
||||
|
||||
me.store1 = me.OFP.getChild("params");
|
||||
var units = me.store1.getChild("units").getValue();
|
||||
|
||||
me.store1 = me.OFP.getChild("general");
|
||||
me.store2 = me.OFP.getChild("alternate");
|
||||
fmgc.FMGCInternal.flightNum = (me.store1.getChild("icao_airline").getValue() or "") ~ (me.store1.getChild("flight_number").getValue() or "");
|
||||
if (me.buildFlightplan() == nil) {
|
||||
return nil;
|
||||
}
|
||||
fmgc.FMGCInternal.flightNum = (me.OFP.getNode("general/icao_airline").getValue() or "") ~ (me.OFP.getNode("general/flight_number").getValue() or "");
|
||||
fmgc.FMGCInternal.flightNumSet = 1;
|
||||
fmgc.FMGCInternal.costIndex = me.store1.getChild("costindex").getValue();
|
||||
fmgc.FMGCInternal.costIndex = me.OFP.getNode("general/costindex").getValue();
|
||||
fmgc.FMGCInternal.costIndexSet = 1;
|
||||
fmgc.FMGCNodes.costIndex.setValue(fmgc.FMGCInternal.costIndex);
|
||||
fmgc.FMGCInternal.tropo = me.store1.getChild("avg_tropopause").getValue();
|
||||
fmgc.FMGCInternal.tropo = me.OFP.getNode("general/avg_tropopause").getValue();
|
||||
fmgc.FMGCInternal.tropoSet = 1;
|
||||
fmgc.FMGCInternal.crzFt = me.store1.getChild("initial_altitude").getValue();
|
||||
fmgc.FMGCInternal.crzFl = me.store1.getChild("initial_altitude").getValue() / 100;
|
||||
fmgc.altvert();
|
||||
fmgc.FMGCInternal.crzSet = 1;
|
||||
|
||||
# Set cruise altitude
|
||||
fmgc.FMGCInternal.crzFt = me.OFP.getNode("general/initial_altitude").getValue();
|
||||
fmgc.FMGCInternal.crzFl = fmgc.FMGCInternal.crzFt / 100;
|
||||
fmgc.FMGCInternal.crzTemp = (((fmgc.FMGCInternal.crzFt / 1000) * -2) + 15) + me.OFP.getNode("general/avg_temp_dev").getValue();
|
||||
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFt / 100;
|
||||
mcdu.updateCrzLvlCallback();
|
||||
fmgc.FMGCInternal.crzTemp = (((me.store1.getChild("initial_altitude").getValue() / 1000) * -2) + 15) + me.store1.getChild("avg_temp_dev").getValue();
|
||||
fmgc.FMGCInternal.crzTempSet = 1;
|
||||
fmgc.FMGCInternal.crzProg = me.store1.getChild("initial_altitude").getValue() / 100;
|
||||
if (num(me.store1.getChild("avg_wind_comp").getValue()) >= 0) {
|
||||
fmgc.FMGCInternal.tripWind = "TL" ~ abs(me.store1.getChild("avg_wind_comp").getValue());
|
||||
fmgc.FMGCInternal.crzSet = 1;
|
||||
fmgc.altvert();
|
||||
|
||||
var windComp = me.OFP.getNode("general/avg_wind_comp").getValue();
|
||||
if (num(windComp) >= 0) {
|
||||
fmgc.FMGCInternal.tripWind = "TL" ~ abs(windComp);
|
||||
} else {
|
||||
fmgc.FMGCInternal.tripWind = "HD" ~ abs(me.store1.getChild("avg_wind_comp").getValue());
|
||||
fmgc.FMGCInternal.tripWind = "HD" ~ abs(windComp);
|
||||
}
|
||||
fmgc.FMGCInternal.tripWindValue = abs(me.store1.getChild("avg_wind_comp").getValue());
|
||||
|
||||
fmgc.FMGCInternal.altAirport = me.store2.getChild("icao_code").getValue();
|
||||
fmgc.FMGCInternal.altAirportSet = 1;
|
||||
|
||||
# Flightplan stuff
|
||||
fmgc.flightPlanController.flightplans[3] = createFlightplan();
|
||||
|
||||
# INITA
|
||||
me.store1 = me.OFP.getChild("origin");
|
||||
me.store2 = me.OFP.getChild("destination");
|
||||
|
||||
fmgc.FMGCInternal.depApt = me.store1.getChild("icao_code").getValue();
|
||||
fmgc.FMGCInternal.arrApt = me.store2.getChild("icao_code").getValue();
|
||||
fmgc.FMGCInternal.toFromSet = 1;
|
||||
fmgc.FMGCNodes.toFromSet.setValue(1);
|
||||
fmgc.flightPlanController.flightplans[3].departure = airportinfo(fmgc.FMGCInternal.depApt);
|
||||
fmgc.flightPlanController.flightplans[3].destination = airportinfo(fmgc.FMGCInternal.arrApt);
|
||||
fmgc.FMGCInternal.altSelected = 0;
|
||||
fmgc.updateArptLatLon();
|
||||
fmgc.updateARPT();
|
||||
call(func() {
|
||||
fmgc.flightPlanController.flightplans[3].departure_runway = airportinfo(fmgc.FMGCInternal.depApt).runways[me.store1.getChild("plan_rwy").getValue()];
|
||||
fmgc.flightPlanController.flightplans[3].destination_runway = airportinfo(fmgc.FMGCInternal.arrApt).runways[me.store2.getChild("plan_rwy").getValue()];
|
||||
});
|
||||
|
||||
me.store1 = me.OFP.getChild("navlog").getChildren();
|
||||
if (size(me.store1) != 0) {
|
||||
var firstIsSID = 0;
|
||||
var SIDID = "";
|
||||
if (me.store1[0].getChild("is_sid_star").getValue() == 1) {
|
||||
if (fmgc.flightPlanController.flightplans[3].departure.getSid(me.store1[0].getChild("via_airway").getValue()) != nil) {
|
||||
firstIsSID = 1;
|
||||
SIDID = me.store1[0].getChild("via_airway").getValue();
|
||||
}
|
||||
}
|
||||
var lastIsSTAR = 0;
|
||||
var STARID = "";
|
||||
if (me.store1[-1].getChild("is_sid_star").getValue() == 1) {
|
||||
if (fmgc.flightPlanController.flightplans[3].destination.getStar(me.store1[-1].getChild("via_airway").getValue()) != nil) {
|
||||
lastIsSTAR = 1;
|
||||
STARID = me.store1[-1].getChild("via_airway").getValue();
|
||||
}
|
||||
}
|
||||
|
||||
var lastSIDIndex = -999;
|
||||
var firstSTARIndex = -999;
|
||||
var TOCinSIDflag = 0;
|
||||
var TODinSTARflag = 0;
|
||||
for (var i = 0; i < size(me.store1); i = i + 1) {
|
||||
if (firstIsSID) {
|
||||
if (me.store1[i].getChild("is_sid_star").getValue() == 0 or me.store1[i].getChild("via_airway").getValue() != SIDID) {
|
||||
lastSIDIndex = i - 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = lastSIDIndex == -999 ? 0 : lastSIDIndex; i < size(me.store1); i = i + 1) {
|
||||
if (STARID != "") {
|
||||
if (me.store1[i].getChild("is_sid_star").getValue() == 1 and me.store1[i].getChild("via_airway").getValue() == STARID) {
|
||||
firstSTARIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var max = firstSTARIndex == -999 ? size(me.store1) - 1 : firstSTARIndex - 1;
|
||||
for (var i = lastSIDIndex == -999 ? 0 : lastSIDIndex + 2; i < max; i = i + 1) {
|
||||
if (me.store1[i].getChild("ident").getValue() == "TOC" or me.store1[i].getChild("ident").getValue() == "TOD") { continue; }
|
||||
var coord = geo.Coord.new();
|
||||
coord.set_latlon(me.store1[i].getChild("pos_lat").getValue(), me.store1[i].getChild("pos_long").getValue());
|
||||
var fixes = findFixesByID(coord, me.store1[i].getChild("ident").getValue());
|
||||
var navaids = findNavaidsByID(coord, me.store1[i].getChild("ident").getValue());
|
||||
if (size(fixes) > 0) {
|
||||
fmgc.flightPlanController.flightplans[3].appendWP(createWPFrom(fixes[0]));
|
||||
} else if (size(navaids) > 0) {
|
||||
fmgc.flightPlanController.flightplans[3].appendWP(createWPFrom(navaids[0]));
|
||||
} else {
|
||||
var WP = createWP(coord, me.store1[i].getChild("ident").getValue());
|
||||
fmgc.flightPlanController.flightplans[3].appendWP(WP);
|
||||
}
|
||||
}
|
||||
fmgc.flightPlanController.flightplans[3].sid = fmgc.flightPlanController.flightplans[3].departure.getSid(SIDID);
|
||||
fmgc.flightPlanController.flightplans[3].star = fmgc.flightPlanController.flightplans[3].destination.getStar(STARID);
|
||||
}
|
||||
fmgc.flightPlanController.destroyTemporaryFlightPlan(3, 1);
|
||||
|
||||
fmgc.windController.updatePlans();
|
||||
fmgc.updateRouteManagerAlt();
|
||||
fmgc.FMGCInternal.tripWindValue = abs(windComp);
|
||||
|
||||
|
||||
# INITB
|
||||
me.store1 = me.OFP.getChild("fuel");
|
||||
me.store2 = me.OFP.getChild("weights");
|
||||
if (units == "lbs") {
|
||||
if (me.OFP.getNode("params/units").getValue() == "lbs") {
|
||||
fmgc.FMGCInternal.taxiFuel = me.store1.getChild("taxi").getValue() / 1000;
|
||||
fmgc.FMGCInternal.taxiFuelSet = 1;
|
||||
fmgc.FMGCInternal.altFuel = me.store1.getChild("alternate_burn").getValue() / 1000;
|
||||
|
@ -206,5 +274,7 @@ var SimbriefParser = {
|
|||
fmgc.FMGCInternal.blockCalculating = 0;
|
||||
fmgc.blockCalculating.setValue(0);
|
||||
fmgc.FMGCInternal.blockConfirmed = 1;
|
||||
|
||||
return 1;
|
||||
},
|
||||
};
|
|
@ -173,6 +173,7 @@ var MessageController = {
|
|||
TypeIMessage.new("USING COST INDEX N", 1),TypeIMessage.new("WAIT FOR SYSTEM RESPONSE"),TypeIMessage.new("RWY/LS MISMATCH"),
|
||||
TypeIMessage.new("VHF3 VOICE MSG NOT GEN"),TypeIMessage.new("NO COMM MSG NOT GEN"),TypeIMessage.new("WX UPLINK"),
|
||||
TypeIMessage.new("SIMBRIEF DOWNLOAD FAILED"),TypeIMessage.new("MISSING USERNAME"),TypeIMessage.new("AOC ACT F-PLN UPLINK"),
|
||||
TypeIMessage.new("NO ANSWER TO REQUEST"),TypeIMessage.new("NO D-ATIS AVAILABLE"),TypeIMessage.new("BAD SERVER RESPONSE")
|
||||
]),
|
||||
typeIIMessages: std.Vector.new([
|
||||
TypeIIMessage.new("LAT DISCONT AHEAD", "amb", 0),TypeIIMessage.new("MORE DRAG"),TypeIIMessage.new("RWY/LS MISMATCH", "amb", 0),TypeIIMessage.new("STEP DELETED"),
|
||||
|
|
|
@ -387,7 +387,7 @@ controls.stepSpoilers = func(step) {
|
|||
}
|
||||
|
||||
var deploySpeedbrake = func {
|
||||
if (pts.Gear.Wow[1].getBoolValue() or pts.Gear.Wow[2].getBoolValue()) {
|
||||
if (pts.Gear.wow[1].getBoolValue() or pts.Gear.wow[2].getBoolValue()) {
|
||||
if (pts.Controls.Flight.speedbrake.getValue() < 1.0) {
|
||||
pts.Controls.Flight.speedbrake.setValue(1.0);
|
||||
}
|
||||
|
@ -401,7 +401,7 @@ var deploySpeedbrake = func {
|
|||
}
|
||||
|
||||
var retractSpeedbrake = func {
|
||||
if (pts.Gear.Wow[1].getBoolValue() or pts.Gear.Wow[2].getBoolValue()) {
|
||||
if (pts.Gear.wow[1].getBoolValue() or pts.Gear.wow[2].getBoolValue()) {
|
||||
if (pts.Controls.Flight.speedbrake.getValue() > 0.0) {
|
||||
pts.Controls.Flight.speedbrake.setValue(0.0);
|
||||
}
|
||||
|
|
111
Nasal/MCDU/ATIS.nas
Normal file
|
@ -0,0 +1,111 @@
|
|||
var atisPage = {
|
||||
title: nil,
|
||||
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
|
||||
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
|
||||
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
|
||||
L1: [nil, nil, "ack"], # content, title, colour
|
||||
L2: [nil, nil, "ack"],
|
||||
L3: [nil, nil, "ack"],
|
||||
L4: [nil, nil, "ack"],
|
||||
L5: [nil, nil, "ack"],
|
||||
L6: [nil, nil, "ack"],
|
||||
C1: [nil, nil, "ack"],
|
||||
C2: [nil, nil, "ack"],
|
||||
C3: [nil, nil, "ack"],
|
||||
C4: [nil, nil, "ack"],
|
||||
C5: [nil, nil, "ack"],
|
||||
C6: [nil, nil, "ack"],
|
||||
R1: [nil, nil, "ack"],
|
||||
R2: [nil, nil, "ack"],
|
||||
R3: [nil, nil, "ack"],
|
||||
R4: [nil, nil, "ack"],
|
||||
R5: [nil, nil, "ack"],
|
||||
R6: [nil, nil, "ack"],
|
||||
computer: nil,
|
||||
size: 0,
|
||||
new: func(computer, index) {
|
||||
var ap = {parents:[atisPage]};
|
||||
ap.computer = computer;
|
||||
ap.page = 1;
|
||||
ap.index = index;
|
||||
ap.message = atsu.ATISInstances[index].lastATIS;
|
||||
ap._setupPageWithData();
|
||||
ap._numPages = 1;
|
||||
ap.update();
|
||||
return ap;
|
||||
},
|
||||
del: func() {
|
||||
return nil;
|
||||
},
|
||||
getNumPages: func() {
|
||||
me._numPages = math.ceil(size(me.message) / 210);
|
||||
return me._numPages;
|
||||
},
|
||||
scrollUp: func() {
|
||||
me.page -= 1;
|
||||
if (me.page < 1) {
|
||||
me.page = me.getNumPages();
|
||||
}
|
||||
me.update();
|
||||
},
|
||||
scrollDown: func() {
|
||||
me.page += 1;
|
||||
if (me.page > me.getNumPages()) {
|
||||
me.page = 1;
|
||||
}
|
||||
me.update();
|
||||
},
|
||||
_clearPage: func() {
|
||||
me.L2 = [nil, nil, "wht"];
|
||||
me.L3 = [nil, nil, "wht"];
|
||||
me.L4 = [nil, nil, "wht"];
|
||||
me.C1 = [nil, nil, "ack"];
|
||||
me.C2 = [nil, nil, "ack"];
|
||||
me.C3 = [nil, nil, "ack"];
|
||||
me.C4 = [nil, nil, "ack"];
|
||||
me.C5 = [nil, nil, "ack"];
|
||||
me.R2 = [nil, nil, "ack"];
|
||||
me.R3 = [nil, nil, "ack"];
|
||||
me.R4 = [nil, nil, "ack"];
|
||||
me.R5 = [nil, nil, "ack"];
|
||||
me.arrowsMatrix = [[0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0]];
|
||||
},
|
||||
_setupPageWithData: func() {
|
||||
me.title = atsu.ATISInstances[me.index].station ~ "/" ~ (atsu.ATISInstances[me.index].type == 0 ? "ARR" : "DEP") ~ " ATIS ";
|
||||
me.L5 = [" PREV ATIS", nil, "wht"];
|
||||
me.L6 = [" RETURN", " ATIS MENU", "wht"];
|
||||
me.R6 = ["PRINT ", nil, "blu"];
|
||||
me.arrowsMatrix = [[0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1]];
|
||||
me.arrowsColour = [["ack", "ack", "ack", "ack", "wht", "wht"], ["ack", "ack", "ack", "ack", "ack", "blu"]];
|
||||
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
|
||||
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
|
||||
},
|
||||
update: func() {
|
||||
me._clearPage();
|
||||
var message = atsu.ATISInstances[me.index].lastATIS;
|
||||
var pageMinusOne = (me.page - 1);
|
||||
var numberExtraChar = pageMinusOne * 210;
|
||||
me.L1 = [substr(message, numberExtraChar, 30), atsu.ATISInstances[me.index].station ~ "/" ~ (atsu.ATISInstances[me.index].type == 0 ? "ARR" : "DEP"), "wht"];
|
||||
me.R1 = [" ",atsu.DictionaryString.fetchString1(atsu.ATISInstances[me.index].receivedCode).string2 ~ " " ~ atsu.ATISInstances[me.index].receivedTime ~ "Z", "wht"];
|
||||
if (size(message) > 30) {
|
||||
me.L2[1] = substr(message, numberExtraChar + 30, 30);
|
||||
}
|
||||
if (size(message) > 60) {
|
||||
me.L2[0] = substr(message, numberExtraChar + 60, 30);
|
||||
}
|
||||
if (size(message) > 90) {
|
||||
me.L3[1] = substr(message, numberExtraChar + 90, 30);
|
||||
}
|
||||
if (size(message) > 120) {
|
||||
me.L3[0] = substr(message, numberExtraChar + 120, 30);
|
||||
}
|
||||
if (size(message) > 150) {
|
||||
me.L4[1] = substr(message, numberExtraChar + 150, 30);
|
||||
}
|
||||
if (size(message) > 180) {
|
||||
me.L4[0] = substr(message, numberExtraChar + 180, 30);
|
||||
}
|
||||
|
||||
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
|
||||
},
|
||||
};
|
|
@ -27,6 +27,7 @@ var initInputA = func(key, i) {
|
|||
if (tfs == 4) {
|
||||
fmgc.FMGCInternal.altAirport = scratchpad;
|
||||
fmgc.FMGCInternal.altAirportSet = 1;
|
||||
atsu.ATISInstances[2].newStation(scratchpad);
|
||||
fmgc.windController.updatePlans();
|
||||
if (fmgc.FMGCInternal.blockConfirmed) {
|
||||
fmgc.FMGCInternal.fuelCalculating = 0;
|
||||
|
@ -219,6 +220,8 @@ var initInputA = func(key, i) {
|
|||
}
|
||||
fmgc.FMGCInternal.depApt = fromto[0];
|
||||
fmgc.FMGCInternal.arrApt = fromto[1];
|
||||
atsu.ATISInstances[0].newStation(fromto[0]);
|
||||
atsu.ATISInstances[1].newStation(fromto[1]);
|
||||
fmgc.FMGCInternal.toFromSet = 1;
|
||||
fmgc.FMGCNodes.toFromSet.setValue(1);
|
||||
#scratchpad
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
var pageNode = [props.globals.getNode("/MCDU[0]/page"), props.globals.getNode("/MCDU[1]/page")];
|
||||
var page = nil;
|
||||
var msg = nil;
|
||||
|
||||
var scratchpadNode = [nil, nil];
|
||||
var MCDU_init = func(i) {
|
||||
|
@ -285,6 +286,74 @@ var lskbutton = func(btn, i) {
|
|||
pageNode[i].setValue("WEATHERREQ");
|
||||
} else if (page == "RECEIVEDMSGS") {
|
||||
canvas_mcdu.myReceivedMessages[i].leftKey(1);
|
||||
} else if (page == "ATIS") {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (scratchpad == "CLR") {
|
||||
if (atsu.ATISInstances[0].sent != 1) {
|
||||
if (fmgc.FMGCInternal.depApt != "") {
|
||||
atsu.ATISInstances[0].newStation(fmgc.FMGCInternal.depApt);
|
||||
} else {
|
||||
atsu.ATISInstances[0].station = nil;
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} elsif (size(scratchpad) == 0) {
|
||||
if (atsu.ATISInstances[0].received) {
|
||||
canvas_mcdu.myAtis[i] = atisPage.new(i, 0);
|
||||
pageNode[i].setValue("ATISDETAIL");
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} elsif (find("/", scratchpad) != -1) {
|
||||
var str = split("/", scratchpad);
|
||||
if (size(str[0]) > 0 and size(str[1]) == 0) {
|
||||
var result = atsu.ATISInstances[0].newStation(str[0]);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
} elsif (result == 0) {
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
}
|
||||
} elsif (size(str[0]) == 0 and size(str[1]) > 0) {
|
||||
if (str[1] == "DEP") {
|
||||
atsu.ATISInstances[0].type = 1;
|
||||
} elsif (str[1] == "ARR") {
|
||||
atsu.ATISInstances[0].type = 0;
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} elsif (size(str[0]) > 0 and size(str[1]) > 0) {
|
||||
var result = atsu.ATISInstances[0].newStation(str[0]);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
if (str[1] == "DEP") {
|
||||
atsu.ATISInstances[0].type = 1;
|
||||
} elsif (str[1] == "ARR") {
|
||||
atsu.ATISInstances[0].type = 0;
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
var result = atsu.ATISInstances[0].newStation(scratchpad);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
} elsif (result == 0) {
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -356,7 +425,76 @@ var lskbutton = func(btn, i) {
|
|||
} else if (page == "RECEIVEDMSGS") {
|
||||
canvas_mcdu.myReceivedMessages[i].leftKey(2);
|
||||
} else if (page == "DATAMODE") {
|
||||
atsu.ATIS.server = 0;
|
||||
atsu.ATIS.serverSel.setValue("faa");
|
||||
acconfig.writeSettings();
|
||||
} else if (page == "ATIS") {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (scratchpad == "CLR") {
|
||||
if (atsu.ATISInstances[1].sent != 1) {
|
||||
if (fmgc.FMGCInternal.arrApt != "") {
|
||||
atsu.ATISInstances[1].newStation(fmgc.FMGCInternal.arrApt);
|
||||
} else {
|
||||
atsu.ATISInstances[1].station = nil;
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} elsif (size(scratchpad) == 0) {
|
||||
if (atsu.ATISInstances[1].received) {
|
||||
canvas_mcdu.myAtis[i] = atisPage.new(i, 1);
|
||||
pageNode[i].setValue("ATISDETAIL");
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} elsif (find("/", scratchpad) != -1) {
|
||||
var str = split("/", scratchpad);
|
||||
if (size(str[0]) > 0 and size(str[1]) == 0) {
|
||||
var result = atsu.ATISInstances[1].newStation(str[0]);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
} elsif (result == 0) {
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
}
|
||||
} elsif (size(str[0]) == 0 and size(str[1]) > 0) {
|
||||
if (str[1] == "DEP") {
|
||||
atsu.ATISInstances[1].type = 1;
|
||||
} elsif (str[1] == "ARR") {
|
||||
atsu.ATISInstances[1].type = 0;
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} elsif (size(str[0]) > 0 and size(str[1]) > 0) {
|
||||
var result = atsu.ATISInstances[1].newStation(str[0]);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
if (str[1] == "DEP") {
|
||||
atsu.ATISInstances[1].type = 1;
|
||||
} elsif (str[1] == "ARR") {
|
||||
atsu.ATISInstances[1].type = 0;
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
var result = atsu.ATISInstances[1].newStation(scratchpad);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
} elsif (result == 0) {
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -411,7 +549,76 @@ var lskbutton = func(btn, i) {
|
|||
} else if (page == "RECEIVEDMSGS") {
|
||||
canvas_mcdu.myReceivedMessages[i].leftKey(3);
|
||||
} else if (page == "DATAMODE") {
|
||||
atsu.ATIS.server = 1;
|
||||
atsu.ATIS.serverSel.setValue("vatsim");
|
||||
acconfig.writeSettings();
|
||||
} else if (page == "ATIS") {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (scratchpad == "CLR") {
|
||||
if (atsu.ATISInstances[2].sent != 1) {
|
||||
if (fmgc.FMGCInternal.altAirportSet) {
|
||||
atsu.ATISInstances[2].newStation(fmgc.FMGCInternal.altAirport);
|
||||
} else {
|
||||
atsu.ATISInstances[2].station = nil;
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} elsif (size(scratchpad) == 0) {
|
||||
if (atsu.ATISInstances[2].received) {
|
||||
canvas_mcdu.myAtis[i] = atisPage.new(i, 2);
|
||||
pageNode[i].setValue("ATISDETAIL");
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} elsif (find("/", scratchpad) != -1) {
|
||||
var str = split("/", scratchpad);
|
||||
if (size(str[0]) > 0 and size(str[1]) == 0) {
|
||||
var result = atsu.ATISInstances[2].newStation(str[0]);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
} elsif (result == 0) {
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
}
|
||||
} elsif (size(str[0]) == 0 and size(str[1]) > 0) {
|
||||
if (str[1] == "DEP") {
|
||||
atsu.ATISInstances[2].type = 1;
|
||||
} elsif (str[1] == "ARR") {
|
||||
atsu.ATISInstances[2].type = 0;
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} elsif (size(str[0]) > 0 and size(str[1]) > 0) {
|
||||
var result = atsu.ATISInstances[2].newStation(str[0]);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
if (str[1] == "DEP") {
|
||||
atsu.ATISInstances[2].type = 1;
|
||||
} elsif (str[1] == "ARR") {
|
||||
atsu.ATISInstances[2].type = 0;
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
var result = atsu.ATISInstances[2].newStation(scratchpad);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
} elsif (result == 0) {
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -460,6 +667,70 @@ var lskbutton = func(btn, i) {
|
|||
}
|
||||
} else if (page == "RECEIVEDMSGS") {
|
||||
canvas_mcdu.myReceivedMessages[i].leftKey(4);
|
||||
} else if (page == "ATIS") {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (scratchpad == "CLR") {
|
||||
if (atsu.ATISInstances[3].sent != 1) {
|
||||
atsu.ATISInstances[3].station = nil;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} elsif (size(scratchpad) == 0) {
|
||||
if (atsu.ATISInstances[3].received) {
|
||||
canvas_mcdu.myAtis[i] = atisPage.new(i, 3);
|
||||
pageNode[i].setValue("ATISDETAIL");
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} elsif (find("/", scratchpad) != -1) {
|
||||
var str = split("/", scratchpad);
|
||||
if (size(str[0]) > 0 and size(str[1]) == 0) {
|
||||
var result = atsu.ATISInstances[3].newStation(str[0]);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
} elsif (result == 0) {
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
}
|
||||
} elsif (size(str[0]) == 0 and size(str[1]) > 0) {
|
||||
if (str[1] == "DEP") {
|
||||
atsu.ATISInstances[3].type = 1;
|
||||
} elsif (str[1] == "ARR") {
|
||||
atsu.ATISInstances[3].type = 0;
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} elsif (size(str[0]) > 0 and size(str[1]) > 0) {
|
||||
var result = atsu.ATISInstances[3].newStation(str[0]);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
if (str[1] == "DEP") {
|
||||
atsu.ATISInstances[3].type = 1;
|
||||
} elsif (str[1] == "ARR") {
|
||||
atsu.ATISInstances[3].type = 0;
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
var result = atsu.ATISInstances[3].newStation(scratchpad);
|
||||
if (result == 2) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} elsif (result == 1) {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
} elsif (result == 0) {
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -585,6 +856,12 @@ var lskbutton = func(btn, i) {
|
|||
pageNode[i].setValue("ATSUDLINK");
|
||||
} else if (page == "COMMINIT" or page == "VOICEDIRECTORY" or page == "DATAMODE" or page == "COMMSTATUS" or page == "COMPANYCALL") {
|
||||
pageNode[i].setValue("COMMMENU");
|
||||
} else if (page == "ATIS") {
|
||||
pageNode[i].setValue("ATCMENU2");
|
||||
} else if (page == "ATISDETAIL") {
|
||||
pageNode[i].setValue("ATIS");
|
||||
} else if (page == "AOCCONFIG") {
|
||||
pageNode[i].setValue("AOCMENU");
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -666,6 +943,14 @@ var rskbutton = func(btn, i) {
|
|||
} else if (page == "WEATHERTYPE") {
|
||||
atsu.AOC.selectedType = "TERM FCST";
|
||||
pageNode[i].setValue("WEATHERREQ");
|
||||
} else if (page == "ATCMENU2") {
|
||||
pageNode[i].setValue("ATIS");
|
||||
} else if (page == "ATIS") {
|
||||
if (atsu.ATISInstances[0].station != nil and atsu.ATISInstances[0].sent != 1) {
|
||||
atsu.ATISInstances[0].sendReq(i);
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -698,7 +983,14 @@ var rskbutton = func(btn, i) {
|
|||
} else if (page == "AOCMENU") {
|
||||
pageNode[i].setValue("WEATHERREQ");
|
||||
} else if (page == "DATAMODE") {
|
||||
atsu.AOC.server = 0;
|
||||
atsu.AOC.server.setValue("noaa");
|
||||
acconfig.writeSettings();
|
||||
} else if (page == "ATIS") {
|
||||
if (atsu.ATISInstances[1].station != nil and atsu.ATISInstances[1].sent != 1) {
|
||||
atsu.ATISInstances[1].sendReq(i);
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -737,7 +1029,14 @@ var rskbutton = func(btn, i) {
|
|||
canvas_mcdu.myReceivedMessages[i] = receivedMessagesPage.new(i);
|
||||
pageNode[i].setValue("RECEIVEDMSGS");
|
||||
} else if (page == "DATAMODE") {
|
||||
atsu.AOC.server = 1;
|
||||
atsu.AOC.server.setValue("vatsim");
|
||||
acconfig.writeSettings();
|
||||
} else if (page == "ATIS") {
|
||||
if (atsu.ATISInstances[2].station != nil and atsu.ATISInstances[2].sent != 1) {
|
||||
atsu.ATISInstances[2].sendReq(i);
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -798,6 +1097,12 @@ var rskbutton = func(btn, i) {
|
|||
canvas_mcdu.myArrival[i].arrPushbuttonRight(4);
|
||||
} else if (page == "F-PLNA" or page == "F-PLNB") {
|
||||
canvas_mcdu.myFpln[i].pushButtonRight(4);
|
||||
} else if (page == "ATIS") {
|
||||
if (atsu.ATISInstances[3].station != nil and atsu.ATISInstances[3].sent != 1) {
|
||||
atsu.ATISInstances[3].sendReq(i);
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -884,7 +1189,7 @@ var rskbutton = func(btn, i) {
|
|||
} elsif (result == 4) {
|
||||
mcdu.mcdu_message(i, "NO COMM MSG NOT GEN");
|
||||
} else {
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
pageNode[i].setValue("AOCMENU");
|
||||
}
|
||||
} else if (page == "VOICEDIRECTORY") {
|
||||
for (var i = 0; i < 3; i = i + 1) {
|
||||
|
@ -892,6 +1197,8 @@ var rskbutton = func(btn, i) {
|
|||
rmp.transfer(i + 1);
|
||||
}
|
||||
}
|
||||
} else if (page == "AOCMENU") {
|
||||
pageNode[i].setValue("AOCCONFIG");
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -944,6 +1251,13 @@ var rskbutton = func(btn, i) {
|
|||
pageNode[i].setValue("COMMMENU");
|
||||
} else if (page == "CONNECTSTATUS") {
|
||||
pageNode[i].setValue("NOTIFICATION");
|
||||
} else if (page == "AOCMENU") {
|
||||
msg = mcdu.ReceivedMessagesDatabase.firstUnviewed();
|
||||
if (msg != -99) {
|
||||
canvas_mcdu.myReceivedMessages[i] = receivedMessagesPage.new(i);
|
||||
canvas_mcdu.myReceivedMessage[i] = receivedMessagePage.new(i, msg);
|
||||
pageNode[i].setValue("RECEIVEDMSG");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
|
@ -1029,6 +1343,8 @@ var arrowbutton = func(btn, i) {
|
|||
initInputIRS("up",i);
|
||||
} else if (page == "WINDCRZ") {
|
||||
canvas_mcdu.myCRZWIND[i].pushButtonUp();
|
||||
} else if (page == "ATISDETAIL") {
|
||||
canvas_mcdu.myAtis[i].scrollUp();
|
||||
}
|
||||
} else if (btn == "down") {
|
||||
if (page == "F-PLNA" or page == "F-PLNB") {
|
||||
|
@ -1043,6 +1359,8 @@ var arrowbutton = func(btn, i) {
|
|||
initInputIRS("down",i);
|
||||
} else if (page == "WINDCRZ") {
|
||||
canvas_mcdu.myCRZWIND[i].pushButtonDown();
|
||||
} else if (page == "ATISDETAIL") {
|
||||
canvas_mcdu.myAtis[i].scrollDown();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1088,7 +1406,7 @@ var pagebutton = func(btn, i) {
|
|||
pageNode[i].setValue("DATA");
|
||||
} else if (btn == "mcdu") {
|
||||
var page = page;
|
||||
if (page != "ATSUDLINK" and page != "AOCMENU" and page != "WEATHERREQ" and page != "WEATHERTYPE" and page != "RECEIVEDMSGS" and page != "RECEIVEDMSG" and page != "ATCMENU" and page != "ATCMENU2" and page != "NOTIFICATION" and page != "CONNECTSTATUS" and page != "COMPANYCALL" and page != "VOICEDIRECTORY" and page != "DATAMODE" and page != "COMMMENU" and page != "COMMSTATUS" and page != "COMMINIT") {
|
||||
if (page != "ATSUDLINK" and page != "AOCMENU" and page != "AOCCONFIG" and page != "WEATHERREQ" and page != "WEATHERTYPE" and page != "RECEIVEDMSGS" and page != "RECEIVEDMSG" and page != "ATCMENU" and page != "ATCMENU2" and page != "NOTIFICATION" and page != "CONNECTSTATUS" and page != "COMPANYCALL" and page != "VOICEDIRECTORY" and page != "DATAMODE" and page != "COMMMENU" and page != "COMMSTATUS" and page != "COMMINIT" and page != "ATIS" and page != "ATISDETAIL") {
|
||||
setprop("/MCDU[" ~ i ~ "]/last-fmgc-page", page);
|
||||
} else {
|
||||
setprop("/MCDU[" ~ i ~ "]/last-atsu-page", page);
|
||||
|
|
|
@ -73,7 +73,7 @@ var receivedMessagesPage = {
|
|||
|
||||
if (me.size >= (me.curPage * 5) + -4) {
|
||||
message = ReceivedMessagesDatabase.database.vector[-5 + (me.curPage * 5)];
|
||||
me.L1[0] = " " ~ left(message.body, 23);
|
||||
me.L1[0] = " " ~ left(message.body, size(message.body) > 23 ? 23 : size(message.body));
|
||||
me.L1[2] = "blu";
|
||||
if (!message.viewed) {
|
||||
me.L1[1] = " " ~ message.time ~ " NEW";
|
||||
|
@ -85,7 +85,7 @@ var receivedMessagesPage = {
|
|||
|
||||
if (me.size >= (me.curPage * 5) + -3) {
|
||||
message = ReceivedMessagesDatabase.database.vector[-4 + (me.curPage * 5)];
|
||||
me.L2[0] = " " ~ left(message.body, 23);
|
||||
me.L2[0] = " " ~ left(message.body, size(message.body) > 23 ? 23 : size(message.body));
|
||||
me.L2[2] = "blu";
|
||||
if (!message.viewed) {
|
||||
me.L2[1] = " " ~ message.time ~ " NEW";
|
||||
|
@ -97,7 +97,7 @@ var receivedMessagesPage = {
|
|||
|
||||
if (me.size >= (me.curPage * 5) + -2) {
|
||||
message = ReceivedMessagesDatabase.database.vector[-3 + (me.curPage * 5)];
|
||||
me.L3[0] = " " ~ left(message.body, 23);
|
||||
me.L3[0] = " " ~ left(message.body, size(message.body) > 23 ? 23 : size(message.body));
|
||||
me.L3[2] = "blu";
|
||||
if (!message.viewed) {
|
||||
me.L3[1] = " " ~ message.time ~ " NEW";
|
||||
|
@ -109,7 +109,7 @@ var receivedMessagesPage = {
|
|||
|
||||
if (me.size >= (me.curPage * 5) + -1) {
|
||||
message = ReceivedMessagesDatabase.database.vector[-2 + (me.curPage * 5)];
|
||||
me.L4[0] = " " ~ left(message.body, 23);
|
||||
me.L4[0] = " " ~ left(message.body, size(message.body) > 23 ? 23 : size(message.body));
|
||||
me.L4[2] = "blu";
|
||||
if (!message.viewed) {
|
||||
me.L4[1] = " " ~ message.time ~ " NEW";
|
||||
|
@ -121,7 +121,7 @@ var receivedMessagesPage = {
|
|||
|
||||
if (me.size >= (me.curPage * 5) + 0) {
|
||||
message = ReceivedMessagesDatabase.database.vector[-1 + (me.curPage * 5)];
|
||||
me.L5[0] = " " ~ left(message.body, 23);
|
||||
me.L5[0] = " " ~ left(message.body, size(message.body) > 23 ? 23 : size(message.body));
|
||||
me.L5[2] = "blu";
|
||||
if (!message.viewed) {
|
||||
me.L5[1] = " " ~ message.time ~ " NEW";
|
||||
|
@ -134,11 +134,22 @@ var receivedMessagesPage = {
|
|||
},
|
||||
leftKey: func(index) {
|
||||
if (ReceivedMessagesDatabase.getSize() >= (-5 + index + (me.curPage * 5))) {
|
||||
if (mcdu_scratchpad.scratchpads[me.computer].scratchpad == "CLR") {
|
||||
ReceivedMessagesDatabase.removeAtIndex(-6 + index + (me.curPage * 5));
|
||||
me.update();
|
||||
if (ReceivedMessagesDatabase.getSize() < (me.curPage * 5) and ReceivedMessagesDatabase.getSize() >= 5) {
|
||||
me.scrollLeft();
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[me.computer].empty();
|
||||
} elsif (size(mcdu_scratchpad.scratchpads[me.computer].scratchpad) == 0) {
|
||||
canvas_mcdu.myReceivedMessage[me.computer] = receivedMessagePage.new(me.computer, (-6 + index + (me.curPage * 5)));
|
||||
setprop("MCDU[" ~ me.computer ~ "]/page", "RECEIVEDMSG");
|
||||
} else {
|
||||
mcdu_message(me.computer, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(me.computer, "NOT ALLOWED");
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -288,12 +299,23 @@ var ReceivedMessagesDatabase = {
|
|||
canvas_mcdu.myReceivedMessages[1].update();
|
||||
}
|
||||
},
|
||||
firstUnviewed: func() {
|
||||
for (var i = 0; i < me.getSize(); i = i + 1) {
|
||||
if (!me.database.vector[i].viewed) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -99;
|
||||
},
|
||||
getCountPages: func() {
|
||||
return math.ceil(me.database.size() / 5);
|
||||
return math.ceil(me.getSize() / 5);
|
||||
},
|
||||
getSize: func() {
|
||||
return me.database.size();
|
||||
},
|
||||
removeAtIndex: func(index) {
|
||||
return me.database.pop(index);
|
||||
},
|
||||
clearDatabase: func() {
|
||||
me.database.clear();
|
||||
},
|
||||
|
|
|
@ -37,7 +37,7 @@ var createCanvasQRH = func() {
|
|||
qrhCanvas.setLayout(myHBox);
|
||||
|
||||
QRH = canvas.gui.widgets.Label.new(root, canvas.style, {} )
|
||||
.setImage("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg")
|
||||
.setImage(resolvepath("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg"))
|
||||
.move(0,-25)
|
||||
.setSize(400,625);
|
||||
myHBox.addItem(QRH);
|
||||
|
@ -78,11 +78,11 @@ var createCanvasQRH = func() {
|
|||
});
|
||||
buttonPrev.listen("clicked", func {
|
||||
prevPage();
|
||||
QRH.setImage("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg");
|
||||
QRH.setImage(resolvepath("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg"));
|
||||
});
|
||||
buttonNext.listen("clicked", func {
|
||||
nextPage();
|
||||
QRH.setImage("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg");
|
||||
QRH.setImage(resolvepath("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg"));
|
||||
});
|
||||
|
||||
|
||||
|
|
|
@ -2,41 +2,6 @@
|
|||
# Jonathan Redpath
|
||||
|
||||
# Copyright (c) 2020 Josh Davidson (Octal450)
|
||||
var DictionaryItem = {
|
||||
new: func(item, string) {
|
||||
var DI = {parents: [DictionaryItem]};
|
||||
DI.item = item;
|
||||
DI.string = string;
|
||||
return DI;
|
||||
},
|
||||
};
|
||||
|
||||
var Dictionary = {
|
||||
database: std.Vector.new(),
|
||||
addToDatabase: func(dictItem) {
|
||||
me.database.append(dictItem);
|
||||
},
|
||||
fetchString: func(string) {
|
||||
foreach (var item; me.database.vector) {
|
||||
if (me.item.string == string) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
},
|
||||
fetchItem: func(itemObj) {
|
||||
foreach (var item; me.database.vector) {
|
||||
if (item.item == itemObj) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
makeNewDictionaryItem = func(item, string) {
|
||||
var dictItem = DictionaryItem.new(item, string);
|
||||
Dictionary.addToDatabase(dictItem);
|
||||
};
|
||||
|
||||
var CPDLCmessage = {
|
||||
new: func(text) {
|
||||
var cpdlcMessage = {parents: [CPDLCmessage] };
|
||||
|
|
75
Nasal/Systems/Comm/Dictionary.nas
Normal file
|
@ -0,0 +1,75 @@
|
|||
# A3XX Dictionary
|
||||
# Jonathan Redpath
|
||||
|
||||
# Copyright (c) 2020 Josh Davidson (Octal450)
|
||||
var DictionaryItemObj = {
|
||||
new: func(item, string) {
|
||||
var DI = {parents: [DictionaryItemObj]};
|
||||
DI.item = item;
|
||||
DI.string = string;
|
||||
return DI;
|
||||
},
|
||||
};
|
||||
|
||||
var DictionaryObj = {
|
||||
database: std.Vector.new(),
|
||||
addToDatabase: func(dictItem) {
|
||||
me.database.append(dictItem);
|
||||
},
|
||||
fetchString: func(string) {
|
||||
foreach (var item; me.database.vector) {
|
||||
if (me.item.string == string) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
},
|
||||
fetchItem: func(itemObj) {
|
||||
foreach (var item; me.database.vector) {
|
||||
if (item.item == itemObj) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
var makeNewDictionaryItem = func(item, string) {
|
||||
var dictItem = DictionaryItemObj.new(item, string);
|
||||
DictionaryObj.addToDatabase(dictItem);
|
||||
};
|
||||
|
||||
var DictionaryItemString = {
|
||||
new: func(string1, string2) {
|
||||
var DI = {parents: [DictionaryItemString]};
|
||||
DI.string1 = string1;
|
||||
DI.string2 = string2;
|
||||
return DI;
|
||||
},
|
||||
};
|
||||
|
||||
var DictionaryString = {
|
||||
database: std.Vector.new(),
|
||||
addToDatabase: func(dictItem) {
|
||||
me.database.append(dictItem);
|
||||
},
|
||||
fetchString1: func(stringSearch) {
|
||||
foreach (var item; me.database.vector) {
|
||||
if (string.uc(item.string1) == string.uc(stringSearch)) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
},
|
||||
fetchString2: func(stringSearch) {
|
||||
foreach (var item; me.database.vector) {
|
||||
if (string.uc(item.string2) == string.uc(stringSearch)) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
},
|
||||
};
|
||||
|
||||
var makeNewDictionaryString = func(string1, string2) {
|
||||
var dictItem = DictionaryItemString.new(string1, string2);
|
||||
DictionaryString.addToDatabase(dictItem);
|
||||
};
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
# Copyright (c) 2020 Josh Davidson (Octal450)
|
||||
var defaultServer = "https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&mostRecent=true&hoursBeforeNow=12&stationString=";
|
||||
var serverString = "";
|
||||
var result = nil;
|
||||
|
||||
var ATSU = {
|
||||
|
@ -104,15 +103,10 @@ var AOC = {
|
|||
sentTime: nil,
|
||||
received: 0,
|
||||
receivedTime: nil,
|
||||
server: 0, # 0 = noaa, 1 = vatsim
|
||||
server: props.globals.getNode("/systems/atsu/wxr-server"),
|
||||
newStation: func(airport) {
|
||||
if (size(airport) == 3 or size(airport) == 4) {
|
||||
if (size(findAirportsByICAO(airport)) == 0) {
|
||||
return 2;
|
||||
} else {
|
||||
me.station = airport;
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
|
@ -123,9 +117,18 @@ var AOC = {
|
|||
}
|
||||
me.sent = 1;
|
||||
me.received = 0;
|
||||
|
||||
var sentTime = left(getprop("/sim/time/gmt-string"), 5);
|
||||
me.sentTime = split(":", sentTime)[0] ~ "." ~ split(":", sentTime)[1] ~ "Z";
|
||||
|
||||
if (size(findAirportsByICAO(me.station)) == 0) {
|
||||
me.received = 1;
|
||||
me.receivedTime = me.sentTime;
|
||||
var message = mcdu.ACARSMessage.new(me.receivedTime, "INVALID STATION " ~ me.station);
|
||||
mcdu.ReceivedMessagesDatabase.addMessage(message);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (me.selectedType == "HOURLY WX") {
|
||||
var result = me.fetchMETAR(atsu.AOC.station, i);
|
||||
if (result == 0) {
|
||||
|
@ -148,8 +151,13 @@ var AOC = {
|
|||
}
|
||||
}
|
||||
},
|
||||
downloadFail: func(i, r = nil) {
|
||||
mcdu.mcdu_message(i,"NO ANSWER TO REQUEST");
|
||||
debug.dump("HTTP failure " ~ r.status);
|
||||
me.sent = 0;
|
||||
},
|
||||
fetchMETAR: func(airport, i) {
|
||||
if (!ATSU.working) {
|
||||
if (!ATSU.working or !fmgc.FMGCInternal.flightNumSet) {
|
||||
me.sent = 0;
|
||||
return 2;
|
||||
}
|
||||
|
@ -158,23 +166,29 @@ var AOC = {
|
|||
return 1;
|
||||
}
|
||||
|
||||
serverString = "";
|
||||
|
||||
if (me.server == 0) {
|
||||
serverString = defaultServer;
|
||||
} elsif (me.server == 1) {
|
||||
var serverString = "";
|
||||
if (me.server.getValue() == "vatsim") {
|
||||
serverString = "https://api.flybywiresim.com/metar?source=vatsim&icao=";
|
||||
} else { # fall back to NOAA silently
|
||||
} else {
|
||||
serverString = defaultServer;
|
||||
}
|
||||
|
||||
http.load(serverString ~ airport)
|
||||
.fail(func(r) print("Download failed; try changing your server to NOAA"))
|
||||
.done(func(r) me.processMETAR(r, i));
|
||||
.fail(func(r) me.downloadFail(i, r))
|
||||
.done(func(r) {
|
||||
var errs = [];
|
||||
call(me.processMETAR, [r, i], me, {}, errs);
|
||||
if (size(errs) > 0) {
|
||||
print("Failed to parse METAR for " ~ airport);
|
||||
debug.dump(r.response);
|
||||
debug.printerror(errs);
|
||||
mcdu.mcdu_message(i, "BAD SERVER RESPONSE");
|
||||
}
|
||||
});
|
||||
return 0;
|
||||
},
|
||||
fetchTAF: func(airport, i) {
|
||||
if (!ATSU.working) {
|
||||
if (!ATSU.working or !fmgc.FMGCInternal.flightNumSet) {
|
||||
me.sent = 0;
|
||||
return 2;
|
||||
}
|
||||
|
@ -183,15 +197,33 @@ var AOC = {
|
|||
return 1;
|
||||
}
|
||||
http.load("https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=tafs&requestType=retrieve&format=xml&timeType=issue&mostRecent=true&hoursBeforeNow=12&stationString=" ~ airport)
|
||||
.fail(func print("Download failed!"))
|
||||
.done(func(r) me.processTAF(r, i));
|
||||
.fail(func(r) me.downloadFail(i))
|
||||
.done(func(r) {
|
||||
var errs = [];
|
||||
call(me.processTAF, [r, i], me, {}, errs);
|
||||
if (size(errs) > 0) {
|
||||
print("Failed to parse TAF for " ~ airport);
|
||||
debug.dump(r.response);
|
||||
debug.printerror(errs);
|
||||
mcdu.mcdu_message(i, "BAD SERVER RESPONSE");
|
||||
}
|
||||
});
|
||||
return 0;
|
||||
},
|
||||
processMETAR: func(r, i) {
|
||||
var raw = r.response;
|
||||
if (me.server.getValue() == "vatsim") {
|
||||
me.lastMETAR = raw;
|
||||
} else if (find("<raw_text>", raw) != -1) {
|
||||
raw = split("<raw_text>", raw)[1];
|
||||
raw = split("</raw_text>", raw)[0];
|
||||
me.lastMETAR = raw;
|
||||
} else {
|
||||
me.received = 0;
|
||||
me.sent = 0;
|
||||
mcdu.mcdu_message(i, "BAD SERVER RESPONSE");
|
||||
return;
|
||||
}
|
||||
settimer(func() {
|
||||
me.received = 1;
|
||||
mcdu.mcdu_message(i, "WX UPLINK");
|
||||
|
@ -204,9 +236,17 @@ var AOC = {
|
|||
},
|
||||
processTAF: func(r, i) {
|
||||
var raw = r.response;
|
||||
if (find("<raw_text>", raw) != -1) {
|
||||
raw = split("<raw_text>", raw)[1];
|
||||
raw = split("</raw_text>", raw)[0];
|
||||
me.lastTAF = raw;
|
||||
} else {
|
||||
me.received = 0;
|
||||
me.sent = 0;
|
||||
mcdu.mcdu_message(i, "BAD SERVER RESPONSE");
|
||||
return;
|
||||
}
|
||||
me.lastTAF = raw;
|
||||
settimer(func() {
|
||||
me.received = 1;
|
||||
mcdu.mcdu_message(i, "WX UPLINK");
|
||||
|
@ -220,14 +260,21 @@ var AOC = {
|
|||
};
|
||||
|
||||
var ATIS = {
|
||||
station: nil,
|
||||
lastATIS: nil,
|
||||
sent: 0,
|
||||
sentTime: nil,
|
||||
received: 0,
|
||||
receivedTime: nil,
|
||||
server: 0,
|
||||
serverSel: props.globals.getNode("/systems/atsu/atis-server"),
|
||||
new: func() {
|
||||
var ATIS = { parents: [ATIS] };
|
||||
ATIS.station = nil;
|
||||
ATIS.lastATIS = nil;
|
||||
ATIS.sent = 0;
|
||||
ATIS.received = 0;
|
||||
ATIS.receivedTime = nil;
|
||||
ATIS.receivedCode = nil;
|
||||
ATIS.type = 0; # 0 = arr, 1 = dep
|
||||
return ATIS;
|
||||
},
|
||||
newStation: func(airport) {
|
||||
me.sent = 0;
|
||||
me.received = 0;
|
||||
if (size(airport) == 3 or size(airport) == 4) {
|
||||
if (size(findAirportsByICAO(airport)) == 0) {
|
||||
return 2;
|
||||
|
@ -245,10 +292,8 @@ var ATIS = {
|
|||
}
|
||||
me.sent = 1;
|
||||
me.received = 0;
|
||||
var sentTime = left(getprop("/sim/time/gmt-string"), 5);
|
||||
me.sentTime = split(":", sentTime)[0] ~ "." ~ split(":", sentTime)[1] ~ "Z";
|
||||
|
||||
result = me.fetchATIS(atsu.ATIS.station, i);
|
||||
result = me.fetchATIS(me.station, i);
|
||||
if (result == 0) {
|
||||
return 0;
|
||||
} elsif (result == 1) {
|
||||
|
@ -267,39 +312,139 @@ var ATIS = {
|
|||
return 1;
|
||||
}
|
||||
|
||||
serverString = "";
|
||||
|
||||
if (me.server == 0) {
|
||||
serverString = "https://api.flybywiresim.com/atis?source=faa&icao=";
|
||||
} elsif (me.server == 1) {
|
||||
serverString = "https://api.flybywiresim.com/atis?source=vatsim&icao=";
|
||||
} else { # fall back to FAA silently
|
||||
serverString = "https://api.flybywiresim.com/atis?source=faa&icao=";
|
||||
}
|
||||
var serverString = "https://api.flybywiresim.com/atis?source=" ~ me.serverSel.getValue() ~ "&icao=";
|
||||
|
||||
http.load(serverString ~ airport)
|
||||
.fail(func(r) return 3)
|
||||
.done(func(r) me.processATIS(r, i));
|
||||
.done(func(r) {
|
||||
var errs = [];
|
||||
call(me.processATIS, [r, i], me, {}, errs);
|
||||
if (size(errs) > 0) {
|
||||
print("Failed to parse ATIS for " ~ airport);
|
||||
debug.dump(r.response);
|
||||
debug.printerror(errs);
|
||||
mcdu.mcdu_message(i, "BAD SERVER RESPONSE");
|
||||
}
|
||||
});
|
||||
return 0;
|
||||
},
|
||||
processATIS: func(r, i) {
|
||||
var raw = r.response;
|
||||
if (find("combined", raw)) {
|
||||
if (r.response == "FBW_ERROR: D-ATIS not available at this airport" or find("atis not avail",r.response) != -1) {
|
||||
me.received = 0;
|
||||
me.sent = 0;
|
||||
mcdu.mcdu_message(i,"NO D-ATIS AVAILABLE");
|
||||
return;
|
||||
}
|
||||
if (find("combined", raw) != -1) {
|
||||
raw = split('{"combined":"', raw)[1];
|
||||
raw = split('"}', raw)[0];
|
||||
} else {
|
||||
if (me.type == 0) {
|
||||
raw = split('{"arr":"', raw)[1];
|
||||
raw = split('","dep":', raw)[0];
|
||||
} else {
|
||||
raw = split('","dep":"', raw)[1];
|
||||
raw = split('"}', raw)[0];
|
||||
}
|
||||
}
|
||||
me.lastATIS = raw;
|
||||
settimer(func() {
|
||||
me.received = 1;
|
||||
mcdu.mcdu_message(i, "WX UPLINK");
|
||||
|
||||
var receivedTime = left(getprop("/sim/time/gmt-string"), 5);
|
||||
me.receivedTime = split(":", receivedTime)[0] ~ "." ~ split(":", receivedTime)[1] ~ "Z";
|
||||
var message = mcdu.ACARSMessage.new(me.receivedTime, me.lastATIS);
|
||||
mcdu.ReceivedMessagesDatabase.addMessage(message);
|
||||
}, math.max(rand()*10, 2.25));
|
||||
var code = "";
|
||||
if (find("INFO ", raw) != -1) {
|
||||
code = split("INFO ", raw)[1];
|
||||
code = split(" ", code)[0];
|
||||
} else if (find("information ", raw) != -1) {
|
||||
code = split("information ", raw)[1];
|
||||
code = split(" ", code)[0];
|
||||
} else if (find("INFORMATION ", raw) != -1) {
|
||||
code = split("INFORMATION ", raw)[1];
|
||||
code = split(" ", code)[0];
|
||||
} else if (find("ATIS ", raw) != -1) {
|
||||
code = split("ATIS ", raw)[1];
|
||||
code = split(" ", code)[0];
|
||||
} else if (find("info ", raw) != -1) {
|
||||
code = split("info ", raw)[1];
|
||||
code = split(" ", code)[0];
|
||||
} else {
|
||||
print("Failed to find a valid ATIS code for " ~ me.station);
|
||||
debug.dump(raw);
|
||||
}
|
||||
|
||||
if (find(".", code) != -1) {
|
||||
code = split(".", code)[0];
|
||||
}
|
||||
|
||||
me.receivedCode = code;
|
||||
|
||||
var time = "";
|
||||
if (find("Time ", raw) != -1) {
|
||||
time = split("Time ", raw)[1];
|
||||
time = split(" ", time)[0];
|
||||
} else if (find("time ", raw) != -1) {
|
||||
time = split("time ", raw)[1];
|
||||
time = split(" ", time)[0];
|
||||
} else if (find("TIME ", raw) != -1) {
|
||||
time = split("TIME ", raw)[1];
|
||||
time = split(" ", time)[0];
|
||||
} else if (find("Z.", raw) != -1) {
|
||||
time = split("Z.", raw)[0];
|
||||
time = right(time, 4);
|
||||
} else if (find("Z SPECIAL", raw) != -1) {
|
||||
time = split("Z SPECIAL", raw)[0];
|
||||
time = right(time, 4);
|
||||
} else if (find("metreport", raw) != -1) {
|
||||
time = split("metreport", raw)[0];
|
||||
time = right(time, 4);
|
||||
} else if (find((code ~ " "), raw) != -1) {
|
||||
if (size(split(" ",split(code ~ " ", raw)[1])[0]) == 4) {
|
||||
time = split(" ",split(code ~ " ", raw)[1])[0];
|
||||
}
|
||||
} else {
|
||||
print("Failed to find a valid ATIS time for " ~ me.station);
|
||||
debug.dump(raw);
|
||||
}
|
||||
|
||||
if (size(time) == 3) {
|
||||
time ~= " ";
|
||||
}
|
||||
|
||||
raw = string.uc(raw);
|
||||
raw = string.replace(raw, ",", "");
|
||||
|
||||
settimer(func() {
|
||||
me.sent = 0;
|
||||
me.received = 1;
|
||||
me.receivedTime = time;
|
||||
me.lastATIS = raw;
|
||||
}, math.max(rand()*10, 4.5));
|
||||
},
|
||||
};
|
||||
|
||||
makeNewDictionaryString("A", "ALPHA");
|
||||
makeNewDictionaryString("B", "BRAVO");
|
||||
makeNewDictionaryString("C", "CHARLIE");
|
||||
makeNewDictionaryString("D", "DELTA");
|
||||
makeNewDictionaryString("E", "ECHO");
|
||||
makeNewDictionaryString("F", "FOXTROT");
|
||||
makeNewDictionaryString("G", "GOLF");
|
||||
makeNewDictionaryString("H", "HOTEL");
|
||||
makeNewDictionaryString("I", "INDIA");
|
||||
makeNewDictionaryString("J", "JULIET");
|
||||
makeNewDictionaryString("K", "KILO");
|
||||
makeNewDictionaryString("L", "LIMA");
|
||||
makeNewDictionaryString("M", "MIKE");
|
||||
makeNewDictionaryString("N", "NOVEMBER");
|
||||
makeNewDictionaryString("O", "OSCAR");
|
||||
makeNewDictionaryString("P", "PAPA");
|
||||
makeNewDictionaryString("Q", "QUEBEC");
|
||||
makeNewDictionaryString("R", "ROMEO");
|
||||
makeNewDictionaryString("S", "SIERRA");
|
||||
makeNewDictionaryString("T", "TANGO");
|
||||
makeNewDictionaryString("U", "UNIFORM");
|
||||
makeNewDictionaryString("V", "VICTOR");
|
||||
makeNewDictionaryString("W", "WHISKEY");
|
||||
makeNewDictionaryString("X", "XRAY");
|
||||
makeNewDictionaryString("Y", "YANKEE");
|
||||
makeNewDictionaryString("Z", "ZULU");
|
||||
|
||||
var ATISInstances = [ATIS.new(), ATIS.new(), ATIS.new(), ATIS.new()];
|
|
@ -28,9 +28,9 @@ var FADEC = {
|
|||
eng1Time: props.globals.initNode("/systems/fadec/eng1-master-time", -300, "DOUBLE"),
|
||||
eng1Off: props.globals.initNode("/systems/fadec/eng1-off-power", 0, "BOOL"),
|
||||
eng1Counting: 0,
|
||||
epr: 0,
|
||||
epr: props.globals.initNode("/systems/fadec/eng1/epr", 0, "BOOL"),
|
||||
egt: 0,
|
||||
n1: 0,
|
||||
n1: props.globals.initNode("/systems/fadec/eng1/n1", 0, "BOOL"),
|
||||
n2: 0,
|
||||
ff: 0,
|
||||
},
|
||||
|
@ -38,9 +38,9 @@ var FADEC = {
|
|||
eng2Time: props.globals.initNode("/systems/fadec/eng2-master-time", -300, "DOUBLE"),
|
||||
eng2Off: props.globals.initNode("/systems/fadec/eng2-off-power", 0, "BOOL"),
|
||||
eng2Counting: 0,
|
||||
epr: 0,
|
||||
epr: props.globals.initNode("/systems/fadec/eng2/epr", 0, "BOOL"),
|
||||
egt: 0,
|
||||
n1: 0,
|
||||
n1: props.globals.initNode("/systems/fadec/eng2/n1", 0, "BOOL"),
|
||||
n2: 0,
|
||||
ff: 0,
|
||||
},
|
||||
|
@ -147,24 +147,24 @@ var FADEC = {
|
|||
powerup = me.Power.powerup.getValue();
|
||||
|
||||
if (powered1 or powerup or me.Eng1.eng1Off.getValue()) {
|
||||
me.Eng1.n1 = 1;
|
||||
me.Eng1.n1.setValue(1);
|
||||
me.Eng1.n2 = 1;
|
||||
me.Eng1.egt = 1;
|
||||
me.Eng1.ff = 1;
|
||||
} else {
|
||||
me.Eng1.n1 = 0;
|
||||
me.Eng1.n1.setValue(0);
|
||||
me.Eng1.n2 = 0;
|
||||
me.Eng1.egt = 0;
|
||||
me.Eng1.ff = 0;
|
||||
}
|
||||
|
||||
if (powered2 or powerup or me.Eng2.eng2Off.getValue()) {
|
||||
me.Eng2.n1 = 1;
|
||||
me.Eng2.n1.setValue(1);
|
||||
me.Eng2.n2 = 1;
|
||||
me.Eng2.egt = 1;
|
||||
me.Eng2.ff = 1;
|
||||
} else {
|
||||
me.Eng2.n1 = 0;
|
||||
me.Eng2.n1.setValue(0);
|
||||
me.Eng2.n2 = 0;
|
||||
me.Eng2.egt = 0;
|
||||
me.Eng2.ff = 0;
|
||||
|
|
|
@ -25,9 +25,9 @@ var FADEC = {
|
|||
eng1Time: props.globals.initNode("/systems/fadec/eng1-master-time", -300, "DOUBLE"),
|
||||
eng1Off: props.globals.initNode("/systems/fadec/eng1-off-power", 0, "BOOL"),
|
||||
eng1Counting: 0,
|
||||
epr: 0,
|
||||
epr: props.globals.initNode("/systems/fadec/eng1/epr", 0, "BOOL"),
|
||||
egt: 0,
|
||||
n1: 0,
|
||||
n1: props.globals.initNode("/systems/fadec/eng1/n1", 0, "BOOL"),
|
||||
n2: 0,
|
||||
ff: 0,
|
||||
},
|
||||
|
@ -35,9 +35,9 @@ var FADEC = {
|
|||
eng2Time: props.globals.initNode("/systems/fadec/eng2-master-time", -300, "DOUBLE"),
|
||||
eng2Off: props.globals.initNode("/systems/fadec/eng2-off-power", 0, "BOOL"),
|
||||
eng2Counting: 0,
|
||||
epr: 0,
|
||||
epr: props.globals.initNode("/systems/fadec/eng2/epr", 0, "BOOL"),
|
||||
egt: 0,
|
||||
n1: 0,
|
||||
n1: props.globals.initNode("/systems/fadec/eng2/n1", 0, "BOOL"),
|
||||
n2: 0,
|
||||
ff: 0,
|
||||
},
|
||||
|
@ -148,28 +148,28 @@ var FADEC = {
|
|||
|
||||
if (powered1 or powerup or me.Eng1.eng1Off.getValue()) {
|
||||
if (me.Modes.n1Mode1.getValue() == 0) {
|
||||
me.Eng1.epr = 1;
|
||||
me.Eng1.epr.setValue(1);
|
||||
} else {
|
||||
me.Eng1.epr = 0;
|
||||
me.Eng1.epr.setValue(0);
|
||||
}
|
||||
me.Eng1.egt = 1;
|
||||
me.Eng1.ff = 1;
|
||||
} else {
|
||||
me.Eng1.epr = 0;
|
||||
me.Eng1.epr.setValue(0);
|
||||
me.Eng1.egt = 0;
|
||||
me.Eng1.ff = 0;
|
||||
}
|
||||
|
||||
if (powered2 or powerup or me.Eng2.eng2Off.getValue()) {
|
||||
if (me.Modes.n1Mode2.getValue() == 0) {
|
||||
me.Eng2.epr = 1;
|
||||
me.Eng2.epr.setValue(1);
|
||||
} else {
|
||||
me.Eng2.epr = 0;
|
||||
me.Eng2.epr.setValue(0);
|
||||
}
|
||||
me.Eng2.egt = 1;
|
||||
me.Eng2.ff = 1;
|
||||
} else {
|
||||
me.Eng2.epr = 0;
|
||||
me.Eng2.epr.setValue(0);
|
||||
me.Eng2.egt = 0;
|
||||
me.Eng2.ff = 0;
|
||||
}
|
||||
|
@ -180,15 +180,15 @@ var FADEC = {
|
|||
N22 = pts.Engines.Engine.n2Actual[1].getValue();
|
||||
|
||||
if (powered1 and N11 >= 3.5) {
|
||||
me.Eng1.n1 = 1;
|
||||
me.Eng1.n1.setValue(1);
|
||||
} else {
|
||||
me.Eng1.n1 = 0;
|
||||
me.Eng1.n1.setValue(0);
|
||||
}
|
||||
|
||||
if (powered2 and N12 >= 3.5) {
|
||||
me.Eng2.n1 = 1;
|
||||
me.Eng2.n1.setValue(1);
|
||||
} else {
|
||||
me.Eng2.n1 = 0;
|
||||
me.Eng2.n1.setValue(0);
|
||||
}
|
||||
|
||||
if (powered1 and N21 >= 3.5) {
|
||||
|
|
98
Nasal/emesary/M_frame_notification.nas
Normal file
|
@ -0,0 +1,98 @@
|
|||
#---------------------------------------------------------------------------
|
||||
#
|
||||
# Title : Emesary based rt exec frame notifications
|
||||
#
|
||||
# File Type : Implementation File
|
||||
#
|
||||
# Description : Uses emesary notifications to permit nasal subsystems to be notified each frame.
|
||||
# : A frame is defined by the timer rate; which is usually the maximum rate as determined by the FPS.
|
||||
# : This is an alternative to the timer based or explicit function calling way of invoking
|
||||
# : aircraft systems.
|
||||
# : It has the advantage of using less timers and remaining modular, as each aircraft subsytem
|
||||
# : can simply register itself with the global transmitter to receive the frame notification.
|
||||
#
|
||||
# Author : Richard Harrison (richard@zaretto.com)
|
||||
#
|
||||
# Creation Date : 4 June 2018
|
||||
#
|
||||
# Version : 1.0
|
||||
#
|
||||
# Copyright (C) 2018 Richard Harrison Released under GPL V2
|
||||
#
|
||||
#---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
var FrameNotification =
|
||||
{
|
||||
debug: 0,
|
||||
new: func(_rate)
|
||||
{
|
||||
var new_class = emesary.Notification.new("FrameNotification", _rate);
|
||||
new_class.Rate = _rate;
|
||||
new_class.FrameRate = 60;
|
||||
new_class.FrameCount = 0;
|
||||
new_class.ElapsedSeconds = 0;
|
||||
new_class.monitored = {};
|
||||
new_class.properties = {};
|
||||
|
||||
#
|
||||
# embed a recipient within this notification to allow the monitored property
|
||||
# mapping list to be modified.
|
||||
new_class.Recipient = emesary.Recipient.new("FrameNotification");
|
||||
new_class.Recipient.Receive = func(notification)
|
||||
{
|
||||
if (notification.NotificationType == "FrameNotificationAddProperty")
|
||||
{
|
||||
var root_node = props.globals;
|
||||
if (notification.root_node != nil) {
|
||||
root_node = notification.root_node;
|
||||
}
|
||||
if (new_class.properties[notification.property] != nil
|
||||
and new_class.properties[notification.property] != notification.variable)
|
||||
print("[WARNING]: (",notification.module,") FrameNotification: already have variable ",new_class.properties[notification.property]," for ",notification.variable, " referencing property ",notification.property);
|
||||
|
||||
if (new_class.monitored[notification.variable] != nil
|
||||
and new_class.monitored[notification.variable].getPath() != notification.property
|
||||
and new_class.monitored[notification.variable].getPath() != "/"~notification.property)
|
||||
print("[WARNING]: (",notification.module,") FrameNotification: already have variable ",notification.variable,"=",new_class.monitored[notification.variable].getPath(), " using different property ",notification.property);
|
||||
# else if (new_class.monitored[notification.variable] == nil)
|
||||
# print("[INFO]: (",notification.module,") FrameNotification.",notification.variable, " = ",notification.property);
|
||||
|
||||
new_class.monitored[notification.variable] = root_node.getNode(notification.property,1);
|
||||
new_class.properties[notification.property] = notification.variable;
|
||||
|
||||
return emesary.Transmitter.ReceiptStatus_OK;
|
||||
}
|
||||
return emesary.Transmitter.ReceiptStatus_NotProcessed;
|
||||
};
|
||||
new_class.fetchvars = func() {
|
||||
foreach (var mp; keys(new_class.monitored)){
|
||||
if(new_class.monitored[mp] != nil){
|
||||
if (FrameNotification.debug > 1)
|
||||
print(" ",mp, " = ",new_class.monitored[mp].getValue());
|
||||
new_class[mp] = new_class.monitored[mp].getValue();
|
||||
}
|
||||
}
|
||||
};
|
||||
emesary.GlobalTransmitter.Register(new_class.Recipient);
|
||||
return new_class;
|
||||
},
|
||||
};
|
||||
|
||||
var FrameNotificationAddProperty =
|
||||
{
|
||||
new: func(module, variable, property, root_node=nil)
|
||||
{
|
||||
var new_class = emesary.Notification.new("FrameNotificationAddProperty", variable);
|
||||
if (root_node == nil)
|
||||
root_node = props.globals;
|
||||
new_class.module = module ;
|
||||
new_class.variable = variable;
|
||||
new_class.property = property;
|
||||
new_class.root_node = root_node;
|
||||
return new_class;
|
||||
},
|
||||
};
|
||||
#
|
||||
var frameNotification = FrameNotification.new(1);
|
||||
|
71
Nasal/emesary/exec.nas
Normal file
|
@ -0,0 +1,71 @@
|
|||
#---------------------------------------------------------------------------
|
||||
#
|
||||
# Title : Emesary based real time executive
|
||||
#
|
||||
# File Type : Implementation File
|
||||
#
|
||||
# Description : Uses emesary notifications to permit nasal subsystems to
|
||||
# : be invoked in a controlled manner.
|
||||
#
|
||||
# Author : Richard Harrison (richard@zaretto.com)
|
||||
#
|
||||
# Creation Date : 4 June 2018
|
||||
#
|
||||
# Version : 1.0
|
||||
#
|
||||
# Copyright (C) 2018 Richard Harrison Released under GPL V2
|
||||
#
|
||||
#---------------------------------------------------------------------------*/
|
||||
|
||||
#
|
||||
# real time exec loop.
|
||||
var frame_inc = 0;
|
||||
var cur_frame_inc = 0.05;
|
||||
var execLoop = func
|
||||
{
|
||||
#
|
||||
notifications.frameNotification.fetchvars();
|
||||
if (notifications.frameNotification.FrameCount >= 4) {
|
||||
notifications.frameNotification.FrameCount = 0;
|
||||
}
|
||||
emesary.GlobalTransmitter.NotifyAll(notifications.frameNotification);
|
||||
#
|
||||
|
||||
notifications.frameNotification.FrameCount = notifications.frameNotification.FrameCount + 1;
|
||||
|
||||
if (notifications.frameNotification.frame_rate < 5) {
|
||||
frame_inc = 0.25;#4 Hz
|
||||
} elsif (notifications.frameNotification.frame_rate < 10) {
|
||||
frame_inc = 0.125;#8 Hz
|
||||
} elsif (notifications.frameNotification.frame_rate < 15) {
|
||||
frame_inc = 0.10;#10 Hz
|
||||
} elsif (notifications.frameNotification.frame_rate < 20) {
|
||||
frame_inc = 0.075;#13.3 Hz
|
||||
} elsif (notifications.frameNotification.frame_rate < 25) {
|
||||
frame_inc = 0.05;#20 Hz
|
||||
} elsif (notifications.frameNotification.frame_rate < 40) {
|
||||
frame_inc = 0.0333;#30 Hz
|
||||
} else {
|
||||
frame_inc = 0.02;#50 Hz
|
||||
}
|
||||
|
||||
if (frame_inc != cur_frame_inc) {
|
||||
cur_frame_inc = frame_inc;
|
||||
}
|
||||
settimer(execLoop, cur_frame_inc);
|
||||
}
|
||||
|
||||
# setup the properties to monitor for this system
|
||||
input = {
|
||||
frame_rate : "/sim/frame-rate",
|
||||
elapsed_seconds : "/sim/time/elapsed-sec",
|
||||
};
|
||||
|
||||
foreach (var name; keys(input)) {
|
||||
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("EXEC", name, input[name]));
|
||||
}
|
||||
emesary.GlobalTransmitter.OverrunDetection(9);
|
||||
|
||||
setlistener("/sim/signals/fdm-initialized", func() {
|
||||
execLoop();
|
||||
}, 0, 0);
|
|
@ -466,7 +466,7 @@
|
|||
/gear/gear[1]/wow eq 1
|
||||
/systems/air-conditioning/landing-switch eq 1
|
||||
/velocities/airspeed-kt lt 70
|
||||
/ECAM/phases/to-power-set ne 1
|
||||
/ECAM/phases/phase-calculation/takeoff-power ne 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
|
@ -474,7 +474,7 @@
|
|||
<default value="/systems/air-conditioning/packs/pack-flow-1-norm"/>
|
||||
<test logic="AND" value="0">
|
||||
/gear/gear[1]/wow eq 1
|
||||
/ECAM/phases/to-power-set eq 1
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 1
|
||||
</test>
|
||||
<test logic="AND" value="0">
|
||||
/gear/gear[1]/wow eq 1
|
||||
|
@ -507,7 +507,7 @@
|
|||
<default value="/systems/air-conditioning/packs/pack-flow-2-norm"/>
|
||||
<test logic="AND" value="0">
|
||||
/gear/gear[1]/wow eq 1
|
||||
/ECAM/phases/to-power-set eq 1
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 1
|
||||
</test>
|
||||
<test logic="AND" value="0">
|
||||
/gear/gear[1]/wow eq 1
|
||||
|
|
|
@ -772,6 +772,7 @@
|
|||
<switch name="/systems/electrical/sources/idg-1/gcu-1-voltage-trip">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/acconfig/autoconfig-running ne 1
|
||||
/systems/electrical/sources/idg-1/gcu-1-voltage-trip eq 1
|
||||
/controls/electrical/switches/gen-1 eq 1
|
||||
</test>
|
||||
|
@ -787,6 +788,7 @@
|
|||
<switch name="/systems/electrical/sources/idg-1/gcu-1-frequency-trip">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/acconfig/autoconfig-running ne 1
|
||||
/systems/electrical/sources/idg-1/gcu-1-frequency-trip eq 1
|
||||
/controls/electrical/switches/gen-1 eq 1
|
||||
</test>
|
||||
|
@ -845,6 +847,7 @@
|
|||
<switch name="/systems/electrical/sources/idg-2/gcu-2-voltage-trip">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/acconfig/autoconfig-running ne 1
|
||||
/systems/electrical/sources/idg-2/gcu-2-voltage-trip eq 1
|
||||
/controls/electrical/switches/gen-2 eq 1
|
||||
</test>
|
||||
|
@ -860,6 +863,7 @@
|
|||
<switch name="/systems/electrical/sources/idg-2/gcu-2-frequency-trip">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/acconfig/autoconfig-running ne 1
|
||||
/systems/electrical/sources/idg-2/gcu-2-frequency-trip eq 1
|
||||
/controls/electrical/switches/gen-2 eq 1
|
||||
</test>
|
||||
|
@ -934,6 +938,7 @@
|
|||
<switch name="/systems/electrical/sources/apu/gcu-voltage-trip">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/acconfig/autoconfig-running ne 1
|
||||
/systems/electrical/sources/apu/gcu-voltage-trip eq 1
|
||||
/controls/electrical/switches/apu eq 1
|
||||
</test>
|
||||
|
@ -949,6 +954,7 @@
|
|||
<switch name="/systems/electrical/sources/apu/gcu-frequency-trip">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/acconfig/autoconfig-running ne 1
|
||||
/systems/electrical/sources/apu/gcu-frequency-trip eq 1
|
||||
/controls/electrical/switches/apu eq 1
|
||||
</test>
|
||||
|
@ -1079,7 +1085,7 @@
|
|||
|
||||
<actuator name="/systems/electrical/relay/ac-ess-feed-1/auto-switch-timer">
|
||||
<input>/systems/electrical/relay/ac-ess-feed-1/auto-switch</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.33333333333</rate_limit> <!-- 3 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -1600,13 +1606,6 @@
|
|||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/systems/electrical/relay/dc-ess-shed-switch/output">
|
||||
<default value="0"/>
|
||||
<test value="/systems/electrical/bus/dc-ess">
|
||||
/systems/electrical/relay/dc-ess-shed-switch/contact-pos eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<!-- DC Service Bus -->
|
||||
<switch name="/systems/electrical/relay/dc-svc-bus-contactor-tr/contact-pos"> <!-- TODO: via 1PX CB on 124VU -->
|
||||
<default value="0"/>
|
||||
|
@ -1806,7 +1805,7 @@
|
|||
|
||||
<pure_gain name="/systems/electrical/bus/dc-ess-shed">
|
||||
<input>/systems/electrical/bus/dc-ess</input>
|
||||
<gain>1</gain>
|
||||
<gain>/systems/electrical/relay/dc-ess-shed-switch/contact-pos</gain>
|
||||
</pure_gain>
|
||||
|
||||
<!-- Hot Buses -->
|
||||
|
@ -1880,7 +1879,7 @@
|
|||
|
||||
<actuator name="/systems/electrical/some-electric-thingie/static-inverter-timer">
|
||||
<input>/systems/electrical/relay/ac-ess-feed-inverter/contact-pos</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
|
|
@ -188,7 +188,7 @@
|
|||
<actuator name="/systems/fuel/pumps/center-control-low-level">
|
||||
<description>Timer for the Fuel Center pumps</description>
|
||||
<input>/systems/fuel/quantity/center-low</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.00333</rate_limit> <!-- 300 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -767,7 +767,9 @@
|
|||
/consumables/fuel/tank[3]/level-norm lt 0.9999
|
||||
</test>
|
||||
</switch>
|
||||
</channel>
|
||||
|
||||
<channel name="Final Flow Rates">
|
||||
<summer name="/systems/fuel/internal/left-outer-flow-rate">
|
||||
<input>/systems/fuel/internal/left-outer-wing-tank-refuel</input>
|
||||
<input>-/systems/fuel/internal/left-wing-outer-to-inner-tank</input>
|
||||
|
|
|
@ -9,9 +9,22 @@
|
|||
<actuator name="/ECAM/timer/ground-calc">
|
||||
<description>Timer for the ECAM phase system</description>
|
||||
<input>/ECAM/ground-calc-immediate</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/phase-calculation/engine-1-or-2-running">
|
||||
<input>/ECAM/phases/phase-calculation/one-engine-running</input>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
<rate_limit sense="incr">0.03333333333</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/monostable/phase-1-300-output">
|
||||
<input>/ECAM/phases/monostable/phase-1-300</input>
|
||||
<rate_limit sense="incr">0.00333333333</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
</channel>
|
||||
|
||||
<channel name="FWC Phase Logic and Switches" execrate="4">
|
||||
|
@ -80,6 +93,142 @@
|
|||
</test>
|
||||
</switch>
|
||||
|
||||
<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
|
||||
/ECAM/phases/monostable/phase-1-300 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/altitude-ge-1500">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/position/gear-agl-ft ge 1500
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/altitude-flipflop-set">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/phases/phase-calculation/altitude-ge-1500 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/altitude-flipflop-reset">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/position/gear-agl-ft lt 800
|
||||
</test>
|
||||
</switch>
|
||||
</channel>
|
||||
|
||||
<channel name="Phase Calcs" execrate="4">
|
||||
|
||||
<switch name="/ECAM/phases/timer/eng1idle">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/engines/engine[0]/n2 ge 59.4
|
||||
/controls/engines/engine[0]/cutoff-switch eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/timer/eng2idle">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/engines/engine[1]/n2 ge 59.4
|
||||
/controls/engines/engine[1]/cutoff-switch eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/engine-1-off">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
<test logic="OR">
|
||||
/ECAM/phases/timer/eng1idle-output eq 0
|
||||
/controls/engines/engine[0]/cutoff-switch eq 1
|
||||
</test>
|
||||
<test logic="OR">
|
||||
/ECAM/timer/ground-calc eq 1
|
||||
/ECAM/phases/timer/eng1idle eq 0
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/engine-2-off">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
<test logic="OR">
|
||||
/ECAM/phases/timer/eng2idle-output eq 0
|
||||
/controls/engines/engine[1]/cutoff-switch eq 1
|
||||
</test>
|
||||
<test logic="OR">
|
||||
/ECAM/timer/ground-calc eq 1
|
||||
/ECAM/phases/timer/eng2idle eq 0
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/engines-1-2-not-running">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/phases/phase-calculation/engine-1-off eq 1
|
||||
/ECAM/phases/phase-calculation/engine-2-off eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/one-engine-running">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/engines/engine[0]/state eq 3
|
||||
/engines/engine[1]/state eq 3
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/takeoff-power-logic">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
<test logic="OR">
|
||||
<test logic="AND">
|
||||
/controls/engines/engine[0]/throttle ge 0.779
|
||||
/systems/thrust/lim-flex eq 1
|
||||
</test>
|
||||
<test logic="AND">
|
||||
/controls/engines/engine[0]/throttle ge 0.99
|
||||
/systems/thrust/lim-flex eq 0
|
||||
</test>
|
||||
</test>
|
||||
<test logic="OR">
|
||||
<test logic="AND">
|
||||
/controls/engines/engine[1]/throttle ge 0.779
|
||||
/systems/thrust/lim-flex eq 1
|
||||
</test>
|
||||
<test logic="AND">
|
||||
/controls/engines/engine[1]/throttle ge 0.99
|
||||
/systems/thrust/lim-flex eq 0
|
||||
</test>
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<actuator name="/ECAM/phases/phase-calculation/takeoff-power-timer">
|
||||
<input>/ECAM/phases/phase-calculation/takeoff-power-logic</input>
|
||||
<rate_limit sense="incr">120</rate_limit>
|
||||
<rate_limit sense="decr">0.01666666666</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/takeoff-power">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/phases/phase-calculation/takeoff-power-logic eq 1
|
||||
<test logic="AND">
|
||||
/ECAM/phases/phase-calculation/takeoff-power-timer ne 0
|
||||
/ECAM/phases/phase-calculation/altitude-ge-1500 eq 0
|
||||
/controls/engines/engine[0]/throttle ge 0.599
|
||||
/controls/engines/engine[1]/throttle ge 0.599
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
</channel>
|
||||
|
||||
</system>
|
||||
|
|
|
@ -9,259 +9,252 @@
|
|||
<actuator name="/ECAM/phases/timer/eng1idle-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/phases/timer/eng1idle</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.033</rate_limit> <!-- 30 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/timer/eng2idle-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/phases/timer/eng2idle</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.033</rate_limit> <!-- 30 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/timer/eng1or2-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/phases/timer/eng1or2</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.033</rate_limit> <!-- 30 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/timer/to-inhibit-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/phases/timer/to-inhibit</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.33</rate_limit> <!-- 3 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/timer/ldg-inhibit-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/phases/timer/ldg-inhibit</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.33</rate_limit> <!-- 3 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/bleed-1-fault-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/timer/bleed-1-fault</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/bleed-2-fault-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/timer/bleed-2-fault</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/apu-fault-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/apu-bleed-fault</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/xbleed-fault-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/systems/pneumatics/warnings/crossbleed-disag</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/prv-1-not-shut-apu-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/prv-1-not-shut-apu</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/prv-2-not-shut-apu-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/prv-2-not-shut-apu</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/prv-1-not-shut-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/prv-1-not-shut</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/prv-2-not-shut-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/prv-2-not-shut</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/bleed-1-and-2-low-temp-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/timer/bleed-1-and-2-low-temp</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.00185185</rate_limit> <!-- 540 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/bleed-1-low-temp-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/systems/pneumatics/warnings/lowtemp-1-mem</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.016666</rate_limit> <!-- 60 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/bleed-2-low-temp-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/systems/pneumatics/warnings/lowtemp-2-mem</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.016666</rate_limit> <!-- 60 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/bleed-1-off-60-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/bleed-1-off-60</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.016666</rate_limit> <!-- 60 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/bleed-2-off-60-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/bleed-2-off-60</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.016666</rate_limit> <!-- 60 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/bleed-1-off-5-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/bleed-1-off-5</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/bleed-2-off-5-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/bleed-2-off-5</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/eng-aice-1-open-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/eng-aice-1-open</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/eng-aice-2-open-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/eng-aice-2-open</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/eng-aice-1-closed-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/eng-aice-1-closed</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/eng-aice-2-closed-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/eng-aice-2-closed</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/wing-anti-ice-flipflop-set">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/wing-anti-ice-flipflop-set-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.0285714</rate_limit> <!-- 35 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/phase-1">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/timer/phase-1-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.5</rate_limit> <!-- 2 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/wing-anti-ice-25">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/controls/ice-protection/wing</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.04</rate_limit> <!-- 25 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/wing-anti-ice-left-closed-set">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/wing-anti-ice-left-closed-set-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.066666</rate_limit> <!-- 15 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/wing-anti-ice-right-closed-set">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/wing-anti-ice-right-closed-set-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.066666</rate_limit> <!-- 15 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/proc-wai-shutdown-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/proc-wai-shutdown-flipflop</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/wing-hi-pr-left">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/wing-hi-pr-left-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.025</rate_limit> <!-- 40 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/wing-hi-pr-right">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/wing-hi-pr-right-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.025</rate_limit> <!-- 40 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/cranking-35-sec">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/cranking-35-sec-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.028571</rate_limit> <!-- 35 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/pack-1-fault-closed">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/pack-1-fault-closed-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/pack-2-fault-closed">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/pack-2-fault-closed-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/pack-1-disagree">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/pack-1-disagree-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/pack-2-disagree">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/pack-2-disagree-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -275,98 +268,98 @@
|
|||
<actuator name="/ECAM/warnings/timer/pack-1-fault-5">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/pack-1-fault-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.20</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/pack-2-fault-5">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/pack-2-fault-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.20</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/pack-1-fault-2">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/pack-1-fault-warning-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.50</rate_limit> <!-- 2 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/pack-2-fault-2">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/pack-2-fault-warning-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.50</rate_limit> <!-- 2 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/pack-1-off">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/pack-1-off-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.0166666</rate_limit> <!-- 60 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/pack-2-off">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/pack-2-off-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.0166666</rate_limit> <!-- 60 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/trim-air-fault">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/trim-air-fault-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/yaw-damper-1-fault">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/yaw-damper-1-fault</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/yaw-damper-2-fault">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/yaw-damper-2-fault</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/nav-gpws-terr-fault">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/nav-gpws-terr-fault</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1.0</rate_limit> <!-- 1 second -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/gen-1-fault-set">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/gen-1-fault-set</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1818</rate_limit> <!-- 5.5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/gen-2-fault-set">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/gen-2-fault-set</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.1818</rate_limit> <!-- 5.5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/apu-gen-fault-set">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/apu-gen-fault-set</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/timer/apu-gen-fault-reset">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/warnings/logic/apu-gen-fault-reset</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.5</rate_limit> <!-- 2 seconds -->
|
||||
</actuator>
|
||||
</channel>
|
||||
|
@ -1343,7 +1336,8 @@
|
|||
/systems/navigation/adr/operating-1 eq 1
|
||||
/systems/navigation/adr/operating-3 eq 1
|
||||
/systems/electrical/bus/dc-ess-shed ge 25
|
||||
/systems/electrical/bus/ac-1 ge 110
|
||||
/systems/electrical/bus/dc-ess ge 25
|
||||
/systems/electrical/bus/ac-ess ge 110
|
||||
/systems/fctl/fac1-healthy-signal eq 0
|
||||
/systems/fctl/fac2-healthy-signal eq 1
|
||||
</test>
|
||||
|
@ -1370,14 +1364,6 @@
|
|||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/logic/yaw-damper-1-fault-green">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/hydraulic/green-psi lt 1500
|
||||
/ECAM/warning-phase ne 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/logic/yaw-damper-1-fault-adr">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
|
@ -1398,7 +1384,7 @@
|
|||
/systems/electrical/bus/dc-ess-shed ge 25
|
||||
/systems/electrical/bus/ac-1 ge 110
|
||||
/ECAM/warnings/logic/yaw-damper-1-fault-eng-start eq 0
|
||||
/ECAM/warnings/logic/yaw-damper-1-fault-green eq 0
|
||||
/systems/hydraulic/green-psi ge 1500
|
||||
/ECAM/warnings/logic/yaw-damper-1-fault-adr eq 0
|
||||
/ECAM/irs-in-align eq 0
|
||||
/systems/fctl/yawdamper-1-active eq 0
|
||||
|
@ -1415,14 +1401,6 @@
|
|||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/logic/yaw-damper-2-fault-yellow">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/hydraulic/yellow-psi lt 1500
|
||||
/ECAM/warning-phase ne 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/logic/yaw-damper-2-fault-adr">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
|
@ -1443,7 +1421,7 @@
|
|||
/systems/electrical/bus/dc-2 ge 25
|
||||
/systems/electrical/bus/ac-2 ge 110
|
||||
/ECAM/warnings/logic/yaw-damper-2-fault-eng-start eq 0
|
||||
/ECAM/warnings/logic/yaw-damper-2-fault-yellow eq 0
|
||||
/systems/hydraulic/yellow-psi ge 1500
|
||||
/ECAM/warnings/logic/yaw-damper-2-fault-adr eq 0
|
||||
/ECAM/irs-in-align eq 0
|
||||
/systems/fctl/yawdamper-2-active eq 0
|
||||
|
@ -1451,23 +1429,43 @@
|
|||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/logic/yaw-damper-12-fault">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/irs-in-align eq 0
|
||||
<test logic="OR">
|
||||
<switch name="/ECAM/warnings/logic/adr-off-input">
|
||||
<default value="1"/>
|
||||
<test logic="OR" value="0">
|
||||
/systems/navigation/adr/operating-1 eq 1
|
||||
/systems/navigation/adr/operating-2 eq 1
|
||||
/systems/navigation/adr/operating-3 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/adr-off">
|
||||
<input>/ECAM/warnings/logic/adr-off-input</input>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
<rate_limit sense="incr">0.5</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<switch name="/ECAM/warnings/logic/green-yellow-press-on-monostable-input">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/hydraulics/warnings/green-lo-pr eq 0
|
||||
/systems/hydraulics/warnings/yellow-lo-pr eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/logic/yaw-damper-12-fault">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/irs-in-align eq 0
|
||||
/ECAM/warnings/logic/adr-off ne 1
|
||||
<test logic="OR">
|
||||
/systems/electrical/bus/dc-ess-shed ge 25
|
||||
/systems/electrical/bus/ac-1 ge 110
|
||||
/systems/electrical/bus/dc-2 ge 25
|
||||
/systems/electrical/bus/ac-2 ge 110
|
||||
</test>
|
||||
/ECAM/warnings/logic/yaw-damper-1-fault-green eq 0
|
||||
/ECAM/warnings/logic/yaw-damper-2-fault-yellow eq 0
|
||||
/ECAM/warnings/logic/green-yellow-press-on-monostable eq 0
|
||||
/systems/hydraulic/green-psi ge 1500
|
||||
/systems/hydraulic/yellow-psi ge 1500
|
||||
/ECAM/warnings/logic/yaw-damper-1-fault eq 1
|
||||
/ECAM/warnings/logic/yaw-damper-2-fault eq 1
|
||||
</test>
|
||||
|
@ -1515,7 +1513,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/logic/glc-1-online-2-sec">
|
||||
<input>/systems/electrical/relay/gen-1-glc/contact-pos</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.5</rate_limit> <!-- 2 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -1576,7 +1574,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/logic/glc-2-online-2-sec">
|
||||
<input>/systems/electrical/relay/gen-2-glc/contact-pos</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.5</rate_limit> <!-- 2 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -1773,7 +1771,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/logic/eng/ground-spoilers-output">
|
||||
<input>/ECAM/warnings/logic/eng/ground-spoilers</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">2</rate_limit> <!-- 0.5 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -1799,19 +1797,19 @@
|
|||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/controls/engines/engine[0]/throttle-lever ge 0.13333333333
|
||||
/ECAM/phases/to-power-set eq 0
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/eng/eng-1-tla-abv-6-output">
|
||||
<input>/ECAM/warnings/logic/eng/eng-1-tla-abv-6</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/eng/eng-1-tla-abv-6-2-output">
|
||||
<input>/ECAM/warnings/logic/eng/eng-1-tla-abv-6-2</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -1824,7 +1822,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/logic/eng/eng-1-tla-idle-output">
|
||||
<input>/ECAM/warnings/logic/eng/eng-1-tla-idle</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -1837,7 +1835,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/logic/eng/eng-1-reverse-output">
|
||||
<input>/ECAM/warnings/logic/eng/eng-1-reverse</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -1852,19 +1850,19 @@
|
|||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/controls/engines/engine[1]/throttle-lever ge 0.13333333333
|
||||
/ECAM/phases/to-power-set eq 0
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/eng/eng-2-tla-abv-6-output">
|
||||
<input>/ECAM/warnings/logic/eng/eng-2-tla-abv-6</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/warnings/logic/eng/eng-2-tla-abv-6-2-output">
|
||||
<input>/ECAM/warnings/logic/eng/eng-2-tla-abv-6-2</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -1877,7 +1875,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/logic/eng/eng-2-tla-idle-output">
|
||||
<input>/ECAM/warnings/logic/eng/eng-2-tla-idle</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -1890,7 +1888,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/logic/eng/eng-2-reverse-output">
|
||||
<input>/ECAM/warnings/logic/eng/eng-2-reverse</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -2046,7 +2044,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/fctl/lrElevFault-output">
|
||||
<input>/ECAM/warnings/fctl/lrElevFault</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">3.33333333333</rate_limit> <!-- 0.3 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -2057,7 +2055,7 @@
|
|||
/instrumentation/radar-altimeter[0]/radar-altitude-ft lt 750
|
||||
/instrumentation/radar-altimeter[1]/radar-altitude-ft lt 750
|
||||
</test>
|
||||
/ECAM/phases/to-power-set eq 0
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 0
|
||||
<test logic="OR">
|
||||
fcs/slat-pos-deg gt 16
|
||||
fcs/flap-pos-deg gt 18
|
||||
|
@ -2093,7 +2091,7 @@
|
|||
/instrumentation/radar-altimeter[0]/radar-altitude-ft lt 750
|
||||
/instrumentation/radar-altimeter[1]/radar-altitude-ft lt 750
|
||||
</test>
|
||||
/ECAM/phases/to-power-set eq 0
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 0
|
||||
<test logic="OR">
|
||||
/gear/gear[0]/position-norm ne 1
|
||||
/gear/gear[1]/position-norm ne 1
|
||||
|
@ -2147,7 +2145,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/fctl/gear-not-down-locked-set-output">
|
||||
<input>/ECAM/warnings/fctl/gear-not-down-locked-set-input</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.03333333333</rate_limit> <!-- 30 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -2180,7 +2178,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/hyd/engines-2-online-output">
|
||||
<input>/ECAM/warnings/hyd/engines-2-online</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit>
|
||||
</actuator>
|
||||
|
||||
|
@ -2195,7 +2193,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/hyd/engines-2-off-in-air-output">
|
||||
<input>/ECAM/warnings/hyd/engines-2-off-in-air</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -2214,7 +2212,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/hyd/engine-1-start-output">
|
||||
<input>/ECAM/warnings/hyd/engine-1-start</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit>
|
||||
</actuator>
|
||||
|
||||
|
@ -2233,7 +2231,7 @@
|
|||
|
||||
<actuator name="/ECAM/warnings/hyd/engine-2-start-output">
|
||||
<input>/ECAM/warnings/hyd/engine-2-start</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit>
|
||||
</actuator>
|
||||
|
||||
|
@ -2373,4 +2371,188 @@
|
|||
|
||||
</channel>
|
||||
|
||||
<channel name="Altitude Alerter" execrate="8">
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/altInhibit">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/it-autoflight/input/alt-is-changing eq 1
|
||||
<test logic="OR">
|
||||
<test logic="AND">
|
||||
/gear/gear[1]/position-norm ge 0.99
|
||||
/gear/gear[2]/position-norm ge 0.99
|
||||
</test>
|
||||
<test logic="AND">
|
||||
/controls/gear/gear-down eq 1
|
||||
/fdm/jsbsim/fcs/slat-pos-deg ge 4
|
||||
</test>
|
||||
</test>
|
||||
/it-autoflight/output/lat eq 4
|
||||
/it-autoflight/output/vert eq 2
|
||||
/it-autoflight/output/vert eq 6
|
||||
<!-- /it-autoflight/output/vert eq 7 check -->
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<fcs_function name="/ECAM/warnings/altitude-alert/altitude-difference">
|
||||
<function>
|
||||
<ifthen>
|
||||
<not><property>/instrumentation/altimeter[0]/std</property></not>
|
||||
<abs>
|
||||
<difference>
|
||||
<property>/systems/navigation/adr/output/baro-alt-corrected-1-capt</property>
|
||||
<property>/it-autoflight/input/alt</property>
|
||||
</difference>
|
||||
</abs>
|
||||
<abs>
|
||||
<difference>
|
||||
<property>/systems/navigation/adr/output/baro-alt-1-capt</property>
|
||||
<property>/it-autoflight/input/alt</property>
|
||||
</difference>
|
||||
</abs>
|
||||
</ifthen>
|
||||
</function>
|
||||
</fcs_function>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/alt200">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warnings/altitude-alert/altitude-difference le 200
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/alt750">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warnings/altitude-alert/altitude-difference le 750
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/big-3-1-off">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/altInhibit eq 0
|
||||
/ECAM/warnings/altitude-alert/alt200 eq 1
|
||||
/ECAM/warnings/altitude-alert/alt750 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/big-3-2-off">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/altInhibit eq 0
|
||||
/ECAM/warnings/altitude-alert/alt200 eq 0
|
||||
/ECAM/warnings/altitude-alert/alt750 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/big-3-all-off">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/altInhibit eq 0
|
||||
/ECAM/warnings/altitude-alert/alt200 eq 0
|
||||
/ECAM/warnings/altitude-alert/alt750 eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-1-set">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warnings/altitude-alert/big-3-1-off eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-1-reset">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warnings/altitude-alert/big-3-all-off eq 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-2-reset eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-2-set">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/big-3-2-off eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-2-reset">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
<test logic="AND">
|
||||
/ECAM/warnings/altitude-alert/gear-downlocked-set eq 1
|
||||
/ECAM/warnings/altitude-alert/gear-downlocked-output eq 1
|
||||
</test>
|
||||
/ECAM/warnings/altitude-alert/alt-is-changing eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-or-1">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/big-3-2-off eq 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-1 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-or-2">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/big-3-all-off eq 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-2 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-or">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warnings/altitude-alert/flipflop-or-1 eq 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-or-2 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/monostable-autopilot">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/it-autoflight/output/ap1 eq 0
|
||||
/it-autoflight/output/ap2 eq 0
|
||||
/ECAM/warnings/altitude-alert/big-3-2-off eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/c-chord">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/timer/ground-calc ne 1
|
||||
<test logic="OR">
|
||||
<test logic="AND">
|
||||
/ECAM/warnings/altitude-alert/monostable-autopilot eq 1
|
||||
/ECAM/warnings/altitude-alert/monostable-autopilot-output eq 1
|
||||
</test>
|
||||
/ECAM/warnings/altitude-alert/flipflop-or eq 1
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/altitude-alert-steady">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/timer/ground-calc ne 1
|
||||
/ECAM/warnings/altitude-alert/big-3-2-off eq 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-or-1 eq 0
|
||||
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/altitude-alert-flash">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/timer/ground-calc ne 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-or eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
</channel>
|
||||
|
||||
</system>
|
||||
|
|
|
@ -477,7 +477,7 @@
|
|||
<actuator name="/systems/hydraulic/sources/ptu/ptu-loop-sound">
|
||||
<input>/systems/hydraulic/sources/ptu/ptu-loop-sound-cmd</input>
|
||||
<rate_limit sense="incr">1</rate_limit>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- instant -->
|
||||
</actuator>
|
||||
|
||||
<switch name="/systems/hydraulic/sources/ptu/yellow-green">
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<!-- Copyright (c) 2020 Jonathan Redpath -->
|
||||
|
||||
<system name="A320: APU">
|
||||
<system name="A320: MISC">
|
||||
|
||||
<channel name="CVR" execrate="8">
|
||||
|
||||
|
@ -29,4 +29,14 @@
|
|||
|
||||
</channel>
|
||||
|
||||
<channel name="IESI" execrate="8">
|
||||
|
||||
<actuator name="/instrumentation/iesi/att-reset">
|
||||
<input>/instrumentation/iesi/att-reset-cmd</input>
|
||||
<rate_limit sense="incr">0.5</rate_limit>
|
||||
<rate_limit sense="decr">100</rate_limit>
|
||||
</actuator>
|
||||
|
||||
</channel>
|
||||
|
||||
</system>
|
||||
|
|
|
@ -214,7 +214,7 @@
|
|||
|
||||
<actuator name="/systems/pneumatics/valves/engine-1-prv-valve-autoclose-psi">
|
||||
<input>/systems/pneumatics/valves/engine-1-prv-valve-autoclose-psi-cmd</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.0666</rate_limit> <!-- 15 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -294,7 +294,7 @@
|
|||
|
||||
<actuator name="/systems/pneumatics/valves/engine-2-prv-valve-autoclose-psi">
|
||||
<input>/systems/pneumatics/valves/engine-2-prv-valve-autoclose-psi-cmd</input>
|
||||
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.0666</rate_limit> <!-- 15 seconds -->
|
||||
</actuator>
|
||||
|
||||
|
@ -438,7 +438,7 @@
|
|||
<actuator name="/systems/pneumatics/valves/wing-ice-gnd">
|
||||
<input>/systems/pneumatics/valves/wing-ice-gnd-cmd</input>
|
||||
<rate_limit sense="incr">0.033333</rate_limit> <!-- 30 seconds -->
|
||||
<rate_limit sense="decr">100</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<switch name="/systems/pneumatics/valves/wing-ice-1-cmd">
|
||||
|
@ -981,19 +981,19 @@
|
|||
<actuator name="/systems/pneumatics/precooler/calc/ovht-5">
|
||||
<input>/systems/pneumatics/precooler/calc/ovht-5-true</input>
|
||||
<rate_limit sense="incr">0.2</rate_limit>
|
||||
<rate_limit sense="decr">100</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<actuator name="/systems/pneumatics/precooler/calc/ovht-15">
|
||||
<input>/systems/pneumatics/precooler/calc/ovht-15-true</input>
|
||||
<rate_limit sense="incr">0.06666</rate_limit>
|
||||
<rate_limit sense="decr">100</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<actuator name="/systems/pneumatics/precooler/calc/ovht-55">
|
||||
<input>/systems/pneumatics/precooler/calc/ovht-55-true</input>
|
||||
<rate_limit sense="incr">0.018182</rate_limit>
|
||||
<rate_limit sense="decr">100</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<switch name="/systems/pneumatics/precooler/ovht-1">
|
||||
|
@ -1094,19 +1094,19 @@
|
|||
<actuator name="/systems/pneumatics/precooler/calc/ovht-5-2">
|
||||
<input>/systems/pneumatics/precooler/calc/ovht-5-true-2</input>
|
||||
<rate_limit sense="incr">0.2</rate_limit>
|
||||
<rate_limit sense="decr">100</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<actuator name="/systems/pneumatics/precooler/calc/ovht-15-2">
|
||||
<input>/systems/pneumatics/precooler/calc/ovht-15-true-2</input>
|
||||
<rate_limit sense="incr">0.06666</rate_limit>
|
||||
<rate_limit sense="decr">100</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<actuator name="/systems/pneumatics/precooler/calc/ovht-55-2">
|
||||
<input>/systems/pneumatics/precooler/calc/ovht-55-true-2</input>
|
||||
<rate_limit sense="incr">0.018182</rate_limit>
|
||||
<rate_limit sense="decr">100</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<switch name="/systems/pneumatics/precooler/ovht-2">
|
||||
|
@ -1180,7 +1180,7 @@
|
|||
<actuator name="/systems/pneumatics/warnings/apu-bleed-not-on">
|
||||
<input>/systems/pneumatics/warnings/apu-bleed-not-on-cmd</input>
|
||||
<rate_limit sense="incr">0.1</rate_limit>
|
||||
<rate_limit sense="decr">100</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<switch name="/systems/pneumatics/warnings/crossbleed-disag-open">
|
||||
|
|
|
@ -203,16 +203,15 @@
|
|||
<output>ECAM/phases/monostable/gnd-output</output>
|
||||
</flipflop>
|
||||
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<time>
|
||||
<value>300.0</value>
|
||||
<value>2.5</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>ECAM/phases/monostable/phase-1-300</property>
|
||||
<property>/ECAM/ground-calc-immediate</property>
|
||||
</S>
|
||||
<output>ECAM/phases/monostable/phase-1-output</output>
|
||||
<output>ECAM/phases/monostable/gnd-output-2</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
|
@ -251,44 +250,6 @@
|
|||
<output>ECAM/buttons/recall-status-normal-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>SR</type>
|
||||
<S>
|
||||
<property>ECAM/altitude-alert-monostable-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>ECAM/altitude-alert-monostable-intermediate-output</property>
|
||||
</R>
|
||||
<output>ECAM/altitude-alert-monostable-flipflop-intermediate</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<inverted type="bool">true</inverted>
|
||||
<time>
|
||||
<value>1.5</value>
|
||||
</time>
|
||||
<S>
|
||||
<not><property>ECAM/altitude-alert-monostable-flipflop-intermediate</property></not>
|
||||
</S>
|
||||
<output>ECAM/altitude-alert-monostable-intermediate-output</output>
|
||||
</flipflop>
|
||||
|
||||
<filter>
|
||||
<type>gain</type>
|
||||
<gain>1.0</gain>
|
||||
<input>
|
||||
<condition>
|
||||
<and>
|
||||
<property>ECAM/altitude-alert-monostable-flipflop-intermediate</property>
|
||||
<not><property>ECAM/altitude-alert-monostable-intermediate-output</property></not>
|
||||
</and>
|
||||
</condition>
|
||||
<value>1</value>
|
||||
</input>
|
||||
<output>ECAM/altitude-alert-monostable-output</output>
|
||||
</filter>
|
||||
|
||||
<filter>
|
||||
<type>derivative</type>
|
||||
<input>it-autoflight/input/alt</input>
|
||||
|
@ -304,10 +265,12 @@
|
|||
<S>
|
||||
<property>it-autoflight/input/alt-is-changing</property>
|
||||
</S>
|
||||
<output>ECAM/alt-is-changing</output>
|
||||
<output>ECAM/warnings/altitude-alert/alt-is-changing</output>
|
||||
</flipflop>
|
||||
|
||||
<filter>
|
||||
<type>gain</type>
|
||||
<gain>1</gain>
|
||||
<input>
|
||||
<condition>
|
||||
<equals>
|
||||
|
@ -326,7 +289,7 @@
|
|||
</condition>
|
||||
<value>0</value>
|
||||
</input>
|
||||
<output>ECAM/gear-downlocked-set</output>
|
||||
<output>ECAM/warnings/altitude-alert/gear-downlocked-set</output>
|
||||
</filter>
|
||||
|
||||
<flipflop>
|
||||
|
@ -335,67 +298,9 @@
|
|||
<value>1</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>ECAM/gear-downlocked-set</property>
|
||||
<not><property>ECAM/warnings/altitude-alert/gear-downlocked-set</property></not>
|
||||
</S>
|
||||
<output>ECAM/gear-downlocked-output</output>
|
||||
</flipflop>
|
||||
|
||||
|
||||
<filter>
|
||||
<type>gain</type>
|
||||
<gain>1.0</gain>
|
||||
<input>
|
||||
<condition>
|
||||
<or>
|
||||
<equals><property>ECAM/gear-downlocked-output</property><value>1</value></equals>
|
||||
<equals><property>ECAM/alt-is-changing</property><value>1</value></equals>
|
||||
</or>
|
||||
</condition>
|
||||
<value>1</value>
|
||||
</input>
|
||||
<input>
|
||||
<condition>
|
||||
<and>
|
||||
<equals><property>ECAM/gear-downlocked-output</property><value>0</value></equals>
|
||||
<equals><property>ECAM/alt-is-changing</property><value>0</value></equals>
|
||||
</and>
|
||||
</condition>
|
||||
<value>0</value>
|
||||
</input>
|
||||
<output>ECAM/flipflop/alt-alert-rs-reset</output>
|
||||
</filter>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>ECAM/flipflop/altitude-alert-rs-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>ECAM/flipflop/alt-alert-rs-reset</property>
|
||||
</R>
|
||||
<output>ECAM/flipflop/alt-alert-rs-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>ECAM/flipflop/alt-alert-2-rs-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>ECAM/flipflop/alt-alert-2-rs-reset</property>
|
||||
</R>
|
||||
<output>ECAM/flipflop/alt-alert-2-rs-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>ECAM/flipflop/alt-alert-3-rs-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>ECAM/flipflop/alt-alert-rs-reset</property>
|
||||
</R>
|
||||
<output>ECAM/flipflop/alt-alert-3-rs-output</output>
|
||||
<output>ECAM/warnings/altitude-alert/gear-downlocked-output</output>
|
||||
</flipflop>
|
||||
|
||||
<!-- falling edge detector - take inverse of following -->
|
||||
|
@ -478,7 +383,7 @@
|
|||
<value>1.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>ECAM/phases/to-power-set</property>
|
||||
<property>ECAM/phases/phase-calculation/takeoff-power</property>
|
||||
</S>
|
||||
<output>ECAM/phases/monostable/to-power-set-output</output>
|
||||
</flipflop>
|
||||
|
@ -1070,4 +975,58 @@
|
|||
<output>/ECAM/warnings/fctl/gear-not-down-locked</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<time>
|
||||
<value>40</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>/ECAM/warnings/logic/green-yellow-press-on-monostable-input</property>
|
||||
</S>
|
||||
<output>/ECAM/warnings/logic/green-yellow-press-on-monostable</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/altitude-alert/flipflop-1-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/altitude-alert/flipflop-1-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/altitude-alert/flipflop-1</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/altitude-alert/flipflop-2-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/altitude-alert/flipflop-2-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/altitude-alert/flipflop-2</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<time>
|
||||
<value>1.5</value>
|
||||
</time>
|
||||
<S>
|
||||
<not><property>/ECAM/warnings/altitude-alert/monostable-autopilot</property></not>
|
||||
</S>
|
||||
<output>/ECAM/warnings/altitude-alert/monostable-autopilot-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>/ECAM/phases/phase-calculation/altitude-flipflop-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/phases/phase-calculation/altitude-flipflop-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/phases/phase-calculation/altitude-ge-800</output>
|
||||
</flipflop>
|
||||
</PropertyList>
|
||||
|
|
|
@ -309,6 +309,33 @@
|
|||
<filter-time>0.32</filter-time>
|
||||
</filter>
|
||||
|
||||
<filter>
|
||||
<name>Pitch PFD</name>
|
||||
<type>gain</type>
|
||||
<gain>1</gain>
|
||||
<input>
|
||||
<expression>
|
||||
<table>
|
||||
<property>/orientation/pitch-deg</property>
|
||||
<entry><ind>-90.0</ind><dep>-57.50</dep></entry>
|
||||
<entry><ind>-80.0</ind><dep>-47.50</dep></entry>
|
||||
<entry><ind>-50.0</ind><dep>-32.50</dep></entry>
|
||||
<entry><ind>-30.0</ind><dep>-22.50</dep></entry>
|
||||
<entry><ind>-20.0</ind><dep>-17.50</dep></entry>
|
||||
<entry><ind>-15.0</ind><dep>-13.75</dep></entry>
|
||||
<entry><ind>-10.0</ind><dep>-10.00</dep></entry>
|
||||
<entry><ind> 0.0</ind><dep> 0.00</dep></entry>
|
||||
<entry><ind> 27.5</ind><dep> 27.50</dep></entry>
|
||||
<entry><ind> 30.0</ind><dep> 28.75</dep></entry>
|
||||
<entry><ind> 50.0</ind><dep> 38.75</dep></entry>
|
||||
<entry><ind> 80.0</ind><dep> 53.75</dep></entry>
|
||||
<entry><ind> 90.0</ind><dep> 63.75</dep></entry>
|
||||
</table>
|
||||
</expression>
|
||||
</input>
|
||||
<output>/instrumentation/pfd/pitch-deg-non-linear</output>
|
||||
</filter>
|
||||
|
||||
<filter>
|
||||
<name>Ground Horizon</name>
|
||||
<type>gain</type>
|
||||
|
@ -465,4 +492,44 @@
|
|||
<filter-time>0.16</filter-time>
|
||||
</filter>
|
||||
|
||||
<filter>
|
||||
<name>IESI Slip/Skid Indicator</name>
|
||||
<debug>false</debug>
|
||||
<type>gain</type>
|
||||
<gain>1</gain>
|
||||
<input>
|
||||
<expression>
|
||||
<table>
|
||||
<property>/fdm/jsbsim/accelerations/Ny</property>
|
||||
<entry><ind>-0.20</ind><dep>-105</dep></entry>
|
||||
<entry><ind>-0.01</ind><dep> 0</dep></entry>
|
||||
<entry><ind> 0.00</ind><dep> 0</dep></entry>
|
||||
<entry><ind> 0.01</ind><dep> 0</dep></entry>
|
||||
<entry><ind> 0.20</ind><dep> 105</dep></entry>
|
||||
</table>
|
||||
</expression>
|
||||
</input>
|
||||
<output>/instrumentation/iesi/slip-skid</output>
|
||||
</filter>
|
||||
|
||||
<filter>
|
||||
<name>IESI Pitch</name>
|
||||
<debug>false</debug>
|
||||
<type>gain</type>
|
||||
<gain>1</gain>
|
||||
<input>
|
||||
<expression>
|
||||
<table>
|
||||
<property>/orientation/pitch-deg</property>
|
||||
<entry><ind>-80</ind><dep>-65</dep></entry>
|
||||
<entry><ind>-50</ind><dep>-50</dep></entry>
|
||||
<entry><ind> 0</ind><dep> 0</dep></entry>
|
||||
<entry><ind> 50</ind><dep> 50</dep></entry>
|
||||
<entry><ind> 80</ind><dep> 65</dep></entry>
|
||||
</table>
|
||||
</expression>
|
||||
</input>
|
||||
<output>/instrumentation/iesi/pitch-deg</output>
|
||||
</filter>
|
||||
|
||||
</PropertyList>
|
||||
|
|