1
0
Fork 0

Merge branch 'dev' into 3D

This commit is contained in:
legoboyvdlp R 2021-02-11 17:19:39 +00:00
commit fae0c3fed2
61 changed files with 4520 additions and 1832 deletions

View file

@ -206,9 +206,9 @@
<autopilot n="0">
<path>Aircraft/A320-family/Systems/fadec-cfm.xml</path>
</autopilot>
<autopilot n="10">
<path>Aircraft/A320-family/Systems/cfm56-sound.xml</path>
</autopilot>
<property-rule n="100">
<path>Aircraft/A320-family/Systems/cfm56-sound.xml</path>
</property-rule>
</systems>
</sim>

View file

@ -206,9 +206,9 @@
<autopilot n="0">
<path>Aircraft/A320-family/Systems/fadec-iae.xml</path>
</autopilot>
<autopilot n="10">
<property-rule n="100">
<path>Aircraft/A320-family/Systems/v2500-sound.xml</path>
</autopilot>
</property-rule>
</systems>
</sim>

View file

@ -253,15 +253,15 @@
<path>Aircraft/A320-family/Systems/pfd.xml</path>
</autopilot>
<!-- 10 is sound -->
<autopilot n="11">
<property-rule n="101">
<path>Aircraft/A320-family/Systems/sound-common.xml</path>
</autopilot>
<autopilot n="12">
</property-rule>
<property-rule n="110">
<path>Aircraft/A320-family/Systems/a320-lights-proprules.xml</path>
</autopilot>
<autopilot n="13">
</property-rule>
<property-rule n="111">
<path>Aircraft/A320-family/Systems/ecam-proprules.xml</path>
</autopilot>
</property-rule>
<path>Aircraft/A320-family/Systems/pitot-static.xml</path>
</systems>
@ -674,6 +674,14 @@
<line8 type="string"></line8>
</rightmsg>
<warning-phase type="int">0</warning-phase>
<phases>
<timer>
<ldg-inhibit type="int">0</ldg-inhibit>
<ldg-inhibit-output type="double">0</ldg-inhibit-output>
<to-inhibit type="int">0</to-inhibit>
<to-inhibit-output type="double">0</to-inhibit-output>
</timer>
</phases>
</ECAM>
<environment>
@ -802,6 +810,8 @@
<atc>
<system-knob type="int">0</system-knob>
<mode-knob type="int">0</mode-knob>
<abv-blw type="int">0</abv-blw>
<thrt-all type="int">0</thrt-all>
</atc>
<apu>
<agent-btn type="bool">0</agent-btn>
@ -1380,11 +1390,14 @@
<spoiler-r4 type="bool">0</spoiler-r4>
<spoiler-r5 type="bool">0</spoiler-r5>
</spoilers>
<engine-left-fire type="bool">0</engine-left-fire>
<engine-right-fire type="bool">0</engine-right-fire>
<apu-fire type="bool">0</apu-fire>
<cargo-fwd-fire type="bool">0</cargo-fwd-fire>
<cargo-aft-fire type="bool">0</cargo-aft-fire>
<fire>
<engine-left-fire type="bool">0</engine-left-fire>
<engine-right-fire type="bool">0</engine-right-fire>
<apu-fire type="bool">0</apu-fire>
<cargo-fwd-fire type="bool">0</cargo-fwd-fire>
<cargo-aft-fire type="bool">0</cargo-aft-fire>
<lavatory-fire type="bool">0</lavatory-fire>
</fire>
</failures>
<fctl n="0">
@ -1417,6 +1430,9 @@
<temperature type="double">0</temperature>
</fwd>
</cargo>
<lavatory>
<temperature type="double">0</temperature>
</lavatory>
</fire>
<fuel n="0">
<only-use-ctr-tank type="bool">0</only-use-ctr-tank>
@ -4714,10 +4730,7 @@
<file>Aircraft/A320-family/Nasal/MCDU/ROUTESELECTION.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/INITB.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/FUELPRED.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/PROGTO.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/PROGCLB.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/PROGCRZ.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/PROGDES.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/PROG.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/PERFAPPR.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/PERFCLB.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/PERFCRZ.nas</file>
@ -4729,6 +4742,11 @@
<file>Aircraft/A320-family/Nasal/MCDU/DATA2.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/STATUS.nas</file>
</mcdu>
<!-- Traffic layer from E-jet -->
<traffic>
<file>Aircraft/A320-family/Nasal/Displays/projection.nas</file>
<file>Aircraft/A320-family/Nasal/Displays/traffic.nas</file>
</traffic>
<!-- Canvas -->
<canvas_pfd>
<file>Aircraft/A320-family/Models/Instruments/PFD/PFD.nas</file>

View file

@ -206,9 +206,9 @@
<autopilot n="0">
<path>Aircraft/A320-family/Systems/fadec-cfm.xml</path>
</autopilot>
<autopilot n="10">
<property-rule n="100">
<path>Aircraft/A320-family/Systems/leapx-sound.xml</path>
</autopilot>
</property-rule>
</systems>
</sim>

View file

@ -206,9 +206,9 @@
<autopilot n="0"> <!-- Apparently PW PurePower uses N1, not EPR.... sooo I use CFM FADEC -->
<path>Aircraft/A320-family/Systems/fadec-cfm.xml</path>
</autopilot>
<autopilot n="10">
<property-rule n="100">
<path>Aircraft/A320-family/Systems/leapx-sound.xml</path>
</autopilot>
</property-rule>
</systems>
</sim>

View file

@ -56,10 +56,12 @@ var failResetOld = func {
setprop("/systems/failures/pump-green", 0);
setprop("/systems/failures/pump-yellow-eng", 0);
setprop("/systems/failures/pump-yellow-elec", 0);
setprop("/systems/failures/cargo-aft-fire", 0);
setprop("/systems/failures/cargo-fwd-fire", 0);
setprop("/systems/failures/engine-left-fire", 0);
setprop("/systems/failures/engine-right-fire", 0);
setprop("/systems/failures/fire/cargo-aft-fire", 0);
setprop("/systems/failures/fire/cargo-fwd-fire", 0);
setprop("/systems/failures/fire/engine-left-fire", 0);
setprop("/systems/failures/fire/apu-fire", 0);
setprop("/systems/failures/fire/engine-right-fire", 0);
setprop("/systems/failures/fire/lavatory-fire", 0);
}
failResetOld();

View file

@ -560,7 +560,7 @@
<stretch type="bool">true</stretch>
</hrule>
<text>
<label>Cargo Fire</label>
<label>Fire</label>
</text>
<hrule>
<stretch type="bool">true</stretch>
@ -568,9 +568,9 @@
</group>
<checkbox>
<label>AFT</label>
<label>AFT CRG</label>
<halign>left</halign>
<property>/systems/failures/cargo-aft-fire</property>
<property>/systems/failures/fire/cargo-aft-fire</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -578,15 +578,26 @@
</checkbox>
<checkbox>
<label>FWD</label>
<label>FWD CRG</label>
<halign>left</halign>
<property>/systems/failures/cargo-fwd-fire</property>
<property>/systems/failures/fire/cargo-fwd-fire</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<group>
<checkbox>
<label>LAV</label>
<halign>left</halign>
<property>/systems/failures/fire/lavatory-fire</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<group>
<layout>hbox</layout>
<hrule>
@ -603,7 +614,7 @@
<checkbox>
<label>Left Engine</label>
<halign>left</halign>
<property>/systems/failures/engine-left-fire</property>
<property>/systems/failures/fire/engine-left-fire</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -613,7 +624,7 @@
<checkbox>
<label>APU</label>
<halign>left</halign>
<property>/systems/failures/apu-fire</property>
<property>/systems/failures/fire/apu-fire</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -623,7 +634,7 @@
<checkbox>
<label>Right Engine</label>
<halign>left</halign>
<property>/systems/failures/engine-right-fire</property>
<property>/systems/failures/fire/engine-right-fire</property>
<binding>
<command>dialog-apply</command>
</binding>

View file

@ -8,7 +8,7 @@
<params>
<n1>engines/engine[3]/n1</n1>
<on-fire>systems/failures/engine-left-fire</on-fire>
<on-fire>systems/failures/fire/engine-left-fire</on-fire>
<contrail>engines/engine[0]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
</params>

View file

@ -8,7 +8,7 @@
<params>
<n1>engines/engine[4]/n1</n1>
<on-fire>systems/failures/engine-right-fire</on-fire>
<on-fire>systems/failures/fire/engine-right-fire</on-fire>
<contrail>engines/engine[1]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
</params>

View file

@ -13,7 +13,7 @@
<params>
<n1>engines/engine[3]/n1</n1>
<on-fire>systems/failures/engine-left-fire</on-fire>
<on-fire>systems/failures/fire/engine-left-fire</on-fire>
<contrail>engines/engine[0]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
</params>

View file

@ -13,7 +13,7 @@
<params>
<n1>engines/engine[4]/n1</n1>
<on-fire>systems/failures/engine-right-fire</on-fire>
<on-fire>systems/failures/fire/engine-right-fire</on-fire>
<contrail>engines/engine[1]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
</params>

View file

@ -1,545 +0,0 @@
<?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<PropertyList>
<path>Aircraft/A320-family/Models/Engines/Models/CFM56.ac</path>
<params>
<contrail1>engines/engine[0]/contrail</contrail1>
<contrail2>engines/engine[1]/contrail</contrail2>
</params>
<!-- Particle Effects -->
<model>
<path>Aircraft/A320-family/Models/Effects/contrail.xml</path>
<name>contrailLeft</name>
<condition>
<property>environment/contrail</property>
</condition>
<overlay>
<params>
<contrail alias="../../../../params/contrail1" />
</params>
</overlay>
<offsets>
<x-m> 4.51789</x-m>
<y-m>-5.63029</y-m>
<z-m>-2.22295</z-m>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/contrail.xml</path>
<name>contrailRight</name>
<condition>
<property>environment/contrail</property>
</condition>
<overlay>
<params>
<contrail alias="../../../../params/contrail2" />
</params>
</overlay>
<offsets>
<x-m> 4.51789</x-m>
<y-m> 5.63029</y-m>
<z-m>-2.22295</z-m>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/Moisture.xml</path>
<name>moistureLeft</name>
<condition>
<and>
<greater-than>
<property>environment/relative-humidity</property>
<value>45</value>
</greater-than>
<less-than-equals>
<property>position/altitude-agl-ft</property>
<value>75</value>
</less-than-equals>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[3]/n1</property>
<value>65</value>
</greater-than>
</and>
</condition>
<offsets>
<x-m>-7.432</x-m>
<y-m>-5.63029</y-m>
<z-m>-2.46943</z-m>
<pitch-deg>0</pitch-deg>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/Moisture.xml</path>
<name>moistureRight</name>
<condition>
<and>
<greater-than>
<property>environment/relative-humidity</property>
<value>45</value>
</greater-than>
<less-than-equals>
<property>position/altitude-agl-ft</property>
<value>75</value>
</less-than-equals>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[4]/n1</property>
<value>65</value>
</greater-than>
</and>
</condition>
<offsets>
<x-m>-7.432</x-m>
<y-m> 5.63029</y-m>
<z-m>-2.46943</z-m>
<pitch-deg>0</pitch-deg>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/engine-spray.xml</path>
<name>engine-spray-left</name>
<condition>
<and>
<greater-than>
<property>environment/surface/wetness</property>
<value>0.3</value>
</greater-than>
<less-than-equals>
<property>position/altitude-agl-ft</property>
<value>15</value>
</less-than-equals>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[3]/n1</property>
<value>65</value>
</greater-than>
<equals>
<property>engines/engine[0]/reverser-pos-norm</property>
<value>0</value>
</equals>
</and>
</condition>
<offsets>
<x-m>-0.62458</x-m>
<y-m>-5.63029</y-m>
<z-m>-5</z-m>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/engine-spray.xml</path>
<name>engine-spray-right</name>
<condition>
<and>
<greater-than>
<property>environment/surface/wetness</property>
<value>0.3</value>
</greater-than>
<less-than-equals>
<property>position/altitude-agl-ft</property>
<value>15</value>
</less-than-equals>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[4]/n1</property>
<value>65</value>
</greater-than>
<equals>
<property>engines/engine[1]/reverser-pos-norm</property>
<value>0</value>
</equals>
</and>
</condition>
<offsets>
<x-m>-0.62458</x-m>
<y-m>5.63029</y-m>
<z-m>-5</z-m>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/engine-spray-reverse.xml</path>
<name>engine-spray-reverse</name>
<condition>
<and>
<greater-than>
<property>environment/surface/wetness</property>
<value>0.3</value>
</greater-than>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[3]/n1</property>
<value>65</value>
</greater-than>
<greater-than>
<property>engines/engine[0]/reverser-pos-norm</property>
<value>0.75</value>
</greater-than>
</and>
</condition>
<offsets>
<x-m>-6.62458</x-m>
<y-m>-5.63029</y-m>
<z-m>-5</z-m>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/engine-spray-reverse.xml</path>
<name>engine-spray-reverse</name>
<condition>
<and>
<greater-than>
<property>environment/surface/wetness</property>
<value>0.3</value>
</greater-than>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[4]/n1</property>
<value>65</value>
</greater-than>
<greater-than>
<property>engines/engine[1]/reverser-pos-norm</property>
<value>0.75</value>
</greater-than>
</and>
</condition>
<offsets>
<x-m>-6.62458</x-m>
<y-m>5.63029</y-m>
<z-m>-5</z-m>
</offsets>
</model>
<model>
<name>Engine fire left</name>
<path>Aircraft/A320-family/Models/Effects/enginefire.xml</path>
<offsets>
<x-m>-3.96705</x-m>
<y-m>-5.63029</y-m>
<z-m>-2.22295</z-m>
</offsets>
<condition>
<property>systems/failures/engine-left-fire</property>
</condition>
</model>
<model>
<name>Engine fire right</name>
<path>Aircraft/A320-family/Models/Effects/enginefire.xml</path>
<offsets>
<x-m>-3.96705</x-m>
<y-m> 5.63029</y-m>
<z-m>-2.22295</z-m>
</offsets>
<condition>
<property>systems/failures/engine-right-fire</property>
</condition>
</model>
<!-- Animations -->
<animation>
<name>Fan spinning animation (slow)</name>
<type>spin</type>
<object-name>FanLCFM56L</object-name>
<factor>50</factor> <!-- TCDS sourced - don't tune! -->
<property>engines/engine[3]/n1</property>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
<center>
<x-m>-6.66773</x-m>
<y-m>-5.63082</y-m>
<z-m>-2.26943</z-m>
</center>
</animation>
<animation>
<name>Fan spinning animation (slow)</name>
<type>spin</type>
<object-name>FanLCFM56R</object-name>
<factor>50</factor>
<property>engines/engine[4]/n1</property>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
<center>
<x-m>-6.66773</x-m>
<y-m> 5.62871</y-m>
<z-m>-2.26943</z-m>
</center>
</animation>
<animation>
<name>Fan spinning animation (fast)</name>
<type>spin</type>
<object-name>FanSpinningCFM56L</object-name>
<factor>5</factor>
<property>engines/engine[3]/n1</property>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
<center>
<x-m>-6.66773</x-m>
<y-m>-5.63082</y-m>
<z-m>-2.26943</z-m>
</center>
</animation>
<animation>
<name>Fan spinning animation (fast)</name>
<type>spin</type>
<object-name>FanSpinningCFM56R</object-name>
<factor>5</factor>
<property>engines/engine[4]/n1</property>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
<center>
<x-m>-6.66773</x-m>
<y-m> 5.62871</y-m>
<z-m>-2.26943</z-m>
</center>
</animation>
<animation>
<type>select</type>
<object-name>FanSpinningCFM56L</object-name>
<condition>
<greater-than>
<property>engines/engine[3]/n1</property>
<value>40.0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>FanSpinningCFM56R</object-name>
<condition>
<greater-than>
<property>engines/engine[4]/n1</property>
<value>40.0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>FanLCFM56L</object-name>
<condition>
<less-than-equals>
<property>engines/engine[3]/n1</property>
<value>40.0</value>
</less-than-equals>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>FanLCFM56R</object-name>
<condition>
<less-than-equals>
<property>engines/engine[4]/n1</property>
<value>40.0</value>
</less-than-equals>
</condition>
</animation>
<animation>
<name>Reverser Door LH 1</name>
<type>rotate</type>
<object-name>ReverserLDoor1</object-name>
<object-name>ReverserLDoor1.Inner</object-name>
<factor>-70</factor>
<property>engines/engine[0]/reverser-pos-norm</property>
<axis>
<x1-m>-4.7738</x1-m>
<y1-m>-6.25156</y1-m>
<z1-m>-1.65547</z1-m>
<x2-m>-4.77475</x2-m>
<y2-m>-6.29771</y2-m>
<z2-m>-1.71849</z2-m>
</axis>
</animation>
<animation>
<name>Reverser Door LH 2</name>
<type>rotate</type>
<object-name>ReverserLDoor2</object-name>
<object-name>ReverserLDoor2.Inner</object-name>
<factor>-70</factor>
<property>engines/engine[0]/reverser-pos-norm</property>
<axis>
<x1-m>-4.77785</x1-m>
<y1-m>-6.29253</y1-m>
<z1-m>-2.82287</z1-m>
<x2-m>-4.77731</x2-m>
<y2-m>-6.2496</y2-m>
<z2-m>-2.88363</z2-m>
</axis>
</animation>
<animation>
<name>Reverser Door LH 3</name>
<type>rotate</type>
<object-name>ReverserLDoor3</object-name>
<object-name>ReverserLDoor3.Inner</object-name>
<factor>70</factor>
<property>engines/engine[0]/reverser-pos-norm</property>
<axis>
<x1-m>-4.7738</x1-m>
<y1-m>-5.01022</y1-m>
<z1-m>-1.6555</z1-m>
<x2-m>-4.77475</x2-m>
<y2-m>-4.96408</y2-m>
<z2-m>-1.71852</z2-m>
</axis>
</animation>
<animation>
<name>Reverser Door LH 4</name>
<type>rotate</type>
<object-name>ReverserLDoor4</object-name>
<object-name>ReverserLDoor4.Inner</object-name>
<factor>70</factor>
<property>engines/engine[0]/reverser-pos-norm</property>
<axis>
<x1-m>-4.778</x1-m>
<y1-m>-4.96919</y1-m>
<z1-m>-2.82264</z1-m>
<x2-m>-4.77746</x2-m>
<y2-m>-5.01209</y2-m>
<z2-m>-2.8834</z2-m>
</axis>
</animation>
<animation>
<name>Reverser Door RH 1</name>
<type>rotate</type>
<object-name>ReverserRDoor1</object-name>
<object-name>ReverserRDoor1.Inner</object-name>
<factor>-70</factor>
<property>engines/engine[1]/reverser-pos-norm</property>
<axis>
<x1-m>-4.7738</x1-m>
<y1-m> 5.01008</y1-m>
<z1-m>-1.65547</z1-m>
<x2-m>-4.77475</x2-m>
<y2-m> 4.96393</y2-m>
<z2-m>-1.71849</z2-m>
</axis>
</animation>
<animation>
<name>Reverser Door RH 2</name>
<type>rotate</type>
<object-name>ReverserRDoor2</object-name>
<object-name>ReverserRDoor2.Inner</object-name>
<factor>-70</factor>
<property>engines/engine[1]/reverser-pos-norm</property>
<axis>
<x1-m>-4.77785</x1-m>
<y1-m> 4.96912</y1-m>
<z1-m>-2.82287</z1-m>
<x2-m>-4.77731</x2-m>
<y2-m> 5.01204</y2-m>
<z2-m>-2.88363</z2-m>
</axis>
</animation>
<animation>
<name>Reverser Door RH 3</name>
<type>rotate</type>
<object-name>ReverserRDoor3</object-name>
<object-name>ReverserRDoor3.Inner</object-name>
<factor>70</factor>
<property>engines/engine[1]/reverser-pos-norm</property>
<axis>
<x1-m>-4.7738</x1-m>
<y1-m> 6.25142</y1-m>
<z1-m>-1.6555</z1-m>
<x2-m>-4.77475</x2-m>
<y2-m> 6.29756</y2-m>
<z2-m>-1.71852</z2-m>
</axis>
</animation>
<animation>
<name>Reverser Door RH 4</name>
<type>rotate</type>
<object-name>ReverserRDoor4</object-name>
<object-name>ReverserRDoor4.Inner</object-name>
<factor>70</factor>
<property>engines/engine[1]/reverser-pos-norm</property>
<axis>
<x1-m>-4.778</x1-m>
<y1-m> 6.29245</y1-m>
<z1-m>-2.82264</z1-m>
<x2-m>-4.77746</x2-m>
<y2-m> 6.24955</y2-m>
<z2-m>-2.8834</z2-m>
</axis>
</animation>
<!-- Effect -->
<effect>
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-engine-CFM</inherits-from>
<object-name>EngineCFM56L</object-name>
<object-name>EngineCFM56R</object-name>
<object-name>ReverserLDoor1</object-name>
<object-name>ReverserLDoor2</object-name>
<object-name>ReverserLDoor3</object-name>
<object-name>ReverserLDoor4</object-name>
<object-name>ReverserRDoor1</object-name>
<object-name>ReverserRDoor2</object-name>
<object-name>ReverserRDoor3</object-name>
<object-name>ReverserRDoor4</object-name>
</effect>
<effect>
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-matt-engine-CFM</inherits-from>
<object-name>PylonCFM56L</object-name>
<object-name>PylonCFM56R</object-name>
</effect>
<effect>
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-chrome-engine-CFM</inherits-from>
<object-name>IntakeCFM56L</object-name>
<object-name>IntakeCFM56R</object-name>
</effect>
</PropertyList>

View file

@ -1,429 +0,0 @@
<?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<PropertyList>
<path>Aircraft/A320-family/Models/Engines/Models/IAEV2500.ac</path>
<params>
<contrail1>engines/engine[0]/contrail</contrail1>
<contrail2>engines/engine[1]/contrail</contrail2>
</params>
<!-- Particle Effects -->
<model>
<path>Aircraft/A320-family/Models/Effects/contrail.xml</path>
<name>contrailLeft</name>
<condition>
<property>environment/contrail</property>
</condition>
<overlay>
<params>
<contrail alias="../../../../params/contrail1" />
</params>
</overlay>
<offsets>
<x-m> 4.51789</x-m>
<y-m>-5.63029</y-m>
<z-m>-2.22295</z-m>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/contrail.xml</path>
<name>contrailRight</name>
<condition>
<property>environment/contrail</property>
</condition>
<overlay>
<params>
<contrail alias="../../../../params/contrail2" />
</params>
</overlay>
<offsets>
<x-m> 4.51789</x-m>
<y-m> 5.63029</y-m>
<z-m>-2.22295</z-m>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/Moisture.xml</path>
<name>moistureLeft</name>
<condition>
<and>
<greater-than>
<property>environment/relative-humidity</property>
<value>45</value>
</greater-than>
<less-than-equals>
<property>position/altitude-agl-ft</property>
<value>75</value>
</less-than-equals>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[3]/n1</property>
<value>65</value>
</greater-than>
</and>
</condition>
<offsets>
<x-m>-7.432</x-m>
<y-m>-5.63029</y-m>
<z-m>-2.76465</z-m>
<pitch-deg>0</pitch-deg>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/Moisture.xml</path>
<name>moistureRight</name>
<condition>
<and>
<greater-than>
<property>environment/relative-humidity</property>
<value>45</value>
</greater-than>
<less-than-equals>
<property>position/altitude-agl-ft</property>
<value>75</value>
</less-than-equals>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[4]/n1</property>
<value>65</value>
</greater-than>
</and>
</condition>
<offsets>
<x-m>-7.432</x-m>
<y-m> 5.63029</y-m>
<z-m>-2.76465</z-m>
<pitch-deg>0</pitch-deg>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/engine-spray.xml</path>
<name>engine-spray-left</name>
<condition>
<and>
<greater-than>
<property>environment/surface/wetness</property>
<value>0.3</value>
</greater-than>
<less-than-equals>
<property>position/altitude-agl-ft</property>
<value>15</value>
</less-than-equals>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[3]/n1</property>
<value>65</value>
</greater-than>
<equals>
<property>engines/engine[0]/reverser-pos-norm</property>
<value>0</value>
</equals>
</and>
</condition>
<offsets>
<x-m>-0.62458</x-m>
<y-m>-5.63029</y-m>
<z-m>-5</z-m>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/engine-spray.xml</path>
<name>engine-spray-right</name>
<condition>
<and>
<greater-than>
<property>environment/surface/wetness</property>
<value>0.3</value>
</greater-than>
<less-than-equals>
<property>position/altitude-agl-ft</property>
<value>15</value>
</less-than-equals>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[4]/n1</property>
<value>65</value>
</greater-than>
<equals>
<property>engines/engine[1]/reverser-pos-norm</property>
<value>0</value>
</equals>
</and>
</condition>
<offsets>
<x-m>-0.62458</x-m>
<y-m>5.63029</y-m>
<z-m>-5</z-m>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/engine-spray-reverse.xml</path>
<name>engine-spray-reverse</name>
<condition>
<and>
<greater-than>
<property>environment/surface/wetness</property>
<value>0.3</value>
</greater-than>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[3]/n1</property>
<value>65</value>
</greater-than>
<greater-than>
<property>engines/engine[0]/reverser-pos-norm</property>
<value>0.75</value>
</greater-than>
</and>
</condition>
<offsets>
<x-m>-6.62458</x-m>
<y-m>-5.63029</y-m>
<z-m>-5</z-m>
</offsets>
</model>
<model>
<path>Aircraft/A320-family/Models/Effects/engine-spray-reverse.xml</path>
<name>engine-spray-reverse</name>
<condition>
<and>
<greater-than>
<property>environment/surface/wetness</property>
<value>0.3</value>
</greater-than>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
<value>1.63</value>
</less-than-equals>
<greater-than>
<property>engines/engine[4]/n1</property>
<value>65</value>
</greater-than>
<greater-than>
<property>engines/engine[1]/reverser-pos-norm</property>
<value>0.75</value>
</greater-than>
</and>
</condition>
<offsets>
<x-m>-6.62458</x-m>
<y-m>5.63029</y-m>
<z-m>-5</z-m>
</offsets>
</model>
<model>
<name>Engine fire left</name>
<path>Aircraft/A320-family/Models/Effects/enginefire.xml</path>
<offsets>
<x-m>-2.76705</x-m>
<y-m>-5.63029</y-m>
<z-m>-2.22295</z-m>
</offsets>
<condition>
<property>systems/failures/engine-left-fire</property>
</condition>
</model>
<model>
<name>Engine fire right</name>
<path>Aircraft/A320-family/Models/Effects/enginefire.xml</path>
<offsets>
<x-m>-2.76705</x-m>
<y-m> 5.63029</y-m>
<z-m>-2.22295</z-m>
</offsets>
<condition>
<property>systems/failures/engine-right-fire</property>
</condition>
</model>
<!-- Animations -->
<animation>
<name>Fan spinning animation (slow)</name>
<type>spin</type>
<object-name>FanLIAEL</object-name>
<factor>56.5</factor>
<property>engines/engine[3]/n1</property>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
<center>
<x-m>-6.71594</x-m>
<y-m>-5.63028</y-m>
<z-m>-2.28545</z-m>
</center>
</animation>
<animation>
<name>Fan spinning animation (slow)</name>
<type>spin</type>
<object-name>FanLIAER</object-name>
<factor>56.5</factor>
<property>engines/engine[4]/n1</property>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
<center>
<x-m>-6.71594</x-m>
<y-m> 5.63028</y-m>
<z-m>-2.28545</z-m>
</center>
</animation>
<animation>
<name>Fan spinning animation (fast)</name>
<type>spin</type>
<object-name>FanSpinningIAEL</object-name>
<factor>5.65</factor>
<property>engines/engine[3]/n1</property>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
<center>
<x-m>-6.71594</x-m>
<y-m>-5.63028</y-m>
<z-m>-2.28545</z-m>
</center>
</animation>
<animation>
<name>Fan spinning animation (fast)</name>
<type>spin</type>
<object-name>FanSpinningIAER</object-name>
<factor>5.65</factor>
<property>engines/engine[4]/n1</property>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
<center>
<x-m>-6.71594</x-m>
<y-m> 5.63028</y-m>
<z-m>-2.28545</z-m>
</center>
</animation>
<animation>
<type>select</type>
<object-name>FanSpinningIAEL</object-name>
<condition>
<greater-than>
<property>engines/engine[3]/n1</property>
<value>40.0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>FanSpinningIAER</object-name>
<condition>
<greater-than>
<property>engines/engine[4]/n1</property>
<value>40.0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>FanLIAEL</object-name>
<condition>
<less-than-equals>
<property>engines/engine[3]/n1</property>
<value>40.0</value>
</less-than-equals>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>FanLIAER</object-name>
<condition>
<less-than-equals>
<property>engines/engine[4]/n1</property>
<value>40.0</value>
</less-than-equals>
</condition>
</animation>
<animation>
<type>translate</type>
<object-name>ReverserLDoor</object-name>
<property>engines/engine[0]/reverser-pos-norm</property>
<factor>0.50</factor> <!-- According to photo reference -->
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>translate</type>
<object-name>ReverserRDoor</object-name>
<property>engines/engine[1]/reverser-pos-norm</property>
<factor>0.50</factor> <!-- According to photo reference -->
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<!-- Effect -->
<effect>
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-engine-IAE</inherits-from>
<object-name>EngineIAEV2500L</object-name>
<object-name>EngineIAEV2500R</object-name>
<object-name>ReverserLDoor</object-name>
<object-name>ReverserRDoor</object-name>
</effect>
<effect>
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-matt-engine-IAE</inherits-from>
<object-name>PylonIAEV2500L</object-name>
<object-name>PylonIAEV2500R</object-name>
</effect>
<effect>
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-chrome-engine-IAE</inherits-from>
<object-name>IntakeIAEV2500L</object-name>
<object-name>IntakeIAEV2500R</object-name>
</effect>
</PropertyList>

View file

@ -877,7 +877,81 @@
</and>
</condition>
</animation>
<animation>
<type>rotate</type>
<object-name>atc_abv</object-name>
<factor>35</factor>
<offset-deg>0</offset-deg>
<axis>
<object-name>atc_abv.axis</object-name>
</axis>
<property>controls/atc/abv-blw</property>
</animation>
<animation>
<type>pick</type>
<object-name>atc_abv</object-name>
<action>
<button>0</button>
<button>3</button>
<binding>
<command>property-cycle</command>
<property>controls/atc/abv-blw</property>
<value>-1</value>
<value>0</value>
<value>1</value>
</binding>
</action>
<action>
<button>1</button>
<button>4</button>
<binding>
<command>property-cycle</command>
<property>controls/atc/abv-blw</property>
<value>1</value>
<value>0</value>
<value>-1</value>
</binding>
</action>
</animation>
<animation>
<type>rotate</type>
<object-name>atc_thrt</object-name>
<factor>-30</factor>
<offset-deg>0</offset-deg>
<axis>
<object-name>atc_thrt.axis</object-name>
</axis>
<property>controls/atc/thrt-all</property>
</animation>
<animation>
<type>pick</type>
<object-name>atc_thrt</object-name>
<action>
<button>0</button>
<button>3</button>
<binding>
<command>property-cycle</command>
<property>controls/atc/thrt-all</property>
<value>0</value>
<value>1</value>
</binding>
</action>
<action>
<button>1</button>
<button>4</button>
<binding>
<command>property-cycle</command>
<property>controls/atc/thrt-all</property>
<value>0</value>
<value>1</value>
</binding>
</action>
</animation>
<!-- Primary Flight Displays -->
<model>
<name>PFD1</name>

View file

@ -533,7 +533,6 @@
<object-name>MLGLockstayActuatorR2</object-name>
<object-name>FlapMechanismL</object-name>
<object-name>FlapMechanismR</object-name>
<condition>
<property>/fdm/jsbsim/zero</property>
</condition>
</animation>

View file

@ -261,8 +261,6 @@ var input = {
"altitude_ind": "/instrumentation/altimeter/indicated-altitude-ft-pfd",
"altimeter_mode": "/instrumentation/altimeter[0]/std",
"attReset": "/instrumentation/iesi/att-reset",
"dcEss": "/systems/electrical/bus/dc-ess",
"dcHot1": "/systems/electrical/bus/dc-hot-1",
"iesiBrt": "/controls/lighting/DU/iesi",
"iesiInit": "/instrumentation/iesi/iesi-init",
"mach": "/instrumentation/airspeed-indicator/indicated-mach",

View file

@ -3010,7 +3010,7 @@ var canvas_lowerECAM_wheel = {
rightdoor = gear_door_R.getValue();
nosedoor = gear_door_N.getValue();
gearlvr = gear_down.getValue();
askidsw = systems.HYD.Brakes.askidSw.getBoolValue();
askidsw = systems.HYD.Switch.nwsSwitch.getBoolValue();
brakemode = systems.HYD.Brakes.mode.getBoolValue();
accum = systems.HYD.Brakes.accumPressPsi.getBoolValue();

View file

@ -364,6 +364,10 @@ var canvas_MCDU_base = {
me.fontSizeLeftS(small, small, small, small, small, small);
me.fontSizeRight(normal, normal, normal, normal, normal, normal);
me.fontSizeRightS(small, small, small, small, small, small);
me.fontCenter(default, default, default, default, default, default);
me.fontCenterS(default, default, default, default, default, default);
me.fontSizeCenter(normal, normal, normal, normal, normal, normal);
me.fontSizeCenterS(small, small, small, small, small, small);
},
standardFontColour: func() {
me.colorLeft("wht", "wht", "wht", "wht", "wht", "wht");
@ -384,13 +388,28 @@ var canvas_MCDU_base = {
var sign2 = degrees2 >= 0 ? "E" : "W";
return sprintf("%d%.1f%s/%07s%s",abs(degrees),minutes,sign,abs(degrees2) ~ minutes2,sign2);
},
getIRSStatus: func(a) {
getLatLogFormatted2: func(rootpropname) {
var dms = getprop(rootpropname ~ "latitude-deg");
var degrees = int(dms);
var minutes = sprintf("%.1f",abs((dms - degrees) * 60));
var sign = degrees >= 0 ? "N" : "S";
var dms2 = getprop(rootpropname ~ "longitude-deg");
var degrees2 = int(dms2);
var minutes2 = sprintf("%.1f",abs((dms2 - degrees2) * 60));
var sign2 = degrees2 >= 0 ? "E" : "W";
return sprintf("%d %.1f%s/%03s %.1f%s",abs(degrees),minutes,sign,abs(degrees2),minutes2,sign2);
},
getIRSStatus: func(a,b = 0) {
var irsstatus = "INVAL";
if (systems.ADIRS.ADIRunits[a].operative) {
if (systems.ADIRS.Operating.aligned[a].getValue()) {
irsstatus = (systems.ADIRS.ADIRunits[a].mode == 2) ? "ATT" : "NAV";
} else {
irsstatus = "ALIGN TTN" ~ sprintf("% 2.0d",math.round(systems.ADIRS.ADIRunits[a]._alignTime) / 60);
if (b) {
irsstatus = "ALIGN TTN" ~ sprintf("%2d",math.round(systems.ADIRS.ADIRunits[a]._alignTime) / 60);
} else {
irsstatus = "ALIGN";
}
}
}
return irsstatus;
@ -2454,7 +2473,7 @@ var canvas_MCDU_base = {
var rows = ["Simple_L2S","Simple_L3S","Simple_L4S"];
var center = ["Simple_C1","Simple_C2","Simple_C3"];
for (var a = 0; a<3; a+=1) {
me[rows[a]].setText(" " ~ me.getIRSStatus(a));
me[rows[a]].setText(" " ~ me.getIRSStatus(a,1));
if (systems.ADIRS.ADIRunits[a]._excessMotion) {
me[center[a]].show();
} else {
@ -2475,8 +2494,69 @@ var canvas_MCDU_base = {
me["Simple_R3S"].setText("");
me["Simple_R4S"].setText("");
}
} else if (page == "GPSMON") {
if (!pageSwitch[i].getBoolValue()) {
me.defaultHideWithCenter();
me.standardFontSize();
me.defaultPageNumbers();
me.showLeft(1, 1, 1, 1, 1, 1);
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["arrowsDepArr"].hide();
me["PERFAPPR"].hide();
me["PERFGA"].hide();
me["Simple_L0S"].hide();
me["Simple_Title"].show();
me.colorLeft("grn", "grn", "grn", "grn", "grn", "grn");
me.colorLeftS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorCenter("grn", "grn", "grn", "grn", "grn", "grn");
me.colorCenterS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRight("grn", "grn", "grn", "grn", "grn", "grn");
me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht");
me["Simple_Title"].setText("GPS MONITOR");
me["Simple_L1S"].setText("GPS1 POSITION");
me["Simple_L2S"].setText("TTRK");
me["Simple_L3S"].setText("MERIT");
me["Simple_L3"].setText(sprintf("%3d",((rand() * 50) - 25) + 50) ~ "M");
me["Simple_L4S"].setText("GPS2 POSITION");
me["Simple_L5S"].setText("TTRK");
me["Simple_L6S"].setText("MERIT");
me["Simple_L6"].setText(sprintf("%3d",((rand() * 50) - 25) + 50) ~ "M");
me["Simple_C2S"].setText("UTC");
me["Simple_C3S"].setText("GPS ALT");
me["Simple_C5S"].setText("UTC");
me["Simple_C6S"].setText("GPS ALT");
me["Simple_R2S"].setText("GS");
me["Simple_R3S"].setText("MODE/SAT");
me["Simple_R3"].setText("NAV/" ~ sprintf("%s",int((rand() * 2) - 1) + 6) ~ " ");
me["Simple_R5S"].setText("GS");
me["Simple_R6S"].setText("MODE/SAT");
me["Simple_R6"].setText("NAV/" ~ sprintf("%s",int((rand() * 2) - 1) + 6) ~ " ");
pageSwitch[i].setBoolValue(1);
}
me["Simple_L1"].setText(me.getLatLogFormatted2("/position/"));
me["Simple_L2"].setText(sprintf("%-5.1f",pts.Instrumentation.GPS.trackMag.getValue() + magvar()));
me["Simple_L4"].setText(me.getLatLogFormatted2("/position/"));
me["Simple_L5"].setText(sprintf("%-5.1f",pts.Instrumentation.GPS.trackMag.getValue() + magvar()));
var gmt = string.replace(pts.Sim.Time.gmtString.getValue(),":",".");
me["Simple_C2"].setText(gmt);
me["Simple_C5"].setText(gmt);
me["Simple_C3"].setText(sprintf("%5.0f",pts.Instrumentation.GPS.altitude.getValue()));
me["Simple_C6"].setText(sprintf("%5.0f",pts.Instrumentation.GPS.altitude.getValue()));
me["Simple_R2"].setText(sprintf("%3.0f",pts.Instrumentation.GPS.gs.getValue()));
me["Simple_R5"].setText(sprintf("%3.0f",pts.Instrumentation.GPS.gs.getValue()));
} else if (page == "RADNAV") {
if (!pageSwitch[i].getBoolValue()) {
me.defaultHide();
@ -3910,7 +3990,6 @@ var canvas_MCDU_base = {
me["PROG_UPDATE"].show();
me["Simple_L3"].setText(" [ ]");
}
me["Simple_L4"].setText(" ---g /----.-");
me["Simple_L5"].setText(" GPS");
me["Simple_L6"].setText("----");
me["Simple_L1S"].setText(" CRZ");
@ -3936,8 +4015,25 @@ var canvas_MCDU_base = {
me["Simple_C2"].setText(sprintf("%17s%4d ",vdev_sign,abs(vdev)));
me["Simple_R2"].setText(sprintf("%30s","VDEV= FT "));
}
me["Simple_R4"].setText("[ ]");
if (mcdu.bearingDistances[i].displayID != nil) {
me["Simple_R4"].setFont(default);
me["Simple_R4"].setFontSize(normal);
me["Simple_R4"].setText(mcdu.bearingDistances[i].displayID);
} else {
me["Simple_R4"].setFont(symbol);
me["Simple_R4"].setFontSize(small);
me["Simple_R4"].setText("[ ]");
}
if (mcdu.bearingDistances[i].selectedPoint != nil) {
me["Simple_L4"].setColor(GREEN);
me["Simple_L4"].setText(sprintf("%3.0fg /%4.1f",mcdu.bearingDistances[i].bearing,mcdu.bearingDistances[i].distance));
} else {
me["Simple_L4"].setColor(WHITE);
me["Simple_L4"].setText(" ---g /----.-");
}
me["Simple_R5"].setText("GPS PRIMARY");
me["Simple_R6"].setText("----");
me["Simple_R1S"].setText("REC MAX ");
@ -3945,7 +4041,7 @@ var canvas_MCDU_base = {
me["Simple_C1"].setText("-----");
me["Simple_C1S"].setText("OPT");
me["Simple_C3S"].setText("CONFIRM UPDATE AT");
me["Simple_C4"].setText(" TO");
me["Simple_C4"].setText(" TO");
me["Simple_C6S"].setText("ACCUR");
if (systems.ADIRS.Operating.aligned[0].getValue() or systems.ADIRS.Operating.aligned[1].getValue()) me["Simple_C6"].setText("HIGH");
else me["Simple_C6"].setText("LOW");
@ -6157,6 +6253,46 @@ var canvas_MCDU_base = {
me["Simple_L6S"].setFont(f);
}
},
fontCenter: func (a, b, c, d, e, f) {
if (a != 0) {
me["Simple_C1"].setFont(a);
}
if (b != 0) {
me["Simple_C2"].setFont(b);
}
if (c != 0) {
me["Simple_C3"].setFont(c);
}
if (d != 0) {
me["Simple_C4"].setFont(d);
}
if (e != 0) {
me["Simple_C5"].setFont(e);
}
if (f != 0) {
me["Simple_C6"].setFont(f);
}
},
fontCenterS: func (a, b, c, d, e, f) {
if (a != 0) {
me["Simple_C1S"].setFont(a);
}
if (b != 0) {
me["Simple_C2S"].setFont(b);
}
if (c != 0) {
me["Simple_C3S"].setFont(c);
}
if (d != 0) {
me["Simple_C4S"].setFont(d);
}
if (e != 0) {
me["Simple_C5S"].setFont(e);
}
if (f != 0) {
me["Simple_C6S"].setFont(f);
}
},
fontRight: func (a, b, c, d, e, f) {
if (a != 0) {
me["Simple_R1"].setFont(a);

View file

@ -338,6 +338,41 @@ setlistener("sim/signals/fdm-initialized", func {
ND_2 = canvas_ND_2.new(group_nd2);
ND_2_test = canvas_ND_2_test.new(group_nd2_test, "Aircraft/A320-family/Models/Instruments/Common/res/du-test.svg");
setlistener("/instrumentation/efis[0]/inputs/range-nm", func() {
canvas_nd.ND_1.NDCpt.trafficLayer.camera.range = getprop("/instrumentation/efis[0]/inputs/range-nm");
}, 1, 0);
setlistener("/instrumentation/efis[1]/inputs/range-nm", func() {
canvas_nd.ND_2.NDFo.trafficLayer.camera.range = getprop("/instrumentation/efis[1]/inputs/range-nm");
}, 1, 0);
setlistener("/instrumentation/efis[0]/inputs/nd-centered", func() {
canvas_nd.ND_1.NDCpt.trafficLayer.camera.screenRange = getprop("/instrumentation/efis[0]/inputs/nd-centered") ? 436.8545 : 710;
canvas_nd.ND_1.NDCpt.trafficLayer.camera.screenCY = getprop("/instrumentation/efis[0]/inputs/nd-centered") ? 512 : 850;
}, 1, 0);
setlistener("/instrumentation/efis[1]/inputs/nd-centered", func() {
canvas_nd.ND_2.NDFo.trafficLayer.camera.screenRange = getprop("/instrumentation/efis[1]/inputs/nd-centered") ? 436.8545 : 710;
canvas_nd.ND_2.NDFo.trafficLayer.camera.screenCY = getprop("/instrumentation/efis[1]/inputs/nd-centered") ? 512 : 850;
}, 1, 0);
setlistener("/instrumentation/tcas/inputs/mode", func() {
if (getprop("/instrumentation/efis[1]/nd/canvas-display-mode") != "PLAN") {
canvas_nd.ND_1.NDCpt.trafficGroup.setVisible(pts.Instrumentation.TCAS.Inputs.mode.getValue() >= 2 ? 1 : 0);
}
if (getprop("/instrumentation/efis[1]/nd/canvas-display-mode") != "PLAN") {
canvas_nd.ND_2.NDFo.trafficGroup.setVisible(pts.Instrumentation.TCAS.Inputs.mode.getValue() >= 2 ? 1 : 0);
}
}, 1, 0);
setlistener("/instrumentation/efis[0]/nd/canvas-display-mode", func() {
canvas_nd.ND_1.NDCpt.trafficGroup.setVisible(getprop("/instrumentation/efis[0]/nd/canvas-display-mode") == "PLAN" ? 0 : 1);
}, 1, 0);
setlistener("/instrumentation/efis[1]/nd/canvas-display-mode", func() {
canvas_nd.ND_2.NDFo.trafficGroup.setVisible(getprop("/instrumentation/efis[1]/nd/canvas-display-mode") == "PLAN" ? 0 : 1);
}, 1, 0);
nd_update.start();
if (getprop("systems/acconfig/options/nd-rate") > 1) {
rateApply();

View file

@ -32,8 +32,7 @@ canvas.NavDisplay.get_nav_path = func (type, idx) {
return sprintf(path, name, idx);
};
canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update_time=0.05)
{
canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update_time=0.05) {
if (me.inited) die("MFD already was added to scene");
me.range_dependant_layers = [];
me.always_update_layers = {};
@ -87,6 +86,8 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
.set("screen-range", 700)
.set("z-index",-1);
me.compassHdgTrk = 0; # last compass rotation deg
me.update_sub(); # init some map properties based on switches
var vor1_path = "/instrumentation/nav[2]";
@ -233,6 +234,17 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
event_handler();
} # foreach layer
me.mapCamera = traffic.Camera.new({
range: 20,
screenRange: 436.8545,
screenCX: 512,
screenCY: 512,
});
me.trafficGroup = me.nd.createChild("group");
me.trafficLayer = traffic.TrafficLayer.new(me.mapCamera, me.trafficGroup);
me.trafficLayer.start();
me.trafficGroup.set("z-index", -1);
#print("navdisplay.mfd:ND layer setup completed");
# TODO: move this to RTE.lcontroller ?
@ -277,20 +289,38 @@ canvas.NavDisplay.update_sub = func(){
me.userTrk=userHdg;
}
var reqHdg = 0;
if((me.in_mode("toggle_display_mode", ["MAP"]) and me.get_switch("toggle_display_type") == "CRT")
or (me.get_switch("toggle_track_heading") and me.get_switch("toggle_display_type") == "LCD"))
{
or (me.get_switch("toggle_track_heading") and me.get_switch("toggle_display_type") == "LCD")) {
userHdgTrk = userTrk;
me.userHdgTrk = userTrk;
me.compassHdgTrk = userTrk;
userHdgTrkTru = userTrkTru;
me.symbols.hdgTrk.setText("TRK");
} else {
userHdgTrk = userHdg;
me.userHdgTrk = userHdg;
if (userHdg != me.compassHdgTrk) {
var dist = userHdg - me.compassHdgTrk;
if (dist>180) dist = dist - 360;
elsif (dist<-180) dist = 360 + dist;
if (dist>0) {
dist = dist * 0.3;
if (dist>10) dist = 10;
me.compassHdgTrk = (dist<0.1) ? userHdg : math.mod(me.compassHdgTrk+dist,360);
}
elsif (dist<0) {
dist = dist * 0.3;
if (dist<-10) dist = -10;
me.compassHdgTrk = (dist>-0.1) ? userHdg : math.mod(me.compassHdgTrk+dist,360);
}
}
userHdgTrk = me.compassHdgTrk;
me.userHdgTrk = me.compassHdgTrk;
userHdgTrkTru = userHdgTru;
me.symbols.hdgTrk.setText("HDG");
}
# First, update the display position of the map
var oldRange = me.map.getRange();
var pos = {
@ -372,6 +402,13 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
else
me.map.setTranslation(512,824);
}
me.mapCamera.repositon(geo.aircraft_position(), me.aircraft_source.get_hdg_tru());
me.pos = props.globals.getNode("position");
me.trafficLayer.setRefAlt(me.pos.getValue("altitude-ft"));
if (me.trafficGroup.getVisible()) {
me.trafficLayer.update();
me.trafficLayer.redraw();
}
var vor1_path = "/instrumentation/nav[2]";
var vor2_path = "/instrumentation/nav[3]";
var dme1_path = "/instrumentation/dme[2]";

View file

@ -7,8 +7,8 @@
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="airbusND_orig.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="airbusND.svg"
inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)"
xml:space="preserve"
id="svg5180"
height="1024"
@ -23,16 +23,16 @@
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
inkscape:window-height="1017"
id="namedview102"
showgrid="false"
inkscape:zoom="0.9002897"
inkscape:cx="467.92702"
inkscape:cy="538.03817"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:zoom="1.2732019"
inkscape:cx="406.21664"
inkscape:cy="201.87587"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="layer8"
inkscape:current-layer="layer3"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-object-midpoints="true"
@ -40,7 +40,8 @@
inkscape:snap-to-guides="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:document-rotation="0"><sodipodi:guide
inkscape:document-rotation="0"
inkscape:snap-text-baseline="true"><sodipodi:guide
id="guide3167"
orientation="1,0"
position="512,811.5" /><sodipodi:guide
@ -58,10 +59,28 @@
id="guide3537" /><sodipodi:guide
orientation="-0.8660254,0.5"
position="512,200"
id="guide3545" /></sodipodi:namedview><metadata
id="guide3545" /><sodipodi:guide
position="-3.9271069,171.8178"
orientation="1,0"
id="guide742" /><sodipodi:guide
position="63.243533,882.27478"
orientation="1,0"
id="guide3109" /><sodipodi:guide
position="59.703006,906.39896"
orientation="0,-1"
id="guide3111" /><sodipodi:guide
position="70.197038,990.32506"
orientation="0,-1"
id="guide3113" /><sodipodi:guide
position="211.67107,1010.2551"
orientation="0,-1"
id="guide3115" /><sodipodi:guide
position="14.137585,913.25558"
orientation="1,0"
id="guide3498" /></sodipodi:namedview><metadata
id="metadata5186"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title><dc:creator><cc:Agent><dc:title>Gijs de Rooy</dc:title></cc:Agent></dc:creator><cc:license
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /><dc:creator><cc:Agent><dc:title>Gijs de Rooy</dc:title></cc:Agent></dc:creator><cc:license
rdf:resource="" /></cc:Work></rdf:RDF></metadata><defs
id="defs5184"><marker
style="overflow:visible"
@ -240,26 +259,26 @@
style="display:inline;fill:none;stroke:#f2f235;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><text
inkscape:label="#text7243"
id="wpActiveId"
y="54.099972"
x="766.04407"
y="34.099972"
x="788.04407"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#cecdce;fill-opacity:1;stroke:none"
xml:space="preserve"><tspan
y="54.099972"
x="766.04407"
y="34.099972"
x="788.04407"
id="tspan7245"
sodipodi:role="line"
style="font-size:36px;line-height:1.25">ABCD</tspan></text>
<text
xml:space="preserve"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
x="844.04407"
y="88.124893"
x="866.04407"
y="68.124893"
id="wpActiveDist"
inkscape:label="#text7243"><tspan
sodipodi:role="line"
id="tspan7251"
x="844.04407"
y="88.124893"
x="866.04407"
y="68.124893"
style="font-size:36px;line-height:1.25">999.9</tspan></text>
<path
sodipodi:nodetypes="cccc"
@ -267,13 +286,21 @@
id="aplSymMap"
d="m 512,866.4 v -68 m 34.5,24 h -70 m 50,32 h -30"
style="fill:none;stroke:#f2f235;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:label="#path7253" /><path
inkscape:label="#path3017"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
inkscape:label="#path7253" /><g
id="windArrow"
d="m 75.2914,119.519 -2e-4,65.158 m 0,0 7.0125,-12.145 H 67.4945 l 7.7967,12.146"
style="fill:#0dc04b;stroke:#0dc04b;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><g
transform="matrix(0.81,0,0,0.81,-8.3843096,20.546412)"><path
inkscape:label="#path3017"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3017"
d="m 63.260317,138.7628 9.917949,-18.75435 -9.917949,18.75529 -9.969447,-18.75529 9.969447,18.75529"
style="display:inline;fill:#0dc04b;stroke:#0dc04b;stroke-width:4.44444;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
inkscape:label="#path3017l"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3107l"
d="M 63.260505,77.514285 63.260317,138.7628"
style="display:inline;fill:#0dc04b;stroke:#0dc04b;stroke-width:4.44444;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g
inkscape:label="#g3124"
id="compass"
transform="rotate(0.34999975,516.49696,825.81379)"><path
@ -784,63 +811,63 @@
</g><text
xml:space="preserve"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
x="36.862175"
y="92.904839"
x="12.862175"
y="72.904839"
id="wind"
inkscape:label="#text7243"><tspan
sodipodi:role="line"
id="tspan3801"
x="36.862175"
y="92.904839"
x="12.862175"
y="72.904839"
style="font-size:36px;line-height:1.25">999°/ 99</tspan></text>
<text
inkscape:label="#text7243"
id="gs"
y="53.306854"
x="101.87437"
y="33.306854"
x="61.874367"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
xml:space="preserve"><tspan
y="53.306854"
x="101.87437"
y="33.306854"
x="61.874367"
id="tspan3809"
sodipodi:role="line"
style="font-size:36px;line-height:1.25">999</tspan></text>
<text
xml:space="preserve"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
x="248.49673"
y="53.306854"
x="189.71132"
y="33.306854"
id="tas"
inkscape:label="#text7243"><tspan
sodipodi:role="line"
id="tspan3813"
x="248.49673"
y="53.306854"
x="189.71132"
y="33.306854"
style="font-size:36px;line-height:1.25">999</tspan></text>
<text
xml:space="preserve"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none"
x="38.276394"
y="53.306854"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.32193px;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none;stroke-width:0.776827"
x="13.895038"
y="33.26786"
id="gsLbl"
inkscape:label="#text7243"><tspan
style="font-size:36px;line-height:1.25"
style="font-size:27.9658px;line-height:1.25;stroke-width:0.776827"
sodipodi:role="line"
id="tspan3817"
x="38.276394"
y="53.306854">GS</tspan></text>
x="13.895038"
y="33.26786">GS</tspan></text>
<text
inkscape:label="#text7243"
id="tasLbl"
y="53.306854"
x="170.17084"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none"
y="33.340725"
x="129.95859"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.32191px;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none;stroke-width:0.776826"
xml:space="preserve"><tspan
y="53.306854"
x="170.17084"
y="33.340725"
x="129.95859"
id="tspan3821"
sodipodi:role="line"
style="font-size:36px;line-height:1.25">TAS</tspan></text>
style="font-size:27.9658px;line-height:1.25;stroke-width:0.776826">TAS</tspan></text>
<g
id="hdgGroup"
inkscape:label="#g3141"><path
@ -983,12 +1010,12 @@
<text
inkscape:label="#text7243"
id="eta"
y="126.06245"
y="106.06245"
x="892.04407"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
xml:space="preserve"><tspan
style="font-size:36px;line-height:1.25"
y="126.06245"
y="106.06245"
x="892.04407"
id="tspan3092"
sodipodi:role="line">08 34.4z</tspan></text>
@ -1173,36 +1200,36 @@
sodipodi:nodetypes="ccccccccc" /></g><text
xml:space="preserve"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none"
x="945.04547"
y="87.431412"
x="967.04547"
y="67.431412"
id="wpActiveDistLbl"
inkscape:label="#text7243"><tspan
style="font-size:24px;line-height:1.25"
sodipodi:role="line"
id="tspan3179"
x="945.04547"
y="87.431412">NM</tspan></text>
x="967.04547"
y="67.431412">NM</tspan></text>
<text
xml:space="preserve"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#cecdce;fill-opacity:1;stroke:none"
x="785.289"
y="53.929054"
x="807.289"
y="33.929054"
id="ilsLbl"
inkscape:label="#text7243"><tspan
style="font-size:32px;line-height:1.25;fill:#cecdce"
sodipodi:role="line"
id="tspan4172"
x="785.289"
y="53.929054">ILS </tspan></text>
x="807.289"
y="33.929054">ILS </tspan></text>
<text
inkscape:label="#text7243"
id="ilsFreq"
y="53.929054"
x="888.28894"
y="33.929054"
x="910.28894"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#af0063;fill-opacity:1;stroke:none"
xml:space="preserve"><tspan
y="53.929054"
x="888.28894"
y="33.929054"
x="910.28894"
id="tspan4176"
sodipodi:role="line"
style="font-size:32px;line-height:125%;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#af0063;fill-opacity:1">999.99</tspan></text>
@ -1224,14 +1251,14 @@
inkscape:transform-center-y="-715.12894" /><text
xml:space="preserve"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
x="926.04407"
y="54.099972"
x="948.04407"
y="34.099972"
id="wpActiveCrs"
inkscape:label="#text7243"><tspan
sodipodi:role="line"
id="tspan4501"
x="926.04407"
y="54.099972"
x="948.04407"
y="34.099972"
style="font-size:36px;line-height:1.25">360</tspan></text>
<g
id="chrono_box"
@ -1302,7 +1329,31 @@
x="13.282043"
y="739.28204"
style="font-size:40px;line-height:1.25">OFST</tspan></text>
</g><g
<text
inkscape:label="#text7243"
id="hdgBug2ValL"
y="174.13467"
x="-97.01178"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none"
xml:space="preserve"
transform="rotate(-35)"><tspan
y="174.13467"
x="-97.01178"
id="tspan744"
sodipodi:role="line"
style="font-size:36px;line-height:1.25;fill:#179ab7;fill-opacity:1">999</tspan></text><text
inkscape:label="#text7243"
id="hdgBug2ValR"
y="-418.00525"
x="872.1673"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none"
xml:space="preserve"
transform="rotate(35)"><tspan
y="-418.00525"
x="872.1673"
id="tspan748"
sodipodi:role="line"
style="font-size:36px;line-height:1.25;fill:#179ab7;fill-opacity:1">999</tspan></text></g><g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="CTR"
@ -1368,20 +1419,22 @@
id="vorCrsPtr2"
inkscape:label="#g3266"
inkscape:transform-center-y="5.4559828"
transform="matrix(0.73371425,0,0,1.2956425,136.34805,-201.98371)"><path
transform="matrix(0.73371425,0,0,1.2956425,136.34805,-201.98371)"
style="stroke-width:0.999997;stroke-miterlimit:4;stroke-dasharray:none"><path
inkscape:connector-curvature="0"
d="m 519.27414,698 h -14.54828 v 194.49655 l 7.27414,1.9e-4 7.27414,-1.9e-4 z M 504.72586,432 v -23.89752 l -38.65179,-0.001 V 402 h 38.65179 V 225.04414 l 7.61514,-0.48629 6.93314,0.4863 V 402 h 38.65179 v 6.10148 l -38.65179,0.001 V 432 Z"
style="fill:#009fd6;stroke:#009fd6;stroke-width:1.02564;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:#009fd6;stroke:#009fd6;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="vorCrsPtr2_line"
sodipodi:nodetypes="cccccccccccccccccccc" /><g
id="locPtr2"><path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.02564;marker:none;enable-background:accumulate"
id="locPtr2"
style="stroke-width:0.999997;stroke-miterlimit:4;stroke-dasharray:none"><path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.999997;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
d="m 521.98396,447.79054 -17.26114,3.07727 0.01,235.98519 14.53528,0.01 -0.01,-235.98419 z"
id="locPtr2_line"
inkscape:connector-curvature="0"
inkscape:label="#locPtr"
sodipodi:nodetypes="cccccc" /><path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.02564;marker:none;enable-background:accumulate"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.999997;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
d="m 511.04486,437.35427 9.61501,5.69001 -35.22401,17.6614 -9.61501,-5.69001 c 0,0 29.42519,-14.6957 35.22387,-17.66133 5.79867,-2.96563 1.4e-4,-7e-5 1.4e-4,-7e-5 z"
id="locPtr2_arr2"
inkscape:connector-curvature="0"
@ -1392,14 +1445,14 @@
inkscape:connector-curvature="0"
id="locPtr2_arr1"
d="m 512.69442,437.35427 -9.615,5.69 35.22401,17.6614 9.615,-5.69 c 0,0 -29.42519,-14.6957 -35.22387,-17.66133 -5.79867,-2.96563 -1.4e-4,-7e-5 -1.4e-4,-7e-5 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.02564;marker:none;enable-background:accumulate" /></g><circle
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.999997;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate" /></g><circle
transform="matrix(0.968853,0.690717,-0.690717,0.968853,437.361,-328.129)"
id="path3951"
style="fill:none;stroke:#ededed;stroke-width:4.20218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="fill:none;stroke:#ededed;stroke-width:0.840432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
cx="380.07001"
cy="643.92999"
r="6.7175102" /><circle
style="fill:none;stroke:#ededed;stroke-width:4.20218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="fill:none;stroke:#ededed;stroke-width:0.840432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path3953"
transform="matrix(0.968853,0.690717,-0.690717,0.968853,512.923,-328.129)"
cx="380.07001"
@ -1407,11 +1460,11 @@
r="6.7175102" /><circle
transform="matrix(0.968853,0.690717,-0.690717,0.968853,663.814,-328.129)"
id="path3955"
style="fill:none;stroke:#ededed;stroke-width:4.20218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="fill:none;stroke:#ededed;stroke-width:0.840432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
cx="380.07001"
cy="643.92999"
r="6.7175102" /><circle
style="fill:none;stroke:#ededed;stroke-width:4.20218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
style="fill:none;stroke:#ededed;stroke-width:0.840432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path3959"
transform="matrix(0.968853,0.690717,-0.690717,0.968853,739.667,-328.128)"
cx="380.07001"
@ -1643,12 +1696,12 @@
inkscape:transform-center-y="-363.559" /><text
inkscape:label="#text7243"
id="crsLbl"
y="90.379868"
x="812.72168"
y="70.379868"
x="834.72168"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#cecdce;fill-opacity:1;stroke:none"
xml:space="preserve"><tspan
y="90.379868"
x="812.72168"
y="70.379868"
x="834.72168"
id="tspan4007"
sodipodi:role="line"
style="font-size:36px;line-height:1.25">CRS</tspan></text>
@ -1656,23 +1709,23 @@
xml:space="preserve"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none"
x="854.72168"
y="124.87983"
y="104.87983"
id="dmeLbl"
inkscape:label="#text7243"><tspan
style="font-size:24px;line-height:1.25"
sodipodi:role="line"
id="tspan4011"
x="854.72168"
y="124.87983"> </tspan></text>
y="104.87983"> </tspan></text>
<text
inkscape:label="#text7243"
id="crs"
y="90.062439"
x="913.95801"
y="70.062439"
x="935.95801"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none"
xml:space="preserve"><tspan
y="90.062439"
x="913.95801"
y="70.062439"
x="935.95801"
id="tspan4046"
sodipodi:role="line"
style="font-size:36px;line-height:1.25">999</tspan></text>
@ -1680,13 +1733,13 @@
xml:space="preserve"
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:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none"
x="913.95801"
y="126.12444"
y="106.12444"
id="dme"
inkscape:label="#text7243"><tspan
sodipodi:role="line"
id="tspan4071"
x="913.95801"
y="126.12444"
y="106.12444"
style="font-size:36px;line-height:1.25">99.9</tspan></text>
<g
id="gsGroup"

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 137 KiB

View file

@ -10,6 +10,9 @@ var NOTHING = func nil;
var att_switch = props.globals.getNode("/controls/navigation/switching/att-hdg", 1);
var adirs_3 = props.globals.getNode("/instrumentation/efis[0]/nd/ir-3", 1);
var vhdg_bug = props.globals.getNode("/it-autoflight/input/hdg",0); # ND compass position deg
canvas.NDStyles["Airbus"] = {
font_mapper: func(family, weight) {
if( family == "Liberation Sans" and weight == "normal" )
@ -884,6 +887,42 @@ canvas.NDStyles["Airbus"] = {
is_false: NOTHING,
},
},
{
id:"hdgBug2ValR", #"hdgBug2ValL"",
impl: {
init: func(nd,symbol),
predicate: func(nd) nd.in_mode("toggle_display_mode", ["MAP"]) and !nd.get_switch("toggle_centered"),
is_true: func(nd) {
var bugRot = vhdg_bug.getValue();
var diffRot = (bugRot>=nd.userHdgTrk) ? (bugRot-nd.userHdgTrk) : (360+bugRot-nd.userHdgTrk);
if (diffRot<180 and diffRot>48) {
nd.symbols.hdgBug2ValR.setText(sprintf("%03d", bugRot+0.5)); #CHECKME - not sure about adding +.5 as "hdg" process
nd.symbols.hdgBug2ValR.show();
} else {
nd.symbols.hdgBug2ValR.hide();
}
},
is_false: func(nd) nd.symbols.hdgBug2ValR.hide(),
},
},
{
id:"hdgBug2ValL",
impl: {
init: func(nd,symbol),
predicate: func(nd) nd.in_mode("toggle_display_mode", ["MAP"]) and !nd.get_switch("toggle_centered"),
is_true: func(nd) {
var bugRot = vhdg_bug.getValue();
var diffRot = (bugRot>nd.userHdgTrk) ? (360+nd.userHdgTrk-bugRot) : (nd.userHdgTrk-bugRot);
if (diffRot<180 and diffRot>48) {
nd.symbols.hdgBug2ValL.setText(sprintf("%03d", bugRot-0.5)); #CHECKME - not sure about adding +.5 as "hdg" process
nd.symbols.hdgBug2ValL.show();
} else {
nd.symbols.hdgBug2ValL.hide();
}
},
is_false: func(nd) nd.symbols.hdgBug2ValL.hide(),
},
},
{
id:"hdgGroup",
impl: {

View file

@ -0,0 +1,41 @@
# Projection-related helper functions for the MFD maps
var Camera = {
new: func(options) {
var m = {
parents: [Camera],
camGeo: options['camGeo'] or geo.aircraft_position(),
camHdg: options['camHdg'] or 0,
range: options['range'] or 10.0,
screenRange: options['screenRange'] or 256.0,
screenCX: options['screenCX'] or options['screenRange'] or 256.0,
screenCY: options['screenCY'] or options['screenRange'] or 256.0,
};
return m;
},
setRange: func(range) {
me.range = range;
},
repositon: func(geo, hdg) {
me.camGeo = geo;
me.camHdg = hdg;
},
project: func(targetGeo) {
var dist = me.camGeo.distance_to(targetGeo) * M2NM;
var bearing = me.camGeo.course_to(targetGeo) - me.camHdg;
return me.projectDistBearing(dist, bearing);
},
projectDistBearing: func(dist, bearing) {
var bearingRad = bearing * D2R;
var tx = math.sin(bearingRad) * dist;
var ty = -math.cos(bearingRad) * dist;
var x = tx * me.screenRange / me.range + me.screenCX;
var y = ty * me.screenRange / me.range + me.screenCY;
return [x, y];
},
};

359
Nasal/Displays/traffic.nas Normal file
View file

@ -0,0 +1,359 @@
# Traffic layer
var ATCSwitchAbvBlw = props.globals.getNode("/controls/atc/abv-blw");
var ATCSwitchThrtAll = props.globals.getNode("/controls/atc/thrt-all");
var colorByLevel = {
# 0: other
0: [0.8,0.8,0.8],
# 1: proximity
1: [0.8,0.8,0.8],
# 2: traffic advisory (TA)
2: [1,0.75,0],
# 3: resolution advisory (RA)
3: [1,0,0],
};
var doFill = {
0: 0,
1: 1,
2: 1,
3: 1,
};
var colorDefault = [0.8,0.8,0.8];
var drawBlip = func(elem, threatLvl) {
if (threatLvl == 3) {
# resolution advisory
elem.reset()
.setStrokeLineWidth(0)
.moveTo(-17,-17)
.horiz(34)
.vert(34)
.horiz(-34)
.close();
}
elsif (threatLvl == 2) {
# traffic advisory
elem.reset()
.moveTo(-17,0)
.setStrokeLineWidth(0)
.arcSmallCW(17,17,0,34,0)
.arcSmallCW(17,17,0,-34,0);
}
elsif (threatLvl == 1) {
# proximate traffic
elem.reset()
.setStrokeLineWidth(0)
.moveTo(-14,0)
.lineTo(0,-17)
.lineTo(14,0)
.lineTo(0,17)
.close();
}
else {
# other traffic
elem.reset()
.setStrokeLineWidth(4)
.moveTo(-10,0)
.lineTo(0,-14)
.lineTo(10,0)
.lineTo(0,14)
.close();
}
};
var TrafficLayer = {
new: func(camera, group) {
var m = {
parents: [TrafficLayer],
camera: camera,
refAlt: 0,
group: group,
items: {},
sorted: {}, # TODO - only the most 8 relevant advisories
values: {},
updateKeys: [],
addListener: nil,
delListener: nil,
};
return m;
},
makeElems: func () {
if (me.group == nil) return nil;
var elems = {};
elems['master'] = me.group.createChild('group');
elems['blip'] = elems.master.createChild('path')
.setStrokeLineWidth(0);
elems['text'] = elems.master.createChild('text')
.setDrawMode(canvas.Text.TEXT)
.setText(sprintf("0"))
.setFont("LiberationFonts/LiberationSans-Regular.ttf")
.setColor(1,1,1)
.setFontSize(32)
.setAlignment("center-center");
elems['master'].hide();
elems['arrowUp'] = elems.master.createChild("text")
.setDrawMode(canvas.Text.TEXT)
.setText(sprintf("↑"))
.setFont("LiberationFonts/LiberationSans-Regular.ttf")
.setColor(1,1,1)
.setFontSize(50)
.setTranslation(16, 2)
.setAlignment("left-center");
elems['arrowDown'] = elems.master.createChild("text")
.setDrawMode(canvas.Text.TEXT)
.setText(sprintf("↓"))
.setFont("LiberationFonts/LiberationSans-Regular.ttf")
.setColor(1,1,1)
.setFontSize(50)
.setTranslation(16, 2)
.setAlignment("left-center");
return elems;
},
start: func() {
me.stop();
var self = me;
me.addListener = setlistener('/ai/models/model-added', func(changed, listen, mode, is_child) {
var path = changed.getValue();
if (path == nil) return;
#printf("ADD: %s", path);
me.values[path] = nil;
var masterProp = props.globals.getNode(path);
var prop = {
'master': masterProp,
};
if (me.items[path] == nil) {
me.items[path] = {
prop: prop,
elems: me.makeElems(),
data: {'threatLevel': -2},
};
}
else {
me.items[path].prop = prop;
me.items[path].data = {'threatLevel': -2};
}
}, 1, 1);
me.delListener = setlistener('/ai/models/model-removed', func(changed, listen, mode, is_child) {
var path = changed.getValue();
if (path == nil) return;
#printf("DEL: %s", path);
me.values[path] = nil;
if (me.items[path] == nil) return;
if (me.items[path] != nil) {
me.items[path].prop = nil;
me.items[path].elems.master.hide();
me.items[path].data = {};
}
}, 1, 1);
},
stop: func() {
if (me.addListener != nil) {
removelistener(me.addListener);
me.addListener = nil;
}
if (me.delListener != nil) {
removelistener(me.delListener);
me.delListener = nil;
}
me.items = {};
if (me.group != nil) {
me.group.removeAllChildren();
}
},
nxtupdatetime: 0,
update: func() {
var _tm = systime();
if (me.nxtupdatetime != 0) {
if (_tm<me.nxtupdatetime) return;
}
me.nxtupdatetime = _tm + 0.5; # refresh rate at 500ms
if (size(me.updateKeys) == 0) {
me.updateKeys = keys(me.items);
}
var path = pop(me.updateKeys);
foreach (var path; keys(me.items)) {
me.updateItem(path);
}
},
redraw: func() {
foreach (var path; keys(me.items)) {
me.redrawItem(me.items[path],me.values[path]);
}
},
setRefAlt: func(alt) {
me.refAlt = alt;
},
proplist: ['lat', 'lon', 'alt', 'threatLevel', 'callsign', 'vspeed', 'tas'],
updateItem: func(path) {
var item = me.items[path];
if (item == nil) return;
if (item.prop == nil) {
if (item.elems != nil) {
item.elems.master.hide();
}
return;
}
if (item.prop['lat'] == nil) {
item.prop['lat'] = item.prop.master.getNode('position/latitude-deg');
item.prop['lon'] = item.prop.master.getNode('position/longitude-deg');
item.prop['alt'] = item.prop.master.getNode('position/altitude-ft');
}
if (item.prop['threatLevel'] == nil) {
item.prop['threatLevel'] = item.prop.master.getNode('tcas/threat-level');
}
if (item.prop['callsign'] == nil) {
item.prop['callsign'] = item.prop.master.getNode('callsign');
}
if (item.prop['vspeed'] == nil) {
item.prop['vspeed'] = item.prop.master.getNode('velocities/vertical-speed-fps');
item.prop['tas'] = item.prop.master.getNode('velocities/true-airspeed-kt');
}
# this item has a prop associated with it
if (item.elems == nil) {
item.elems = me.makeElems();
}
var oldThreatLevel = item.data['threatLevel'];
foreach (var k; me.proplist) {
if (item.prop[k] != nil) {
item.data[k] = item.prop[k].getValue();
}
}
if (item.data['threatLevel'] == -1) { # airplane with TCAS not enabled or supported
me.values[path] = {visible: 0};
return;
}
if (oldThreatLevel != item.data['threatLevel']) {
item.data['threatLevelDirty'] = 1;
}
var newThrtAll = ATCSwitchThrtAll.getValue();
if (newThrtAll == 1) { # AUTO - display only proximate and higher advisories
if (item.data['threatLevel']==0) {
me.values[path] = {visible: 0};
return;
}
}
var _lat = item.data['lat'];
var _lon = item.data['lon'];
var alt = item.data['alt'];
var vspeed = item.data['vspeed'];
var tas = item.data['tas'];
me.values[path] = nil;
if (_lat != nil and _lon != nil and vspeed != nil) {
if (tas<80) { # flying airplane only
me.values[path] = {visible: 0};
return;
}
var top = 27;
var bottom = -27;
if (ATCSwitchAbvBlw.getValue() == -1) {
top = 99;
}
if (ATCSwitchAbvBlw.getValue() == 1) {
bottom = -99;
}
var altDiff100 = ((alt or me.refAlt) - me.refAlt) / 100;
if (altDiff100 > top or altDiff100 < bottom) { # check TCAS vertical range
me.values[path] = {visible: 0};
return;
}
var _val = {visible:1, lat:_lat, lon:_lon, dirty:item.data['threatLevelDirty']};
var spd = vspeed * 60;
_val.arrowup = (spd > 500);
_val.arrowdown = (spd < -500);
if (math.abs(altDiff100) > 0.5) {
_val.text = sprintf("%+03.0f ", altDiff100);
} else {
_val.text = "";
}
_val.textpy = (altDiff100 < 0) ? 34 : -30;
me.values[path] = _val;
}
},
redrawItem: func (item,val) {
#debug.dump("REDRAW ", item.data);
if (val != nil and val.visible == 1) {
var lat = val.lat;
var lon = val.lon;
var coords = geo.Coord.new();
coords.set_latlon(lat, lon);
var (x, y) = me.camera.project(coords);
item.elems.master.setTranslation(x, y);
#printf("%f %f", x, y);
if (val.dirty) {
#printf('%s THREAT LVL: %i', item.data['callsign'] or '???', item.data['threatLevel']);
var threatLevel = item.data['threatLevel'];
#debug.dump(item.data, threatLevel);
drawBlip(item.elems.blip, threatLevel);
var rgb = colorByLevel[threatLevel];
if (rgb == nil) rgb = colorDefault;
var color = canvas._getColor(rgb);
var (r, g, b) = rgb;
if (threatLevel > 0) {
item.elems.blip.setColorFill(r, g, b);
} else {
item.elems.blip.setColorFill(0,0,0);
item.elems.blip.setColor(r, g, b);
}
item.elems.text.setColor(r, g, b);
item.elems.arrowUp.setColor(r, g, b);
item.elems.arrowDown.setColor(r, g, b);
item.elems.master.set('z-index', threatLevel + 2);
item.data['threatLevelDirty'] = 0;
val.dirty = 0;
}
item.elems.arrowUp.setVisible(val.arrowup);
item.elems.arrowDown.setVisible(val.arrowdown);
item.elems.text.setText(val.text);
item.elems.text.setTranslation(0, val.textpy);
item.elems.master.show();
} else {
item.elems.master.hide();
}
},
};

View file

@ -12,7 +12,6 @@ var leftOverflow = props.globals.initNode("/ECAM/warnings/overflow-left", 0, "B
var rightOverflow = props.globals.initNode("/ECAM/warnings/overflow-right", 0, "BOOL");
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"), props.globals.initNode("/sim/sound/warnings/cchord", 0, "BOOL")];
@ -76,6 +75,33 @@ var warningNodes = {
greenYellowFuel: props.globals.initNode("/ECAM/warnings/hyd/green-yellow-fuel-consumpt"),
leftElevFail: props.globals.initNode("/ECAM/warnings/fctl/leftElevFault"),
rightElevFail: props.globals.initNode("/ECAM/warnings/fctl/rightElevFault"),
flapNotZero: props.globals.initNode("/ECAM/warnings/fctl/flaps-not-zero"),
slatsConfig: props.globals.initNode("/ECAM/warnings/fctl/slats-config-output"),
flapsConfig: props.globals.initNode("/ECAM/warnings/fctl/flaps-config-output"),
spdBrkConfig: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-config-output"),
pitchTrimConfig: props.globals.initNode("/ECAM/warnings/fctl/pitch-trim-config-output"),
rudTrimConfig: props.globals.initNode("/ECAM/warnings/fctl/rudder-trim-config-output"),
parkBrkConfig: props.globals.initNode("/ECAM/warnings/fctl/park-brk-config-output"),
slatsConfig2: props.globals.initNode("/ECAM/warnings/fctl/slats-config-range"),
flapsConfig2: props.globals.initNode("/ECAM/warnings/fctl/flaps-config-range"),
spdBrkConfig2: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-config-range"),
pitchTrimConfig2: props.globals.initNode("/ECAM/warnings/fctl/pitch-trim-config-range"),
rudTrimConfig2: props.globals.initNode("/ECAM/warnings/fctl/rudder-trim-config-range"),
dcEssFuelConsumptionIncreased: props.globals.initNode("/ECAM/warnings/logic/dc-ess-fuel-consumption-increased"),
dcEssFMSPredictions: props.globals.initNode("/ECAM/warnings/logic/dc-ess-fms-predictions-unreliable"),
dc2FuelConsumptionIncreased: props.globals.initNode("/ECAM/warnings/logic/dc-2-fuel-consumption-increased"),
dc2FMSPredictions: props.globals.initNode("/ECAM/warnings/logic/dc-2-fms-predictions-unreliable"),
thrLeversNotSet: props.globals.initNode("/ECAM/warnings/logic/eng/thr-lever-not-set"),
revSet: props.globals.initNode("/ECAM/warnings/logic/eng/reverse-set"),
eng1Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-fail"),
eng2Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-fail"),
phase5Trans: props.globals.initNode("/ECAM/warnings/logic/eng/phase-5-output"),
eng1Shutdown: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-shutdown"),
eng2Shutdown: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-shutdown"),
acEssBusAltn: props.globals.initNode("/ECAM/warnings/logic/ac-ess-bus-altn-feed"),
gen1Off: props.globals.initNode("/ECAM/warnings/logic/elec/gen-1-off"),
gen2Off: props.globals.initNode("/ECAM/warnings/logic/elec/gen-2-off"),
spdBrkOut: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-still-out"),
},
Timers: {
apuFaultOutput: props.globals.initNode("/ECAM/warnings/timer/apu-fault-output"),
@ -110,6 +136,20 @@ var warningNodes = {
navTerrFault: props.globals.initNode("/ECAM/warnings/timer/nav-gpws-terr-fault"),
leftElevFail: props.globals.initNode("/ECAM/warnings/fctl/leftElevFault-output"),
rightElevFail: props.globals.initNode("/ECAM/warnings/fctl/rightElevFault-output"),
staticInverter: props.globals.initNode("/systems/electrical/some-electric-thingie/static-inverter-timer"),
dcEmerConfig: props.globals.initNode("/ECAM/warnings/logic/dc-emer-config-output"),
dc12Fault: props.globals.initNode("/ECAM/warnings/logic/dc-1-2-output"),
dcEssFault: props.globals.initNode("/ECAM/warnings/logic/dc-ess-output"),
dc1Fault: props.globals.initNode("/ECAM/warnings/logic/dc-1-output"),
dc2Fault: props.globals.initNode("/ECAM/warnings/logic/dc-2-output"),
dcBatFault: props.globals.initNode("/ECAM/warnings/logic/dc-bat-output"),
ac1Fault: props.globals.initNode("/ECAM/warnings/logic/ac-1-output"),
ac2Fault: props.globals.initNode("/ECAM/warnings/logic/ac-2-output"),
acEssFault: props.globals.initNode("/ECAM/warnings/logic/ac-ess-output"),
dcEssShed: props.globals.initNode("/ECAM/warnings/logic/dc-ess-shed-output"),
acEssShed: props.globals.initNode("/ECAM/warnings/logic/ac-ess-shed-output"),
centerPumpsOff: props.globals.initNode("/ECAM/warnings/fuel/center-pumps-off-output"),
lowLevelBoth: props.globals.initNode("/ECAM/warnings/fuel/lo-level-l-r-output"),
},
Flipflops: {
apuGenFault: props.globals.initNode("/ECAM/warnings/flipflop/apu-gen-fault"),
@ -389,6 +429,7 @@ var ECAM_controller = {
m.active = 0;
}
}
me._ready = 1;
},
clear: func() {
hasCleared = 0;
@ -479,7 +520,7 @@ var ECAM_controller = {
};
setlistener("/systems/electrical/bus/dc-ess", func {
if (dc_ess.getValue() < 25) {
if (systems.ELEC.Bus.dcEss.getValue() < 25) {
ECAM_controller.reset();
}
}, 0, 0);

File diff suppressed because it is too large Load diff

View file

@ -10,6 +10,7 @@
# Left E/WD
var warnings = std.Vector.new([
# LEVEL 3 WARN
var stall = warning.new(msg: "", aural: 2),
var flap_not_zero = warning.new(msg: "F/CTL FLAP LVR NOT ZERO", colour: "r", aural: 0, light: 0, isMainMsg: 1),
@ -47,12 +48,12 @@ var warnings = std.Vector.new([
var eng1FireFlAgent1Timer = warning.new(msg: " -AGENT 1 AFT 10 S.DISCH", colour: "w"),
var eng1FireFlAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng1FireFlATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng1FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w", isMainMsg: 1),
var eng1FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w"),
var eng1FireFlAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
# ENG 1 FIRE (ground)
var eng1FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var eng1FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w", isMainMsg: 1),
var eng1FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w"),
var eng1FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"),
var eng1FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng1FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
@ -70,12 +71,12 @@ var warnings = std.Vector.new([
var eng2FireFlAgent1Timer = warning.new(msg: " -AGENT 1 AFT 10 S.DISCH", colour: "w"),
var eng2FireFlAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng2FireFlATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng2FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w", isMainMsg: 1),
var eng2FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w"),
var eng2FireFlAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
# ENG 2 FIRE (ground)
var eng2FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var eng2FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w", isMainMsg: 1),
var eng2FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w"),
var eng2FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"),
var eng2FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng2FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
@ -85,6 +86,20 @@ var warnings = std.Vector.new([
var eng2FireGnAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
var eng2FireGnEvac = warning.new(msg: " -EMER EVAC PROC...APPLY", colour: "c"),
# ADR 1 + 2 + 3 FAULT
var ADR123Fault = warning.new(msg: "NAV ADR1+2+3 FAULT ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var ADR123FaultAP = warning.new(msg: " -AP+FD..............OFF", colour: "c"),
var ADR123FaultATHR = warning.new(msg: " -ATHR...............OFF", colour: "c"),
var ADR123FaultPRBW = warning.new(msg: " -PROBE/WINDOW HEAT...ON", colour: "c"),
var ADR123FaultBUSSC = warning.new(msg: " -CAPT BKUP SPD/ALT...ON", colour: "c"),
var ADR123FaultBUSSF = warning.new(msg: " -FO BKUP SPD/ALT.....ON", colour: "c"),
var ADR123FaultADRPB = warning.new(msg: " -ADR 1+2+3 P/B......OFF", colour: "c"),
var ADR123FaultSPD = warning.new(msg: " -SPD......FLY THE GREEN", colour: "c"),
var ADR123FaultAOADISAG = warning.new(msg: " •IF AOA DISAGREE: ", colour: "w"),
var ADR123FaultBUSSINOP = warning.new(msg: " BKUP SPD/ALT.DO NOT USE", colour: "c"),
var ADR123FaultSTBY = warning.new(msg: " -STBY INST.MAY BE UNREL", colour: "c"),
var ADR123FaultPROC = warning.new(msg: " -ALL ADR OFF PROC.APPLY", colour: "c"),
# APU FIRE
var apuFire = warning.new(msg: "APU FIRE ", colour: "r", aural: 0, light: 0, isMainMsg: 1, sdPage: "apu"),
var apuFirePB = warning.new(msg: " -APU FIRE P/B......PUSH", colour: "c"),
@ -105,6 +120,37 @@ var warnings = std.Vector.new([
var rud_trim_config_1 = warning.new(msg: " NOT IN T.O. RANGE", colour: "r", aural: 0, light: 0),
var park_brk_config = warning.new(msg: "CONFIG PARK BRK ON", colour: "r", aural: 0, light: 0),
# EXCESS CAB ALT
var excessCabAlt = warning.new(msg: "CAB PR EXCESS CAB ALT", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var excessCabAltMask = warning.new(msg: " -CREW OXY MASKS.....USE", colour: "c"),
var excessCabAltSigns = warning.new(msg: " -SIGNS...............ON", colour: "c"),
var excessCabAltEmerD = warning.new(msg: " •EMER DESCENT:", colour: "w"),
var excessCabAltDES = warning.new(msg: " -DESCENT.......INITIATE", colour: "c"),
var excessCabAltTHRLVR = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var excessCabAltSPDBRK = warning.new(msg: " -SPD BRK...........FULL", colour: "c"),
var excessCabAltSPD = warning.new(msg: " SPD.....MAX/APPROPRIATE", colour: "c"),
var excessCabAltENG = warning.new(msg: " -ENG MODE...........IGN", colour: "c"),
var excessCabAltCAB = warning.new(msg: " -CABIN CREW......ADVISE", colour: "c"),
var excessCabAltPA = warning.new(msg: " -EMER DES (PA).ANNOUNCE", colour: "c"),
var excessCabAltXPDR = warning.new(msg: " -XPDR 7700.....CONSIDER", colour: "c"),
var excessCabAltMEA = warning.new(msg: " MAX FL.....100/MEA-MORA", colour: "c"),
var excessCabAltCabAlt = warning.new(msg: " •IF CAB ALT>14000 FT:", colour: "w"),
var excessCabAltMasks = warning.new(msg: " -PAX OXY MASKS...MAN ON", colour: "c"),
# ENG 1 OIL LO PR
var eng1OilLoPr = warning.new(msg: "ENG 1 OIL LO PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var eng1OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w"),
var eng1OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w"),
var eng1OilLoPrThrot = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
var eng1OilLoPrMaster = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
# ENG 2 OIL LO PR
var eng2OilLoPr = warning.new(msg: "ENG 2 OIL LO PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var eng2OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w"),
var eng2OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w"),
var eng2OilLoPrThrot = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
var eng2OilLoPrMaster = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
# FCTL L+R ELEV FAULT
var lrElevFault = warning.new(msg: "F/CTL L+R ELEV FAULT", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var lrElevFaultSpeed = warning.new(msg: " MAX SPEED.......320/.77", colour: "c"),
@ -116,8 +162,8 @@ var warnings = std.Vector.new([
var gearNotDownLocked = warning.new(msg: "L/G GEAR NOT DOWNLOCKED", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var gearNotDownLockedRec = warning.new(msg: " -L/G LEVER......RECYCLE", colour: "c"),
var gearNotDownLockedWork = warning.new(msg: " •IF UNSUCCESSFUL:", colour: "c"),
var gearNotDownLocked120 = warning.new(msg: " AFTER 120S:", colour: "c"),
var gearNotDownLockedWork = warning.new(msg: " •IF UNSUCCESSFUL:", colour: "w"),
var gearNotDownLocked120 = warning.new(msg: " AFTER 120S:", colour: "w"),
var gearNotDownLockedGrav = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"),
# Autopilot off involuntary
@ -125,18 +171,34 @@ var warnings = std.Vector.new([
# Cargo smoke
var cargoSmokeFwd = warning.new(msg: "SMOKE FWD CARGO SMOKE", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var cargoSmokeFwdFans = warning.new(msg: " -CAB FANS...........OFF", colour: "c"),
var cargoSmokeFwdGrdClsd = warning.new(msg: " •IF FWD CRG CLSD:", colour: "w"),
var cargoSmokeFwdAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"),
var cargoSmokeFwdGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w"),
var cargoSmokeFwdDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
var cargoSmokeFwdDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"),
var cargoSmokeAft = warning.new(msg: "SMOKE AFT CARGO SMOKE", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var cargoSmokeAftFans = warning.new(msg: " -CAB FANS...........OFF", colour: "c"),
var cargoSmokeAftGrdClsd = warning.new(msg: " •IF AFT CRG CLSD:", colour: "w"),
var cargoSmokeAftAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"),
var cargoSmokeAftGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w"),
var cargoSmokeAftDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
var cargoSmokeAftDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"),
# Lavatory SMOKE
var lavatorySmoke = warning.new(msg: "SMOKE LAVATORY SMOKE ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var lavatorySmokeComm = warning.new(msg: "-CKPT/CAB COM.ESTABLISH ", colour: "c"),
# EXCES RESID PR
var excessResidPress = warning.new(msg: "CAB PR EXCES RESIDUAL PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var excessResidPressPack1 = warning.new(msg: "-PACK 1.............OFF", colour: "c"),
var excessResidPressPack2 = warning.new(msg: "-PACK 2.............OFF", colour: "c"),
var excessResidPressCabCr = warning.new(msg: "-CABIN CREW.......ALERT", colour: "c"),
# ESS Bus on Bat
# NEW EMER CONFIG
var essBusOnBat = warning.new(msg: "ELEC ESS BUSES ON BAT", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var essBusOnBatLGUplock = warning.new(msg: " •WHEN L/G UPLOCKED :", colour: "w"),
var essBusOnBatManOn = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
var essBusOnBatRetract = warning.new(msg: " •IF L/G RETRACT FAULT:", colour: "w"),
var essBusOnBatMinSpeed = warning.new(msg: " MIN RAT SPD......180 KT", colour: "c"),
var essBusOnBatLGCB = warning.new(msg: " -LGCIU1 C/B (C09)..PULL", colour: "c"),
var essBusOnBatManOn2 = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
var essBusOnBatMinSpeed = warning.new(msg: " MIN RAT SPD......140 KT", colour: "c"),
# Emer Config
var emerconfig = warning.new(msg: "ELEC EMER CONFIG", colour: "r", aural: 0, light: 0, isMainMsg: 1),
@ -148,13 +210,14 @@ var warnings = std.Vector.new([
var emerconfigManOn = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
var emerconfigEngMode = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
var emerconfigRadio = warning.new(msg: " -VHF1/ATC1..........USE", colour: "c"),
var emerconfigIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var emerconfigFuelG = warning.new(msg: " FUEL GRVTY FEED", colour: "c"),
var emerconfigFuelG2 = warning.new(msg: " PROC:GRVTY FUEL FEEDING", colour: "c"),
var emerconfigFAC = warning.new(msg: " -FAC 1......OFF THEN ON", colour: "c"),
var emerconfigBusTie2 = warning.new(msg: " -BUS TIE...........AUTO", colour: "c"),
var emerconfigAPU = warning.new(msg: " -APU (IF AVAIL)...START", colour: "c"),
var emerconfigVent = warning.new(msg: " -BLOWER + EXTRACT..OVRD", colour: "c"),
var emerconfigFuelIN = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
var emerconfigFMSPRD = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
# B + Y LO PR
var hydBYloPr = warning.new(msg: "HYD B+Y SYS LO PR", colour: "r", aural: 0, light: 0, isMainMsg: 1),
@ -190,15 +253,140 @@ var warnings = std.Vector.new([
var hydGYloPrFuelCnsmpt = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
var hydGYloPrFmsPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
# AIR BLEED LEAK
var airBleedLeak = warning.new(msg: "AIR BLEED LEAK ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var airBleedLeakShut = warning.new(msg: " -X BLEED..........SHUT", colour: "c"),
# LEVEL 2 WARN
# THR LEVERS NOT SET
var engThrustLvrNotSet = warning.new(msg: "ENG THR LEVERS NOT SET ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var engThrustLvrNotSetMCT = warning.new(msg: " -THR LEVERS ....MCT/FLX", colour: "c"),
var engThrustLvrNotSetTO = warning.new(msg: " -THR LEVERS.......TO/GA", colour: "c"),
# REV SET
var engRevSet = warning.new(msg: "ENG REV SET ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var engRevSetLevers = warning.new(msg: " -THR LEVER......FWD THR", colour: "c"),
# ENG 1 FAIL
var eng1Fail = warning.new(msg: "ENG 1 FAIL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var thrustMalfunction1 = warning.new(msg: " THRUST MALFUNCTION ", colour: "a"),
var shaftFailure1 = warning.new(msg: " SHAFT FAILURE ", colour: "a"),
var eng1FailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
var eng1FailThrLvrIdle = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
var eng1FailNoRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w"),
var eng1FailMasterOff = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
var eng1FailDamage = warning.new(msg: " IF DAMAGE : ", colour: "w"),
var eng1FailFirePB = warning.new(msg: " -ENG 1 FIRE P/B....PUSH", colour: "c"),
var eng1FailAgent1DischT = warning.new(msg: " -AGENT1 AFTER 10S.DISCH", colour: "c"),
var eng1FailAgent1Disch = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng1FailNoDamage = warning.new(msg: " IF NO DAMAGE : ", colour: "w"),
var eng1FailRelight = warning.new(msg: " -ENG 1 RELIGHT.CONSIDER", colour: "c"),
# ENG 1 OIL HI TEMP
var eng1OilHiTemp = warning.new(msg: "ENG 1 OIL HI TEMP ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng1OilHiTempIdle = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
var eng1OilHiTempSuccess = warning.new(msg: " •IF UNSUCCESSFUL: ", colour: "w"),
var eng1OilHiTempMaster = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
# ENG 1 SHUT DOWN
var eng1ShutDown = warning.new(msg: "ENG 1 SHUT DOWN ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng1ShutDownPack = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var eng1ShutDownXBleed = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
var eng1ShutDownModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
var eng1ShutDownFuelLeak = warning.new(msg: " •IF NO FUEL LEAK :", colour: "w"),
var eng1ShutDownImbalance = warning.new(msg: " -IMBALANCE......MONITOR", colour: "c"),
var eng1ShutDownTCAS = warning.new(msg: " -TCAS MODE SEL.......TA", colour: "c"),
var eng1ShutDownBuffet = warning.new(msg: " •IF BUFFET : ", colour: "w"),
var eng1ShutDownSpeed = warning.new(msg: " MAX SPEED...........240", colour: "c"),
var eng1ShutDownXBleedS = warning.new(msg: " -X BLEED...........SHUT", colour: "c"),
var eng1ShutDownWingAI = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var eng1ShutDownIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
# ENG 2 FAIL
var eng2Fail = warning.new(msg: "ENG 2 FAIL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var thrustMalfunction2 = warning.new(msg: " THRUST MALFUNCTION ", colour: "a"),
var shaftFailure2 = warning.new(msg: " SHAFT FAILURE ", colour: "a"),
var eng2FailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
var eng2FailThrLvrIdle = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
var eng2FailNoRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w"),
var eng2FailMasterOff = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
var eng2FailDamage = warning.new(msg: " IF DAMAGE : ", colour: "w"),
var eng2FailFirePB = warning.new(msg: " -ENG 2 FIRE P/B....PUSH", colour: "c"),
var eng2FailAgent1DischT = warning.new(msg: " -AGENT2 AFTER 10S.DISCH", colour: "c"),
var eng2FailAgent1Disch = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
var eng2FailNoDamage = warning.new(msg: " IF NO DAMAGE : ", colour: "w"),
var eng2FailRelight = warning.new(msg: " -ENG 2 RELIGHT.CONSIDER", colour: "c"),
# ENG 2 OIL HI TEMP
var eng2OilHiTemp = warning.new(msg: "ENG 2 OIL HI TEMP ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng2OilHiTempIdle = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
var eng2OilHiTempSuccess = warning.new(msg: " •IF UNSUCCESSFUL: ", colour: "w"),
var eng2OilHiTempMaster = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
# ENG 2 SHUT DOWN
var eng2ShutDown = warning.new(msg: "ENG 2 SHUT DOWN ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng2ShutDownPack1 = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var eng2ShutDownPack = warning.new(msg: " -PACK 2.............OFF", colour: "c"),
var eng2ShutDownXBleed = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
var eng2ShutDownModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
var eng2ShutDownFuelLeak = warning.new(msg: " •IF NO FUEL LEAK :", colour: "w"),
var eng2ShutDownImbalance = warning.new(msg: " -IMBALANCE......MONITOR", colour: "c"),
var eng2ShutDownTCAS = warning.new(msg: " -TCAS MODE SEL.......TA", colour: "c"),
var eng2ShutDownBuffet = warning.new(msg: " •IF BUFFET : ", colour: "w"),
var eng2ShutDownSpeed = warning.new(msg: " MAX SPEED...........240", colour: "c"),
var eng2ShutDownXBleedS = warning.new(msg: " -X BLEED...........SHUT", colour: "c"),
var eng2ShutDownWingAI = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var eng2ShutDownIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
# SAT ABOVE FLEX TEMP
var satAbvFlexTemp = warning.new(msg: "ENG SAT ABOVE FLEX TEMP", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var satAbvFlexTempCheck = warning.new(msg: " -T.O DATA.........CHECK", colour: "c"),
# B RSVR LO LVL
var hydBSysLoLvl = warning.new(msg: "HYD B RSVR LO LVL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var hydBSysLoLvlPump = warning.new(msg: " -BLUE ELEC PUMP.....OFF ", colour: "c"),
# G RSVR LO LVL
var hydGSysLoLvl = warning.new(msg: "HYD G RSVR LO LVL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var hydGSysLoLvlPtu = warning.new(msg: " -PTU................OFF ", colour: "c"),
var hydGSysLoLvlPump = warning.new(msg: " -GREEN ENG 1 PUMP...OFF ", colour: "c"),
# Y RSVR LO LVL
var hydYSysLoLvl = warning.new(msg: "HYD Y RSVR LO LVL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var hydYSysLoLvlPtu = warning.new(msg: " -PTU................OFF ", colour: "c"),
var hydYSysLoLvlPump = warning.new(msg: " -YELLOW ENG 2 PUMP..OFF ", colour: "c"),
var hydYSysLoLvlElec = warning.new(msg: " -YELLOW ELEC PUMP...OFF ", colour: "c"),
# B SYS LO PR
var hydBSysLoPr = warning.new(msg: "HYD B SYS LO PR ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var hydBSysLoPrFuel = warning.new(msg: " FUEL CONSUMPT INCRSD ", colour: "c"),
var hydBSysLoPrFmsPred = warning.new(msg: " FMS PRED UNRELIABLE ", colour: "c"),
# G SYS LO PR
var hydGSysLoPr = warning.new(msg: "HYD G SYS LO PR ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var hydGSysLoPrFuel = warning.new(msg: " FUEL CONSUMPT INCRSD ", colour: "c"),
var hydGSysLoPrFmsPred = warning.new(msg: " FMS PRED UNRELIABLE ", colour: "c"),
var hydGSysLoPrEngPump = warning.new(msg: " G ENG 1 PUMP LO PR ", colour: "a"),
# Y SYS LO PR
var hydYSysLoPr = warning.new(msg: "HYD Y SYS LO PR ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var hydYSysLoPrAccu = warning.new(msg: " BRK Y ACCU PR MONITOR ", colour: "c"),
var hydYSysLoPrFuel = warning.new(msg: " FUEL CONSUMPT INCRSD ", colour: "c"),
var hydYSysLoPrFmsPred = warning.new(msg: " FMS PRED UNRELIABLE ", colour: "c"),
var hydYSysLoPrEngPump = warning.new(msg: " Y ENG 2 PUMP LO PR ", colour: "a"),
# DC EMER CONFIG
var dcEmerconfig = warning.new(msg: "ELEC DC EMER CONFIG", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var dcEmerconfigManOn = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
var dcEmerconfigFuel = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
# DC BUS 1 OR 2 FAULT
var dcBus12Fault = warning.new(msg: "ELEC DC BUS 1+2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var dcBus12FaultBlower = warning.new(msg: " -BLOWER............OVRD", colour: "c"),
var dcBus12FaultExtract = warning.new(msg: " -EXTRACT...........OVRD", colour: "c"),
var dcBus12FaultBaroRef = warning.new(msg: " -BARO REF.........CHECK", colour: "c"),
var dcBus12FaultFuel = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
var dcBus12FaultPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
var dcBus12FaultIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var dcBus12FaultBrking = warning.new(msg: " MAX BRK........1000 PSI", colour: "c"),
@ -216,21 +404,30 @@ var warnings = std.Vector.new([
var DcEssBusFaultRadio = warning.new(msg: " -VHF 2 OR 3.........USE", colour: "c"),
var DcEssBusFaultRadio2 = warning.new(msg: " -AUDIO SWTG......SELECT", colour: "c"),
var DcEssBusFaultBaro = warning.new(msg: " -BARO REF.........CHECK", colour: "c"),
var DcEssBusFaultGPWS = warning.new(msg: " -GPWS...............OFF", colour: "c"),
var DcEssBusFaultGear = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"),
var DcEssBusFaultGPWS = warning.new(msg: " -GPWS SYS...........OFF", colour: "c"),
var DcEssBusFaultFuel = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
var DcEssBusFaultPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
var DcEssBusFaultIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
# AC BUS 2 FAULT
var AcBus2Fault = warning.new(msg: "ELEC AC BUS 2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var AcBus2FaultExtract = warning.new(msg: " -EXTRACT...........OVRD", colour: "c"),
var AcBus2FaultAtc = warning.new(msg: " -ATC..............SYS 1", colour: "c"),
# DC BUS 1 FAULT
var dcBus1Fault = warning.new(msg: "ELEC DC BUS 1 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var dcBus1FaultBlower = warning.new(msg: " -BLOWER............OVRD", colour: "c"),
var dcBus1FaultExtract = warning.new(msg: " -EXTRACT...........OVRD", colour: "c"),
var dcBus1FaultIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
# DC BUS 2 FAULT
var dcBus2Fault = warning.new(msg: "ELEC DC BUS 2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var dcBus2FaultAirData = warning.new(msg: " -AIR DATA SWTG......F/O", colour: "c"),
var dcBus2FaultBaro = warning.new(msg: " -BARO REF.........CHECK", colour: "c"),
var dcBus2FaultGear = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"),
var dcBus2FaultFuel = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
var dcBus2FaultPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
# DC BAT BUS FAULT
var dcBusBatFault = warning.new(msg: "ELEC DC BAT BUS FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
@ -244,23 +441,39 @@ var warnings = std.Vector.new([
var acBusEssShed = warning.new(msg: "ELEC AC ESS BUS SHED", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var acBusEssShedAtc = warning.new(msg: " -ATC..............SYS 2", colour: "c"),
# IDG 1 DISCONNECTED
var idg1Disc = warning.new(msg: "ELEC IDG 1 DISCONNECTED", colour: "a", aural: 1, light: 1, isMainMsg: 1),
# IDG 2 DISCONNECTED
var idg2Disc = warning.new(msg: "ELEC IDG 2 DISCONNECTED", colour: "a", aural: 1, light: 1, isMainMsg: 1),
# GEN 1 FAULT
var gen1fault = warning.new(msg: "ELEC GEN 1 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gen1faultGen = warning.new(msg: "-GEN 1......OFF THEN ON", colour: "c"),
var gen1faultGen = warning.new(msg: " -GEN 1......OFF THEN ON", colour: "c"),
var gen1faultGen2 = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"),
var gen1faultGen3 = warning.new(msg: "-GEN 1..............OFF", colour: "c"),
var gen1faultGen3 = warning.new(msg: " -GEN 1..............OFF", colour: "c"),
# ESS TR FAULT
var essTRFault = warning.new(msg: "ELEC ESS TR FAULT ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
# GEN 2 FAULT
var gen2fault = warning.new(msg: "ELEC GEN 2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gen2faultGen = warning.new(msg: "-GEN 2......OFF THEN ON", colour: "c"),
var gen2faultGen = warning.new(msg: " -GEN 2......OFF THEN ON", colour: "c"),
var gen2faultGen2 = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"),
var gen2faultGen3 = warning.new(msg: "-GEN 2..............OFF", colour: "c"),
var gen2faultGen3 = warning.new(msg: " -GEN 2..............OFF", colour: "c"),
# APU GEN FAULT
var apuGenfault = warning.new(msg: "ELEC APU GEN FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var apuGenfaultGen = warning.new(msg: "-APU GEN....OFF THEN ON", colour: "c"),
var apuGenfaultGen = warning.new(msg: " -APU GEN....OFF THEN ON", colour: "c"),
var apuGenfaultGen2 = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"),
var apuGenfaultGen3 = warning.new(msg: "-APU GEN............OFF", colour: "c"),
var apuGenfaultGen3 = warning.new(msg: " -APU GEN............OFF", colour: "c"),
# GEN OFF
var gen1Off = warning.new(msg: "ELEC GEN 1 OFF ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gen2Off = warning.new(msg: "ELEC GEN 2 OFF ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
# APU GEN FAULT
var acEssBusAltn = warning.new(msg: "ELEC AC ESS BUS ALTN", colour: "a", aural: 1, light: 1, isMainMsg: 1),
# L ELEV FAULT
var lElevFault = warning.new(msg: "F/CTL L ELEV FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
@ -272,6 +485,9 @@ var warnings = std.Vector.new([
var rElevFaultCare = warning.new(msg: " MANEUVER WITH CARE", colour: "c"),
var rElevFaultPitch = warning.new(msg: " FOR GA:MAX PITCH 15 DEG", colour: "c"),
# F/CTL SPD BRK STILL OUT
var fctlSpdBrkStillOut = warning.new(msg: "F/CTL SPD BRK STILL OUT ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
# DIRECT LAW
var directLaw = warning.new(msg: "F/CTL DIRECT LAW", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var directLawProt = warning.new(msg: " (PROT LOST)", colour: "a"),
@ -342,6 +558,24 @@ var warnings = std.Vector.new([
var fcuFault2 = warning.new(msg: "AUTO FLT FCU 2 FAULT", colour: "a", isMainMsg: 1),
var fcuFault2Baro = warning.new(msg: " -BARO REF.......X CHECK", colour: "c"),
# FUEL
var wingLoLvl = warning.new(msg: "FUEL L+R WING TK LO LVL", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var wingLoLvlManMode = warning.new(msg: " -FUEL MODE SEL......MAN", colour: "c"),
var wingLoLvlPumpL1 = warning.new(msg: " -L TK PUMP 1.........ON", colour: "c"),
var wingLoLvlPumpL2 = warning.new(msg: " -L TK PUMP 2.........ON", colour: "c"),
var wingLoLvlPumpC1 = warning.new(msg: " -CTR TK PUMP 1.......ON", colour: "c"),
var wingLoLvlPumpR1 = warning.new(msg: " -R TK PUMP 1.........ON", colour: "c"),
var wingLoLvlPumpR2 = warning.new(msg: " -R TK PUMP 2.........ON", colour: "c"),
var wingLoLvlPumpC2 = warning.new(msg: " -CTR TK PUMP 2.......ON", colour: "c"),
var wingLoLvlLeak = warning.new(msg: " •IF NO FUEL LEAK: ", colour: "w"),
var wingLoLvlXFeed = warning.new(msg: " -FUEL X FEED.........ON", colour: "c"),
var wingLoLvlGrav = warning.new(msg: " •IF GRVTY FEED: ", colour: "w"),
var wingLoLvlXFeedOff = warning.new(msg: " -FUEL X FEED........OFF", colour: "c"),
var ctrPumpsOff = warning.new(msg: "FUEL CTR TK PUMPS OFF ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var ctrPumpsOffPump1 = warning.new(msg: " -CTR TK PUMP 1.......ON", colour: "c"),
var ctrPumpsOffPump2 = warning.new(msg: " -CTR TK PUMP 2.......ON", colour: "c"),
# APU shutdown
var apuEmerShutdown = warning.new(msg: "APU EMER SHUT DOWN", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var apuEmerShutdownMast = warning.new(msg: " -MASTER SW..........OFF", colour: "c"),
@ -362,8 +596,8 @@ var warnings = std.Vector.new([
var hpValve2Fault = warning.new(msg: "AIR ENG 2 HP VALVE FAULT", colour: "a"),
var xBleedFault = warning.new(msg: "AIR X BLEED FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var xBleedFaultMan = warning.new(msg: " -X BLEED........MAN CTL", colour: "c"),
var xBleedOff = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var xBleedIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var xBleedFaultWAI = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var xBleedFaultICE = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var bleed1Off = warning.new(msg: "AIR BLEED 1 OFF", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var bleed2Off = warning.new(msg: "AIR BLEED 2 OFF", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var engBleedLowTemp = warning.new(msg: "AIR ENG 1+2 BLEED LO TEMP", colour: "a", aural: 1, light: 1, isMainMsg: 1),
@ -525,9 +759,11 @@ var leftmemos = std.Vector.new([
var strobe_lt_off = warning.new(msg: "STROBE LT OFF" ),
var outr_tk_fuel_xfrd = warning.new(msg: "OUTR TK FUEL XFRD" ),
var fob_3T = warning.new(msg: "FOB BELOW 3T" ),
var fob_66L = warning.new(msg: "FOB BELOW 6600LBS" ),
var gpws_flap_mode_off = warning.new(msg: "GPWS FLAP MODE OFF" ),
var atc_datalink_stby = warning.new(msg: "ATC DATALINK STBY" ), # Not yet implemented
var company_datalink_stby = warning.new(msg: "COMPANY DATALINK STBY"), # Not yet implemented
var acars_stby = warning.new(msg: "ACARS STBY" ), # Not yet implemented
]);
# Right E/WD

View file

@ -66,7 +66,7 @@ var FCUController = {
me.FCU2 = FCU.new(systems.ELEC.Bus.dc2);
me._init = 1;
},
loop: func() {
loop: func(notification) {
if (me._init == 0) { return; }
# Update FCU Power
@ -82,11 +82,11 @@ var FCUController = {
}
foreach (var update_item; me.update_items) {
update_item.update(nil);
update_item.update(notification);
}
},
update_items: [
props.UpdateManager.FromPropertyHashList(["/it-autoflight/output/fd1","/it-autoflight/output/fd2", "/it-autoflight/output/ap1", "/it-autoflight/output/ap2"], 1, func(notification)
props.UpdateManager.FromPropertyHashList(["/it-autoflight/output/fd1","/it-autoflight/output/fd2", "/it-autoflight/output/ap1", "/it-autoflight/output/ap2"], nil, func(notification)
{
updateActiveFMGC();
}

View file

@ -428,13 +428,14 @@ var flightPlanController = {
# flag: is it a navaids DUPLICATENAMES page or not?
# plan: plan
# flagPBD: do we return back to PBD handler or to default waypoint handler?
# flagPROG: do we return back to PROG handler or to default waypoint handler (only if flagPBD false)
createDuplicateNames: func(ghostContainer, index, flag, plan, flagPBD = 0, bearing = -999, distance = -99) {
createDuplicateNames: func(ghostContainer, index, flag, plan, flagPBD = 0, bearing = -999, distance = -99, flagPROG = 0) {
if (canvas_mcdu.myDuplicate[plan] != nil) {
canvas_mcdu.myDuplicate[plan].del();
}
canvas_mcdu.myDuplicate[plan] = nil;
canvas_mcdu.myDuplicate[plan] = mcdu.duplicateNamesPage.new(ghostContainer, index, flag, plan, flagPBD, bearing, distance);
canvas_mcdu.myDuplicate[plan] = mcdu.duplicateNamesPage.new(ghostContainer, index, flag, plan, flagPBD, bearing, distance, flagPROG);
setprop("MCDU[" ~ plan ~ "]/page", "DUPLICATENAMES");
},
@ -639,9 +640,9 @@ var flightPlanController = {
}
} else {
if (type == "navaid") {
me.createDuplicateNames(wpGhostContainer, index, 1, plan, 1, num(textSplit[1]), num(textSplit[2]));
me.createDuplicateNames(wpGhostContainer, index, 1, plan, 1, num(textSplit[1]), num(textSplit[2]), 0);
} else {
me.createDuplicateNames(wpGhostContainer, index, 0, plan, 1, num(textSplit[1]), num(textSplit[2]));
me.createDuplicateNames(wpGhostContainer, index, 0, plan, 1, num(textSplit[1]), num(textSplit[2]), 0);
}
return 2;
}

View file

@ -170,19 +170,18 @@ var update_items = [
var systemsLoop = func(notification) {
if (!systemsInitialized) { return; }
systems.ELEC.loop();
systems.PNEU.loop();
systems.HYD.loop();
systems.ADIRS.loop();
systems.PNEU.loop(notification);
systems.ADIRS.loop(notification);
systems.BrakeSys.update(notification);
systems.HFLoop(notification);
systems.APUController.loop();
systems.BrakeSys.update();
fadec.FADEC.loop();
rmp.rmpUpdate();
fcu.FCUController.loop();
fcu.FCUController.loop(notification);
atc.Transponders.vector[atc.transponderPanel.atcSel - 1].update(notification);
dmc.DMController.loop();
atsu.ATSU.loop();
libraries.BUTTONS.update();
systems.HFLoop(notification);
if ((notification.engine1State == 2 or notification.engine1State == 3) and collectorTankL.getValue() < 1) {
systems.cutoff_one();

View file

@ -174,6 +174,13 @@ var Instrumentation = {
pnlModeNum: [props.globals.initNode("/instrumentation/efis[0]/mfd/pnl_mode-num", 2, "INT"), props.globals.initNode("/instrumentation/efis[1]/mfd/pnl_mode-num", 2, "INT")],
},
},
GPS: {
altitude: props.globals.getNode("/instrumentation/gps/indicated-altitude-ft"),
latitude: props.globals.getNode("/instrumentation/gps/indicated-latitude-deg"),
longitude: props.globals.getNode("/instrumentation/gps/indicated-longitude-deg"),
trackMag: props.globals.getNode("/instrumentation/gps/indicated-track-magnetic-deg"),
gs: props.globals.getNode("/instrumentation/gps/indicated-ground-speed-kt"),
},
MKVII: {
Inputs: {
Discretes: {
@ -246,6 +253,7 @@ var Sim = {
Time: {
deltaRealtimeSec: props.globals.getNode("/sim/time/delta-realtime-sec"),
elapsedSec: props.globals.getNode("/sim/time/elapsed-sec"),
gmtString: props.globals.getNode("/sim/time/gmt-string"),
UTC: {
day: props.globals.getNode("/sim/time/utc/day"),
month: props.globals.getNode("/sim/time/utc/month"),

View file

@ -74,29 +74,44 @@ var closestAirportPage = {
me._range += 250;
}
}
me.L1 = [me.airports[0].id, nil, "grn"];
me.R1 = ["----", "UTC ", "grn"];
me.L2 = [me.airports[1].id, nil, "grn"];
me.R2 = ["----", nil, "grn"];
me.L3 = [me.airports[2].id, nil, "grn"];
me.R3 = ["----", nil, "grn"];
me.L4 = [me.airports[3].id, nil, "grn"];
me.R4 = ["----", nil, "grn"];
if (size(me.airports) >= 1) {
me.L1 = [me.airports[0].id, nil, "grn"];
me.R1 = ["----", "UTC ", "grn"];
}
if (size(me.airports) >= 2) {
me.L2 = [me.airports[1].id, nil, "grn"];
me.R2 = ["----", nil, "grn"];
}
if (size(me.airports) >= 3) {
me.L3 = [me.airports[2].id, nil, "grn"];
me.R3 = ["----", nil, "grn"];
}
if (size(me.airports) >= 4) {
me.L4 = [me.airports[3].id, nil, "grn"];
me.R4 = ["----", nil, "grn"];
}
me.listPopulated = 1;
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateBrgDist: func() {
if (!me.listPopulated) { return; }
me.cdVector[0] = courseAndDistance(me.airports[0]);
me.cdVector[1] = courseAndDistance(me.airports[1]);
me.cdVector[2] = courseAndDistance(me.airports[2]);
me.cdVector[3] = courseAndDistance(me.airports[3]);
var magvarLocal = magvar();
me.C1 = [math.round(me.cdVector[0][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[0][1]), " BRG DIST", "grn"];
me.C2 = [math.round(me.cdVector[1][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[1][1]) , nil, "grn"];
me.C3 = [math.round(me.cdVector[2][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[2][1]), nil, "grn"];
me.C4 = [math.round(me.cdVector[3][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[3][1]), nil, "grn"];
if (size(me.airports) >= 1) {
me.cdVector[0] = courseAndDistance(me.airports[0]);
me.C1 = [math.round(me.cdVector[0][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[0][1]), " BRG DIST", "grn"];
}
if (size(me.airports) >= 2) {
me.cdVector[1] = courseAndDistance(me.airports[1]);
me.C2 = [math.round(me.cdVector[1][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[1][1]) , nil, "grn"];
}
if (size(me.airports) >= 3) {
me.cdVector[2] = courseAndDistance(me.airports[2]);
me.C3 = [math.round(me.cdVector[2][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[2][1]), nil, "grn"];
}
if (size(me.airports) >= 4) {
me.cdVector[3] = courseAndDistance(me.airports[3]);
me.C4 = [math.round(me.cdVector[3][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[3][1]), nil, "grn"];
}
if (me.manAirport != nil) {
me.C5 = [math.round(courseAndDistance(me.manAirport)[0] - magvarLocal) ~ " " ~ math.round(courseAndDistance(me.manAirport)[1]), nil, "grn"];
}

View file

@ -5,19 +5,18 @@
var dataInput = func(key, i) {
if (key == "L1") {
setprop("MCDU[" ~ i ~ "]/page", "POSMON");
}
if (key == "L2") {
} elsif (key == "L2") {
setprop("MCDU[" ~ i ~ "]/page", "IRSMON");
}
if (key == "L5") {
} elsif (key == "L3") {
setprop("MCDU[" ~ i ~ "]/page", "GPSMON");
} elsif (key == "L5") {
if (canvas_mcdu.myClosestAirport[i] != nil) {
canvas_mcdu.myClosestAirport[i].del();
}
canvas_mcdu.myClosestAirport[i] = nil;
canvas_mcdu.myClosestAirport[i] = closestAirportPage.new(i);
setprop("MCDU[" ~ i ~ "]/page", "CLOSESTAIRPORT");
}
if (key == "R5") {
} elsif (key == "R5") {
setprop("MCDU[" ~ i ~ "]/page", "PRINTFUNC");
}
}
@ -25,23 +24,17 @@ var dataInput = func(key, i) {
var printInput = func(key, i) {
if (key == "L1") {
setprop("FMGC/print/mcdu/page1/L1auto", 1);
}
if (key == "L2") {
} elsif (key == "L2") {
setprop("FMGC/print/mcdu/page1/L2auto", 1);
}
if (key == "L3") {
} elsif (key == "L3") {
setprop("FMGC/print/mcdu/page1/L3auto", 1);
}
if (key == "L5") {
} elsif (key == "L5") {
setprop("MCDU[" ~ i ~ "]/page", "DATA");
}
if (key == "R1") {
} elsif (key == "R1") {
setprop("FMGC/print/mcdu/page1/R1req", 1);
}
if (key == "R2") {
} elsif (key == "R2") {
setprop("FMGC/print/mcdu/page1/R2req", 1);
}
if (key == "R3") {
} elsif (key == "R3") {
setprop("FMGC/print/mcdu/page1/R3req", 1);
}
}
@ -49,29 +42,21 @@ var printInput = func(key, i) {
var printInput2 = func(key, i) {
if (key == "L1") {
setprop("FMGC/print/mcdu/page2/L1auto", 1);
}
if (key == "L2") {
} elsif (key == "L2") {
setprop("FMGC/print/mcdu/page2/L2auto", 1);
}
if (key == "L3") {
} elsif (key == "L3") {
setprop("FMGC/print/mcdu/page2/L3auto", 1);
}
if (key == "L4") {
} elsif (key == "L4") {
setprop("FMGC/print/mcdu/page2/L4auto", 1);
}
if (key == "L6") {
} elsif (key == "L6") {
setprop("MCDU[" ~ i ~ "]/page", "DATA");
}
if (key == "R1") {
} elsif (key == "R1") {
setprop("FMGC/print/mcdu/page2/R1req", 1);
}
if (key == "R2") {
} elsif (key == "R2") {
setprop("FMGC/print/mcdu/page2/R2req", 1);
}
if (key == "R3") {
} elsif (key == "R3") {
setprop("FMGC/print/mcdu/page2/R3req", 1);
}
if (key == "R4") {
} elsif (key == "R4") {
setprop("FMGC/print/mcdu/page2/R4req", 1);
}
}

View file

@ -28,7 +28,7 @@ var duplicateNamesPage = {
enableScroll: 0,
scroll: 0,
distances: nil,
new: func(vector, index, type, computer, flagPBD = 0, pbdBrg = -999, pbdDist = -99) {
new: func(vector, index, type, computer, flagPBD = 0, pbdBrg = -999, pbdDist = -99, flagProg = 0) {
var dn = {parents:[duplicateNamesPage]};
dn.vector = vector;
dn.index = index;
@ -37,6 +37,7 @@ var duplicateNamesPage = {
dn.bearing = pbdBrg;
dn.distance = pbdDist;
dn.computer = computer;
dn.flagPROG = flagProg;
dn._setupPageWithData();
dn.distances = [];
return dn;
@ -134,7 +135,7 @@ var duplicateNamesPage = {
},
pushButtonLeft: func(indexSelect) {
if (!dirToFlag) {
if (!me.flagPBD) {
if (!me.flagPBD and !me.flagPROG) {
if (size(me.vector[0].id) == 5) {
fmgc.flightPlanController.insertFix(me.vector[0].id, me.index, me.computer, 1, indexSelect - 1);
setprop("MCDU[" ~ me.computer ~ "]/page", "F-PLNA");
@ -145,9 +146,16 @@ var duplicateNamesPage = {
fmgc.flightPlanController.insertNavaid(me.vector[0].id, me.index, me.computer, 1, indexSelect - 1);
setprop("MCDU[" ~ me.computer ~ "]/page", "F-PLNA");
}
} else {
} elsif (me.flagPBD) {
fmgc.flightPlanController.getWPforPBD(me.vector[0].id ~ "/" ~ me.bearing ~ "/" ~ me.distance, me.index, me.computer, 1, indexSelect - 1);
setprop("MCDU[" ~ me.computer ~ "]/page", "F-PLNA");
} else {
if (me.type == 0) {
mcdu.bearingDistances[me.computer].newPointResult(me.vector, 1, indexSelect - 1);
} else {
mcdu.bearingDistances[me.computer].newPointNavaid(me.vector, 1, indexSelect - 1);
}
pagebutton("prog",me.computer);
}
} else {
canvas_mcdu.myDirTo[me.computer].fieldL1(me.vector[0].id, 1, indexSelect - 1);

View file

@ -128,7 +128,7 @@ var doorR4_pos = props.globals.getNode("/sim/model/door-positions/doorr4/positio
# Detect OFF without IN
var lastgs0 = 0;
var lastgear0 = 0;
#var lastgear0 = 0;
var lastgsrestart = 0;
# Check for A/C state change - advice me for a better method, please :/
@ -145,7 +145,6 @@ var waitingOOOIChange = maketimer(1, func(){ # 1sec precision
if (gs > 9) { # imho - it's useful few speed tollerance, 10kts min speed on taxiways - CHECKME - better with pushback detection?
FlightLogDatabase.addReport(OOOIReport.new(expectedOOOIState));
expectedOOOIState = 1;
lastgear0 = 0;
}
}
} else if (expectedOOOIState == 1) { # OFF
@ -163,7 +162,7 @@ var waitingOOOIChange = maketimer(1, func(){ # 1sec precision
if (gear0 and (phase == 7 or phase == 0)) { #done or preflight
FlightLogDatabase.addReport(OOOIReport.new(expectedOOOIState));
expectedOOOIState = 3;
lastgear0 = 0;
lastgs0 = 0;
lastgsrestart = 0;
}
} else if (expectedOOOIState == 3) { # IN
@ -178,9 +177,9 @@ var waitingOOOIChange = maketimer(1, func(){ # 1sec precision
}
}
else if (!gear0) { # OFF without IN -> TO without stop and opening doors
if (lastgear0) FlightLogDatabase.addReport(OOOIReport.new(expectedOOOIState,lastgear0)); # IN (estimated)
if (lastgs0>0) FlightLogDatabase.addReport(OOOIReport.new(expectedOOOIState,lastgs0)); # IN (estimated)
FlightLogDatabase.addPage();
if (lastgsrestart) FlightLogDatabase.addReport(OOOIReport.new(0,lastgsrestart)); # OUT (estimated)
if (lastgsrestart>0) FlightLogDatabase.addReport(OOOIReport.new(0,lastgsrestart)); # OUT (estimated)
expectedOOOIState = 1; # go on to OFF state
}
else if (gs > 9 and lastgsrestart == 0) { # try to detect OFF without IN

View file

@ -534,6 +534,8 @@ var lskbutton = func(btn, i) {
statusInput("L3",i);
} else if (page == "RADNAV") {
radnavInput("L3",i);
} else if (page == "DATA") {
dataInput("L3",i);
} else if (page == "PRINTFUNC") {
printInput("L3",i);
} else if (page == "PRINTFUNC2") {
@ -853,7 +855,13 @@ var lskbutton = func(btn, i) {
} else if (page == "F-PLNA" or page == "F-PLNB") {
canvas_mcdu.myFpln[i].pushButtonLeft(6);
} else if (page == "LATREV" or page == "VERTREV" or page == "DUPLICATENAMES") {
pageNode[i].setValue("F-PLNA");
if (page != "DUPLICATENAMES") {
pageNode[i].setValue("F-PLNA");
} else {
if (canvas_mcdu.myDuplicate[i] != nil and canvas_mcdu.myDuplicate[i].flagPROG) {
pagebutton("prog",i);
}
}
} else if (page == "ARRIVAL") {
canvas_mcdu.myArrival[i].arrPushbuttonLeft(6);
} else if (page == "DEPARTURE" or page == "HOLD" or page == "AIRWAYS") {
@ -1123,6 +1131,8 @@ var rskbutton = func(btn, i) {
}
}
pageNode[i].setValue("WINDCRZ");
} else if (find("PROG",page) != -1) {
progGENInput("R4",i);
} else if (page == "PERFTO") {
perfTOInput("R4",i);
} else if (page == "PERFAPPR") {

284
Nasal/MCDU/PROG.nas Normal file
View file

@ -0,0 +1,284 @@
# Copyright (c) 2020 Matthew Maring (mattmaring)
var altSet = props.globals.getNode("it-autoflight/input/alt", 1);
var brgDistResult = nil;
var progGENInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "R4") {
if (scratchpad == "CLR") {
bearingDistances[i].selectedPoint = nil;
bearingDistances[i].displayID = nil;
mcdu_scratchpad.scratchpads[i].empty();
} else {
brgDistResult = bearingDistances[i].newPoint(mcdu_scratchpad.scratchpads[i].scratchpad);
if (brgDistResult != 1) {
mcdu_message(i, "NOT IN DATA BASE");
} else {
mcdu_scratchpad.scratchpads[i].empty();
}
}
}
}
var progTOInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1") {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
var crzs = size(scratchpad);
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100 and fmgc.FMGCInternal.crzSet) {
fmgc.FMGCInternal.crzProg = scratchpad;
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
}
var progCLBInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1") {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
var crzs = size(scratchpad);
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
fmgc.FMGCInternal.crzProg = scratchpad;
mcdu_scratchpad.scratchpads[i].empty();
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
}
var progCRZInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1") {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
var crzs = size(scratchpad);
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
fmgc.FMGCInternal.crzProg = scratchpad;
mcdu_scratchpad.scratchpads[i].empty();
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
}
var progDESInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1") {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
if (fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
var crzs = size(scratchpad);
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
fmgc.FMGCInternal.crzProg = scratchpad;
mcdu_scratchpad.scratchpads[i].empty();
if (fmgc.FMGCInternal.phase == 4 or fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
}
var _result = [nil, nil];
var _courseAndDistance = [nil, nil];
var bearingDistanceInstance = {
new: func(id) {
var bd = {parents: [bearingDistanceInstance]};
bd.id = id;
bd.bearing = 360;
bd.distance = 0;
bd.selectedPoint = nil;
bd.displayID = nil;
return bd;
},
newPointResult: func(result, duplicateNames = 0, duplicateNamesIndex = nil) {
if (duplicateNames != 0) {
me.selectedPoint = result[duplicateNamesIndex];
me.displayID = result[duplicateNamesIndex].id;
} elsif (size(result) > 1) {
if (canvas_mcdu.myDuplicate[me.id] != nil) {
canvas_mcdu.myDuplicate[me.id].del();
}
canvas_mcdu.myDuplicate[me.id] = nil;
canvas_mcdu.myDuplicate[me.id] = mcdu.duplicateNamesPage.new(result, 0, 0, me.id, 0, -999, -999, 1);
setprop("MCDU[" ~ me.id ~ "]/page", "DUPLICATENAMES");
} else {
me.selectedPoint = result[0];
me.displayID = result[0].id;
}
return 1;
},
newPointNavaid: func(result, duplicateNames = 0, duplicateNamesIndex = nil) {
if (duplicateNames != 0) {
me.selectedPoint = result[duplicateNamesIndex];
me.displayID = result[duplicateNamesIndex].id;
} elsif (size(result) > 1) {
if (canvas_mcdu.myDuplicate[me.id] != nil) {
canvas_mcdu.myDuplicate[me.id].del();
}
canvas_mcdu.myDuplicate[me.id] = nil;
canvas_mcdu.myDuplicate[me.id] = mcdu.duplicateNamesPage.new(result, 0, 1, me.id, 0, -999, -999, 1);
setprop("MCDU[" ~ me.id ~ "]/page", "DUPLICATENAMES");
} else {
me.selectedPoint = result[0];
me.displayID = result[0].id;
print("YES");
}
return 1;
},
newPointRWY: func(result,ID) {
if (size(result) > 1) {
#spawnPAGE
} else {
var string = split(left(ID,4),ID)[1];
if (find("C",string) != -1 or find("L",string) != -1 or find("R",string) != -1) {
if (size(string) == 2) {
string = "0" ~ string;
}
} else {
if (size(string) == 1) {
string = "0" ~ string;
}
}
if (contains(result[0].runways,string)) {
me.selectedPoint = {lat: result[0].runways[string].lat, lon: result[0].runways[string].lon};
me.displayID = left(ID,4) ~ string;
return 1;
} else {
return 0;
}
}
return 1;
},
newPointLatLon: func(result) {
return 0;
},
newPoint: func(id) {
_result[me.id] = fmgc.WaypointDatabase.getWP(id);
if (_result[me.id] != nil) {
me.selectedPoint = _result[me.id];
me.displayID = _result[me.id].id;
return 1;
}
if (size(id) >= 2 and size(id) <= 3) {
_result[me.id] = findNavaidsByID(id);
if (size(_result[me.id]) != 0) {
return me.newPointNavaid(_result[me.id]);
} else {
_result[me.id] = findAirportsByICAO(id); # consider 3 letter ICAOs
if (size(_result[me.id]) != 0) {
return me.newPointResult(_result[me.id]);
}
}
return 0;
} elsif (size(id) == 4) {
_result[me.id] = findAirportsByICAO(id);
if (size(_result[me.id]) != 0) {
return me.newPointResult(_result[me.id]);
} else {
_result[me.id] = findFixesByID(id);
if (size(_result[me.id]) != 0) {
return me.newPointResult(_result[me.id]);
}
}
return 0;
} elsif (size(id) >= 5 and size(id) <= 7) {
_result[me.id] = findFixesByID(id);
if (size(_result[me.id]) != 0) {
return me.newPointResult(_result[me.id]);
} else {
_result[me.id] = findAirportsByICAO(left(id,4));
if (size(_result[me.id]) != 0) {
return me.newPointRWY(_result[me.id],id);
}
}
return 0;
} elsif (size(id) >= 12) {
_result[me.id] = fetchLatLon(id);
if (size(_result[me.id]) != 0) {
return me.newPointLatLon(_result[me.id]);
}
return 0;
}
return 0;
},
update: func() {
if (me.selectedPoint == nil) {
return;
}
if (find("PROG",canvas_mcdu.pageProp[me.id].getValue()) == -1) {
return;
}
_courseAndDistance[me.id] = courseAndDistance(me.selectedPoint);
me.bearing = _courseAndDistance[me.id][0];
me.distance = _courseAndDistance[me.id][1];
},
};
var bearingDistances = [bearingDistanceInstance.new(0),bearingDistanceInstance.new(1)];
var BDTimer = maketimer(2, func(){
bearingDistances[0].update();
bearingDistances[1].update();
});
BDTimer.start();

View file

@ -1,33 +0,0 @@
# Copyright (c) 2020 Matthew Maring (mattmaring)
var progCLBInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1") {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
var crzs = size(scratchpad);
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
fmgc.FMGCInternal.crzProg = scratchpad;
mcdu_scratchpad.scratchpads[i].empty();
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
}

View file

@ -1,33 +0,0 @@
# Copyright (c) 2020 Matthew Maring (mattmaring)
var progCRZInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1") {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
var crzs = size(scratchpad);
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
fmgc.FMGCInternal.crzProg = scratchpad;
mcdu_scratchpad.scratchpads[i].empty();
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
}

View file

@ -1,33 +0,0 @@
# Copyright (c) 2020 Matthew Maring (mattmaring)
var progDESInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1") {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
if (fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
var crzs = size(scratchpad);
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
fmgc.FMGCInternal.crzProg = scratchpad;
mcdu_scratchpad.scratchpads[i].empty();
if (fmgc.FMGCInternal.phase == 4 or fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
fmgc.FMGCInternal.phase = 3;
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
}

View file

@ -1,23 +0,0 @@
# Copyright (c) 2020 Matthew Maring (mattmaring)
var altSet = props.globals.getNode("it-autoflight/input/alt", 1);
var progTOInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1") {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil) {
var crzs = size(scratchpad);
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100 and fmgc.FMGCInternal.crzSet) {
fmgc.FMGCInternal.crzProg = scratchpad;
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
}

View file

@ -20,13 +20,12 @@ var Transponder = {
activeADIRS: 1,
condition: 0,
failed: 0,
codeDigitsNodes: [props.globals.getNode("instrumentation/transponder/inputs/digit[0]", 1), props.globals.getNode("instrumentation/transponder/inputs/digit[1]", 1), props.globals.getNode("instrumentation/transponder/inputs/digit[2]", 1), props.globals.getNode("instrumentation/transponder/inputs/digit[3]", 1)],
serviceableNode: props.globals.getNode("instrumentation/transponder/serviceable", 1),
knobNode: props.globals.getNode("instrumentation/transponder/inputs/knob-mode", 1),
identNode: props.globals.getNode("instrumentation/transponder/inputs/ident-btn", 1),
ac1Node: props.globals.getNode("/systems/electrical/bus/ac-1", 1),
tcasNode: props.globals.getNode("instrumentation/tcas/inputs/mode"),
aglNode: props.globals.getNode("position/gear-agl-ft", 1),
codeDigitsNodes: [props.globals.getNode("/instrumentation/transponder/inputs/digit[0]", 1), props.globals.getNode("/instrumentation/transponder/inputs/digit[1]", 1), props.globals.getNode("/instrumentation/transponder/inputs/digit[2]", 1), props.globals.getNode("instrumentation/transponder/inputs/digit[3]", 1)],
serviceableNode: props.globals.getNode("/instrumentation/transponder/serviceable", 1),
knobNode: props.globals.getNode("/instrumentation/transponder/inputs/knob-mode", 1),
identNode: props.globals.getNode("/instrumentation/transponder/inputs/ident-btn", 1),
tcasNode: props.globals.getNode("/instrumentation/tcas/inputs/mode"),
aglNode: props.globals.getNode("/position/gear-agl-ft", 1),
electricNode: props.globals.getNode("/systems/electrical/outputs/transponder", 1), # communicate to generic systems
new: func(elecSrc, ADIRS) {
var t = {parents:[Transponder]};
@ -40,9 +39,9 @@ var Transponder = {
return t;
},
update: func() {
update: func(notification) {
# TCAS - on seperate electrical source, so has to be before transponder electrical checking
if (me.ac1Node.getValue() < 110) {
if (notification.elecAC1 < 110) {
me.tcasNode.setValue(0); # off
} else {
if (me.mode >= 1 and me.mode <= 3) {
@ -285,7 +284,6 @@ var transponderPanel = {
var init = func() {
transponderPanel.atcSwitch(1);
transponderPanel.updateAirData();
transponderTimer.start();
}
# Handler for code change from generic dialog
@ -297,9 +295,6 @@ setlistener("/instrumentation/transponder/id-code", func {
var Transponders = std.Vector.new([Transponder.new("/systems/electrical/bus/ac-ess-shed", 1), Transponder.new("/systems/electrical/bus/ac-2", 2)]);
var transponderTimer = maketimer(0.1, func() {
Transponders.vector[transponderPanel.atcSel - 1].update();
});
setlistener("/systems/navigation/adr/operating-1", func() {
transponderPanel.updateADR1(systems.ADIRS.Operating.adr[0].getValue());

View file

@ -324,7 +324,7 @@ var ADIRS = {
}
),
],
loop: func() {
loop: func(notification) {
if (me._init) {
for (i = 0; i < _NUMADIRU; i = i + 1) {
# update ADR units power
@ -348,7 +348,6 @@ var ADIRS = {
}
# Update VFE
notification = nil;
foreach (var update_item; me.update_items) {
update_item.update(notification);
}

View file

@ -448,4 +448,4 @@ setlistener("/systems/thrust/thr-locked", func {
}, 0, 0);
var lockTimer = maketimer(0.1, checkLockThr);
var lockTimer2 = maketimer(0.1, checkLockThr2);
var lockTimer2 = maketimer(0.1, checkLockThr2);

View file

@ -111,7 +111,7 @@ var BrakeSystem =
},
# update brake energy
update : func()
update : func(notification)
{
if (me.counter == 0) {
me.counter = 1;
@ -122,10 +122,10 @@ var BrakeSystem =
LThermalEnergy = me.thermalEnergy[0];
RThermalEnergy = me.thermalEnergy[1];
me.CurrentTime = pts.Sim.Time.elapsedSec.getValue();
me.CurrentTime = notification.elapsedTime;
dt = me.CurrentTime - me.LastSimTime;
LBrakeLevel = pts.Fdm.JSBsim.Fcs.brake[0].getValue();
RBrakeLevel = pts.Fdm.JSBsim.Fcs.brake[1].getValue();
LBrakeLevel = notification.leftBrakeFCS;
RBrakeLevel = notification.rightBrakeFCS;
tatdegc = pts.Fdm.JSBsim.Propulsion.tatC.getValue() or 0;
if (pts.Sim.replayState.getValue() == 0 and dt < 1.0) {
@ -137,7 +137,7 @@ var BrakeSystem =
LCoolingRatio = LCoolingRatio * 3;
RCoolingRatio = RCoolingRatio * 3;
};
airspeed = pts.Velocities.airspeed.getValue();
airspeed = notification.airspeedV;
if (pts.Gear.position[1].getValue()) {
#increase CoolingRatio if gear down according to airspeed
LCoolingRatio = LCoolingRatio * airspeed;
@ -168,7 +168,7 @@ var BrakeSystem =
L_Thrust = 0;
R_Thrust = 0;
if (pts.Gear.wow[1].getValue()) {
if (notification.gear1Wow) {
var V1 = pts.Velocities.groundspeed.getValue();
var Mass = pts.Fdm.JSBsim.Inertia.weightLbs.getValue() * me.ScalingDivisor;
@ -179,7 +179,7 @@ var BrakeSystem =
LThermalEnergy += (Mass * pts.Gear.compression[1].getValue() * (math.pow(V1, 2) - math.pow(V2_L, 2)) / 2);
if (pts.Controls.Gear.chocks.getValue()) {
if (!pts.Controls.Gear.parkingBrake.getValue()) {
if (!notification.parkingBrake) {
# cooling effect: reduce thermal energy by (LnCoolFactor) * dt
LThermalEnergy = LThermalEnergy * math.exp(LnCoolFactor * dt);
} else {
@ -188,7 +188,7 @@ var BrakeSystem =
LThermalEnergy = (LThermalEnergy * math.exp(LnCoolFactor * dt)) + (L_Thrust * dt);
};
} else {
if (!pts.Controls.Gear.parkingBrake.getValue()) {
if (!notification.parkingBrake) {
if (LBrakeLevel>0) {
if (V2_L>0) {
#LThermalEnergy += (Mass * (math.pow(V1, 2) - math.pow(V2_L, 2)) / 2) + L_thrust;
@ -212,7 +212,7 @@ var BrakeSystem =
RThermalEnergy += (Mass * pts.Gear.compression[2].getValue() * (math.pow(V1, 2) - math.pow(V2_R, 2)) / 2);
if (pts.Controls.Gear.chocks.getValue()) {
if (!pts.Controls.Gear.parkingBrake.getValue()) {
if (!notification.parkingBrake) {
# cooling effect: reduce thermal energy by (RnCoolFactor) * dt
RThermalEnergy = RThermalEnergy * math.exp(RnCoolFactor * dt);
} else {
@ -221,7 +221,7 @@ var BrakeSystem =
RThermalEnergy = (RThermalEnergy * math.exp(RnCoolFactor * dt)) + (R_Thrust * dt);
};
} else {
if (!pts.Controls.Gear.parkingBrake.getValue()) {
if (!notification.parkingBrake) {
if (RBrakeLevel>0) {
if (V2_R>0) {
#RThermalEnergy += (Mass * (math.pow(V1, 2) - math.pow(V2_R, 2)) / 2) + R_thrust;
@ -271,7 +271,7 @@ var BrakeSystem =
if (LThermalEnergy>1 and !me.LSmokeActive) {
# start smoke processing
me.LSmokeActive = 1;
settimer(func { BrakeSys.Lsmoke(); },0);
settimer(func { BrakeSys.Lsmoke(); },0); # is settimer needed?
};
if (RThermalEnergy>1 and !me.RSmokeActive) {
# start smoke processing
@ -406,7 +406,7 @@ var Autobrake = {
me._mode = me.mode.getValue();
me._active = me.active.getBoolValue();
if (me._gnd_speed > 72) {
if (me._mode != 0 and pts.Controls.Engines.Engine.throttle[0].getValue() < 0.15 and pts.Controls.Engines.Engine.throttle[1].getValue() < 0.15 and me._wow0 and systems.HYD.Brakes.askidSw.getValue() and systems.HYD.Psi.green.getValue() >= 2500 ) {
if (me._mode != 0 and pts.Controls.Engines.Engine.throttle[0].getValue() < 0.15 and pts.Controls.Engines.Engine.throttle[1].getValue() < 0.15 and me._wow0 and systems.HYD.Switch.nwsSwitch.getBoolValue() and systems.HYD.Psi.green.getValue() >= 2500 ) {
me.active.setBoolValue(1);
} elsif (me._active) {
me.active.setBoolValue(0);

View file

@ -13,8 +13,6 @@ var dc2 = 0;
# Main class
var ELEC = {
_timer1On: 0,
_timer2On: 0,
EmerElec: props.globals.getNode("/systems/electrical/some-electric-thingie/emer-elec-config"),
Bus: {
acEss: props.globals.getNode("/systems/electrical/bus/ac-ess"),
@ -121,6 +119,7 @@ var ELEC = {
volts: props.globals.getNode("/systems/electrical/sources/emer-gen/output-volt"),
hertz: props.globals.getNode("/systems/electrical/sources/emer-gen/output-hertz"),
voltsRelay: props.globals.getNode("/systems/electrical/relay/emer-glc/output"),
relayPos: props.globals.getNode("/systems/electrical/relay/emer-glc/contact-pos"),
},
Ext: {
volts: props.globals.getNode("/systems/electrical/sources/ext/output-volt"),
@ -206,36 +205,65 @@ var ELEC = {
me.Fail.tr1Fault.setBoolValue(0);
me.Fail.tr2Fault.setBoolValue(0);
},
loop: func() {
_FMGC1: 0,
_FMGC2: 0,
_activeFMGC: nil,
_timer1On: 0,
_timer2On: 0,
loop: func(notification) {
# Autopilot Disconnection routines
if (me.Bus.dcEssShed.getValue() < 25) {
if (fmgc.Output.ap1.getValue() and !me._timer1On) {
me._activeFMGC = fcu.FCUController.activeFMGC.getValue();
me._FMGC1 = fmgc.Output.ap1.getValue();
me._FMGC2 = fmgc.Output.ap2.getValue();
if (notification.dcEssShed < 25) {
if (me._FMGC1 and !me._timer1On) { # delay 1 cycle to avoid spurious
me._timer1On = 1;
settimer(func() {
if (me.Bus.dcEssShed.getValue() < 25) {
fcu.apOff("hard", 1);
if (fcu.FCUController.activeFMGC.getValue() == 1) {
fcu.athrOff("hard");
}
} elsif (me._FMGC1) {
if (notification.dcEssShed < 25) {
fcu.apOff("hard", 1);
if (me._activeFMGC == 1) {
fcu.athrOff("hard");
}
me._timer1On = 0;
}, 0.1);
}
me._timer1On = 0;
}
}
if (me.Bus.dc2.getValue() < 25) {
if (fmgc.Output.ap2.getValue() and !me._timer2On) {
if (notification.dc2 < 25) {
if (me._FMGC2 and !me._timer2On) { # delay 1 cycle to avoid spurious
me._timer2On = 1;
settimer(func() {
if (me.Bus.dc2.getValue() < 25) {
fcu.apOff("hard", 2);
if (fcu.FCUController.activeFMGC.getValue() == 2) {
fcu.athrOff("hard");
}
} elsif (me._FMGC2) {
if (notification.dc2 < 25) {
fcu.apOff("hard", 2);
if (me._activeFMGC == 2) {
fcu.athrOff("hard");
}
me._timer2On = 0;
}, 0.1);
}
me._timer2On = 0;
}
}
},
};
# Emesary
var A320Electrical = notifications.SystemRecipient.new("A320 Electrical",ELEC.loop,ELEC);
emesary.GlobalTransmitter.Register(A320Electrical);
var input = {
"elecAC1": "/systems/electrical/bus/ac-1",
"elecAC2": "/systems/electrical/bus/ac-2",
"elecACEss": "/systems/electrical/bus/ac-ess",
"elecACEssShed": "/systems/electrical/bus/ac-ess-shed",
"dc1": "/systems/electrical/bus/dc-1",
"dc2": "/systems/electrical/bus/dc-2",
"dcBat": "/systems/electrical/bus/dc-bat",
"dcEss": "/systems/electrical/bus/dc-ess",
"dcEssShed": "/systems/electrical/bus/dc-ess-shed",
"dcHot1": "/systems/electrical/bus/dc-hot-1",
"dcHot2": "/systems/electrical/bus/dc-hot-2",
};
foreach (var name; keys(input)) {
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 Electrical", name, input[name]));
}

View file

@ -17,6 +17,7 @@ var cargoTestBtnOff = props.globals.initNode("/controls/fire/cargo/test-off", 0,
var eng1FireWarn = props.globals.initNode("/systems/fire/engine1/warning-active", 0, "BOOL");
var eng2FireWarn = props.globals.initNode("/systems/fire/engine2/warning-active", 0, "BOOL");
var apuFireWarn = props.globals.initNode("/systems/fire/apu/warning-active", 0, "BOOL");
var lavatoryFireWarn = props.globals.getNode("/systems/fire/lavatory/warning", 1);
var eng1Inop = props.globals.initNode("/systems/fire/engine1/det-inop", 0, "BOOL");
var eng2Inop = props.globals.initNode("/systems/fire/engine2/det-inop", 0, "BOOL");
var apuInop = props.globals.initNode("/systems/fire/apu/det-inop", 0, "BOOL");
@ -33,13 +34,15 @@ var eng1Agent2TimerTime = props.globals.initNode("/systems/fire/engine1/agent2-t
var eng2Agent2TimerTime = props.globals.initNode("/systems/fire/engine2/agent2-timer-time", 0, "INT");
var apuAgentTimerTime = props.globals.initNode("/systems/fire/apu/agent-timer-time", 0, "INT");
var fireButtons = [props.globals.getNode("/controls/engines/engine[0]/fire-btn"),props.globals.getNode("/controls/engines/engine[1]/fire-btn"),props.globals.getNode("/controls/apu/fire-btn")];
var fire_init = func {
setprop("/controls/OH/protectors/fwddisch", 0);
setprop("/controls/OH/protectors/aftdisch", 0);
setprop("/controls/fire/cargo/fwddisch", 0);
setprop("/controls/fire/cargo/aftdisch", 0);
setprop("/systems/failures/cargo-fwd-fire", 0);
setprop("/systems/failures/cargo-aft-fire", 0);
setprop("/systems/failures/fire/cargo-fwd-fire", 0);
setprop("/systems/failures/fire/cargo-aft-fire", 0);
setprop("/controls/fire/cargo/test", 0);
fire_timer.start();
}
@ -276,9 +279,9 @@ var detectorLoop = {
}
},
sendSignal: func(system, typeLoop) {
if (system == 0 and !getprop("/systems/failures/engine-left-fire")) { return; }
elsif (system == 1 and !getprop("/systems/failures/engine-right-fire")) { return; }
elsif (system == 2 and !getprop("/systems/failures/apu-fire")) { return; }
if (system == 0 and !getprop("/systems/failures/fire/engine-left-fire")) { return; }
elsif (system == 1 and !getprop("/systems/failures/fire/engine-right-fire")) { return; }
elsif (system == 2 and !getprop("/systems/failures/fire/apu-fire")) { return; }
engFireDetectorUnits.vector[system].receiveSignal(typeLoop);
}
};
@ -303,8 +306,8 @@ var cargoDetectorLoop = {
}
},
sendSignal: func(system, typeLoop) {
if ((system == 0 or system == 1) and !getprop("/systems/failures/cargo-aft-fire")) { return; }
elsif (system == 2 and !getprop("/systems/failures/cargo-fwd-fire")) { return; }
if ((system == 0 or system == 1) and !getprop("/systems/failures/fire/cargo-aft-fire")) { return; }
elsif (system == 2 and !getprop("/systems/failures/fire/cargo-fwd-fire")) { return; }
cargoSmokeDetectorUnits.vector[system].receiveSignal(typeLoop);
}
@ -488,29 +491,29 @@ var checkTwoInop2Timer = maketimer(0.1, checkTwoInop2);
var checkTwoInop3Timer = maketimer(0.1, checkTwoInop3);
# Create fire systems
var engFireDetectorUnits = std.Vector.new([ engFireDetectorUnit.new(0, "/systems/failures/engine-left-fire", "/controls/fire/test-btn-1"), engFireDetectorUnit.new(1, "/systems/failures/engine-right-fire", "/controls/fire/test-btn-2"), engFireDetectorUnit.new(2, "/systems/failures/apu-fire", "/controls/fire/apu-test-btn") ]);
var cargoSmokeDetectorUnits = std.Vector.new([cargoSmokeDetectorUnit.new(0, "/systems/failures/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/cargo-fwd-fire")]);
var engFireDetectorUnits = std.Vector.new([ engFireDetectorUnit.new(0, "/systems/failures/fire/engine-left-fire", "/controls/fire/test-btn-1"), engFireDetectorUnit.new(1, "/systems/failures/fire/engine-right-fire", "/controls/fire/test-btn-2"), engFireDetectorUnit.new(2, "/systems/failures/fire/apu-fire", "/controls/fire/apu-test-btn") ]);
var cargoSmokeDetectorUnits = std.Vector.new([cargoSmokeDetectorUnit.new(0, "/systems/failures/fire/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/fire/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/fire/cargo-fwd-fire")]);
# Create detector loops
var engDetectorLoops = std.Vector.new([
detectorLoop.new(0, 1, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/engine-left-fire"), detectorLoop.new(0, 2, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/engine-left-fire"),
detectorLoop.new(1, 1, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/engine-right-fire"), detectorLoop.new(1, 2, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/engine-right-fire"),
detectorLoop.new(2, 1, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/apu-fire"), detectorLoop.new(2, 2, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/apu-fire")
detectorLoop.new(0, 1, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/fire/engine-left-fire"), detectorLoop.new(0, 2, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-left-fire"),
detectorLoop.new(1, 1, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-right-fire"), detectorLoop.new(1, 2, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/fire/engine-right-fire"),
detectorLoop.new(2, 1, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/apu-fire"), detectorLoop.new(2, 2, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/apu-fire")
]);
var cargoDetectorLoops = std.Vector.new([
cargoDetectorLoop.new(0, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"), cargoDetectorLoop.new(0, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"),
cargoDetectorLoop.new(1, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"), cargoDetectorLoop.new(1, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"),
cargoDetectorLoop.new(2, 1, "/systems/fire/cargo/fwd/temperature", "/systems/failures/cargo-fwd-fire"), cargoDetectorLoop.new(2, 2, "/systems/fire/cargo/fwd/temperature", "/systems/failures/cargo-fwd-fire")
cargoDetectorLoop.new(0, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"), cargoDetectorLoop.new(0, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"),
cargoDetectorLoop.new(1, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"), cargoDetectorLoop.new(1, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"),
cargoDetectorLoop.new(2, 1, "/systems/fire/cargo/fwd/temperature", "/systems/failures/fire/cargo-fwd-fire"), cargoDetectorLoop.new(2, 2, "/systems/fire/cargo/fwd/temperature", "/systems/failures/fire/cargo-fwd-fire")
]);
# Create extinguisher bottles
var extinguisherBottles = std.Vector.new([extinguisherBottle.new(0, "/systems/fire/engine1/disch1", "/systems/electrical/bus/dc-hot-1", "/systems/failures/engine-left-fire", "/systems/fire/engine1/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine1/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/engine-left-fire", "/systems/fire/engine1/warning-active"),
extinguisherBottle.new(0, "/systems/fire/engine2/disch1", "/systems/electrical/bus/dc-hot-2", "/systems/failures/engine-right-fire", "/systems/fire/engine2/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine2/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/engine-right-fire", "/systems/fire/engine2/warning-active"),
extinguisherBottle.new(9, "/systems/fire/apu/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/apu-fire", "/systems/fire/apu/warning-active") ]);
var extinguisherBottles = std.Vector.new([extinguisherBottle.new(0, "/systems/fire/engine1/disch1", "/systems/electrical/bus/dc-hot-1", "/systems/failures/fire/engine-left-fire", "/systems/fire/engine1/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine1/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-left-fire", "/systems/fire/engine1/warning-active"),
extinguisherBottle.new(0, "/systems/fire/engine2/disch1", "/systems/electrical/bus/dc-hot-2", "/systems/failures/fire/engine-right-fire", "/systems/fire/engine2/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine2/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-right-fire", "/systems/fire/engine2/warning-active"),
extinguisherBottle.new(9, "/systems/fire/apu/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/apu-fire", "/systems/fire/apu/warning-active") ]);
# There is only one bottle but the system will think there are two, so other parts work
var cargoExtinguisherBottles = std.Vector.new([extinguisherBottle.new(8, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/cargo-aft-fire", "/systems/fire/cargo/aft/warning-active", 250), extinguisherBottle.new(7, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/cargo-fwd-fire", "/systems/fire/cargo/fwd/warning-active", 250)]);
var cargoExtinguisherBottles = std.Vector.new([extinguisherBottle.new(8, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/cargo-aft-fire", "/systems/fire/cargo/aft/warning-active", 250), extinguisherBottle.new(7, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/cargo-fwd-fire", "/systems/fire/cargo/fwd/warning-active", 250)]);
# Create CIDS channels
var CIDSchannels = std.Vector.new([CIDSchannel.new("/systems/electrical/bus/dc-ess"), CIDSchannel.new("/systems/electrical/bus/dc-2")]);
@ -544,7 +547,7 @@ var createCargoFireBottleListener = func(prop, index) {
# Listeners
setlistener("/controls/engines/engine[0]/fire-btn", func() {
if (getprop("/controls/engines/engine[0]/fire-btn") == 1) {
if (systems.fireButtons[0].getValue() == 1) {
ecam.shutUpYou();
eng1AgentTimerMakeTimer.stop();
eng1AgentTimer.setValue(10);
@ -587,7 +590,7 @@ eng1Agent2TimerMakeTimerFunc = func() {
}
setlistener("/controls/engines/engine[1]/fire-btn", func() {
if (getprop("/controls/engines/engine[1]/fire-btn") == 1) {
if (systems.fireButtons[1].getValue() == 1) {
ecam.shutUpYou();
eng2AgentTimerMakeTimer.stop();
eng2AgentTimer.setValue(10);
@ -652,7 +655,7 @@ apuAgentTimerMakeTimerFunc = func() {
}
setlistener("/controls/fire/test-btn-1", func() {
if (getprop("/systems/failures/engine-left-fire")) { return; }
if (getprop("/systems/failures/fire/engine-left-fire")) { return; }
if (testBtn.getValue() == 1) {
if (systems.ELEC.Bus.dcBat.getValue() > 25 or systems.ELEC.Bus.dcEss.getValue() > 25) {
@ -665,7 +668,7 @@ setlistener("/controls/fire/test-btn-1", func() {
}, 0, 0);
setlistener("/controls/fire/test-btn-2", func() {
if (getprop("/systems/failures/engine-right-fire")) { return; }
if (getprop("/systems/failures/fire/engine-right-fire")) { return; }
if (testBtn2.getValue() == 1) {
if (systems.ELEC.Bus.dcBat.getValue() > 25 or systems.ELEC.Bus.dcEss.getValue() > 25) {
eng2FireWarn.setBoolValue(1);
@ -677,7 +680,7 @@ setlistener("/controls/fire/test-btn-2", func() {
}, 0, 0);
setlistener("/controls/fire/apu-test-btn", func() {
if (getprop("/systems/failures/apu-fire")) { return; }
if (getprop("/systems/failures/fire/apu-fire")) { return; }
if (apuTestBtn.getValue() == 1) {
if (systems.ELEC.Bus.dcBat.getValue() > 25 or systems.ELEC.Bus.dcEss.getValue() > 25) {
apuFireWarn.setBoolValue(1);
@ -689,7 +692,7 @@ setlistener("/controls/fire/apu-test-btn", func() {
}, 0, 0);
setlistener("/controls/fire/cargo/test", func() {
if (getprop("/systems/failures/aft-cargo-fire") or getprop("/systems/failures/fwd-cargo-fire") or systems.ELEC.Bus.dcBat.getValue() < 25 or systems.ELEC.Bus.dcEss.getValue() < 25) { return; }
if (getprop("/systems/failures/fire/aft-cargo-fire") or getprop("/systems/failures/fire/fwd-cargo-fire") or systems.ELEC.Bus.dcBat.getValue() < 25 or systems.ELEC.Bus.dcEss.getValue() < 25) { return; }
if (cargoTestBtn.getBoolValue()) {
cargoTestTime.setValue(elapsedTime.getValue());
cargoTestChecker.start();

View file

@ -10,7 +10,6 @@ var HYD = {
accumPressPsi: props.globals.initNode("/systems/hydraulic/yellow-accumulator-psi-cmd", 0, "INT"),
leftPressPsi: props.globals.initNode("/systems/hydraulic/brakes/pressure-left-psi", 0, "INT"),
rightPressPsi: props.globals.initNode("/systems/hydraulic/brakes/pressure-right-psi", 0, "INT"),
askidSw: props.globals.initNode("/systems/hydraulic/brakes/askidnwssw", 1, "BOOL"),
mode: props.globals.initNode("/systems/hydraulic/brakes/mode", 0, "INT"),
leftbrake: props.globals.getNode("/controls/gear/brake-left"),
rightbrake: props.globals.getNode("/controls/gear/brake-right"),
@ -57,6 +56,7 @@ var HYD = {
rat: props.globals.getNode("/controls/hydraulic/switches/rat-man"),
yellowEDP: props.globals.getNode("/controls/hydraulic/switches/yellow-edp"),
yellowElec: props.globals.getNode("/controls/hydraulic/switches/yellow-elec"),
nwsSwitch: props.globals.getNode("/controls/gear/nws-switch"),
},
Valve: {
yellowFire: props.globals.getNode("/systems/hydraulic/sources/yellow-edp/fire-valve"),
@ -85,97 +85,91 @@ var HYD = {
me.Fail.yellowElec.setBoolValue(0);
me.Fail.yellowLeak.setBoolValue(0);
},
loop: func() {
if (props.globals.getValue("/controls/gear/nws-switch") == 1) {
me.Brakes.askidSw.setBoolValue(1); #true
} else {
me.Brakes.askidSw.setBoolValue(0); #false
}
loop: func(notification) {
# Decrease accumPressPsi when green and yellow hydraulic's aren't pressurized
if (me.Brakes.leftbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
if (me.Brakes.leftbrake.getValue() > 0 or notification.brakesMode == 0) {
lcont = lcont + 1;
} else {
lcont = 0;
}
if (me.Brakes.rightbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
if (me.Brakes.rightbrake.getValue() > 0 or notification.brakesMode == 0) {
rcont = rcont + 1;
} else {
rcont = 0;
}
if (me.Psi.yellow.getValue() < me.Brakes.accumPressPsi.getValue() and me.Brakes.accumPressPsi.getValue() > 0) {
if (notification.yellow < notification.accumPressPsi and notification.accumPressPsi > 0) {
if (lcont == 1) {
me.Brakes.accumPressPsi.setValue(me.Brakes.accumPressPsi.getValue() - 200);
me.Brakes.accumPressPsi.setValue(notification.accumPressPsi - 200);
}
if (rcont == 1) {
me.Brakes.accumPressPsi.setValue(me.Brakes.accumPressPsi.getValue() - 200);
me.Brakes.accumPressPsi.setValue(notification.accumPressPsi - 200);
}
if (me.Brakes.accumPressPsi.getValue() < 0) {
if (notification.accumPressPsi < 0) {
me.Brakes.accumPressPsi.setValue(0);
}
}
# Braking Pressure
if (me.Brakes.mode.getValue() == 1 or (me.Brakes.mode.getValue() == 2 and me.Psi.green.getValue() >= 2500)) {
if (notification.brakesMode == 1 or (notification.brakesMode == 2 and notification.green >= 2500)) {
# Normal braking - Green OK
if (me.Brakes.leftbrake.getValue() > 0) {
me.Brakes.leftPressPsi.setValue(me.Psi.green.getValue() * pts.Fdm.JSBsim.Fcs.brake[0].getValue());
if (notification.leftBrake > 0) {
me.Brakes.leftPressPsi.setValue(notification.green * notification.leftBrakeFCS);
} else {
me.Brakes.leftPressPsi.setValue(0);
}
if (me.Brakes.rightbrake.getValue() > 0) {
me.Brakes.rightPressPsi.setValue(me.Psi.green.getValue() * pts.Fdm.JSBsim.Fcs.brake[1].getValue());
if (notification.rightBrake > 0) {
me.Brakes.rightPressPsi.setValue(notification.green * notification.rightBrakeFCS);
} else {
me.Brakes.rightPressPsi.setValue(0);
}
} else {
if ((me.Brakes.mode.getValue() == 2 and me.Psi.green.getValue() < 2500) or me.Brakes.mode.getValue() == 0) {
if ((notification.brakesMode == 2 and notification.green < 2500) or notification.brakesMode == 0) {
# Alternate Braking (Yellow OK + Antiskid ON + electric OK) - missing condition: BSCU OK-KO
if (me.Psi.yellow.getValue() >= 2500 and me.Brakes.askidSw.getValue() and (systems.ELEC.Bus.dc1.getValue() >= 24 or systems.ELEC.Bus.dc2.getValue() >= 24 or systems.ELEC.Bus.dcEss.getValue() >= 24)) {
if (me.Brakes.leftbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
me.Brakes.leftPressPsi.setValue(me.Psi.yellow.getValue() * pts.Fdm.JSBsim.Fcs.brake[0].getValue());
if (notification.yellow >= 2500 and notification.NWSSwitch and (notification.dc1 >= 24 or notification.dc2 >= 24 or notification.dcEss >= 24)) {
if (notification.leftBrake > 0 or notification.brakesMode == 0) {
me.Brakes.leftPressPsi.setValue(notification.yellow * notification.leftBrakeFCS);
} else {
me.Brakes.leftPressPsi.setValue(0);
}
if (me.Brakes.rightbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
me.Brakes.rightPressPsi.setValue(me.Psi.yellow.getValue() * pts.Fdm.JSBsim.Fcs.brake[1].getValue());
if (notification.rightBrake > 0 or notification.brakesMode == 0) {
me.Brakes.rightPressPsi.setValue(notification.yellow * notification.rightBrakeFCS);
} else {
me.Brakes.rightPressPsi.setValue(0);
}
} else {
# Alternate Braking (Yellow OK + Antiskid OFF + electric OK) - missing condition: BSCU OK-KO
if (me.Psi.yellow.getValue() >= 2500 and !me.Brakes.askidSw.getValue() and (systems.ELEC.Bus.dc1.getValue() >= 24 or systems.ELEC.Bus.dc2.getValue() >= 24 or systems.ELEC.Bus.dcEss.getValue() >= 24)) {
if (me.Brakes.leftbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
me.Brakes.leftPressPsi.setValue(1000 * pts.Fdm.JSBsim.Fcs.brake[0].getValue());
if (notification.yellow >= 2500 and !notification.NWSSwitch and (notification.dc1 >= 24 or notification.dc2 >= 24 or notification.dcEss >= 24)) {
if (notification.leftBrake > 0 or notification.brakesMode == 0) {
me.Brakes.leftPressPsi.setValue(1000 * notification.leftBrakeFCS);
} else {
me.Brakes.leftPressPsi.setValue(0);
}
if (me.Brakes.rightbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
me.Brakes.rightPressPsi.setValue(1000 * pts.Fdm.JSBsim.Fcs.brake[1].getValue());
if (notification.rightBrake > 0 or notification.brakesMode == 0) {
me.Brakes.rightPressPsi.setValue(1000 * notification.rightBrakeFCS);
} else {
me.Brakes.rightPressPsi.setValue(0);
}
} else {
# Alternate Braking (Yellow KO or Antiskid KO or electric KO) - missing condition: BSCU OK-KO
if (me.Brakes.accumPressPsi.getValue() < 1000 and (me.Psi.yellow.getValue() < 2500 or !me.Brakes.askidSw.getValue() or (systems.ELEC.Bus.dc1.getValue() < 24 and systems.ELEC.Bus.dc2.getValue() < 24 and systems.ELEC.Bus.dcEss.getValue() < 24))) {
if (me.Brakes.leftbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
me.Brakes.leftPressPsi.setValue(me.Brakes.accumPressPsi.getValue() * pts.Fdm.JSBsim.Fcs.brake[0].getValue());
if (notification.accumPressPsi < 1000 and (notification.yellow < 2500 or !notification.NWSSwitch or (notification.dc1 < 24 and notification.dc2 < 24 and notification.dcEss < 24))) {
if (notification.leftBrake > 0 or notification.brakesMode == 0) {
me.Brakes.leftPressPsi.setValue(notification.accumPressPsi * notification.leftBrakeFCS);
} else {
me.Brakes.leftPressPsi.setValue(0);
}
if (me.Brakes.rightbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
me.Brakes.rightPressPsi.setValue(me.Brakes.accumPressPsi.getValue() * pts.Fdm.JSBsim.Fcs.brake[1].getValue());
if (notification.rightBrake > 0 or notification.brakesMode == 0) {
me.Brakes.rightPressPsi.setValue(notification.accumPressPsi * notification.rightBrakeFCS);
} else {
me.Brakes.rightPressPsi.setValue(0);
}
} else {
if (me.Brakes.leftbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
me.Brakes.leftPressPsi.setValue(1000 * pts.Fdm.JSBsim.Fcs.brake[0].getValue());
if (notification.leftBrake > 0 or notification.brakesMode == 0) {
me.Brakes.leftPressPsi.setValue(1000 * notification.leftBrakeFCS);
} else {
me.Brakes.leftPressPsi.setValue(0);
}
if (me.Brakes.rightbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
me.Brakes.rightPressPsi.setValue(1000 * pts.Fdm.JSBsim.Fcs.brake[1].getValue());
if (notification.rightBrake > 0 or notification.brakesMode == 0) {
me.Brakes.rightPressPsi.setValue(1000 * notification.rightBrakeFCS);
} else {
me.Brakes.rightPressPsi.setValue(0);
}
@ -192,3 +186,25 @@ setlistener("/controls/gear/gear-down", func {
pts.Controls.Gear.gearDown.setValue(1);
}
});
# Emesary
var A320Hydraulic = notifications.SystemRecipient.new("A320 Hydraulic",HYD.loop,HYD);
emesary.GlobalTransmitter.Register(A320Hydraulic);
var input = {
"blue": "/systems/hydraulic/blue-psi",
"green": "/systems/hydraulic/green-psi",
"yellow": "/systems/hydraulic/yellow-psi",
"brakesMode": "/systems/hydraulic/brakes/mode",
"accumPressPsi": "/systems/hydraulic/yellow-accumulator-psi-cmd",
"leftBrake": "/controls/gear/brake-left",
"rightBrake": "/controls/gear/brake-right",
"leftBrakeFCS": "/fdm/jsbsim/fcs/left-brake-cmd-norm",
"rightBrakeFCS": "/fdm/jsbsim/fcs/right-brake-cmd-norm",
"NWSSwitch": "/controls/gear/nws-switch",
};
foreach (var name; keys(input)) {
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 Hydraulic", name, input[name]));
}

View file

@ -99,6 +99,8 @@ var PNEU = {
hotAir: props.globals.getNode("/systems/air-conditioning/valves/hot-air"),
starter1: props.globals.getNode("/systems/pneumatics/valves/starter-valve-1"),
starter2: props.globals.getNode("/systems/pneumatics/valves/starter-valve-2"),
wingLeft: props.globals.getNode("/systems/pneumatics/valves/wing-ice-1"),
wingRight: props.globals.getNode("/systems/pneumatics/valves/wing-ice-2"),
},
pressMode: props.globals.getNode("/systems/pressurization/mode", 1),
init: func() {
@ -159,9 +161,9 @@ var PNEU = {
me.Fail.trimValveFwd.setBoolValue(0);
me.Fail.xbleed.setBoolValue(0);
},
loop: func() {
wowl = getprop("gear/gear[1]/wow");
wowr = getprop("gear/gear[2]/wow");
loop: func(notification) {
wowl = notification.gear1Wow;
wowr = notification.gear2Wow;
# Legacy pressurization
cabinalt = getprop("/systems/pressurization/cabinalt");

View file

@ -100,4 +100,28 @@ var frameNotification = FrameNotification.new(1);
# Frame count
# 5 = ECAM
# 7 = FWC phases
# 10 = ECAM messages
# 10 = ECAM messages
var SystemRecipient =
{
new: func(_ident,loopFunc, instance)
{
var NewSystemRecipient = emesary.Recipient.new(_ident);
NewSystemRecipient.Receive = func(notification)
{
if (notification.NotificationType == "FrameNotification")
{
if (math.mod(notifications.frameNotification.FrameCount,5) == 0) {
call(loopFunc,[notification],instance, nil, var errors = []);
if (size(errors) > 0) {
debug.printerror(errors);
}
}
return emesary.Transmitter.ReceiptStatus_OK;
}
return emesary.Transmitter.ReceiptStatus_NotProcessed;
};
return NewSystemRecipient;
},
};

View file

@ -42,13 +42,14 @@ input = {
frame_rate: "/sim/frame-rate",
elapsedTime: "/sim/time/elapsed-sec",
FWCPhase: "/ECAM/warning-phase",
gear0Wow: "/gear/gear[0]/wow",
# Just about everything uses these properties at some stage, lets add them here!
elecAC1: "/systems/electrical/bus/ac-1",
elecAC2: "/systems/electrical/bus/ac-2",
elecACEss: "/systems/electrical/bus/ac-ess",
elecACEssShed: "/systems/electrical/bus/ac-ess-shed",
gear0Wow: "/gear/gear[0]/wow",
gear1Wow: "/gear/gear[1]/wow",
gear2Wow: "/gear/gear[2]/wow",
parkingBrake: "/controls/gear/brake-parking",
airspeedV: "/velocities/airspeed-kt",
groundspeed: "/velocities/groundspeed-kt",
engine1State: "/engines/engine[0]/state",
engine2State: "/engines/engine[1]/state",
};

View file

@ -1848,6 +1848,7 @@
<test logic="AND" value="1">
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
/systems/electrical/some-electric-thingie/generator-1-pb eq 1
/controls/electrical/switches/gen-1 eq 1
/controls/electrical/switches/bus-tie eq 0
</test>
</switch>
@ -1857,6 +1858,7 @@
<test logic="AND" value="1">
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
/systems/electrical/some-electric-thingie/generator-2-pb eq 1
/controls/electrical/switches/gen-2 eq 1
/controls/electrical/switches/bus-tie eq 0
</test>
</switch>
@ -1866,6 +1868,7 @@
<test logic="AND" value="1">
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
/systems/electrical/some-electric-thingie/generator-1-pb eq 1
/controls/electrical/switches/gen-1 eq 1
</test>
</switch>
@ -1874,6 +1877,7 @@
<test logic="AND" value="1">
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
/systems/electrical/some-electric-thingie/generator-2-pb eq 1
/controls/electrical/switches/gen-2 eq 1
</test>
</switch>

View file

@ -5,13 +5,13 @@
<system name="A320: Engine Fire">
<channel name="Engine Fire" execrate="8">
<fcs_function name="enginefire1">
<fcs_function name="rubbish/enginefire1">
<function>
<sum>
<property>/systems/fire/engine1/temperature</property>
<product>
<table>
<independentVar lookup="row">/systems/failures/engine-left-fire</independentVar>
<independentVar lookup="row">/systems/failures/fire/engine-left-fire</independentVar>
<tableData>
0 -5
1 30
@ -28,13 +28,13 @@
<output>/systems/fire/engine1/temperature</output>
</fcs_function>
<fcs_function name="enginefire2">
<fcs_function name="rubbish/enginefire2">
<function>
<sum>
<property>/systems/fire/engine2/temperature</property>
<product>
<table>
<independentVar lookup="row">/systems/failures/engine-right-fire</independentVar>
<independentVar lookup="row">/systems/failures/fire/engine-right-fire</independentVar>
<tableData>
0 -5
1 30
@ -51,13 +51,13 @@
<output>/systems/fire/engine2/temperature</output>
</fcs_function>
<fcs_function name="apufire">
<fcs_function name="rubbish/apufire">
<function>
<sum>
<property>/systems/fire/apu/temperature</property>
<product>
<table>
<independentVar lookup="row">/systems/failures/apu-fire</independentVar>
<independentVar lookup="row">/systems/failures/fire/apu-fire</independentVar>
<tableData>
0 -5
1 45
@ -76,13 +76,13 @@
</channel>
<channel name="Cargo Fire" execrate="8">
<fcs_function name="fwdfire">
<fcs_function name="rubbish/fwdfire">
<function>
<sum>
<property>/systems/fire/cargo/fwd/temperature</property>
<product>
<table>
<independentVar lookup="row">/systems/failures/cargo-fwd-fire</independentVar>
<independentVar lookup="row">/systems/failures/fire/cargo-fwd-fire</independentVar>
<tableData>
0 -5
1 30
@ -99,13 +99,13 @@
<output>/systems/fire/cargo/fwd/temperature</output>
</fcs_function>
<fcs_function name="aftfire">
<fcs_function name="rubbish/aftfire">
<function>
<sum>
<property>/systems/fire/cargo/aft/temperature</property>
<product>
<table>
<independentVar lookup="row">/systems/failures/cargo-aft-fire</independentVar>
<independentVar lookup="row">/systems/failures/fire/cargo-aft-fire</independentVar>
<tableData>
0 -5
1 45
@ -121,5 +121,35 @@
</clipto>
<output>/systems/fire/cargo/aft/temperature</output>
</fcs_function>
<fcs_function name="rubbish/lavatory">
<function>
<sum>
<property>/systems/fire/lavatory/temperature</property>
<product>
<table>
<independentVar lookup="row">/systems/failures/fire/lavatory-fire</independentVar>
<tableData>
0 -5
1 45
</tableData>
</table>
<property>simulation/channel-dt</property>
</product>
</sum>
</function>
<clipto>
<min>0</min>
<max>300</max>
</clipto>
<output>/systems/fire/lavatory/temperature</output>
</fcs_function>
<switch name="/systems/fire/lavatory/warning">
<default value="0"/>
<test logic="OR" value="1">
/systems/fire/lavatory/temperature ge 295
</test>
</switch>
</channel>
</system>

View file

@ -229,6 +229,14 @@
</test>
</test>
</switch>
<switch name="/ECAM/phases/monostable/phase-8">
<default value="0"/>
<test logic="OR" value="1">
/ECAM/warning-phase eq 8
</test>
</switch>
</channel>
</system>

File diff suppressed because it is too large Load diff

View file

@ -589,12 +589,12 @@
<default value="0"/>
<test logic="AND" value="1">
/controls/gear/brake-parking ne 1
/systems/hydraulic/brakes/askidnwssw eq 1
/controls/gear/nws-switch eq 1
/systems/hydraulic/green-psi ge 2500
</test>
<test logic="AND" value="2">
/controls/gear/brake-parking ne 1
/systems/hydraulic/brakes/askidnwssw eq 1
/controls/gear/nws-switch eq 1
/systems/hydraulic/yellow-psi ge 2500
</test>
<test logic="AND" value="2">
@ -671,34 +671,34 @@
</test>
</switch>
<switch name="/systems/hydraulics/warnings/blue-lo-pr">
<switch name="/systems/hydraulic/warnings/blue-lo-pr">
<default value="0"/>
<test logic="OR" value="1">
<test logic="AND">
/systems/hydraulic/blue-psi lt 1750
/systems/hydraulics/warnings/blue-lo-pr eq 1
/systems/hydraulic/warnings/blue-lo-pr eq 1
</test>
/systems/hydraulic/blue-psi lt 1450
</test>
</switch>
<switch name="/systems/hydraulics/warnings/green-lo-pr">
<switch name="/systems/hydraulic/warnings/green-lo-pr">
<default value="0"/>
<test logic="OR" value="1">
<test logic="AND">
/systems/hydraulic/green-psi lt 1750
/systems/hydraulics/warnings/green-lo-pr eq 1
/systems/hydraulic/warnings/green-lo-pr eq 1
</test>
/systems/hydraulic/green-psi lt 1450
</test>
</switch>
<switch name="/systems/hydraulics/warnings/yellow-lo-pr">
<switch name="/systems/hydraulic/warnings/yellow-lo-pr">
<default value="0"/>
<test logic="OR" value="1">
<test logic="AND">
/systems/hydraulic/yellow-psi lt 1750
/systems/hydraulics/warnings/yellow-lo-pr eq 1
/systems/hydraulic/warnings/yellow-lo-pr eq 1
</test>
/systems/hydraulic/yellow-psi lt 1450
</test>

View file

@ -1183,28 +1183,47 @@
<rate_limit sense="decr">120</rate_limit>
</actuator>
<switch name="/systems/pneumatics/warnings/crossbleed-disag-open">
<switch name="/systems/pneumatics/warnings/crossbleed-disag-open-man">
<default value="0"/>
<test logic="AND" value="1">
/systems/pneumatics/valves/crossbleed-valve-cmd eq 1
/systems/pneumatics/valves/crossbleed-valve ne 1
/controls/pneumatics/switches/x-bleed eq 2
</test>
</switch>
<switch name="/systems/pneumatics/warnings/crossbleed-disag-open-auto">
<default value="0"/>
<test logic="AND" value="1">
/systems/pneumatics/valves/crossbleed-valve-cmd eq 1
/systems/pneumatics/valves/crossbleed-valve ne 1
/controls/pneumatics/switches/x-bleed eq 1
/systems/electrical/bus/dc-2 ge 25
</test>
</switch>
<switch name="/systems/pneumatics/warnings/crossbleed-disag">
<switch name="/systems/pneumatics/warnings/crossbleed-disag-open">
<default value="0"/>
<test logic="OR" value="1">
/systems/pneumatics/warnings/crossbleed-disag-open-man eq 1
<test logic="AND">
/systems/pneumatics/warnings/crossbleed-disag-open-auto eq 1
/systems/electrical/bus/dc-2 ge 25
</test>
</test>
</switch>
<switch name="/systems/pneumatics/warnings/crossbleed-disag-closed">
<default value="0"/>
<test logic="AND" value="1">
/systems/pneumatics/valves/crossbleed-valve-cmd eq 0
/systems/pneumatics/valves/crossbleed-valve ne 0
</test>
<test logic="AND" value="1">
</switch>
<switch name="/systems/pneumatics/warnings/crossbleed-disag">
<default value="0"/>
<test logic="OR" value="1">
/systems/pneumatics/warnings/crossbleed-disag-closed eq 1
/systems/pneumatics/warnings/crossbleed-disag-open eq 1
</test>
</switch>

View file

@ -6,24 +6,22 @@
<flipflop>
<type>monostable</type>
<inverted type="bool">true</inverted>
<time>
<value>0.1</value>
<value>1.0</value>
</time>
<S>
<property>/controls/electrical/switches/gen-1</property>
<not><property>/controls/electrical/switches/gen-1</property></not>
</S>
<output>/systems/electrical/some-electric-thingie/generator-1-pb</output>
</flipflop>
<flipflop>
<type>monostable</type>
<inverted type="bool">true</inverted>
<time>
<value>0.1</value>
<value>1.0</value>
</time>
<S>
<property>/controls/electrical/switches/gen-2</property>
<not><property>/controls/electrical/switches/gen-2</property></not>
</S>
<output>/systems/electrical/some-electric-thingie/generator-2-pb</output>
</flipflop>
@ -80,6 +78,29 @@
<output>/systems/electrical/some-electric-thingie/generator-2-reset</output>
</flipflop>
<flipflop>
<type>monostable</type>
<time>
<value>10.0</value>
</time>
<S>
<not><property>/systems/electrical/some-electric-thingie/emer-elec-config</property></not>
</S>
<output>/systems/electrical/some-electric-thingie/emer-elec-config-10-sec</output>
</flipflop>
<flipflop>
<type>monostable</type>
<time>
<value>20.0</value>
</time>
<S>
<not><property>/systems/electrical/some-electric-thingie/emer-elec-config</property></not>
</S>
<output>/systems/electrical/some-electric-thingie/emer-elec-config-20-sec</output>
</flipflop>
<flipflop>
<type>RS</type>
<S>
@ -303,7 +324,7 @@
<output>ECAM/warnings/altitude-alert/gear-downlocked-output</output>
</flipflop>
<!-- falling edge detector - take inverse of following -->
<!-- falling edge detector - switch and output both false -->
<flipflop>
<type>monostable</type>
<inverted type="bool">true</inverted>
@ -311,9 +332,9 @@
<value>4.5</value>
</time>
<S>
<property>ECAM/phases/monostable/phase-8</property>
<property>/ECAM/phases/monostable/phase-8</property>
</S>
<output>ECAM/phases/monostable/phase-8-output</output>
<output>/ECAM/phases/monostable/phase-8-output</output>
</flipflop>
<flipflop>
@ -412,30 +433,6 @@
</flipflop>
<!-- falling edge detectors -->
<flipflop>
<type>monostable</type>
<inverted type="bool">true</inverted>
<time>
<value>10.0</value>
</time>
<S>
<property>/ECAM/warnings/timer/xbleed-fault-output</property>
</S>
<output>/ECAM/warnings/timer/xbleed-fault-output-10</output>
</flipflop>
<flipflop>
<type>monostable</type>
<inverted type="bool">true</inverted>
<time>
<value>15.0</value>
</time>
<S>
<property>/controls/engines/engine[0]/fire-btn</property>
</S>
<output>/ECAM/warnings/timer/xbleed-fault-output-15</output>
</flipflop>
<flipflop>
<type>SR</type>
<S>
@ -926,7 +923,7 @@
<value>1.0</value>
</time>
<S>
<property>/ECAM/warnings/logic/stall/phase-8</property>
<property>/ECAM/phases/monostable/phase-8</property>
</S>
<output>/ECAM/warnings/logic/stall/phase-8-output</output>
</flipflop>
@ -1029,4 +1026,139 @@
</R>
<output>/ECAM/phases/phase-calculation/altitude-ge-800</output>
</flipflop>
<flipflop>
<type>SR</type>
<S>
<property>/ECAM/warnings/fctl/flaps-config-set</property>
</S>
<R>
<property>/ECAM/warnings/fctl/flaps-config-reset</property>
</R>
<output>/ECAM/warnings/fctl/flaps-config-output</output>
</flipflop>
<flipflop>
<type>SR</type>
<S>
<property>/ECAM/warnings/fctl/slats-config-set</property>
</S>
<R>
<property>/ECAM/warnings/fctl/slats-config-reset</property>
</R>
<output>/ECAM/warnings/fctl/slats-config-output</output>
</flipflop>
<flipflop>
<type>SR</type>
<S>
<property>/ECAM/warnings/fctl/spd-brk-config-set</property>
</S>
<R>
<property>/ECAM/warnings/fctl/spd-brk-config-reset</property>
</R>
<output>/ECAM/warnings/fctl/spd-brk-config-output</output>
</flipflop>
<flipflop>
<type>SR</type>
<S>
<property>/ECAM/warnings/fctl/pitch-trim-config-set</property>
</S>
<R>
<property>/ECAM/warnings/fctl/pitch-trim-config-reset</property>
</R>
<output>/ECAM/warnings/fctl/pitch-trim-config-output</output>
</flipflop>
<flipflop>
<type>SR</type>
<S>
<property>/ECAM/warnings/fctl/rudder-trim-config-set</property>
</S>
<R>
<property>/ECAM/warnings/fctl/rudder-trim-config-reset</property>
</R>
<output>/ECAM/warnings/fctl/rudder-trim-config-output</output>
</flipflop>
<flipflop>
<type>SR</type>
<S>
<property>/ECAM/warnings/fctl/park-brk-config-set</property>
</S>
<R>
<property>/ECAM/warnings/fctl/park-brk-config-reset</property>
</R>
<output>/ECAM/warnings/fctl/park-brk-config-output</output>
</flipflop>
<flipflop>
<type>RS</type>
<S>
<property>/ECAM/warnings/logic/eng/eng-1-fail-cond-set</property>
</S>
<R>
<property>/ECAM/warnings/logic/eng/eng-1-fail-cond-reset</property>
</R>
<output>/ECAM/warnings/logic/eng/eng-1-fail-cond</output>
</flipflop>
<flipflop>
<type>RS</type>
<S>
<property>/ECAM/warnings/logic/eng/eng-2-fail-cond-set</property>
</S>
<R>
<property>/ECAM/warnings/logic/eng/eng-2-fail-cond-reset</property>
</R>
<output>/ECAM/warnings/logic/eng/eng-2-fail-cond</output>
</flipflop>
<flipflop>
<type>RS</type>
<S>
<property>/ECAM/warnings/logic/eng/eng-1-fail-set</property>
</S>
<R>
<property>/ECAM/warnings/logic/eng/eng-1-fail-reset</property>
</R>
<output>/ECAM/warnings/logic/eng/eng-1-fail-output</output>
</flipflop>
<flipflop>
<type>RS</type>
<S>
<property>/ECAM/warnings/logic/eng/eng-2-fail-set</property>
</S>
<R>
<property>/ECAM/warnings/logic/eng/eng-2-fail-reset</property>
</R>
<output>/ECAM/warnings/logic/eng/eng-2-fail-output</output>
</flipflop>
<flipflop>
<type>monostable</type>
<inverted type="bool">true</inverted>
<time>
<value>30.0</value>
</time>
<S>
<property>/ECAM/warnings/logic/eng/phase-5</property>
</S>
<output>/ECAM/warnings/logic/eng/phase-5-output</output>
</flipflop>
<flipflop>
<type>monostable</type>
<inverted type="bool">true</inverted>
<time>
<value>1.0</value>
</time>
<S>
<property>/ECAM/warnings/logic/eng/phase-5-output</property>
</S>
<output>/ECAM/warnings/logic/eng/phase-5-output-2</output>
</flipflop>
</PropertyList>

View file

@ -79,7 +79,40 @@
<input>0</input>
<output>/controls/engines/idle-limit</output>
</filter>
<filter>
<name>Engines At Idle Stage 1</name>
<type>gain</type>
<gain>1.0</gain>
<input>
<expression>
<difference>
<table>
<max>
<property>/engines/engine[0]/n1-actual</property>
<property>/engines/engine[1]/n1-actual</property>
</max>
<entry><ind> 18.9</ind><dep>0</dep></entry>
<entry><ind>103.8</ind><dep>1</dep></entry>
</table>
<value>0.005</value>
</difference>
</expression>
</input>
<output>/engines/highest-n1-buffer</output>
</filter>
<logic>
<name>Engines At Idle Stage 2</name>
<input>
<less-than-equals>
<property>/engines/highest-n1-buffer</property>
<property>/controls/engines/idle-limit</property>
</less-than-equals>
</input>
<output>/engines/both-at-idle</output>
</logic>
<filter>
<name>MAN One</name>
<type>gain</type>

View file

@ -80,7 +80,40 @@
<input>0</input>
<output>/controls/engines/idle-limit</output>
</filter>
<filter>
<name>Engines At Idle Stage 1</name>
<type>gain</type>
<gain>1.0</gain>
<input>
<expression>
<difference>
<table>
<max>
<property>/engines/engine[0]/n1-actual</property>
<property>/engines/engine[1]/n1-actual</property>
</max>
<entry><ind> 22.4</ind><dep>0</dep></entry>
<entry><ind>103.8</ind><dep>1</dep></entry>
</table>
<value>0.005</value>
</difference>
</expression>
</input>
<output>/engines/highest-n1-buffer</output>
</filter>
<logic>
<name>Engines At Idle Stage 2</name>
<input>
<less-than-equals>
<property>/engines/highest-n1-buffer</property>
<property>/controls/engines/idle-limit</property>
</less-than-equals>
</input>
<output>/engines/both-at-idle</output>
</logic>
<filter>
<name>MAN One</name>
<type>gain</type>

View file

@ -1 +1 @@
46
47