1
0
Fork 0

Merge branch '3D' into cpdlc

This commit is contained in:
legoboyvdlp R 2021-03-01 17:46:44 +00:00
commit 9c7e8350df
102 changed files with 7119 additions and 3218 deletions

View file

@ -1,230 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<PropertyList include="A320-main.xml">
<sim>
<description>Airbus A320-111 (CFM56-5A1)</description>
<flight-model>jsb</flight-model>
<aero>A320-100-CFM</aero>
<variant-of>A320-200-IAE</variant-of>
<model>
<path>Aircraft/A320-family/Models/A320-100-CFM.xml</path>
<livery>
<file>Airbus</file>
</livery>
<livery-dir type="string">Aircraft/A320-family/Models/Liveries/A320/CFM-100</livery-dir>
</model>
<sound>
<path>Aircraft/A320-family/Sounds/cfm56-sound.xml</path>
</sound>
<chase-distance-m type="double" archive="y">-60.0</chase-distance-m>
<view n="0">
<name>Captain View</name>
<internal archive="y">true</internal>
<config>
<x-offset-m archive="y">-0.45</x-offset-m>
<y-offset-m archive="y">0.545</y-offset-m>
<z-offset-m archive="y">-16.193</z-offset-m>
<default-field-of-view-deg type="double">63</default-field-of-view-deg>
<heading-offset-deg archive="y">0</heading-offset-deg>
<pitch-offset-deg archive="y">-14.6</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<view n="100">
<name>First Officer View</name>
<type>lookfrom</type>
<internal archive="y">true</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">0.45</x-offset-m>
<y-offset-m archive="y">0.545</y-offset-m>
<z-offset-m archive="y">-16.193</z-offset-m>
<default-field-of-view-deg type="double">63</default-field-of-view-deg>
<heading-offset-deg archive="y">0</heading-offset-deg>
<pitch-offset-deg archive="y">-14.6</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<view n="101">
<name>Overhead Panel View</name>
<type>lookfrom</type>
<internal archive="y">true</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">0</x-offset-m>
<y-offset-m archive="y">0.545</y-offset-m>
<z-offset-m archive="y">-16.163</z-offset-m>
<default-field-of-view-deg type="double">115</default-field-of-view-deg>
<heading-offset-deg archive="y">0</heading-offset-deg>
<pitch-offset-deg archive="y">65.5</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<view n="102">
<name>Forward Pedestal View</name>
<type>lookfrom</type>
<internal archive="y">true</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">0.0</x-offset-m>
<y-offset-m archive="y">0.545</y-offset-m>
<z-offset-m archive="y">-16.593</z-offset-m>
<default-field-of-view-deg type="double">63</default-field-of-view-deg>
<heading-offset-deg archive="y">0</heading-offset-deg>
<pitch-offset-deg archive="y">-76</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<view n="103">
<name>Aft Pedestal View</name>
<type>lookfrom</type>
<internal archive="y">true</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">0.0</x-offset-m>
<y-offset-m archive="y">0.545</y-offset-m>
<z-offset-m archive="y">-16.243</z-offset-m>
<default-field-of-view-deg type="double">63</default-field-of-view-deg>
<heading-offset-deg archive="y">0</heading-offset-deg>
<pitch-offset-deg archive="y">-82</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<view n="104">
<name>FCU Panel View</name>
<type>lookfrom</type>
<internal archive="y">true</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">0.0</x-offset-m>
<y-offset-m archive="y">0.545</y-offset-m>
<z-offset-m archive="y">-16.193</z-offset-m>
<default-field-of-view-deg type="double">52</default-field-of-view-deg>
<heading-offset-deg archive="y">0</heading-offset-deg>
<pitch-offset-deg archive="y">-14.6</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<view n="105">
<name>Left Front View</name>
<type>lookfrom</type>
<internal archive="y">false</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">-2.18</x-offset-m>
<y-offset-m archive="y">0.488</y-offset-m>
<z-offset-m archive="y">-6.79</z-offset-m>
<default-field-of-view-deg type="double">85</default-field-of-view-deg>
<heading-offset-deg archive="y">117.488</heading-offset-deg>
<pitch-offset-deg archive="y">0</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<view n="106">
<name>Right Front View</name>
<type>lookfrom</type>
<internal archive="y">false</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">2.18</x-offset-m>
<y-offset-m archive="y">0.488</y-offset-m>
<z-offset-m archive="y">-6.79</z-offset-m>
<default-field-of-view-deg type="double">85</default-field-of-view-deg>
<heading-offset-deg archive="y">242.512</heading-offset-deg>
<pitch-offset-deg archive="y">0</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<view n="107">
<name>Left Mid View</name>
<type>lookfrom</type>
<internal archive="y">false</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">-2.20</x-offset-m>
<y-offset-m archive="y">0.448</y-offset-m>
<z-offset-m archive="y">-1.69</z-offset-m>
<default-field-of-view-deg type="double">85</default-field-of-view-deg>
<heading-offset-deg archive="y">111</heading-offset-deg>
<pitch-offset-deg archive="y">0</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<view n="108">
<name>Right Mid View</name>
<type>lookfrom</type>
<internal archive="y">false</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">2.20</x-offset-m>
<y-offset-m archive="y">0.448</y-offset-m>
<z-offset-m archive="y">-1.69</z-offset-m>
<default-field-of-view-deg type="double">85</default-field-of-view-deg>
<heading-offset-deg archive="y">249</heading-offset-deg>
<pitch-offset-deg archive="y">0</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<view n="109">
<name>Left Aft View</name>
<type>lookfrom</type>
<internal archive="y">false</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">-2.13</x-offset-m>
<y-offset-m archive="y">0.450</y-offset-m>
<z-offset-m archive="y">3.2</z-offset-m>
<default-field-of-view-deg type="double">85</default-field-of-view-deg>
<heading-offset-deg archive="y">70</heading-offset-deg>
<pitch-offset-deg archive="y">0</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<!-- Walker is 110 and 111 -->
<view n="112">
<name>Right Aft View</name>
<type>lookfrom</type>
<internal archive="y">false</internal>
<config>
<from-model type="bool">true</from-model>
<x-offset-m archive="y">2.13</x-offset-m>
<y-offset-m archive="y">0.450</y-offset-m>
<z-offset-m archive="y">3.2</z-offset-m>
<default-field-of-view-deg type="double">85</default-field-of-view-deg>
<heading-offset-deg archive="y">290</heading-offset-deg>
<pitch-offset-deg archive="y">0</pitch-offset-deg>
<roll-offset-deg archive="y">0</roll-offset-deg>
</config>
</view>
<systems n="0">
<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>
</systems>
</sim>
<limits>
<mass-and-balance> <!--Data source: TCDS WV 002 (Issue 12) -->
<maximum-takeoff-mass-lbs>150000</maximum-takeoff-mass-lbs>
<maximum-landing-mass-lbs>138900</maximum-landing-mass-lbs>
<maximum-zero-fuel-mass-lbs>131840</maximum-zero-fuel-mass-lbs>
</mass-and-balance>
</limits>
<options n="0">
<eng type="string">CFM</eng>
<maxblock type="double">52.3</maxblock>
<maxflap type="int">35</maxflap>
</options>
</PropertyList>

View file

@ -1,298 +0,0 @@
<?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<fdm_config name="A320" version="2.0" release="BETA">
<fileheader>
<author>Joshua Davidson (Octal450)</author>
<version>Pre V1.0</version>
<description>A32X FDE</description>
</fileheader>
<metrics file="Systems/a320-metrics"/>
<mass_balance>
<ixx unit="SLUG*FT2">611903</ixx>
<iyy unit="SLUG*FT2">1735389</iyy>
<izz unit="SLUG*FT2">1401293</izz>
<ixy unit="SLUG*FT2">0</ixy>
<ixz unit="SLUG*FT2">0</ixz>
<iyz unit="SLUG*FT2">0</iyz>
<emptywt unit="LBS">95087.5</emptywt>
<location name="CG" unit="M">
<x>-2.4335</x> <!-- 28.5% MAC -->
<y>0</y>
<z>-0.75</z>
</location>
<pointmass name="Crew">
<weight unit="LBS">320</weight>
<location name="POINTMASS" unit="M">
<x>-15.44</x>
<y>0</y>
<z>0.3</z>
</location>
</pointmass>
<pointmass name="Forward Cabin">
<weight unit="LBS">3722</weight>
<location name="POINTMASS" unit="M">
<x>-11.8</x>
<y>0</y>
<z>0.3</z>
</location>
</pointmass>
<pointmass name="Center Cabin">
<weight unit="LBS">11361</weight>
<location name="POINTMASS" unit="M">
<x>-3.3</x>
<y>0</y>
<z>0.3</z>
</location>
</pointmass>
<pointmass name="Aft Cabin">
<weight unit="LBS">8422</weight>
<location name="POINTMASS" unit="M">
<x>4.3</x>
<y>0</y>
<z>0.3</z>
</location>
</pointmass>
<pointmass name="Fwd Cargo">
<weight unit="LBS">3000</weight>
<location name="POINTMASS" unit="M">
<x>-7.8</x>
<y>0</y>
<z>-1</z>
</location>
</pointmass>
<pointmass name="Aft Cargo">
<weight unit="LBS">3000</weight>
<location name="POINTMASS" unit="M">
<x>-2.1</x>
<y>0</y>
<z>-1</z>
</location>
</pointmass>
<pointmass name="Aft Bulk Cargo">
<weight unit="LBS">0</weight>
<location name="POINTMASS" unit="M">
<x>7.1</x>
<y>0</y>
<z>-1</z>
</location>
</pointmass>
</mass_balance>
<ground_reactions file="Systems/a320-ground-reactions"/>
<propulsion>
<engine file="cfm56_5a1_1">
<location unit="M">
<x>-5.34904</x>
<y>-5.755</y>
<z>-1.04768</z>
</location>
<orient unit="DEG">
<roll>0.0</roll>
<pitch>2.2</pitch>
<yaw>1</yaw>
</orient>
<feed>5</feed>
<thruster file="direct">
<location unit="M">
<x>-5.34904</x>
<y>-5.755</y>
<z>-1.04768</z>
</location>
<orient unit="DEG">
<roll>0.0</roll>
<pitch>2.2</pitch>
<yaw>1</yaw>
</orient>
</thruster>
</engine>
<engine file="cfm56_5a1_2">
<location unit="M">
<x>-5.34904</x>
<y>5.755</y>
<z>-1.04768</z>
</location>
<orient unit="DEG">
<roll>0.0</roll>
<pitch>2.2</pitch>
<yaw>-1</yaw>
</orient>
<feed>6</feed>
<thruster file="direct">
<location unit="M">
<x>-5.34904</x>
<y>5.755</y>
<z>-1.04768</z>
</location>
<orient unit="DEG">
<roll>0.0</roll>
<pitch>2.2</pitch>
<yaw>-1</yaw>
</orient>
</thruster>
</engine>
<engine file="APS3200">
<location unit="M">
<x>38.9</x>
<y>0</y>
<z>0.95</z>
</location>
<orient unit="DEG">
<roll>0.0</roll>
<pitch>0.0</pitch>
<yaw>0.0</yaw>
</orient>
<feed>7</feed>
<thruster file="direct">
<location unit="M">
<x>38.9</x>
<y>0</y>
<z>0.95</z>
</location>
<orient unit="DEG">
<roll>0.0</roll>
<pitch>0.0</pitch>
<yaw>0.0</yaw>
</orient>
</thruster>
</engine>
<tank type="FUEL"> <!-- Outer Left Wing Tank -->
<location unit="M">
<x>-2.4335</x>
<y>-7.0291</y>
<z>-0.75</z>
</location>
<capacity unit="LBS">1523</capacity>
<contents unit="LBS">1523</contents>
<unusable-volume unit="LTR">4</unusable-volume>
<priority>1</priority>
<density unit="LBS/GAL">6.71</density>
<temperature>50</temperature>
</tank>
<tank type="FUEL"> <!-- Inner Left Wing Tank -->
<location unit="M">
<x>-2.4335</x>
<y>-4.1029</y>
<z>-0.75</z>
</location>
<capacity unit="LBS">12272.9</capacity>
<contents unit="LBS">6000</contents>
<unusable-volume unit="LTR">28</unusable-volume>
<priority>1</priority>
<density unit="LBS/GAL">6.71</density>
<temperature>50</temperature>
</tank>
<tank type="FUEL"> <!-- Center Tank - wing box may be modified to center fuel tank on the -100 so we have a center tank. Or mostly because its easier... -->
<location unit="M">
<x>-2.4335</x>
<y>0</y>
<z>-0.75</z>
</location>
<capacity unit="LBS">14623</capacity>
<contents unit="LBS">42</contents>
<unusable-volume unit="LTR">23.2</unusable-volume>
<priority>1</priority>
<density unit="LBS/GAL">6.71</density>
<temperature>50</temperature>
</tank>
<tank type="FUEL"> <!-- Inner Right Wing Tank -->
<location unit="M">
<x>-2.4335</x>
<y>4.1029</y>
<z>-0.75</z>
</location>
<capacity unit="LBS">12272.9</capacity>
<contents unit="LBS">6000</contents>
<unusable-volume unit="LTR">28</unusable-volume>
<priority>1</priority>
<density unit="LBS/GAL">6.71</density>
<temperature>50</temperature>
</tank>
<tank type="FUEL"> <!-- Outer Right Wing Tank -->
<location unit="M">
<x>-2.4335</x>
<y>7.0291</y>
<z>-0.75</z>
</location>
<capacity unit="LBS">1523</capacity>
<contents unit="LBS">1523</contents>
<unusable-volume unit="LTR">4</unusable-volume>
<priority>1</priority>
<density unit="LBS/GAL">6.71</density>
<temperature>50</temperature>
</tank>
<tank type="FUEL"> <!-- Engine 1 Pipes -->
<location unit="M">
<x>-2.4335</x>
<y>0</y>
<z>-0.75</z>
</location>
<capacity unit="LBS">10</capacity>
<contents unit="LBS">0</contents>
<priority>1</priority>
<density unit="LBS/GAL">6.71</density>
</tank>
<tank type="FUEL"> <!-- Engine 2 Pipes -->
<location unit="M">
<x>-2.4335</x>
<y>0</y>
<z>-0.75</z>
</location>
<capacity unit="LBS">10</capacity>
<contents unit="LBS">0</contents>
<priority>1</priority>
<density unit="LBS/GAL">6.71</density>
</tank>
<tank type="FUEL"> <!-- APU Pipes -->
<location unit="M">
<x>-2.4335</x>
<y>0</y>
<z>-0.75</z>
</location>
<capacity unit="LBS">10</capacity>
<contents unit="LBS">0</contents>
<priority>1</priority>
<density unit="LBS/GAL">6.71</density>
</tank>
</propulsion>
<system file="a320-libraries"/>
<system file="glass-effect"/>
<system file="a320-fbw"/>
<system file="a320-fcs"/>
<system file="a320-fuel"/>
<system file="a320-fwc"/>
<system file="a320-fwc-phases"/>
<system file="a320-spoiler"/>
<system file="a320-electrical"/>
<system file="a320-hydraulic"/>
<system file="a320-pneumatic"/>
<system file="a320-aircond"/> <!-- after pneu -->
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>
<flight_control name="none"/>
<aerodynamics file="Systems/a320-aerodynamics.xml"/>
<external_reactions file="Systems/a320-external-reactions"/>
</fdm_config>

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

@ -94,7 +94,7 @@
<ground_reactions file="Systems/a320-ground-reactions"/>
<propulsion>
<engine file="cfm56_5b4_1">
<engine file="cfm56-5b4_1">
<location unit="M">
<x>-5.34904</x>
<y>-5.755</y>
@ -120,7 +120,7 @@
</thruster>
</engine>
<engine file="cfm56_5b4_2">
<engine file="cfm56-5b4_2">
<location unit="M">
<x>-5.34904</x>
<y>5.755</y>
@ -276,6 +276,7 @@
<system file="glass-effect"/>
<system file="a320-fbw"/>
<system file="a320-fcs"/>
<system file="a320-cfm56-5b4-engine-fadec"/>
<system file="a320-fuel"/>
<system file="a320-fwc"/>
<system file="a320-fwc-phases"/>

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

@ -94,7 +94,7 @@
<ground_reactions file="Systems/a320-ground-reactions"/>
<propulsion>
<engine file="v2527_a5_1">
<engine file="v2527-a5_1">
<location unit="M">
<x>-5.34904</x>
<y>-5.755</y>
@ -120,7 +120,7 @@
</thruster>
</engine>
<engine file="v2527_a5_2">
<engine file="v2527-a5_2">
<location unit="M">
<x>-5.34904</x>
<y>5.755</y>

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>
@ -786,8 +794,9 @@
<FMGC n="0">
<active-fmgc-channel type="int">0</active-fmgc-channel>
<internal>
<internal n="0">
<cost-index type="int">0</cost-index>
<flex type="int">45</flex>
<to-state type="bool">0</to-state>
</internal>
<simbrief-username type="string"></simbrief-username>
@ -801,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>
@ -945,7 +956,7 @@
</fuel>
<gear>
<brake-fans type="bool">0</brake-fans>
<brake-parking type="bool">0</brake-parking>
<brake-parking type="bool">1</brake-parking>
<tiller-cmd-norm type="double">0</tiller-cmd-norm>
<tiller-enabled type="bool">0</tiller-enabled>
<nws-switch type="double">1</nws-switch>
@ -1379,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">
@ -1416,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>
@ -1863,8 +1880,9 @@
<az-limit-deg type="int">30</az-limit-deg>
<elev-step-deg type="int">10</elev-step-deg>
<elev-limit type="int">30</elev-limit>
<max-range-m type="int">1219</max-range-m>
<max-range-m type="int">1525</max-range-m>
<serviceable type="bool">true</serviceable>
<radar-altitude-ft type="double">0</radar-altitude-ft>
</radar-altimeter>
<radar-altimeter n="1">
@ -1877,8 +1895,9 @@
<az-limit-deg type="int">30</az-limit-deg>
<elev-step-deg type="int">10</elev-step-deg>
<elev-limit type="int">30</elev-limit>
<max-range-m type="int">1219</max-range-m>
<max-range-m type="int">1525</max-range-m>
<serviceable type="bool">true</serviceable>
<radar-altitude-ft type="double">0</radar-altitude-ft>
</radar-altimeter>
<wxr>
@ -4713,10 +4732,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>
@ -4728,6 +4744,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();
@ -80,6 +82,7 @@ setprop("/systems/acconfig/options/wxr-server", "noaa");
setprop("/systems/acconfig/options/welcome-skip", 0);
setprop("/systems/acconfig/options/no-rendering-warn", 0);
setprop("/systems/acconfig/options/save-state", 0);
setprop("/systems/acconfig/options/hide-canvas-outside", 0);
setprop("/systems/acconfig/options/seperate-tiller-axis", 0);
setprop("/systems/acconfig/options/pfd-rate", 1);
setprop("/systems/acconfig/options/nd-rate", 1);
@ -235,6 +238,7 @@ var readSettings = func {
setprop("/FMGC/simbrief-username", getprop("/systems/acconfig/options/simbrief-username"));
setprop("/systems/atsu/atis-server", getprop("/systems/acconfig/options/atis-server"));
setprop("/systems/atsu/wxr-server", getprop("/systems/acconfig/options/wxr-server"));
setprop("/options/hide-canvas-outside", getprop("/systems/acconfig/options/hide-canvas-outside"));
}
var writeSettings = func {
@ -249,6 +253,7 @@ var writeSettings = func {
setprop("/systems/acconfig/options/simbrief-username", getprop("/FMGC/simbrief-username"));
setprop("/systems/acconfig/options/atis-server", getprop("/systems/atsu/atis-server"));
setprop("/systems/acconfig/options/wxr-server", getprop("/systems/atsu/wxr-server"));
setprop("/systems/acconfig/options/hide-canvas-outside", getprop("/options/hide-canvas-outside"));
io.write_properties(getprop("/sim/fg-home") ~ "/Export/A320-family-config.xml", "/systems/acconfig/options");
}
@ -297,6 +302,7 @@ var colddark = func {
setprop("/controls/lighting/overhead-panel-knb", 0);
atc.transponderPanel.modeSwitch(1);
libraries.systemsInit();
libraries.variousReset();
failResetOld();
if (getprop("/engines/engine[1]/n2-actual") < 2) {
colddark_b();
@ -342,6 +348,7 @@ var beforestart = func {
setprop("/controls/gear/gear-down", 1);
setprop("/controls/flight/elevator-trim", 0);
libraries.systemsInit();
libraries.variousReset();
failResetOld();
# Now the Startup!
@ -399,6 +406,9 @@ var beforestart_b = func {
setprop("/controls/adirs/mcducbtn", 1);
setprop("/controls/switches/beacon", 1);
setprop("/controls/lighting/nav-lights-switch", 1);
setprop("/controls/switches/no-smoking-sign", 0.5);
setprop("/controls/switches/seatbelt-sign", 1);
setprop("/controls/switches/emer-lights", 0.5);
setprop("/controls/radio/rmp[0]/on", 1);
setprop("/controls/radio/rmp[1]/on", 1);
setprop("/controls/radio/rmp[2]/on", 1);
@ -433,6 +443,7 @@ var taxi = func {
setprop("/controls/gear/gear-down", 1);
setprop("/controls/flight/elevator-trim", 0);
libraries.systemsInit();
libraries.variousReset();
failResetOld();
# Now the Startup!
@ -491,6 +502,9 @@ var taxi_b = func {
setprop("/controls/switches/beacon", 1);
setprop("/controls/switches/wing-lights", 1);
setprop("/controls/lighting/nav-lights-switch", 1);
setprop("/controls/switches/no-smoking-sign", 0.5);
setprop("/controls/switches/seatbelt-sign", 1);
setprop("/controls/switches/emer-lights", 0.5);
setprop("/controls/radio/rmp[0]/on", 1);
setprop("/controls/radio/rmp[1]/on", 1);
setprop("/controls/radio/rmp[2]/on", 1);

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

@ -343,6 +343,26 @@
<live>true</live>
</checkbox>
<checkbox>
<label>Disable Canvas in External Views</label>
<halign>left</halign>
<property>/systems/acconfig/options/hide-canvas-outside</property>
<binding>
<command>property-toggle</command>
<property>options/hide-canvas-outside</property>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
acconfig.writeSettings();
</script>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<!-- TODO there might be a better way to formulate this. -->
<label>Save States Between Sessions</label>

128
Engines/cfm56-5b4_1.xml Normal file
View file

@ -0,0 +1,128 @@
<?xml version="1.0"?>
<!-- Copyright (c) 2021 Josh Davidson (Octal450) -->
<turbine_engine name="CFM56-5B4">
<milthrust>27000</milthrust>
<tsfc>0.445</tsfc>
<bleed>0.03</bleed>
<ignitionn1>0.6</ignitionn1>
<ignitionn2>22.2</ignitionn2>
<n1spinup>0.05</n1spinup>
<n2spinup>1.85</n2spinup>
<n1startrate>0.573</n1startrate>
<n2startrate>1.127</n2startrate>
<idlen1>18.9</idlen1>
<idlen2>59.4</idlen2>
<maxn1>104.0</maxn1>
<maxn2>105.0</maxn2>
<augmented>0</augmented>
<injected>0</injected>
<function name="N1SpoolUp">
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N1SpoolDown">
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N2SpoolUp"> <!-- N1 to N2 factor 0.535840188014101 -->
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 0.6
28 1.6
46 5.2
68 8.3
80 10.5
94 11.5
103 12.6
</tableData>
</table>
</function>
<function name="N2SpoolDown"> <!-- N1 to N2 factor 0.535840188014101 -->
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 0.6
28 1.6
46 5.2
68 8.3
80 10.5
94 11.5
103 12.6
</tableData>
</table>
</function>
<function name="IdleThrust">
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 0.0430 0.0458 0.0378 0.0684 0.0819 0.0793 0.0000
0.2 0.0500 0.0291 0.0205 0.0514 0.0727 0.0729 0.0000
0.4 0.0040 0.0047 0.0012 0.0412 0.0585 0.0671 0.0000
0.6 0.0000 0.0000 0.0000 0.0000 0.0416 0.0518 0.0000
0.8 0.0000 0.0000 0.0000 0.0000 0.0354 0.0468 0.0000
1.0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0352 0.0000
</tableData>
</table>
</function>
<function name="MilThrust"> <!-- If you change this, make sure you update the table in the engine system file -->
<product>
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 1.2600 1.0000 0.7400 0.5640 0.3920 0.2710 0.0000
0.2 1.1710 0.9740 0.6970 0.5360 0.3850 0.2610 0.0000
0.4 1.1500 0.9570 0.6920 0.5460 0.3870 0.2530 0.0000
0.6 1.1810 0.9410 0.7210 0.5660 0.3580 0.2180 0.0000
0.8 1.2290 1.0200 0.7820 0.5570 0.3040 0.1930 0.0000
0.9 1.2580 1.0200 0.7820 0.5220 0.2710 0.1140 0.0000
1.0 1.1810 0.9510 0.7210 0.4410 0.1740 0.0450 0.0000
1.2 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
1.4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
</tableData>
</table>
<property>fadec/limit/rated-thrust-factor</property>
<table> <!-- Thrust loss due to reverser angle -->
<independentVar lookup="row">/engines/engine[0]/reverser-pos-norm</independentVar>
<tableData>
0.01 1.00
1.00 0.65
</tableData>
</table>
</product>
</function>
</turbine_engine>

128
Engines/cfm56-5b4_2.xml Normal file
View file

@ -0,0 +1,128 @@
<?xml version="1.0"?>
<!-- Copyright (c) 2021 Josh Davidson (Octal450) -->
<turbine_engine name="CFM56-5B4">
<milthrust>27000</milthrust>
<tsfc>0.445</tsfc>
<bleed>0.03</bleed>
<ignitionn1>0.6</ignitionn1>
<ignitionn2>22.2</ignitionn2>
<n1spinup>0.05</n1spinup>
<n2spinup>1.85</n2spinup>
<n1startrate>0.573</n1startrate>
<n2startrate>1.127</n2startrate>
<idlen1>18.9</idlen1>
<idlen2>59.4</idlen2>
<maxn1>104.0</maxn1>
<maxn2>105.0</maxn2>
<augmented>0</augmented>
<injected>0</injected>
<function name="N1SpoolUp">
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N1SpoolDown">
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N2SpoolUp"> <!-- N1 to N2 factor 0.535840188014101 -->
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 0.6
28 1.6
46 5.2
68 8.3
80 10.5
94 11.5
103 12.6
</tableData>
</table>
</function>
<function name="N2SpoolDown"> <!-- N1 to N2 factor 0.535840188014101 -->
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 0.6
28 1.6
46 5.2
68 8.3
80 10.5
94 11.5
103 12.6
</tableData>
</table>
</function>
<function name="IdleThrust">
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 0.0430 0.0458 0.0378 0.0684 0.0819 0.0793 0.0000
0.2 0.0500 0.0291 0.0205 0.0514 0.0727 0.0729 0.0000
0.4 0.0040 0.0047 0.0012 0.0412 0.0585 0.0671 0.0000
0.6 0.0000 0.0000 0.0000 0.0000 0.0416 0.0518 0.0000
0.8 0.0000 0.0000 0.0000 0.0000 0.0354 0.0468 0.0000
1.0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0352 0.0000
</tableData>
</table>
</function>
<function name="MilThrust"> <!-- If you change this, make sure you update the table in the engine system file -->
<product>
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 1.2600 1.0000 0.7400 0.5640 0.3920 0.2710 0.0000
0.2 1.1710 0.9740 0.6970 0.5360 0.3850 0.2610 0.0000
0.4 1.1500 0.9570 0.6920 0.5460 0.3870 0.2530 0.0000
0.6 1.1810 0.9410 0.7210 0.5660 0.3580 0.2180 0.0000
0.8 1.2290 1.0200 0.7820 0.5570 0.3040 0.1930 0.0000
0.9 1.2580 1.0200 0.7820 0.5220 0.2710 0.1140 0.0000
1.0 1.1810 0.9510 0.7210 0.4410 0.1740 0.0450 0.0000
1.2 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
1.4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
</tableData>
</table>
<property>fadec/limit/rated-thrust-factor</property>
<table> <!-- Thrust loss due to reverser angle -->
<independentVar lookup="row">/engines/engine[1]/reverser-pos-norm</independentVar>
<tableData>
0.01 1.00
1.00 0.65
</tableData>
</table>
</product>
</function>
</turbine_engine>

View file

@ -1,119 +0,0 @@
<?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<turbine_engine name="CFM56_5A1">
<!-- source https://www.youtube.com/watch?v=jnGfzv7Odh4 -->
<milthrust> 25000 </milthrust>
<tsfc> 0.445 </tsfc>
<bleed> 0.03 </bleed>
<ignitionn1> 0.6 </ignitionn1>
<ignitionn2> 22.2</ignitionn2>
<idlen1> 18.9 </idlen1>
<idlen2> 59.4 </idlen2>
<n1spinup> 0.05 </n1spinup>
<n2spinup> 1.85 </n2spinup>
<n1startrate> 0.573 </n1startrate>
<n2startrate> 1.127 </n2startrate>
<maxn1> 103.8 </maxn1>
<maxn2> 101.4 </maxn2>
<augmented> 0 </augmented>
<injected> 0 </injected>
<function name="N1SpoolUp">
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N1SpoolDown">
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N2SpoolUp">
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N2SpoolDown">
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="IdleThrust">
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 0.0430 0.0458 0.0378 0.0684 0.0619 0.0693 0.0000
0.2 0.0500 0.0291 0.0205 0.0514 0.0627 0.0629 0.0000
0.4 0.0040 0.0047 0.0012 0.0412 0.0485 0.0571 0.0000
0.6 0.0000 0.0000 0.0000 0.0000 0.0316 0.0418 0.0000
0.8 0.0000 0.0000 0.0000 0.0000 0.0254 0.0368 0.0000
1.0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0252 0.0000
</tableData>
</table>
</function>
<function name="MilThrust">
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 1.2600 1.0000 0.7400 0.5640 0.3920 0.2710 0.0000
0.2 1.1710 0.9740 0.6970 0.5360 0.3850 0.2610 0.0000
0.4 1.1500 0.9570 0.6920 0.5460 0.3870 0.2530 0.0000
0.6 1.1810 0.9410 0.7210 0.5660 0.3580 0.2180 0.0000
0.8 1.2290 1.0200 0.7820 0.5570 0.3040 0.1930 0.0000
0.9 1.2580 1.0200 0.7820 0.5220 0.2710 0.1140 0.0000
1.0 1.1810 0.9510 0.7210 0.4410 0.1740 0.0450 0.0000
1.2 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
1.4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
</tableData>
</table>
</function>
</turbine_engine>

View file

@ -1,119 +0,0 @@
<?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<turbine_engine name="CFM56_5A1">
<!-- source https://www.youtube.com/watch?v=jnGfzv7Odh4 -->
<milthrust> 25000 </milthrust>
<tsfc> 0.445 </tsfc>
<bleed> 0.03 </bleed>
<ignitionn1> 0.6 </ignitionn1>
<ignitionn2> 22.2</ignitionn2>
<idlen1> 18.9 </idlen1>
<idlen2> 59.4 </idlen2>
<n1spinup> 0.05 </n1spinup>
<n2spinup> 1.85 </n2spinup>
<n1startrate> 0.573 </n1startrate>
<n2startrate> 1.127 </n2startrate>
<maxn1> 103.8 </maxn1>
<maxn2> 101.4 </maxn2>
<augmented> 0 </augmented>
<injected> 0 </injected>
<function name="N1SpoolUp">
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N1SpoolDown">
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N2SpoolUp">
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N2SpoolDown">
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="IdleThrust">
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 0.0430 0.0458 0.0378 0.0684 0.0619 0.0693 0.0000
0.2 0.0500 0.0291 0.0205 0.0514 0.0627 0.0629 0.0000
0.4 0.0040 0.0047 0.0012 0.0412 0.0485 0.0571 0.0000
0.6 0.0000 0.0000 0.0000 0.0000 0.0316 0.0418 0.0000
0.8 0.0000 0.0000 0.0000 0.0000 0.0254 0.0368 0.0000
1.0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0252 0.0000
</tableData>
</table>
</function>
<function name="MilThrust">
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 1.2600 1.0000 0.7400 0.5640 0.3920 0.2710 0.0000
0.2 1.1710 0.9740 0.6970 0.5360 0.3850 0.2610 0.0000
0.4 1.1500 0.9570 0.6920 0.5460 0.3870 0.2530 0.0000
0.6 1.1810 0.9410 0.7210 0.5660 0.3580 0.2180 0.0000
0.8 1.2290 1.0200 0.7820 0.5570 0.3040 0.1930 0.0000
0.9 1.2580 1.0200 0.7820 0.5220 0.2710 0.1140 0.0000
1.0 1.1810 0.9510 0.7210 0.4410 0.1740 0.0450 0.0000
1.2 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
1.4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
</tableData>
</table>
</function>
</turbine_engine>

View file

@ -1,119 +0,0 @@
<?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<turbine_engine name="CFM56_5B4">
<!-- source https://www.youtube.com/watch?v=jnGfzv7Odh4 -->
<milthrust> 27000 </milthrust>
<tsfc> 0.445 </tsfc>
<bleed> 0.03 </bleed>
<ignitionn1> 0.6 </ignitionn1>
<ignitionn2> 22.2</ignitionn2>
<idlen1> 18.9 </idlen1>
<idlen2> 59.4 </idlen2>
<n1spinup> 0.05 </n1spinup>
<n2spinup> 1.85 </n2spinup>
<n1startrate> 0.573 </n1startrate>
<n2startrate> 1.127 </n2startrate>
<maxn1> 103.8 </maxn1>
<maxn2> 101.4 </maxn2>
<augmented> 0 </augmented>
<injected> 0 </injected>
<function name="N1SpoolUp">
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N1SpoolDown">
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N2SpoolUp">
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N2SpoolDown">
<table>
<independentVar lookup="row">/engines/engine[0]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="IdleThrust">
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 0.0430 0.0458 0.0378 0.0684 0.0619 0.0693 0.0000
0.2 0.0500 0.0291 0.0205 0.0514 0.0627 0.0629 0.0000
0.4 0.0040 0.0047 0.0012 0.0412 0.0485 0.0571 0.0000
0.6 0.0000 0.0000 0.0000 0.0000 0.0316 0.0418 0.0000
0.8 0.0000 0.0000 0.0000 0.0000 0.0254 0.0368 0.0000
1.0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0252 0.0000
</tableData>
</table>
</function>
<function name="MilThrust">
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 1.2600 1.0000 0.7400 0.5640 0.3920 0.2710 0.0000
0.2 1.1710 0.9740 0.6970 0.5360 0.3850 0.2610 0.0000
0.4 1.1500 0.9570 0.6920 0.5460 0.3870 0.2530 0.0000
0.6 1.1810 0.9410 0.7210 0.5660 0.3580 0.2180 0.0000
0.8 1.2290 1.0200 0.7820 0.5570 0.3040 0.1930 0.0000
0.9 1.2580 1.0200 0.7820 0.5220 0.2710 0.1140 0.0000
1.0 1.1810 0.9510 0.7210 0.4410 0.1740 0.0450 0.0000
1.2 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
1.4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
</tableData>
</table>
</function>
</turbine_engine>

View file

@ -1,119 +0,0 @@
<?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<turbine_engine name="CFM56_5B4">
<!-- source https://www.youtube.com/watch?v=jnGfzv7Odh4 -->
<milthrust> 27000 </milthrust>
<tsfc> 0.445 </tsfc>
<bleed> 0.03 </bleed>
<ignitionn1> 0.6 </ignitionn1>
<ignitionn2> 22.2</ignitionn2>
<idlen1> 18.9 </idlen1>
<idlen2> 59.4 </idlen2>
<n1spinup> 0.05 </n1spinup>
<n2spinup> 1.85 </n2spinup>
<n1startrate> 0.573 </n1startrate>
<n2startrate> 1.127 </n2startrate>
<maxn1> 103.8 </maxn1>
<maxn2> 101.4 </maxn2>
<augmented> 0 </augmented>
<injected> 0 </injected>
<function name="N1SpoolUp">
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N1SpoolDown">
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N2SpoolUp">
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="N2SpoolDown">
<table>
<independentVar lookup="row">/engines/engine[1]/n1</independentVar>
<tableData>
24 1.1
28 2.9
46 9.7
68 15.4
80 19.6
94 21.4
103 23.6
</tableData>
</table>
</function>
<function name="IdleThrust">
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 0.0430 0.0458 0.0378 0.0684 0.0619 0.0693 0.0000
0.2 0.0500 0.0291 0.0205 0.0514 0.0627 0.0629 0.0000
0.4 0.0040 0.0047 0.0012 0.0412 0.0485 0.0571 0.0000
0.6 0.0000 0.0000 0.0000 0.0000 0.0316 0.0418 0.0000
0.8 0.0000 0.0000 0.0000 0.0000 0.0254 0.0368 0.0000
1.0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0252 0.0000
</tableData>
</table>
</function>
<function name="MilThrust">
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 1.2600 1.0000 0.7400 0.5640 0.3920 0.2710 0.0000
0.2 1.1710 0.9740 0.6970 0.5360 0.3850 0.2610 0.0000
0.4 1.1500 0.9570 0.6920 0.5460 0.3870 0.2530 0.0000
0.6 1.1810 0.9410 0.7210 0.5660 0.3580 0.2180 0.0000
0.8 1.2290 1.0200 0.7820 0.5570 0.3040 0.1930 0.0000
0.9 1.2580 1.0200 0.7820 0.5220 0.2710 0.1140 0.0000
1.0 1.1810 0.9510 0.7210 0.4410 0.1740 0.0450 0.0000
1.2 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
1.4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
</tableData>
</table>
</function>
</turbine_engine>

View file

@ -2,7 +2,7 @@
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<turbine_engine name="V2527_A5">
<turbine_engine name="V2527-A5">
<!-- data measured from https://www.youtube.com/watch?v=gPRQcYNRV_U -->
<milthrust> 24800 </milthrust>

View file

@ -2,7 +2,7 @@
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<turbine_engine name="V2527_A5">
<turbine_engine name="V2527-A5">
<!-- data measured from https://www.youtube.com/watch?v=gPRQcYNRV_U -->
<milthrust> 24800 </milthrust>

View file

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<PropertyList>
<name>A320-100-CFM</name>
<path>empty.ac</path> <!-- Livery system on MP multimodel -->
<model>
<name>A320</name>
<path>Aircraft/A320-family/Models/A320-common.xml</path>
</model>
<model>
<name>EnginesCFM</name>
<path>Aircraft/A320-family/Models/Engines/XMLs/a320.cfm.xml</path>
</model>
<animation>
<type>select</type>
<object-name>Sharklet</object-name>
<condition>
<property>sim/multiplay/generic/int[12]</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>WingtipFence</object-name>
<condition>
<property>sim/multiplay/generic/int[12]</property>
</condition>
</animation>
<!-- Nasal code -->
<nasal>
<load>
var livery_update = aircraft.livery_update.new("Aircraft/A320-family/Models/Liveries/A320/CFM-100");
</load>
<unload>
livery_update.stop();
</unload>
</nasal>
</PropertyList>

View file

@ -3,14 +3,93 @@
<name>reflection</name>
<inherits-from>Effects/model-combined-deferred</inherits-from>
<parameters>
<reflection-enabled type="int">0</reflection-enabled>
<reflection-dynamic type="int">0</reflection-dynamic>
<reflection-enabled type="int">1</reflection-enabled>
<reflection-dynamic type="int">1</reflection-dynamic>
<reflect_map-enabled type="int">0</reflect_map-enabled>
<reflection-correction type="float"><use>/sim/model/reflection/reflection-correction</use></reflection-correction>
<reflection-type type="int">2</reflection-type>
<ambient-correction type="float"><use>/sim/model/reflection/ambient-correction</use></ambient-correction>
<lightmap-enabled type="int">0</lightmap-enabled>
<lightmap-enabled type="int">1</lightmap-enabled>
<lightmap-multi type="int">0</lightmap-multi>
<normalmap-enabled type="int">0</normalmap-enabled>
<normalmap-enabled type="int">1</normalmap-enabled>
<texture n="2">
<image>Aircraft/A320-family/Models/Effects/res/Fuse-Main-Normal.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>clamp</wrap-s>
<wrap-t>clamp</wrap-t>
</texture>
<lightmap-factor type="float" n="0"><use>sim/model/lights/logo-lights</use></lightmap-factor>
<lightmap-color type="vec3d" n="0">1.0 1.0 1.0</lightmap-color>
<texture n="3">
<image>Aircraft/A320-family/Models/Effects/res/fin-lightmap.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>clamp</wrap-s>
<wrap-t>clamp</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<texture n="5">
<type>cubemap</type>
<images>
<positive-x>Aircraft/Generic/Effects/CubeMaps/fgfs-sky/1.png</positive-x>
<negative-x>Aircraft/Generic/Effects/CubeMaps/fgfs-sky/4.png</negative-x>
<positive-y>Aircraft/Generic/Effects/CubeMaps/fgfs-sky/2.png</positive-y>
<negative-y>Aircraft/Generic/Effects/CubeMaps/fgfs-sky/3.png</negative-y>
<positive-z>Aircraft/Generic/Effects/CubeMaps/fgfs-sky/6.png</positive-z>
<negative-z>Aircraft/Generic/Effects/CubeMaps/fgfs-sky/5.png</negative-z>
</images>
</texture>
</parameters>
<!-- ####################
### NORMALMAP INCLUDE ###
######################### -->
<generate>
<tangent type="int">6</tangent>
<binormal type="int">7</binormal>
</generate>
<technique n="4">
<pass>
<program>
<attribute>
<name>tangent</name>
<index>6</index>
</attribute>
<attribute>
<name>binormal</name>
<index>7</index>
</attribute>
</program>
</pass>
</technique>
<technique n="7">
<pass>
<program>
<attribute>
<name>tangent</name>
<index>6</index>
</attribute>
<attribute>
<name>binormal</name>
<index>7</index>
</attribute>
</program>
</pass>
</technique>
<technique n="9">
<pass>
<program>
<attribute>
<name>tangent</name>
<index>6</index>
</attribute>
<attribute>
<name>binormal</name>
<index>7</index>
</attribute>
</program>
</pass>
</technique>
<!-- ########################
### END NORMALMAP INCLUDE ###
############################# -->
</PropertyList>

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

@ -246,7 +246,7 @@
<z-m>-2.22295</z-m>
</offsets>
<condition>
<property>systems/failures/engine-left-fire</property>
<property>systems/failures/fire/engine-left-fire</property>
</condition>
</model>
@ -259,7 +259,7 @@
<z-m>-2.22295</z-m>
</offsets>
<condition>
<property>systems/failures/engine-right-fire</property>
<property>systems/failures/fire/engine-right-fire</property>
</condition>
</model>

View file

@ -246,7 +246,7 @@
<z-m>-2.22295</z-m>
</offsets>
<condition>
<property>systems/failures/engine-left-fire</property>
<property>systems/failures/fire/engine-left-fire</property>
</condition>
</model>
@ -259,7 +259,7 @@
<z-m>-2.22295</z-m>
</offsets>
<condition>
<property>systems/failures/engine-right-fire</property>
<property>systems/failures/fire/engine-right-fire</property>
</condition>
</model>
@ -406,7 +406,7 @@
<!-- Effect
<!-- Effect -->
<effect>
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-engine-IAE</inherits-from>
<object-name>EngineIAEV2500L</object-name>
@ -425,5 +425,5 @@
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-chrome-engine-IAE</inherits-from>
<object-name>IntakeIAEV2500L</object-name>
<object-name>IntakeIAEV2500R</object-name>
</effect>-->
</effect>
</PropertyList>

View file

@ -441,10 +441,12 @@
<!-- Multi-purpose Control and Display Units -->
<model>
<name>MCDU1</name>
<path>Aircraft/A320-family/Models/Instruments/MCDU/MCDU1.xml</path>
</model>
<model>
<name>MCDU2</name>
<path>Aircraft/A320-family/Models/Instruments/MCDU/MCDU2.xml</path>
</model>
@ -875,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>
@ -964,7 +1040,28 @@
<name>IESI</name>
<path>Aircraft/A320-family/Models/Instruments/IESI/IESI.xml</path>
</model>
<animation>
<type>select</type>
<object-name>PFD1</object-name>
<object-name>PFD2</object-name>
<object-name>ND1</object-name>
<object-name>ND2</object-name>
<object-name>UECAM</object-name>
<object-name>LECAM</object-name>
<object-name>IESI</object-name>
<object-name>MCDU1</object-name>
<object-name>MCDU2</object-name>
<object-name>dcduScreenL</object-name>
<object-name>dcduScreenR</object-name>
<condition>
<or>
<not><property>options/hide-canvas-outside</property></not>
<property>sim/current-view/internal</property>
</or>
</condition>
</animation>
<!-- No button lights without power! -->
<animation>
<type>select</type>
@ -8675,6 +8772,74 @@
</and>
</condition>
</animation>
<!-- ND_L chrono -->
<animation>
<type>pick</type>
<object-name>chrono_cpt</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-cycle</command>
<property>/instrumentation/efis/inputs/CHRONO</property>
<value>0</value>
<value>1</value>
<value>2</value>
</binding>
</action>
</animation>
<!-- ND_R chrono -->
<animation>
<type>pick</type>
<object-name>chrono_fo</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-cycle</command>
<property>/instrumentation/efis[1]/inputs/CHRONO</property>
<value>0</value>
<value>1</value>
<value>2</value>
</binding>
</action>
</animation>
<!-- ND_L chrono -->
<animation>
<type>pick</type>
<object-name>chrono_cpt</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-cycle</command>
<property>/instrumentation/efis/inputs/CHRONO</property>
<value>0</value>
<value>1</value>
<value>2</value>
</binding>
</action>
</animation>
<!-- ND_R chrono -->
<animation>
<type>pick</type>
<object-name>chrono_fo</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-cycle</command>
<property>/instrumentation/efis[1]/inputs/CHRONO</property>
<value>0</value>
<value>1</value>
<value>2</value>
</binding>
</action>
</animation>
<!-- torch -->
@ -9116,3 +9281,4 @@
</animation>
</PropertyList>

View file

@ -34,7 +34,7 @@
<object-name>OutflowValveDoor2</object-name>
<object-name>GPUServiceDoor</object-name>
</effect>
<!--<effect>
<effect>
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-rudder</inherits-from>
<object-name>Rudder</object-name>
</effect>
@ -112,7 +112,7 @@
<object-name>SpoilerActuatorRodR3</object-name>
<object-name>SpoilerActuatorRodR2</object-name>
<object-name>SpoilerActuatorRodR1</object-name>
</effect>-->
</effect>
<!-- Animations -->

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

@ -153,7 +153,6 @@ var baro = props.globals.getNode("/FMGC/internal/baro", 1);
# GA PERF
# AOC - SENSORS
var parking_brake = props.globals.getNode("/controls/gear/brake-parking", 1);
var gear0_wow = props.globals.getNode("/gear/gear[0]/wow", 1);
var doorL1_pos = props.globals.getNode("/sim/model/door-positions/doorl1/position-norm", 1); #FWD door
var doorR1_pos = props.globals.getNode("/sim/model/door-positions/doorr1/position-norm", 1); #FWD door
@ -167,6 +166,7 @@ var activeAtsu = [props.globals.getNode("/MCDU[0]/atsu-active", 1), props.global
props.globals.initNode("/MCDU[0]/active-system", "", "STRING");
props.globals.initNode("/MCDU[1]/active-system", "", "STRING");
# Conversion factor pounds to kilogram
var LBS2KGS = 0.4535924;
@ -174,6 +174,17 @@ var LBS2KGS = 0.4535924;
# Create Nodes:
var pageSwitch = [props.globals.initNode("/MCDU[0]/internal/switch", 0, "BOOL"), props.globals.initNode("/MCDU[1]/internal/switch", 0, "BOOL")];
# Page freeze on POSMON
var pageFreezed = [nil,nil];
var togglePageFreeze = func(i) {
if (pageFreezed[i] == nil) {
pageFreezed[i] = sprintf("%02d%02d", getprop("/sim/time/utc/hour"), getprop("/sim/time/utc/minute"));
} else {
pageFreezed[i] = nil;
}
}
var canvas_MCDU_base = {
init: func(canvas_group, file) {
var font_mapper = func(family, weight) {
@ -229,11 +240,13 @@ var canvas_MCDU_base = {
me["PERFGA_OE"].setColor(BLUE);
me.page = canvas_group;
me.updateretard = 0; # skip a few page update to save CPU
return me;
},
getKeys: func() {
return ["Simple","Simple_Center","Scratchpad","Simple_Title","Simple_PageNum","ArrowLeft","ArrowRight","Simple_L1","Simple_L2","Simple_L3","Simple_L4",
return ["Simple","Simple_Center","Scratchpad","Simple_Title","Simple_Title2","Simple_PageNum","ArrowLeft","ArrowRight","Simple_L1","Simple_L2","Simple_L3","Simple_L4",
"Simple_L5","Simple_L6","Simple_L0S","Simple_L1S","Simple_L2S","Simple_L3S","Simple_L4S","Simple_L5S","Simple_L6S","Simple_L1_Arrow",
"Simple_L2_Arrow","Simple_L3_Arrow","Simple_L4_Arrow","Simple_L5_Arrow","Simple_L6_Arrow","Simple_R1","Simple_R2","Simple_R3","Simple_R4","Simple_R5",
"Simple_R6","Simple_R1S","Simple_R2S","Simple_R3S","Simple_R4S","Simple_R5S","Simple_R6S","Simple_R1_Arrow","Simple_R2_Arrow","Simple_R3_Arrow",
@ -264,6 +277,7 @@ var canvas_MCDU_base = {
defaultHide: func() {
me["Simple"].show();
me["Simple_Center"].hide();
me["Simple_Title2"].hide();
me["FPLN"].hide();
me["DIRTO_TMPY_group"].hide();
me["INITA"].hide();
@ -281,6 +295,7 @@ var canvas_MCDU_base = {
defaultHideWithCenter: func() {
me["Simple"].show();
me["Simple_Center"].show();
me["Simple_Title2"].hide();
me["FPLN"].hide();
me["DIRTO_TMPY_group"].hide();
me["INITA"].hide();
@ -345,7 +360,13 @@ var canvas_MCDU_base = {
me.fontRight(default, default, default, default, default, default);
me.fontRightS(default, default, default, default, default, default);
me.fontSizeLeft(normal, normal, normal, normal, normal, normal);
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");
@ -355,6 +376,43 @@ var canvas_MCDU_base = {
me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRightArrow("wht", "wht", "wht", "wht", "wht", "wht");
},
getLatLogFormatted: 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/%07s%s",abs(degrees),minutes,sign,abs(degrees2) ~ minutes2,sign2);
},
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 {
if (b) {
irsstatus = "ALIGN TTN" ~ sprintf("%2d",math.round(systems.ADIRS.ADIRunits[a]._alignTime) / 60);
} else {
irsstatus = "ALIGN";
}
}
}
return irsstatus;
},
updateCommon: func(i) {
page = pageProp[i].getValue();
if (page != "NOTIFICATION") {
@ -389,6 +447,9 @@ var canvas_MCDU_base = {
me["PRINTPAGE"].setColor(WHITE);
}
}
if (!pageSwitch[i].getBoolValue()) me.defaultHide();
if (page != "ATIS") {
me["ATISSend1"].hide();
me["ATISSend2"].hide();
@ -622,7 +683,7 @@ var canvas_MCDU_base = {
}
} else if (page == "FLTLOG") {
if (!pageSwitch[i].getBoolValue()) {
me.defaultHideWithCenter();
me.defaultHideWithCenter();
me["Simple_L0S"].hide();
me["ArrowLeft"].hide();
@ -720,7 +781,7 @@ var canvas_MCDU_base = {
var logpage = mcdu.FlightLogDatabase.getPage(logid);
me["Simple_L1"].setText(sprintf("%8s - ",logpage.fltnum) ~ logpage.date);
me["Simple_L1"].setText(sprintf("%8s- ",logpage.fltnum) ~ logpage.date);
me["Simple_R1"].setText(logpage.tofrom ~ " ");
me["Simple_L5S"].setText( " " ~ logpage.flttime );
@ -737,6 +798,7 @@ var canvas_MCDU_base = {
} else if (page == "SENSORS") {
if (!pageSwitch[i].getBoolValue()) {
me.defaultHide();
me.standardFontSize();
me["Simple_Title"].setText("SENSORS ");
me.defaultPageNumbers();
me["Simple_L0S"].hide();
@ -783,8 +845,8 @@ var canvas_MCDU_base = {
pageSwitch[i].setBoolValue(1);
}
me["Simple_R1S"].setText(sprintf("%-10s",(parking_brake.getValue() == 1) ? "SET" : "RELEASED"));
me["Simple_R1"].setText(sprintf("%-10s",(gear0_wow.getValue() == 1) ? "GROUND" : "FLIGHT"));
me["Simple_R1S"].setText(sprintf("%-10s",(pts.Controls.Gear.parkingBrake.getValue() == 1) ? "SET" : "RELEASED"));
me["Simple_R1"].setText(sprintf("%-10s",(pts.Gear.wow[0].getValue() == 1) ? "GROUND" : "FLIGHT"));
me["Simple_R2S"].setText(sprintf("%-10s",(doorL1_pos.getValue() > 0.1) ? "OPEN" : "CLOSED"));
me["Simple_R2"].setText(sprintf("%-10s",(doorR1_pos.getValue() > 0.1) ? "OPEN" : "CLOSED"));
me["Simple_R3S"].setText(sprintf("%-10s",(doorL4_pos.getValue() > 0.1) ? "OPEN" : "CLOSED"));
@ -2258,12 +2320,12 @@ var canvas_MCDU_base = {
me["PERFAPPR"].hide();
me["PERFGA"].hide();
me["Simple_Title"].show();
me["Simple_Title"].setText("POSITION MONITOR");
me["Simple_Title2"].setColor(GREEN);
me.defaultPageNumbers();
me.showLeft(1, 1, 1, 1, 1, 1);
me["Simple_L0S"].hide();
me.showLeftS(-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["Simple_C3B"].hide();
@ -2281,26 +2343,228 @@ var canvas_MCDU_base = {
me.colorRight("grn", "grn", "grn", "grn", "grn", "wht");
me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRightArrow("wht", "wht", "wht", "wht", "wht", "wht");
me["Simple_C5"].setColor(GREEN);
me["Simple_L5"].setFontSize(small);
me["Simple_C5"].setFontSize(small);
me["Simple_R5"].setFontSize(small);
pageFreezed[i] = nil;
me.updateretard = 0;
pageSwitch[i].setBoolValue(1);
}
if (me.updateretard <= 0) {
if (pageFreezed[i] == nil) {
me["Simple_Title"].setText("POSITION MONITOR");
me["Simple_Title2"].hide();
me["Simple_L6"].setText(" FREEZE");
me["Simple_L1"].setText("FMGC1");
me["Simple_L2"].setText("FMGC2");
me["Simple_L3"].setText("GPIRS");
me["Simple_L4"].setText("MIX IRS");
me["Simple_L5S"].setText(" IRS1");
me["Simple_R5S"].setText("IRS3 ");
me["Simple_R6S"].setText("SEL ");
me["Simple_R6"].setText("NAVAIDS ");
me["Simple_C5S"].setText("IRS2");
var latlog = me.getLatLogFormatted("/position/"); # current sim lat/log (formatted) cached for fast excecution
#TODO - IRS emulation
if (systems.ADIRS.Operating.aligned[0].getValue()) { # TODO real FMGC1 GPS data
me["Simple_R1"].setText(latlog);
me["Simple_R1"].setColor(GREEN);
me["Simple_L2S"].setText(sprintf("%16s","3IRS/GPS"));
} else {
me["Simple_R1"].setText("----.--/-----.--");
me["Simple_R1"].setColor(WHITE);
me["Simple_L2S"].setText("");
}
if (systems.ADIRS.Operating.aligned[1].getValue()) { # TODO real FMGC2 GPS data
me["Simple_R2"].setText(latlog);
me["Simple_R2"].setColor(GREEN);
me["Simple_L3S"].setText(sprintf("%16s","3IRS/GPS"));
} else {
me["Simple_R2"].setText("----.--/-----.--");
me["Simple_R2"].setColor(WHITE);
me["Simple_L3S"].setText("");
}
if (systems.ADIRS.Operating.aligned[0].getValue() or systems.ADIRS.Operating.aligned[1].getValue() or systems.ADIRS.Operating.aligned[2].getValue()) {
me["Simple_R3"].setText(latlog); # GPIRS
me["Simple_R3"].setColor(GREEN);
me["Simple_R4"].setText(latlog); # MIXIRS
me["Simple_R4"].setColor(GREEN);
} else {
me["Simple_R3"].setText("----.--/-----.--"); # GPIRS not available
me["Simple_R3"].setColor(WHITE);
me["Simple_R4"].setText("----.--/-----.--"); # MIXIRS not available
me["Simple_R4"].setColor(WHITE);
}
var Simple_row5 = ["Simple_L5","Simple_C5","Simple_R5"];
for ( var a=0; a<3; a+=1 ) {
if (systems.ADIRS.Operating.aligned[a].getValue()) {
me[Simple_row5[a]].setText(sprintf("%-8s",(systems.ADIRS.ADIRunits[a].mode == 2) ? "ATT" : "NAV 0.0"));
} else {
me[Simple_row5[a]].setText(sprintf("%-8s",me.getIRSStatus(a)));
}
}
} else {
me["Simple_Title"].setText("POSITION FROZEN AT ");
me["Simple_Title2"].setText(sprintf("%23s ",pageFreezed[i]));
me["Simple_Title2"].show();
me["Simple_L6"].setText(" UNFREEZE");
}
}
if (me.updateretard < 0) me.updateretard = 2;
else me.updateretard -= 1;
} else if (page == "IRSMON") {
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("wht", "wht", "wht", "ack", "ack", "ack");
me.colorLeftS("ack", "grn", "grn", "grn", "ack", "ack");
me.colorCenter("wht", "grn", "grn", "grn", "ack", "ack");
me.colorRightS("amb", "grn", "grn", "grn", "ack", "ack");
me.colorLeftArrow("wht", "wht", "wht", "ack", "ack", "ack");
me["Simple_Title"].setText("IRS MONITOR");
me["Simple_L1"].setText(" IRS1");
me["Simple_L2"].setText(" IRS2");
me["Simple_L3"].setText(" IRS3");
me["Simple_C1"].setText("EXCESS MOTION");
me["Simple_C2"].setText("EXCESS MOTION");
me["Simple_C3"].setText("EXCESS MOTION");
me["Simple_C1"].setFontSize(small);
me["Simple_C2"].setFontSize(small);
me["Simple_C3"].setFontSize(small);
me["Simple_R1S"].setText("");
#TODO - Missing SET HDG on degraded operations
pageSwitch[i].setBoolValue(1);
}
me["Simple_L1"].setText("FMGC1");
me["Simple_L2"].setText("FMGC2");
me["Simple_L3"].setText("GPIRS");
me["Simple_L4"].setText("MIX IRS");
me["Simple_L5"].setText("NAV -.-");
me["Simple_L6"].setText(" FREEZE");
me["Simple_L5S"].setText(" IRS1");
me["Simple_R1"].setText("----.-X/-----.-X");
me["Simple_R2"].setText("----.-X/-----.-X");
me["Simple_R3"].setText("----.-X/-----.-X");
me["Simple_R4"].setText("----.-X/-----.-X");
me["Simple_R5"].setText("NAV -.-");
me["Simple_R5S"].setText("IRS3 ");
me["Simple_R6S"].setText("SEL ");
me["Simple_C5"].setText("NAV -.-");
me["Simple_C5S"].setText("IRS2");
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,1));
if (systems.ADIRS.ADIRunits[a]._excessMotion) {
me[center[a]].show();
} else {
me[center[a]].hide();
}
}
if (fmgc.FMGCInternal.phase == 7) { # DONE phase
if (fmgc.FMGCInternal.arrApt != nil and fmgc.flightPlanController.flightplans[2].departure_runway != nil) {
me["Simple_R1S"].setText(sprintf("DRIFT AT %7s ",fmgc.FMGCInternal.arrApt ~ fmgc.flightPlanController.flightplans[2].departure_runway.id));
}
me["Simple_R2S"].setText(sprintf("DRIFT %2.1fNM/H ",0));
me["Simple_R3S"].setText(sprintf("DRIFT %2.1fNM/H ",0));
me["Simple_R4S"].setText(sprintf("DRIFT %2.1fNM/H ",0));
} else {
me["Simple_R1S"].setText("");
me["Simple_R2S"].setText("");
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();
@ -2782,48 +3046,65 @@ var canvas_MCDU_base = {
} else if (page == "ROUTESELECTION") {
if (!pageSwitch[i].getBoolValue()) {
me.defaultHideWithCenter();
me.defaultHide();
me.standardFontSize();
me["arrowsDepArr"].hide();
me["PERFAPPR"].hide();
me["PERFGA"].hide();
me["Simple_Title"].show();
me["Simple_Title"].setText("ROUTE SELECTION");
me.defaultPageNumbers();
me.showPageNumbers(1,1);
me.showLeft(1, -1, -1, -1, -1, 1);
me.showLeft(1, 1, 1, 1, 1, 1);
me["Simple_L0S"].hide();
me.showLeftS(-1, -1, -1, -1, -1, -1);
me.showLeftS(-1, 1, 1, 1, 1, -1);
me.showLeftArrow(-1, -1, -1, -1, -1, 1);
me.showRight(-1, -1, -1, -1, -1, -1);
me.showRightS(-1, -1, -1, -1, -1, -1);
me.showRight(-1, 1, 1, 1, 1, 1);
me.showRightS(-1, 1, 1, 1, 1, -1);
me.showRightArrow(-1, -1, -1, -1, -1, -1);
me.showCenter(-1, -1, -1, -1, -1, -1);
me["Simple_C3B"].hide();
me["Simple_C4B"].hide();
me.showCenterS(-1, -1, -1, -1, -1, -1);
me.fontSizeLeftS(normal, normal, normal, normal, normal, normal);
me.fontSizeRight(0, small, small, small, small, normal);
me.fontSizeRightS(0, small, small, small, small, normal);
me.fontLeft(default, 0, 0, 0, 0, default);
me.fontSizeLeft(normal, 0, 0, 0, 0, normal);
me.colorLeft("grn", "ack", "ack", "ack", "ack", "wht");
pageSwitch[i].setBoolValue(1);
me.colorLeft("grn", "grn", "grn", "grn", "grn", "wht");
me.colorLeftS("grn", "grn", "grn", "grn", "grn", "wht");
me.colorRight("ack", "wht", "wht", "wht", "wht", "amb");
me.colorRightS("ack", "wht", "wht", "wht", "wht", "wht");
me["Simple_L1"].setText("NONE");
me["Simple_L6"].setText(" RETURN");
me["Simple_R6"].setText("INSERT ");
me["PRINTPAGE"].show();
me["PRINTPAGE"].setColor(AMBER);
var rows = ["2S","2","3S","3","4S","4","5S","5"];
me["Simple_L1"].setText("DUBLHR1");
var r = 0;
#for ( ; r < 8; r += 1) { # Example how formats rows with 4 cols
# me["Simple_L" ~ rows[r]].setText(sprintf("%11s %11s","SELKA","NUGRA"));
# me["Simple_R" ~ rows[r]].setText(sprintf("%-13s %-13s","UL975","UL975"));
#}
while (r<8) {
me["Simple_L" ~ rows[r]].setText("");
me["Simple_R" ~ rows[r]].setText("");
r+=1;
}
if (fmgc.FMGCInternal.toFromSet and !fmgc.FMGCInternal.altSelected) {
me["Simple_Title"].setText(sprintf("%s", fmgc.FMGCInternal.depApt ~ "/" ~ fmgc.FMGCInternal.arrApt));
} else if (!fmgc.FMGCInternal.toFromSet and fmgc.FMGCInternal.altAirport != "" and fmgc.FMGCInternal.altSelected) {
me["Simple_Title"].setText(sprintf("%s", fmgc.FMGCInternal.altAirport));
} else if (fmgc.FMGCInternal.toFromSet and fmgc.FMGCInternal.altAirport != "" and fmgc.FMGCInternal.altSelected) {
me["Simple_Title"].setText(sprintf("%s", fmgc.FMGCInternal.arrApt ~ "/" ~ fmgc.FMGCInternal.altAirport));
} else {
me["Simple_Title"].setText("ROUTE SELECTION");
}
pageSwitch[i].setBoolValue(1); # update on request only (left/right arrows)
}
me["Simple_L1"].setText("NONE");
me["Simple_L6"].setText(" RETURN");
if (fmgc.FMGCInternal.toFromSet and !fmgc.FMGCInternal.altSelected) {
me["Simple_Title"].setText(sprintf("%s", fmgc.FMGCInternal.depApt ~ "/" ~ fmgc.FMGCInternal.arrApt));
} else if (!fmgc.FMGCInternal.toFromSet and fmgc.FMGCInternal.altAirport != "" and fmgc.FMGCInternal.altSelected) {
me["Simple_Title"].setText(sprintf("%s", fmgc.FMGCInternal.altAirport));
} else if (fmgc.FMGCInternal.toFromSet and fmgc.FMGCInternal.altAirport != "" and fmgc.FMGCInternal.altSelected) {
me["Simple_Title"].setText(sprintf("%s", fmgc.FMGCInternal.arrApt ~ "/" ~ fmgc.FMGCInternal.altAirport));
} else {
me["Simple_Title"].setText("ROUTE SELECTION");
}
} else if (page == "INITB") {
if (!pageSwitch[i].getBoolValue()) {
me["Simple"].show();
@ -3564,8 +3845,12 @@ var canvas_MCDU_base = {
me["Simple_L6"].setFontSize(small);
}
} else if (page == "PROGTO" or page == "PROGCLB" or page == "PROGCRZ" or page == "PROGDES") {
if (fmgc.FMGCInternal.phase == 0 or fmgc.FMGCInternal.phase == 1) {
} else if (page == "PROGPREF" or page == "PROGTO" or page == "PROGCLB" or page == "PROGCRZ" or page == "PROGDES" or page == "PROGAPPR" or page == "PROGDONE") {
if (fmgc.FMGCInternal.phase == 0) {
setprop("/MCDU[" ~ i ~ "]/page", "PROGPREF");
page = "PROGPREF";
} else if (fmgc.FMGCInternal.phase == 1) {
setprop("/MCDU[" ~ i ~ "]/page", "PROGTO");
page = "PROGTO";
} else if (fmgc.FMGCInternal.phase == 2) {
@ -3574,10 +3859,16 @@ var canvas_MCDU_base = {
} else if (fmgc.FMGCInternal.phase == 3) {
setprop("/MCDU[" ~ i ~ "]/page", "PROGCRZ");
page = "PROGCRZ";
} else if (fmgc.FMGCInternal.phase == 4 or fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
} else if (fmgc.FMGCInternal.phase == 4) {
setprop("/MCDU[" ~ i ~ "]/page", "PROGDES");
page = "PROGDES";
}
} else if (fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
setprop("/MCDU[" ~ i ~ "]/page", "PROGAPPR");
page = "PROGAPPR";
} else if (fmgc.FMGCInternal.phase == 7) {
setprop("/MCDU[" ~ i ~ "]/page", "PROGDONE");
page = "PROGDONE";
}
if (!pageSwitch[i].getBoolValue()) {
me["Simple"].show();
@ -3595,31 +3886,34 @@ var canvas_MCDU_base = {
me["PERFAPPR"].hide();
me["PERFGA"].hide();
if (fmgc.FMGCInternal.flightNumSet) {
if (page == "PROGTO") {
me["Simple_Title"].setText(sprintf("TAKE OFF %s", fmgc.FMGCInternal.flightNum));
} else if (page == "PROGCLB") {
me["Simple_Title"].setText(sprintf("CLIMB %s", fmgc.FMGCInternal.flightNum));
} else if (page == "PROGCRZ") {
me["Simple_Title"].setText(sprintf("CRUISE %s", fmgc.FMGCInternal.flightNum));
} else if (page == "PROGDES") {
me["Simple_Title"].setText(sprintf("DESCENT %s", fmgc.FMGCInternal.flightNum));
}
} else {
if (page == "PROGTO") {
me["Simple_Title"].setText("TAKE OFF");
} else if (page == "PROGCLB") {
me["Simple_Title"].setText("CLIMB");
} else if (page == "PROGCRZ") {
me["Simple_Title"].setText("CRUISE");
} else if (page == "PROGDES") {
me["Simple_Title"].setText("DESCENT");
}
var colortext = ["",""];
if (page == "PROGPREF") {
colortext[0] = "PREFLIGHT";
} else if (page == "PROGTO") {
colortext[0] = "TAKE OFF";
} else if (page == "PROGCLB") {
colortext[0] = "CLIMB";
} else if (page == "PROGCRZ") {
colortext[0] = "CRUISE";
} else if (page == "PROGDES") {
colortext[0] = "DESCENT";
} else if (page == "PROGAPPR") {
colortext[0] = "APPROACH";
} else if (page == "PROGDONE") {
colortext[0] = "DONE";
}
colortext[1] = (fmgc.FMGCInternal.flightNumSet and page != "PROGDONE") ? fmgc.FMGCInternal.flightNum : ""; #CHECKME - condition useful?
me["Simple_Title"].setText(sprintf(" %-21s",colortext[0]));
me["Simple_Title2"].setText(sprintf("%12s %-11s","",colortext[1]));
me["Simple_Title"].show();
me["Simple_Title"].setColor(GREEN);
me["Simple_PageNum"].setText("X/X");
me["Simple_Title"].setColor((page != "PROGDONE") ? GREEN : WHITE);
me["Simple_Title2"].show();
me["Simple_Title2"].setColor(WHITE);
#me["Simple_PageNum"].setText("X/X");
me["Simple_PageNum"].hide();
me["ArrowLeft"].hide();
me["ArrowRight"].hide();
@ -3640,31 +3934,48 @@ var canvas_MCDU_base = {
me.fontLeftS(default, default, default, default, default, default);
me.fontRight(default, symbol, symbol, symbol, default, default);
me.fontRightS(default, default, default, default, default, default);
me.fontSizeLeft(normal, normal, small, small, normal, small);
me.fontSizeLeftS(small, small, small, small, small, small);
me.fontSizeRight(normal, small, small, small, normal, small);
me.fontSizeRightS(small, small, small, small, small, small);
me.fontSizeCenter(small, normal, small, small, small, normal);
me.fontSizeCenterS(normal, small, small, small, small, small);
me["Simple_C1S"].setFontSize(small);
me.colorLeft("blu", "wht", "blu", "wht", "wht", "blu");
me.colorLeftS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorLeftArrow("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRight("mag", "wht", "blu", "blu", "grn", "grn");
me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRightArrow("wht", "wht", "wht", "wht", "wht", "wht");
me.colorCenter("grn", "grn", "wht", "wht", "wht", "grn");
me.colorCenterS("wht", "wht", "wht", "wht", "wht", "wht");
if (page == "PROGCRZ") {
me.showLeftS(0, 0, -1, 0, 0, 0);
me.showCenterS(0, 0, 1, 0, 0, 0);
#me.showRight(0, 0, 1, 0, 0, 0); #Add when implement cruise phase
me.fontLeft(0, 0, default, 0, 0, 0);
} else if (page == "PROGDES") {
me.showRight(0, 1, 0, 0, 0, 0);
}
me.fontSizeLeft(normal, normal, small, small, normal, small);
me.fontSizeLeftS(small, small, small, small, small, small);
me.fontSizeRight(normal, small, small, small, normal, small);
me.fontSizeRightS(small, small, small, small, small, small);
me.fontSizeCenter(small, small, small, small, small, normal);
me.fontSizeCenterS(normal, small, small, small, small, small);
me.colorLeft("blu", "wht", "blu", "wht", "wht", "blu");
me.colorLeftS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorLeftArrow("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRight("mag", "blu", "blu", "blu", "grn", "grn");
me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRightArrow("wht", "wht", "wht", "wht", "wht", "wht");
me.colorCenter("grn", "wht", "wht", "wht", "wht", "grn");
me.colorCenterS("wht", "wht", "wht", "wht", "wht", "wht");
} else if (page == "PROGDES" or page == "PROGAPPR") {
me.showCenter(0, 1, 0, 0, 0, 0);
me.showRight(0, 1, 0, 0, 0, 0);
#me["Simple_C2"].setFontSize(normal);
#me["Simple_R2"].setFontSize(normal);
}
#else if (page == "PROGAPPR") { # A/C without GPS
# me["Simple_L5S"].setFontSize(small);
# me["Simple_L5S"].setColor(GREEN);
# me["Simple_L5"].setFontSize(small);
# me["Simple_L5"].setColor(GREEN);
# me["Simple_R5S"].setFontSize(small);
# me["Simple_R5S"].setColor(WHITE);
# me["Simple_R5S"].show();
# me["Simple_R5"].setFontSize(small);
# me["Simple_R5"].setColor(WHITE);
# me.showLeftArrow(-1, 1, -1, -1, -1, -1);
#}
pageSwitch[i].setBoolValue(1);
}
@ -3676,7 +3987,7 @@ var canvas_MCDU_base = {
me["Simple_L1"].setText(sprintf("%s", "FL" ~ fmgc.FMGCInternal.crzProg));
}
} else {
me["Simple_L1"].setText("----");
me["Simple_L1"].setText("-----");
}
me["Simple_L2"].setText(" REPORT");
if (page == "PROGCRZ") {
@ -3687,7 +3998,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");
@ -3695,19 +4005,61 @@ var canvas_MCDU_base = {
me["Simple_L4S"].setText(" BRG /DIST");
me["Simple_L5S"].setText(" PREDICTIVE");
me["Simple_L6S"].setText("REQUIRED");
me["Simple_R1"].setText("FL398");
me["Simple_R2"].setText("VDEV = + 750 FT");
me["Simple_R4"].setText("[ ]");
if (page != "PROGDONE") {
me["Simple_R1"].setText("FL398 ");
} else {
me["Simple_L1"].setText("_____");
me["Simple_R1"].setText("----- ");
me["Simple_L1"].setColor(AMBER);
me["Simple_C1"].setColor(WHITE);
me["Simple_R1"].setColor(WHITE);
me["Simple_R5"].hide();
}
if (page == "PROGDES" or page == "PROGAPPR") {
var vdev = 750; #CHECKME i dunno the meaning, but I found this value in the source
var vdev_sign = (vdev>=0) ? "+" : "-";
me["Simple_C2"].setText(sprintf("%17s%4d ",vdev_sign,abs(vdev)));
me["Simple_R2"].setText(sprintf("%30s","VDEV= FT "));
}
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 ");
me["Simple_R6S"].setText("ESTIMATED");
me["Simple_C1"].setText("----");
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");
me["Simple_C6"].setText("HIGH");
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");
#if (page == "PROGAPPR") { # A/C without GPS
# me["Simple_L5"].setText(sprintf(" DIR DIST TO DEST=%6d",0));
# me["Simple_L5S"].setText(sprintf("REQD DIST TO LAND=%6d",0));
# me["Simple_R5"].setText("MN");
# me["Simple_R5S"].setText("MN");
#}
} else if (page == "PERFTO") {
if (!pageSwitch[i].getBoolValue()) {
@ -3737,7 +4089,7 @@ var canvas_MCDU_base = {
me.showLeftS(1, 1, 1, 1, 1, 1);
me.showLeftArrow(-1, -1, -1, -1, -1, 1);
me.showRight(-1, 1, 1, 1, 1, 1);
me.showRightS(-1, 1, 1, 1, 1, 1);
me.showRightS(1, 1, 1, 1, 1, 1);
me.showRightArrow(-1, -1, -1, -1, -1, 1);
me.showCenter(1, 1, 1, -1, -1, -1);
me["Simple_C3B"].hide();
@ -3756,11 +4108,13 @@ var canvas_MCDU_base = {
me.colorLeft("blu", "blu", "blu", "blu", "blu", "wht");
me.colorLeftS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorLeftArrow("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRight("wht", "blu", "blu", "blu", "blu", "wht");
me.colorRight("grn", "blu", "blu", "blu", "blu", "wht");
me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht");
me.colorRightArrow("wht", "wht", "wht", "wht", "wht", "wht");
me.colorCenter("grn", "grn", "grn", "wht", "wht", "wht");
me.colorCenterS("wht", "wht", "wht", "wht", "wht", "wht");
me["Simple_Title"].setText("TAKE OFF");
pageSwitch[i].setBoolValue(1);
}
@ -3799,18 +4153,25 @@ var canvas_MCDU_base = {
me["Simple_L6"].hide();
me["Simple_L6S"].hide();
}
if (fmgc.FMGCInternal.phase == 1) {
if (fmgc.FMGCInternal.phase == 1) { # GREEN title and not modifiable on TO phase
me["Simple_Title"].setColor(GREEN);
} else {
me.colorLeft("grn", "grn", "grn", "blu", "grn", "wht");
me.colorRight("grn", "blu", "grn", "grn", "grn", "wht");
} else {
me["Simple_Title"].setColor(WHITE);
me.colorLeft("blu", "blu", "blu", "blu", "blu", "wht");
me.colorRight("grn", "blu", "blu", "blu", "blu", "wht");
}
if (fmgc.flightPlanController.flightplans[2].departure_runway != nil) {
me["Simple_Title"].setText(sprintf("TAKE OFF RWY %s", fmgc.flightPlanController.flightplans[2].departure_runway.id));
me["Simple_R1"].setText(fmgc.flightPlanController.flightplans[2].departure_runway.id ~ " ");
me["Simple_R1"].show();
} else {
me["Simple_Title"].setText("TAKE OFF");
me["Simple_R1"].hide();
}
if (fmgc.FMGCInternal.v1set) {
me["PERFTO_V1"].hide();
@ -3886,6 +4247,7 @@ var canvas_MCDU_base = {
me["Simple_C1S"].setText("FLP RETR");
me["Simple_C2S"].setText("SLT RETR");
me["Simple_C3S"].setText("CLEAN ");
} else if (page == "PERFCLB") {
if (!pageSwitch[i].getBoolValue()) {
me.defaultHideWithCenter();
@ -4040,6 +4402,7 @@ var canvas_MCDU_base = {
me["Simple_R6S"].setText("NEXT ");
me["Simple_R6"].setText("PHASE ");
} else if (page == "PERFCRZ") {
if (!pageSwitch[i].getBoolValue()) {
me.defaultHideWithCenter();
@ -4335,6 +4698,7 @@ var canvas_MCDU_base = {
me["Simple_R6S"].setText("NEXT ");
me["Simple_R6"].setText("PHASE ");
} else if (page == "PERFAPPR") {
if (!pageSwitch[i].getBoolValue()) {
me.defaultHideWithCenter();
@ -4518,6 +4882,7 @@ var canvas_MCDU_base = {
me["Simple_C2S"].setText("SLT RETR");
me["Simple_C3S"].setText("CLEAN ");
me["Simple_C5S"].setText("VLS ");
} else if (page == "PERFGA") {
if (!pageSwitch[i].getBoolValue()) {
me.defaultHideWithCenter();
@ -4835,6 +5200,8 @@ var canvas_MCDU_base = {
me.dynamicPageArrowFunc(myVertRev[i]);
me.colorLeftArrow(myVertRev[i].arrowsColour[0][0],myVertRev[i].arrowsColour[0][1],myVertRev[i].arrowsColour[0][2],myVertRev[i].arrowsColour[0][3],myVertRev[i].arrowsColour[0][4],myVertRev[i].arrowsColour[0][5]);
me.colorRightArrow(myVertRev[i].arrowsColour[1][0],myVertRev[i].arrowsColour[1][1],myVertRev[i].arrowsColour[1][2],myVertRev[i].arrowsColour[1][3],myVertRev[i].arrowsColour[1][4],myVertRev[i].arrowsColour[1][5]);
me.dynamicPageFontFunc(myVertRev[i]);
@ -5896,6 +6263,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

@ -12,7 +12,7 @@
viewBox="0 0 1024 864"
version="1.1"
id="svg2"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="mcdu.svg">
<metadata
id="metadata375">
@ -37,17 +37,17 @@
guidetolerance="20"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="705"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview371"
showgrid="true"
inkscape:zoom="3.1578866"
inkscape:cx="1122.1906"
inkscape:cy="986.92422"
inkscape:zoom="0.55824076"
inkscape:cx="608.20261"
inkscape:cy="690.7315"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:current-layer="Simple"
showguides="false"
inkscape:snap-global="false"
units="px"
@ -306,6 +306,19 @@
y="539.16522"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:70px;line-height:1.25;font-family:BoeingCDULarge;-inkscape-font-specification:BoeingCDULarge;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1px">TEXT</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="521.74713"
y="69.238266"
id="Simple_Title2"
transform="scale(0.99151607,1.0085565)"
inkscape:label="#text4244b"><tspan
sodipodi:role="line"
id="tspan1367"
x="521.74713"
y="69.238266"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:70px;line-height:1.25;font-family:BoeingCDULarge;-inkscape-font-specification:BoeingCDULarge;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1">TITLE</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
@ -1016,7 +1029,7 @@
inkscape:label="#g4241"
id="g4241">
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 952.4036,47.432743 H 923.87395"
id="path4480-4"
inkscape:connector-curvature="0"
@ -1026,9 +1039,9 @@
inkscape:connector-curvature="0"
id="path4482-0"
d="M 936.70791,32.6968 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,62.1688 921.8587,47.4328"
id="path4484-0"
inkscape:connector-curvature="0"
@ -1069,7 +1082,7 @@
inkscape:label="#g4324"
id="g4324">
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 998.71909,284.70793 H 970.18944"
id="path4490-7"
inkscape:connector-curvature="0"
@ -1079,9 +1092,9 @@
inkscape:connector-curvature="0"
id="path4318-2"
d="m 994.54102,294.79468 -20.17351,-20.1735"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 984.45427,298.97275 -10e-6,-28.52964"
id="path4320-1"
inkscape:connector-curvature="0"
@ -1091,7 +1104,7 @@
inkscape:connector-curvature="0"
id="path4322-2"
d="m 974.36752,294.79468 20.17349,-20.1735"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</g>
@ -1103,7 +1116,7 @@
x="177.72771"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:1.25;font-family:BoeingCDULarge;-inkscape-font-specification:BoeingCDULarge;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.2px;line-height:1.25;font-family:BoeingCDULarge;-inkscape-font-specification:BoeingCDULarge;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1"
y="68.861366"
x="177.72771"
id="tspan1240"
@ -1147,7 +1160,7 @@
inkscape:label="#g4241"
id="g186">
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 952.4036,47.432743 H 923.87395"
id="path180"
inkscape:connector-curvature="0"
@ -1157,9 +1170,9 @@
inkscape:connector-curvature="0"
id="path182"
d="M 936.70791,32.6968 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,62.1688 921.8587,47.4328"
id="path184"
inkscape:connector-curvature="0"
@ -1200,7 +1213,7 @@
inkscape:label="#g4324"
id="g205">
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 998.71909,284.70793 H 970.18944"
id="path197"
inkscape:connector-curvature="0"
@ -1210,9 +1223,9 @@
inkscape:connector-curvature="0"
id="path199"
d="m 994.54102,294.79468 -20.17351,-20.1735"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 984.45427,298.97275 -10e-6,-28.52964"
id="path201"
inkscape:connector-curvature="0"
@ -1222,7 +1235,7 @@
inkscape:connector-curvature="0"
id="path203"
d="m 974.36752,294.79468 20.17349,-20.1735"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</g>
@ -1235,7 +1248,7 @@
inkscape:label="arrow5L"
id="arrow5L">
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 952.4036,47.432743 H 923.87395"
id="path301"
inkscape:connector-curvature="0"
@ -1245,9 +1258,9 @@
inkscape:connector-curvature="0"
id="path303"
d="M 936.70791,32.6968 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,62.1688 921.8587,47.4328"
id="path305"
inkscape:connector-curvature="0"
@ -1263,9 +1276,9 @@
inkscape:connector-curvature="0"
id="path417"
d="M 952.4036,47.432743 H 923.87395"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,32.6968 921.8587,47.4328"
id="path419"
inkscape:connector-curvature="0"
@ -1275,7 +1288,7 @@
inkscape:connector-curvature="0"
id="path421"
d="M 936.70791,62.1688 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
style="stroke:#bb6100;stroke-opacity:1"
@ -1283,7 +1296,7 @@
inkscape:label="arrow3L"
id="arrow3L">
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 952.4036,47.432743 H 923.87395"
id="path425"
inkscape:connector-curvature="0"
@ -1293,9 +1306,9 @@
inkscape:connector-curvature="0"
id="path427"
d="M 936.70791,32.6968 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,62.1688 921.8587,47.4328"
id="path429"
inkscape:connector-curvature="0"
@ -1311,9 +1324,9 @@
inkscape:connector-curvature="0"
id="path433"
d="M 952.4036,47.432743 H 923.87395"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,32.6968 921.8587,47.4328"
id="path435"
inkscape:connector-curvature="0"
@ -1323,7 +1336,7 @@
inkscape:connector-curvature="0"
id="path437"
d="M 936.70791,62.1688 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
style="stroke:#bb6100;stroke-opacity:1"
@ -1331,7 +1344,7 @@
inkscape:label="arrow1L"
id="arrow1L">
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 952.4036,47.432743 H 923.87395"
id="path471"
inkscape:connector-curvature="0"
@ -1341,9 +1354,9 @@
inkscape:connector-curvature="0"
id="path473"
d="M 936.70791,32.6968 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,62.1688 921.8587,47.4328"
id="path475"
inkscape:connector-curvature="0"
@ -1359,9 +1372,9 @@
inkscape:connector-curvature="0"
id="path479"
d="M 952.4036,47.432743 H 923.87395"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,32.6968 921.8587,47.4328"
id="path481"
inkscape:connector-curvature="0"
@ -1371,7 +1384,7 @@
inkscape:connector-curvature="0"
id="path483"
d="M 936.70791,62.1688 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
style="stroke:#bb6100;stroke-opacity:1"
@ -1379,7 +1392,7 @@
inkscape:label="arrow4R"
id="arrow4R">
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 952.4036,47.432743 H 923.87395"
id="path487"
inkscape:connector-curvature="0"
@ -1389,9 +1402,9 @@
inkscape:connector-curvature="0"
id="path489"
d="M 936.70791,32.6968 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,62.1688 921.8587,47.4328"
id="path491"
inkscape:connector-curvature="0"
@ -1407,9 +1420,9 @@
inkscape:connector-curvature="0"
id="path495"
d="M 952.4036,47.432743 H 923.87395"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,32.6968 921.8587,47.4328"
id="path497"
inkscape:connector-curvature="0"
@ -1419,7 +1432,7 @@
inkscape:connector-curvature="0"
id="path499"
d="M 936.70791,62.1688 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
style="stroke:#bb6100;stroke-opacity:1"
@ -1427,7 +1440,7 @@
inkscape:label="arrow2R"
id="arrow2R">
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 952.4036,47.432743 H 923.87395"
id="path503"
inkscape:connector-curvature="0"
@ -1437,9 +1450,9 @@
inkscape:connector-curvature="0"
id="path505"
d="M 936.70791,32.6968 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,62.1688 921.8587,47.4328"
id="path507"
inkscape:connector-curvature="0"
@ -1455,9 +1468,9 @@
inkscape:connector-curvature="0"
id="path511"
d="M 952.4036,47.432743 H 923.87395"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 936.70791,32.6968 921.8587,47.4328"
id="path513"
inkscape:connector-curvature="0"
@ -1467,7 +1480,7 @@
inkscape:connector-curvature="0"
id="path515"
d="M 936.70791,62.1688 921.8587,47.4328"
style="fill:none;stroke:#bb6100;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#bb6100;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</g>
@ -2617,7 +2630,7 @@
id="tspan1088"
x="478.87796"
y="171.04486"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.99240112px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1">=</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.9924px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1">=</tspan></text>
<text
inkscape:label="#text4244"
transform="scale(0.90642126,1.1032398)"
@ -2626,7 +2639,7 @@
x="478.87796"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.99240112px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.9924px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1"
y="278.32764"
x="478.87796"
id="tspan1091"
@ -2643,7 +2656,7 @@
id="tspan1094"
x="478.87796"
y="385.6102"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.99240112px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1">=</tspan></text>
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.9924px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1">=</tspan></text>
<g
style="stroke:#179ab7;stroke-opacity:1"
id="PERFAPPR_LDG_3"
@ -3010,7 +3023,7 @@
sodipodi:nodetypes="cc" />
</g>
<g
style="opacity:0.97000002;stroke:#179ab7;stroke-opacity:1"
style="opacity:0.97;stroke:#179ab7;stroke-opacity:1"
id="COMM-ADS"
inkscape:label="#g4324"
transform="matrix(1.0807111,0,0,1.0807111,-1029.7034,213.33078)">
@ -3019,9 +3032,9 @@
inkscape:connector-curvature="0"
id="path1273"
d="M 998.71909,284.70793 H 970.18944"
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 994.54102,294.79468 -20.17351,-20.1735"
id="path1275"
inkscape:connector-curvature="0"
@ -3031,9 +3044,9 @@
inkscape:connector-curvature="0"
id="path1277"
d="m 984.45427,298.97275 -10e-6,-28.52964"
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 974.36752,294.79468 20.17349,-20.1735"
id="path1279"
inkscape:connector-curvature="0"
@ -3229,9 +3242,9 @@
inkscape:connector-curvature="0"
id="path1341"
d="M 998.71909,284.70793 H 970.18944"
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 994.54102,294.79468 -20.17351,-20.1735"
id="path1343"
inkscape:connector-curvature="0"
@ -3241,9 +3254,9 @@
inkscape:connector-curvature="0"
id="path1345"
d="m 984.45427,298.97275 -10e-6,-28.52964"
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#179ab7;stroke-width:4.07999992;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:#179ab7;stroke-width:4.08;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 974.36752,294.79468 20.17349,-20.1735"
id="path1347"
inkscape:connector-curvature="0"

Before

Width:  |  Height:  |  Size: 171 KiB

After

Width:  |  Height:  |  Size: 171 KiB

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" )
@ -69,7 +72,7 @@ canvas.NDStyles["Airbus"] = {
level_off_alt: "/autopilot/route-manager/vnav/level-off-alt",
athr: "/it-autoflight/output/athr",
app_mode: "/instrumentation/nd/app-mode",
chrono_node: "/instrumentation/chrono",
chrono_node: "/instrumentation/ndchrono",
fpln_offset: "/autopilot/route-manager/offset",
active_route_color: [0.0509,0.7529,0.2941],
inactive_route_color: [0.95,0.95,0.21]
@ -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

@ -10,8 +10,6 @@ var PFD_1_mismatch = nil;
var PFD_2_mismatch = nil;
var PFD1_display = nil;
var PFD2_display = nil;
var updateL = 0;
var updateR = 0;
var et = 0;
var altTens = 0;
var track_diff = 0;
@ -136,7 +134,6 @@ var adr_3_fault = props.globals.getNode("/controls/navigation/adirscp/lights/adr
var air_data_switch = props.globals.getNode("/controls/navigation/switching/air-data", 1);
# Create Nodes:
var alt_diff = props.globals.initNode("/instrumentation/pfd/alt-diff", 0.0, "DOUBLE");
var heading = props.globals.initNode("/instrumentation/pfd/heading-deg", 0.0, "DOUBLE");
var horizon_pitch = props.globals.initNode("/instrumentation/pfd/horizon-pitch", 0.0, "DOUBLE");
var horizon_ground = props.globals.initNode("/instrumentation/pfd/horizon-ground", 0.0, "DOUBLE");
@ -282,56 +279,40 @@ var canvas_PFD_base = {
if (systems.ELEC.Bus.acEss.getValue() >= 110 and du1_lgt.getValue() > 0.01) {
if (du1_test_time.getValue() + du1_test_amount.getValue() >= elapsedtime_act and cpt_du_xfr.getValue() != 1) {
PFD_1_test.update();
updateL = 0;
PFD_1.page.hide();
PFD_1_test.page.show();
} else if (du2_test_time.getValue() + du2_test_amount.getValue() >= elapsedtime_act and cpt_du_xfr.getValue() == 1) {
PFD_1_test.update();
updateL = 0;
PFD_1.page.hide();
PFD_1_test.page.show();
} else {
PFD_1.updateFast();
if (!updateL) { # Update slow here once so that no flicker if timers don't perfectly align
updateL = 1;
PFD_1.update();
}
PFD_1.update();
PFD_1_test.page.hide();
PFD_1.page.show();
}
} else {
updateL = 0;
PFD_1_test.page.hide();
PFD_1.page.hide();
}
if (systems.ELEC.Bus.ac2.getValue() >= 110 and du6_lgt.getValue() > 0.01) {
if (du6_test_time.getValue() + du6_test_amount.getValue() >= elapsedtime_act and fo_du_xfr.getValue() != 1) {
PFD_2_test.update();
updateR = 0;
PFD_2.page.hide();
PFD_2_test.page.show();
} else if (du5_test_time.getValue() + du5_test_amount.getValue() >= elapsedtime_act and fo_du_xfr.getValue() == 1) {
PFD_2_test.update();
updateR = 0;
PFD_2.page.hide();
PFD_2_test.page.show();
} else {
PFD_2.updateFast();
if (!updateR) { # Update slow here once so that no flicker if timers don't perfectly align
updateR = 1;
PFD_2.update();
}
PFD_2.update();
PFD_2_test.page.hide();
PFD_2.page.show();
}
} else {
updateR = 0;
PFD_2_test.page.hide();
PFD_2.page.hide();
}
} else {
updateL = 0;
updateR = 0;
PFD_1_test.page.hide();
PFD_1.page.hide();
PFD_2_test.page.hide();
@ -342,14 +323,6 @@ var canvas_PFD_base = {
PFD_2_mismatch.page.show();
}
},
updateSlow: func() {
if (updateL) {
PFD_1.update();
}
if (updateR) {
PFD_2.update();
}
},
updateCommon: func () {
# FMA MAN TOGA MCT FLX THR
# Set properties used a lot to a variable to avoid calling getValue() multiple times
@ -360,6 +333,310 @@ var canvas_PFD_base = {
toga_lk_act = toga_lk.getValue();
thr1_act = thr1.getValue();
thr2_act = thr2.getValue();
# Attitude Indicator
pitch_cur = pitch.getValue();
roll_cur = roll.getValue();
me.AI_horizon_trans.setTranslation(0, pitch_cur * 11.825);
me.AI_horizon_rot.setRotation(-roll_cur * D2R, me["AI_center"].getCenter());
me.AI_horizon_ground_trans.setTranslation(0, horizon_ground.getValue() * 11.825);
me.AI_horizon_ground_rot.setRotation(-roll_cur * D2R, me["AI_center"].getCenter());
me.AI_horizon_sky_rot.setRotation(-roll_cur * D2R, me["AI_center"].getCenter());
me["AI_slipskid"].setTranslation(math.clamp(slip_skid.getValue(), -15, 15) * 7, 0);
me["AI_bank"].setRotation(-roll_cur * D2R);
if (fbw_law.getValue() == 0) {
me["AI_bank_lim"].show();
me["AI_pitch_lim"].show();
me["AI_bank_lim_X"].hide();
me["AI_pitch_lim_X"].hide();
} else {
me["AI_bank_lim"].hide();
me["AI_pitch_lim"].hide();
me["AI_bank_lim_X"].show();
me["AI_pitch_lim_X"].show();
}
fd_roll_cur = fd_roll.getValue();
fd_pitch_cur = fd_pitch.getValue();
if (fd_roll_cur != nil) {
me["FD_roll"].setTranslation((fd_roll_cur) * 2.2, 0);
}
if (fd_pitch_cur != nil) {
me["FD_pitch"].setTranslation(0, -(fd_pitch_cur) * 3.8);
}
gear_agl_cur = gear_agl.getValue();
me["AI_agl"].setText(sprintf("%s", math.round(math.clamp(gear_agl_cur, 0, 2500))));
if (fmgc.FMGCInternal.phase < 3 or fmgc.flightPlanController.arrivalDist >= 250) {
me["FMA_dh_box"].hide();
me["FMA_dh"].hide();
me["FMA_dhn"].hide();
me["FMA_nodh"].hide();
#me["dhReached"].hide();
if (gear_agl_cur <= 2500) {
me["AI_agl"].show();
if (gear_agl_cur <= decision.getValue()) {
me["AI_agl"].setColor(0.7333,0.3803,0);
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
} else {
me["AI_agl"].hide();
}
} else {
if (gear_agl_cur <= 2500) {
me["AI_agl"].show();
me["FMA_dh_box"].hide(); #not implemented
if (int(getprop("/FMGC/internal/radio")) != 99999) {
me["FMA_dh"].setText("RADIO");
me["FMA_dh"].show();
me["FMA_dhn"].setText(sprintf("%.0f", getprop("/FMGC/internal/radio")));
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
hundredAbove.setValue(getprop("/FMGC/internal/radio") + 100);
minimum.setValue(getprop("/FMGC/internal/radio"));
if (gear_agl_cur <= getprop("/FMGC/internal/radio") + 100) {
me["AI_agl"].setColor(0.7333,0.3803,0);
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
} else if (int(getprop("/FMGC/internal/baro")) != 99999) {
me["FMA_dh"].setText("BARO");
me["FMA_dh"].show();
me["FMA_dhn"].setText(sprintf("%.0f", getprop("/FMGC/internal/baro")));
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
hundredAbove.setValue(getprop("/FMGC/internal/baro") + 100);
minimum.setValue(getprop("/FMGC/internal/baro"));
if (gear_agl_cur <= getprop("/FMGC/internal/baro") + 100) {
me["AI_agl"].setColor(0.7333,0.3803,0);
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
} else if (fmgc.FMGCInternal.radioNo) {
me["FMA_dh"].setText("BARO");
me["FMA_dh"].show();
me["FMA_dhn"].setText("100");
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
hundredAbove.setValue(100);
minimum.setValue(0);
if (gear_agl_cur <= 100) {
me["AI_agl"].setColor(0.7333,0.3803,0);
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
} else {
me["FMA_dh"].hide();
me["FMA_dhn"].hide();
me["FMA_nodh"].show();
hundredAbove.setValue(400);
minimum.setValue(300);
if (gear_agl_cur <= 400) {
me["AI_agl"].setColor(0.7333,0.3803,0);
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
}
} else {
me["AI_agl"].hide();
me["FMA_nodh"].hide();
me["FMA_dh_box"].hide(); #not implemented
if (int(getprop("/FMGC/internal/radio")) != 99999) {
me["FMA_dh"].setText("RADIO");
me["FMA_dh"].show();
me["FMA_dhn"].setText(sprintf("%.0f", getprop("/FMGC/internal/radio")));
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
} else if (int(getprop("/FMGC/internal/baro")) != 99999) {
me["FMA_dh"].setText("BARO");
me["FMA_dh"].show();
me["FMA_dhn"].setText(sprintf("%.0f", getprop("/FMGC/internal/baro")));
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
} else if (fmgc.FMGCInternal.radioNo) {
me["FMA_dh"].setText("BARO");
me["FMA_dh"].show();
me["FMA_dhn"].setText("100");
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
} else {
me["FMA_dh"].hide();
me["FMA_dhn"].hide();
me["FMA_nodh"].show();
}
}
}
me["AI_agl_g"].setRotation(-roll_cur * D2R);
FMGCphase_act = fmgc.FMGCInternal.phase;
if ((wow1.getValue() == 1 or wow2.getValue() == 1) and FMGCphase_act != 0 and FMGCphase_act != 1) {
me["AI_stick"].show();
me["AI_stick_pos"].show();
} else if ((wow1.getValue() == 1 or wow2.getValue() == 1) and (FMGCphase_act == 0 or FMGCphase_act == 1) and (eng0_state.getValue() == 3 or eng1_state.getValue() == 3)) {
me["AI_stick"].show();
me["AI_stick_pos"].show();
} else {
me["AI_stick"].hide();
me["AI_stick_pos"].hide();
}
me["AI_stick_pos"].setTranslation(aileron_input.getValue() * 196.8, elevator_input.getValue() * 151.5);
# Vertical Speed
me["VS_pointer"].setRotation(vs_needle.getValue() * D2R);
me["VS_box"].setTranslation(0, vs_digit.getValue());
var vs_pfd_cur = ap_vs_pfd.getValue();
if (vs_pfd_cur < 2) {
me["VS_box"].hide();
} else {
me["VS_box"].show();
}
if (vs_pfd_cur < 10) {
me["VS_digit"].setText(sprintf("%02d", "0" ~ vs_pfd_cur));
} else {
me["VS_digit"].setText(sprintf("%02d", vs_pfd_cur));
}
var vs_itaf = fmgc.Internal.vs.getValue();
var gearAgl = gear_agl.getValue();
if (abs(vs_itaf) >= 6000 or (vs_itaf <= -2000 and gearAgl <= 2500) or (vs_itaf <= -1200 and gearAgl <= 1000)) {
me["VS_digit"].setColor(0.7333,0.3803,0);
me["VS_pointer"].setColor(0.7333,0.3803,0);
me["VS_pointer"].setColorFill(0.7333,0.3803,0);
} else {
me["VS_digit"].setColor(0.0509,0.7529,0.2941);
me["VS_pointer"].setColor(0.0509,0.7529,0.2941);
me["VS_pointer"].setColorFill(0.0509,0.7529,0.2941);
}
# ILS
me["LOC_pointer"].setTranslation(loc.getValue() * 197, 0);
me["GS_pointer"].setTranslation(0, gs.getValue() * -197);
# Heading
me.heading = hdg_scale.getValue();
me.headOffset = me.heading / 10 - int(me.heading / 10);
me.middleText = roundabout(me.heading / 10);
me.middleOffset = nil;
if(me.middleText == 36) {
me.middleText = 0;
}
me.leftText1 = me.middleText == 0?35:me.middleText - 1;
me.rightText1 = me.middleText == 35?0:me.middleText + 1;
me.leftText2 = me.leftText1 == 0?35:me.leftText1 - 1;
me.rightText2 = me.rightText1 == 35?0:me.rightText1 + 1;
me.leftText3 = me.leftText2 == 0?35:me.leftText2 - 1;
me.rightText3 = me.rightText2 == 35?0:me.rightText2 + 1;
if (me.headOffset > 0.5) {
me.middleOffset = -(me.headOffset - 1) * 98.5416;
} else {
me.middleOffset = -me.headOffset * 98.5416;
}
me["HDG_scale"].setTranslation(me.middleOffset, 0);
me["HDG_scale"].update();
me["HDG_four"].setText(sprintf("%d", me.middleText));
me["HDG_five"].setText(sprintf("%d", me.rightText1));
me["HDG_three"].setText(sprintf("%d", me.leftText1));
me["HDG_six"].setText(sprintf("%d", me.rightText2));
me["HDG_two"].setText(sprintf("%d", me.leftText2));
me["HDG_seven"].setText(sprintf("%d", me.rightText3));
me["HDG_one"].setText(sprintf("%d", me.leftText3));
me["HDG_four"].setFontSize(fontSizeHDG(me.middleText), 1);
me["HDG_five"].setFontSize(fontSizeHDG(me.rightText1), 1);
me["HDG_three"].setFontSize(fontSizeHDG(me.leftText1), 1);
me["HDG_six"].setFontSize(fontSizeHDG(me.rightText2), 1);
me["HDG_two"].setFontSize(fontSizeHDG(me.leftText2), 1);
me["HDG_seven"].setFontSize(fontSizeHDG(me.rightText3), 1);
me["HDG_one"].setFontSize(fontSizeHDG(me.leftText3), 1);
show_hdg_act = show_hdg.getValue();
hdg_diff_act = hdg_diff.getValue();
if (show_hdg_act == 1 and hdg_diff_act >= -23.62 and hdg_diff_act <= 23.62) {
me["HDG_target"].setTranslation((hdg_diff_act / 10) * 98.5416, 0);
me["HDG_digit_L"].hide();
me["HDG_digit_R"].hide();
me["HDG_target"].show();
} else if (show_hdg_act == 1 and hdg_diff_act < -23.62 and hdg_diff_act >= -180) {
me["HDG_digit_L"].setText(sprintf("%3.0f", ap_hdg.getValue()));
me["HDG_digit_L"].show();
me["HDG_digit_R"].hide();
me["HDG_target"].hide();
} else if (show_hdg_act == 1 and hdg_diff_act > 23.62 and hdg_diff_act <= 180) {
me["HDG_digit_R"].setText(sprintf("%3.0f", ap_hdg.getValue()));
me["HDG_digit_R"].show();
me["HDG_digit_L"].hide();
me["HDG_target"].hide();
} else {
me["HDG_digit_L"].hide();
me["HDG_digit_R"].hide();
me["HDG_target"].hide();
}
var heading_deg = heading.getValue();
track_diff = geo.normdeg180(track.getValue() - heading_deg);
me["TRK_pointer"].setTranslation(me.getTrackDiffPixels(track_diff),0);
split_ils = split("/", ils_data1.getValue());
if (ap_ils_mode.getValue() == 1 and size(split_ils) == 2) {
magnetic_hdg = ils_crs.getValue();
magnetic_hdg_dif = geo.normdeg180(magnetic_hdg - heading_deg);
if (magnetic_hdg_dif >= -23.62 and magnetic_hdg_dif <= 23.62) {
me["CRS_pointer"].setTranslation((magnetic_hdg_dif / 10) * 98.5416, 0);
me["ILS_HDG_R"].hide();
me["ILS_HDG_L"].hide();
me["CRS_pointer"].show();
} else if (magnetic_hdg_dif < -23.62 and magnetic_hdg_dif >= -180) {
if (int(magnetic_hdg) < 10) {
me["ILS_left"].setText(sprintf("00%1.0f", int(magnetic_hdg)));
} else if (int(magnetic_hdg) < 100) {
me["ILS_left"].setText(sprintf("0%2.0f", int(magnetic_hdg)));
} else {
me["ILS_left"].setText(sprintf("%3.0f", int(magnetic_hdg)));
}
me["ILS_HDG_L"].show();
me["ILS_HDG_R"].hide();
me["CRS_pointer"].hide();
} else if (magnetic_hdg_dif > 23.62 and magnetic_hdg_dif <= 180) {
if (int(magnetic_hdg) < 10) {
me["ILS_right"].setText(sprintf("00%1.0f", int(magnetic_hdg)));
} else if (int(magnetic_hdg) < 100) {
me["ILS_right"].setText(sprintf("0%2.0f", int(magnetic_hdg)));
} else {
me["ILS_right"].setText(sprintf("%3.0f", int(magnetic_hdg)));
}
me["ILS_HDG_R"].show();
me["ILS_HDG_L"].hide();
me["CRS_pointer"].hide();
} else {
me["ILS_HDG_R"].hide();
me["ILS_HDG_L"].hide();
me["CRS_pointer"].hide();
}
} else {
me["ILS_HDG_R"].hide();
me["ILS_HDG_L"].hide();
me["CRS_pointer"].hide();
}
# AI HDG
me.AI_horizon_hdg_trans.setTranslation(me.middleOffset, horizon_pitch.getValue() * 11.825);
me.AI_horizon_hdg_rot.setRotation(-roll_cur * D2R, me["AI_center"].getCenter());
me["AI_heading"].update();
if (athr.getValue() == 1 and (state1_act == "TOGA" or state1_act == "MCT" or state1_act == "MAN THR" or state2_act == "TOGA" or state2_act == "MCT" or state2_act == "MAN THR") and eng_out.getValue() != 1 and alpha_floor_act != 1 and
toga_lk_act != 1) {
me["FMA_man"].show();
@ -724,310 +1001,6 @@ var canvas_PFD_base = {
}
},
updateCommonFast: func() {
# Attitude Indicator
pitch_cur = pitch.getValue();
roll_cur = roll.getValue();
me.AI_horizon_trans.setTranslation(0, pitch_cur * 11.825);
me.AI_horizon_rot.setRotation(-roll_cur * D2R, me["AI_center"].getCenter());
me.AI_horizon_ground_trans.setTranslation(0, horizon_ground.getValue() * 11.825);
me.AI_horizon_ground_rot.setRotation(-roll_cur * D2R, me["AI_center"].getCenter());
me.AI_horizon_sky_rot.setRotation(-roll_cur * D2R, me["AI_center"].getCenter());
me["AI_slipskid"].setTranslation(math.clamp(slip_skid.getValue(), -15, 15) * 7, 0);
me["AI_bank"].setRotation(-roll_cur * D2R);
if (fbw_law.getValue() == 0) {
me["AI_bank_lim"].show();
me["AI_pitch_lim"].show();
me["AI_bank_lim_X"].hide();
me["AI_pitch_lim_X"].hide();
} else {
me["AI_bank_lim"].hide();
me["AI_pitch_lim"].hide();
me["AI_bank_lim_X"].show();
me["AI_pitch_lim_X"].show();
}
fd_roll_cur = fd_roll.getValue();
fd_pitch_cur = fd_pitch.getValue();
if (fd_roll_cur != nil) {
me["FD_roll"].setTranslation((fd_roll_cur) * 2.2, 0);
}
if (fd_pitch_cur != nil) {
me["FD_pitch"].setTranslation(0, -(fd_pitch_cur) * 3.8);
}
gear_agl_cur = gear_agl.getValue();
me["AI_agl"].setText(sprintf("%s", math.round(math.clamp(gear_agl_cur, 0, 2500))));
if (fmgc.FMGCInternal.phase < 3 or fmgc.flightPlanController.arrivalDist >= 250) {
me["FMA_dh_box"].hide();
me["FMA_dh"].hide();
me["FMA_dhn"].hide();
me["FMA_nodh"].hide();
#me["dhReached"].hide();
if (gear_agl_cur <= 2500) {
me["AI_agl"].show();
if (gear_agl_cur <= decision.getValue()) {
me["AI_agl"].setColor(0.7333,0.3803,0);
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
} else {
me["AI_agl"].hide();
}
} else {
if (gear_agl_cur <= 2500) {
me["AI_agl"].show();
me["FMA_dh_box"].hide(); #not implemented
if (int(getprop("/FMGC/internal/radio")) != 99999) {
me["FMA_dh"].setText("RADIO");
me["FMA_dh"].show();
me["FMA_dhn"].setText(sprintf("%.0f", getprop("/FMGC/internal/radio")));
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
hundredAbove.setValue(getprop("/FMGC/internal/radio") + 100);
minimum.setValue(getprop("/FMGC/internal/radio"));
if (gear_agl_cur <= getprop("/FMGC/internal/radio") + 100) {
me["AI_agl"].setColor(0.7333,0.3803,0);
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
} else if (int(getprop("/FMGC/internal/baro")) != 99999) {
me["FMA_dh"].setText("BARO");
me["FMA_dh"].show();
me["FMA_dhn"].setText(sprintf("%.0f", getprop("/FMGC/internal/baro")));
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
hundredAbove.setValue(getprop("/FMGC/internal/baro") + 100);
minimum.setValue(getprop("/FMGC/internal/baro"));
if (gear_agl_cur <= getprop("/FMGC/internal/baro") + 100) {
me["AI_agl"].setColor(0.7333,0.3803,0);
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
} else if (fmgc.FMGCInternal.radioNo) {
me["FMA_dh"].setText("BARO");
me["FMA_dh"].show();
me["FMA_dhn"].setText("100");
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
hundredAbove.setValue(100);
minimum.setValue(0);
if (gear_agl_cur <= 100) {
me["AI_agl"].setColor(0.7333,0.3803,0);
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
} else {
me["FMA_dh"].hide();
me["FMA_dhn"].hide();
me["FMA_nodh"].show();
hundredAbove.setValue(400);
minimum.setValue(300);
if (gear_agl_cur <= 400) {
me["AI_agl"].setColor(0.7333,0.3803,0);
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
}
} else {
me["AI_agl"].hide();
me["FMA_nodh"].hide();
me["FMA_dh_box"].hide(); #not implemented
if (int(getprop("/FMGC/internal/radio")) != 99999) {
me["FMA_dh"].setText("RADIO");
me["FMA_dh"].show();
me["FMA_dhn"].setText(sprintf("%.0f", getprop("/FMGC/internal/radio")));
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
} else if (int(getprop("/FMGC/internal/baro")) != 99999) {
me["FMA_dh"].setText("BARO");
me["FMA_dh"].show();
me["FMA_dhn"].setText(sprintf("%.0f", getprop("/FMGC/internal/baro")));
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
} else if (fmgc.FMGCInternal.radioNo) {
me["FMA_dh"].setText("BARO");
me["FMA_dh"].show();
me["FMA_dhn"].setText("100");
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
} else {
me["FMA_dh"].hide();
me["FMA_dhn"].hide();
me["FMA_nodh"].show();
}
}
}
me["AI_agl_g"].setRotation(-roll_cur * D2R);
FMGCphase_act = fmgc.FMGCInternal.phase;
if ((wow1.getValue() == 1 or wow2.getValue() == 1) and FMGCphase_act != 0 and FMGCphase_act != 1) {
me["AI_stick"].show();
me["AI_stick_pos"].show();
} else if ((wow1.getValue() == 1 or wow2.getValue() == 1) and (FMGCphase_act == 0 or FMGCphase_act == 1) and (eng0_state.getValue() == 3 or eng1_state.getValue() == 3)) {
me["AI_stick"].show();
me["AI_stick_pos"].show();
} else {
me["AI_stick"].hide();
me["AI_stick_pos"].hide();
}
me["AI_stick_pos"].setTranslation(aileron_input.getValue() * 196.8, elevator_input.getValue() * 151.5);
# Vertical Speed
me["VS_pointer"].setRotation(vs_needle.getValue() * D2R);
me["VS_box"].setTranslation(0, vs_digit.getValue());
var vs_pfd_cur = ap_vs_pfd.getValue();
if (vs_pfd_cur < 2) {
me["VS_box"].hide();
} else {
me["VS_box"].show();
}
if (vs_pfd_cur < 10) {
me["VS_digit"].setText(sprintf("%02d", "0" ~ vs_pfd_cur));
} else {
me["VS_digit"].setText(sprintf("%02d", vs_pfd_cur));
}
var vs_itaf = fmgc.Internal.vs.getValue();
var gearAgl = gear_agl.getValue();
if (abs(vs_itaf) >= 6000 or (vs_itaf <= -2000 and gearAgl <= 2500) or (vs_itaf <= -1200 and gearAgl <= 1000)) {
me["VS_digit"].setColor(0.7333,0.3803,0);
me["VS_pointer"].setColor(0.7333,0.3803,0);
me["VS_pointer"].setColorFill(0.7333,0.3803,0);
} else {
me["VS_digit"].setColor(0.0509,0.7529,0.2941);
me["VS_pointer"].setColor(0.0509,0.7529,0.2941);
me["VS_pointer"].setColorFill(0.0509,0.7529,0.2941);
}
# ILS
me["LOC_pointer"].setTranslation(loc.getValue() * 197, 0);
me["GS_pointer"].setTranslation(0, gs.getValue() * -197);
# Heading
me.heading = hdg_scale.getValue();
me.headOffset = me.heading / 10 - int(me.heading / 10);
me.middleText = roundabout(me.heading / 10);
me.middleOffset = nil;
if(me.middleText == 36) {
me.middleText = 0;
}
me.leftText1 = me.middleText == 0?35:me.middleText - 1;
me.rightText1 = me.middleText == 35?0:me.middleText + 1;
me.leftText2 = me.leftText1 == 0?35:me.leftText1 - 1;
me.rightText2 = me.rightText1 == 35?0:me.rightText1 + 1;
me.leftText3 = me.leftText2 == 0?35:me.leftText2 - 1;
me.rightText3 = me.rightText2 == 35?0:me.rightText2 + 1;
if (me.headOffset > 0.5) {
me.middleOffset = -(me.headOffset - 1) * 98.5416;
} else {
me.middleOffset = -me.headOffset * 98.5416;
}
me["HDG_scale"].setTranslation(me.middleOffset, 0);
me["HDG_scale"].update();
me["HDG_four"].setText(sprintf("%d", me.middleText));
me["HDG_five"].setText(sprintf("%d", me.rightText1));
me["HDG_three"].setText(sprintf("%d", me.leftText1));
me["HDG_six"].setText(sprintf("%d", me.rightText2));
me["HDG_two"].setText(sprintf("%d", me.leftText2));
me["HDG_seven"].setText(sprintf("%d", me.rightText3));
me["HDG_one"].setText(sprintf("%d", me.leftText3));
me["HDG_four"].setFontSize(fontSizeHDG(me.middleText), 1);
me["HDG_five"].setFontSize(fontSizeHDG(me.rightText1), 1);
me["HDG_three"].setFontSize(fontSizeHDG(me.leftText1), 1);
me["HDG_six"].setFontSize(fontSizeHDG(me.rightText2), 1);
me["HDG_two"].setFontSize(fontSizeHDG(me.leftText2), 1);
me["HDG_seven"].setFontSize(fontSizeHDG(me.rightText3), 1);
me["HDG_one"].setFontSize(fontSizeHDG(me.leftText3), 1);
show_hdg_act = show_hdg.getValue();
hdg_diff_act = hdg_diff.getValue();
if (show_hdg_act == 1 and hdg_diff_act >= -23.62 and hdg_diff_act <= 23.62) {
me["HDG_target"].setTranslation((hdg_diff_act / 10) * 98.5416, 0);
me["HDG_digit_L"].hide();
me["HDG_digit_R"].hide();
me["HDG_target"].show();
} else if (show_hdg_act == 1 and hdg_diff_act < -23.62 and hdg_diff_act >= -180) {
me["HDG_digit_L"].setText(sprintf("%3.0f", ap_hdg.getValue()));
me["HDG_digit_L"].show();
me["HDG_digit_R"].hide();
me["HDG_target"].hide();
} else if (show_hdg_act == 1 and hdg_diff_act > 23.62 and hdg_diff_act <= 180) {
me["HDG_digit_R"].setText(sprintf("%3.0f", ap_hdg.getValue()));
me["HDG_digit_R"].show();
me["HDG_digit_L"].hide();
me["HDG_target"].hide();
} else {
me["HDG_digit_L"].hide();
me["HDG_digit_R"].hide();
me["HDG_target"].hide();
}
var heading_deg = heading.getValue();
track_diff = geo.normdeg180(track.getValue() - heading_deg);
me["TRK_pointer"].setTranslation(me.getTrackDiffPixels(track_diff),0);
split_ils = split("/", ils_data1.getValue());
if (ap_ils_mode.getValue() == 1 and size(split_ils) == 2) {
magnetic_hdg = ils_crs.getValue();
magnetic_hdg_dif = geo.normdeg180(magnetic_hdg - heading_deg);
if (magnetic_hdg_dif >= -23.62 and magnetic_hdg_dif <= 23.62) {
me["CRS_pointer"].setTranslation((magnetic_hdg_dif / 10) * 98.5416, 0);
me["ILS_HDG_R"].hide();
me["ILS_HDG_L"].hide();
me["CRS_pointer"].show();
} else if (magnetic_hdg_dif < -23.62 and magnetic_hdg_dif >= -180) {
if (int(magnetic_hdg) < 10) {
me["ILS_left"].setText(sprintf("00%1.0f", int(magnetic_hdg)));
} else if (int(magnetic_hdg) < 100) {
me["ILS_left"].setText(sprintf("0%2.0f", int(magnetic_hdg)));
} else {
me["ILS_left"].setText(sprintf("%3.0f", int(magnetic_hdg)));
}
me["ILS_HDG_L"].show();
me["ILS_HDG_R"].hide();
me["CRS_pointer"].hide();
} else if (magnetic_hdg_dif > 23.62 and magnetic_hdg_dif <= 180) {
if (int(magnetic_hdg) < 10) {
me["ILS_right"].setText(sprintf("00%1.0f", int(magnetic_hdg)));
} else if (int(magnetic_hdg) < 100) {
me["ILS_right"].setText(sprintf("0%2.0f", int(magnetic_hdg)));
} else {
me["ILS_right"].setText(sprintf("%3.0f", int(magnetic_hdg)));
}
me["ILS_HDG_R"].show();
me["ILS_HDG_L"].hide();
me["CRS_pointer"].hide();
} else {
me["ILS_HDG_R"].hide();
me["ILS_HDG_L"].hide();
me["CRS_pointer"].hide();
}
} else {
me["ILS_HDG_R"].hide();
me["ILS_HDG_L"].hide();
me["CRS_pointer"].hide();
}
# AI HDG
me.AI_horizon_hdg_trans.setTranslation(me.middleOffset, horizon_pitch.getValue() * 11.825);
me.AI_horizon_hdg_rot.setRotation(-roll_cur * D2R, me["AI_center"].getCenter());
me["AI_heading"].update();
},
# Get Angle of Attack from ADR1 or, depending on Switching panel, ADR3
getAOAForPFD1: func() {
@ -1235,9 +1208,6 @@ var canvas_PFD_1 = {
me["ilsError"].hide();
}
me.updateCommon();
},
updateFast: func() {
# Airspeed
# ind_spd = ind_spd_kt.getValue();
# Subtract 30, since the scale starts at 30, but don"t allow less than 0, or more than 420 situations
@ -1719,7 +1689,7 @@ var canvas_PFD_1 = {
me["ALT_tens"].setTranslation(0, altTens * 1.392);
ap_alt_cur = ap_alt.getValue();
alt_diff_cur = alt_diff.getValue();
alt_diff_cur = dmc.DMController.DMCs[0].outputs[7].getValue();
if (alt_diff_cur >= -565 and alt_diff_cur <= 565) {
me["ALT_target"].setTranslation(0, (alt_diff_cur / 100) * -48.66856);
me["ALT_target_digit"].setText(sprintf("%03d", math.round(ap_alt_cur / 100)));
@ -1830,7 +1800,7 @@ var canvas_PFD_1 = {
me["ALT_box"].hide();
}
me.updateCommonFast();
me.updateCommon();
},
};
@ -2010,9 +1980,6 @@ var canvas_PFD_2 = {
me["ilsError"].hide();
}
me.updateCommon();
},
updateFast: func() {
# Airspeed
# ind_spd = ind_spd_kt.getValue();
# Subtract 30, since the scale starts at 30, but don"t allow less than 0, or more than 420 situations
@ -2493,7 +2460,7 @@ var canvas_PFD_2 = {
me["ALT_tens"].setTranslation(0, altTens * 1.392);
ap_alt_cur = ap_alt.getValue();
alt_diff_cur = alt_diff.getValue();
alt_diff_cur = dmc.DMController.DMCs[1].outputs[7].getValue();
if (alt_diff_cur >= -565 and alt_diff_cur <= 565) {
me["ALT_target"].setTranslation(0, (alt_diff_cur / 100) * -48.66856);
me["ALT_target_digit"].setText(sprintf("%03d", math.round(ap_alt_cur / 100)));
@ -2604,7 +2571,7 @@ var canvas_PFD_2 = {
me["ALT_box"].hide();
}
me.updateCommonFast();
me.updateCommon();
},
};
@ -2782,7 +2749,6 @@ setlistener("sim/signals/fdm-initialized", func {
PFD_2_mismatch = canvas_PFD_2_mismatch.new(group_pfd2_mismatch, "Aircraft/A320-family/Models/Instruments/Common/res/mismatch.svg");
PFD_update.start();
PFD_update_fast.start();
if (pfdrate.getValue() == 1) {
rateApply();
@ -2790,15 +2756,10 @@ setlistener("sim/signals/fdm-initialized", func {
});
var rateApply = func {
PFD_update.restart(0.15 * pfdrate.getValue());
PFD_update_fast.restart(0.05 * pfdrate.getValue());
PFD_update.restart(0.05 * pfdrate.getValue());
}
var PFD_update = maketimer(0.15, func {
canvas_PFD_base.updateSlow();
});
var PFD_update_fast = maketimer(0.05, func {
var PFD_update = maketimer(0.05, func {
canvas_PFD_base.update();
});

View file

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<PropertyList>
<sim>
<model>
<livery>
<name>ICAO Airline Name (Extra Info)</name>
<texture-fuselage>Liveries/A320/CFM/texture.png</texture-fuselage>
<texture-engine>Liveries/A320/CFM/texture.png</texture-engine>
</livery>
</model>
</sim>
<options>
<engine-name type="string">CFM56-5B4</engine-name>
<model-number type="string">A320-214</model-number>
<EIS2 type="bool">1</EIS2>
<company-options>
<idle-factor>+0.0</idle-factor>
<perf-factor>+1.0</perf-factor> <!-- please see https://www.cockpitseeker.com/wp-content/uploads/goodies/ac/a320/pdf/data/PerfoMonitoring.pdf -->
</company-options>
<model-options>
<registration type="string">AB-CDE</registration>
<three-letter type="string">ABC</three-letter>
<two-letter type="string">DE</two-letter>
<sharklet type="bool">0</sharklet>
<wifi-aft type="bool">0</wifi-aft>
<wifi-fwd type="bool">0</wifi-fwd>
</model-options>
</options>
</PropertyList>

View file

@ -13,11 +13,12 @@ var DMC = {
d.airspeeds = [props.globals.getNode("/systems/navigation/adr/output/cas-1", 1), props.globals.getNode("/systems/navigation/adr/output/cas-2", 1), props.globals.getNode("/systems/navigation/adr/output/cas-3", 1)];
d.altitudes = [props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-1-capt", 1), props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-2-capt", 1), props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-3-capt", 1)];
d.machs = [props.globals.getNode("/systems/navigation/adr/output/mach-1", 1), props.globals.getNode("/systems/navigation/adr/output/mach-2", 1), props.globals.getNode("/systems/navigation/adr/output/mach-3", 1)];
d.altitudesPfd = [props.globals.getNode("instrumentation/altimeter[0]/indicated-altitude-ft-pfd", 1), props.globals.getNode("instrumentation/altimeter[1]/indicated-altitude-ft-pfd", 1), props.globals.getNode("instrumentation/altimeter[2]/indicated-altitude-ft-pfd", 1)];
d.altitudesPfd = [props.globals.getNode("/instrumentation/altimeter[0]/indicated-altitude-ft-pfd", 1), props.globals.getNode("/instrumentation/altimeter[1]/indicated-altitude-ft-pfd", 1), props.globals.getNode("/instrumentation/altimeter[2]/indicated-altitude-ft-pfd", 1)];
d.sats = [props.globals.getNode("/systems/navigation/adr/output/sat-1", 1), props.globals.getNode("/systems/navigation/adr/output/sat-2", 1), props.globals.getNode("/systems/navigation/adr/output/sat-3", 1)];
d.tats = [props.globals.getNode("/systems/navigation/adr/output/tat-1", 1), props.globals.getNode("/systems/navigation/adr/output/tat-2", 1), props.globals.getNode("/systems/navigation/adr/output/tat-3", 1)];
d.trends = [props.globals.getNode("instrumentation/pfd/speed-lookahead-1", 1), props.globals.getNode("instrumentation/pfd/speed-lookahead-2", 1), props.globals.getNode("instrumentation/pfd/speed-lookahead-3", 1)];
d.outputs = [nil, nil, nil, nil, nil, nil, nil]; # airspeed, altitude, mach, pfd altitude, sat, tat, speed trend
d.trends = [props.globals.getNode("/instrumentation/pfd/speed-lookahead-1", 1), props.globals.getNode("/instrumentation/pfd/speed-lookahead-2", 1), props.globals.getNode("/instrumentation/pfd/speed-lookahead-3", 1)];
d.altitudeDiffs = [props.globals.getNode("//instrumentation/pfd/alt-diff[0]", 1), props.globals.getNode("//instrumentation/pfd/alt-diff[1]", 1), props.globals.getNode("//instrumentation/pfd/alt-diff[2]", 1)];
d.outputs = [nil, nil, nil, nil, nil, nil, nil, nil]; # airspeed, altitude, mach, pfd altitude, sat, tat, speed trend, altitudeDiffs
return d;
},
changeActiveADIRS: func(newADIRS) {
@ -32,6 +33,7 @@ var DMC = {
me.outputs[4] = me.sats[ADIRS];
me.outputs[5] = me.tats[ADIRS];
me.outputs[6] = me.trends[ADIRS];
me.outputs[7] = me.altitudeDiffs[ADIRS];
},
setOutputsNil: func() {
me.outputs[0] = nil;
@ -41,6 +43,7 @@ var DMC = {
me.outputs[4] = nil;
me.outputs[5] = nil;
me.outputs[6] = nil;
me.outputs[7] = nil;
},
update: func() {
if (systems.ADIRS.ADIRunits[me.activeADIRS].operative and systems.ADIRS.ADIRunits[me.activeADIRS].outputOn) {
@ -71,8 +74,8 @@ var DMController = {
# update DMC2 to correct properties for first officer PFD
me.DMCs[1].altitudes = [props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-1-fo", 1), props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-2-fo", 1), props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-3-fo", 1)];
me.DMCs[1].altitudesPfd = [props.globals.getNode("instrumentation/altimeter[3]/indicated-altitude-ft-pfd", 1), props.globals.getNode("instrumentation/altimeter[4]/indicated-altitude-ft-pfd", 1), props.globals.getNode("instrumentation/altimeter[5]/indicated-altitude-ft-pfd", 1)];
me.DMCs[1].altitudesPfd = [props.globals.getNode("/instrumentation/altimeter[3]/indicated-altitude-ft-pfd", 1), props.globals.getNode("/instrumentation/altimeter[4]/indicated-altitude-ft-pfd", 1), props.globals.getNode("/instrumentation/altimeter[5]/indicated-altitude-ft-pfd", 1)];
me.DMCs[1].altitudeDiffs = [props.globals.getNode("//instrumentation/pfd/alt-diff[3]", 1), props.globals.getNode("//instrumentation/pfd/alt-diff[4]", 1), props.globals.getNode("//instrumentation/pfd/alt-diff[5]", 1)];
me._init = 1;
}
},

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

@ -248,7 +248,7 @@ var postInit = func() {
var FMGCNodes = {
costIndex: props.globals.initNode("/FMGC/internal/cost-index", 0, "DOUBLE"),
flexSet: props.globals.initNode("/FMGC/internal/flex-set", 0, "BOOL"),
flexTemp: props.globals.initNode("/FMGC/internal/flex", 0, "INT"),
flexTemp: props.globals.initNode("/FMGC/internal/flex", 45, "INT"),
mngSpdAlt: props.globals.getNode("/FMGC/internal/mng-alt-spd"),
mngMachAlt: props.globals.getNode("/FMGC/internal/mng-alt-mach"),
toFromSet: props.globals.initNode("/FMGC/internal/tofrom-set", 0, "BOOL"),
@ -646,9 +646,15 @@ var masterFMGC = maketimer(0.2, func {
}
}
if (FMGCInternal.phase == 4 and getprop("/FMGC/internal/decel")) {
FMGCInternal.phase = 5;
}
if (FMGCInternal.phase == 4) {
if (getprop("/FMGC/internal/decel")) {
FMGCInternal.phase = 5;
}
else if (altSel == (FMGCInternal.crzFl * 100)) { # back to CRZ state
FMGCInternal.phase = 3;
systems.PNEU.pressMode.setValue("CR");
}
}
if (flightPlanController.num[2].getValue() > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and flightPlanController.arrivalDist <= 15 and (modelat == "NAV" or modelat == "LOC" or modelat == "LOC*") and pts.Position.gearAglFt.getValue() < 9500) { #todo decel pseudo waypoint
setprop("/FMGC/internal/decel", 1);
@ -971,7 +977,7 @@ var reset_FMGC = func {
mcdu.MCDU_reset(0);
mcdu.MCDU_reset(1);
mcdu.ReceivedMessagesDatabase.clearDatabase();
mcdu.FlightLogDatabase.clearDatabase();
mcdu.FlightLogDatabase.reset(); # track reset events without loosing recorded data
Input.fd1.setValue(fd1);
Input.fd2.setValue(fd2);

View file

@ -1,6 +1,6 @@
# A3XX Simbrief Parser
# Copyright (c) 2020 Jonathan Redpath (legoboyvdlp)
# enhanceded 12/2020 - parse TOD & TOC psedo waypoints, set computer speeds on fix wps, fake coRoute name
# enhanced 12/2020 - parse TOD & TOC psedo waypoints, set computer speeds on fix wps, fake coRoute name
var LBS2KGS = 0.4535924;
@ -14,7 +14,7 @@ var SimbriefParser = {
me.inhibit = 1;
var stamp = systime();
http.save("https://www.simbrief.com/api/xml.fetcher.php?username=" ~ username, getprop('/sim/fg-home') ~ "/Export/A320-family-simbrief.xml")
.fail(func me.failure(i))
.fail(func { me.failure(i) })
.done(func {
var errs = [];
call(me.read, [(getprop('/sim/fg-home') ~ "/Export/A320-family-simbrief.xml"),i], SimbriefParser, {}, errs);
@ -49,6 +49,33 @@ var SimbriefParser = {
me.failure(i);
}
},
validateFile: func(xml) {
var data = io.readxml(xml);
if (data != nil) {
return (data.getChild("OFP") != nil);
}
return false;
},
readLegs: func(xml) { # lite OFP parser only for legs = wapoinst + airways
var legs = [];
var data = io.readxml(xml);
if (data != nil) {
var ofp = data.getChild("OFP");
if (ofp != nil) {
var ofpNavlog = ofp.getNode("navlog");
var ofpFixes = ofpNavlog.getChildren("fix");
var ident = "";
foreach (var ofpFix; ofpFixes) {
if (ofpFix.getNode("is_sid_star").getBoolValue()) continue;
ident = ofpFix.getNode("ident").getValue();
if (ident == "TOC" or ident == "TOD") continue;
append(legs, [ ofpFix.getNode("ident").getValue() , ofpFix.getNode("via_airway").getValue() ] );
}
return legs;
}
}
return nil;
},
tryFindByCoord: func(coords, id, type) {
var result = nil;
if (type == "nav") {
@ -107,12 +134,14 @@ var SimbriefParser = {
fmgc.flightPlanController.flightplans[3].destination_runway = runwayStore;
}
var alternateID = me.OFP.getNode("alternate/icao_code").getValue();
var alternates = findAirportsByICAO(alternateID);
if (alternates != nil and size(alternates) != 0) {
fmgc.FMGCInternal.altAirport = alternateID;
atsu.ATISInstances[2].newStation(alternateID);
fmgc.FMGCInternal.altAirportSet = 1;
var alternateID = me.OFP.getNode("alternate/icao_code") == nil ? nil : me.OFP.getNode("alternate/icao_code").getValue();
if (alternateID != nil) {
var alternates = findAirportsByICAO(alternateID);
if (size(alternates) != 0) {
fmgc.FMGCInternal.altAirport = alternateID;
atsu.ATISInstances[2].newStation(alternateID);
fmgc.FMGCInternal.altAirportSet = 1;
}
}
var wps = [];
@ -161,6 +190,7 @@ var SimbriefParser = {
#setprop("/autopilot/route-manager/vnav/tc/latitude-deg",ofpFix.getNode("pos_lat").getValue());
#setprop("/autopilot/route-manager/vnav/tc/longitude-deg",ofpFix.getNode("pos_long").getValue());
#ident = "(T/C)";
continue; # restore skip TOC/TOD
}
if (ident == "TOD") {
@ -168,6 +198,7 @@ var SimbriefParser = {
#setprop("/autopilot/route-manager/vnav/td/latitude-deg",ofpFix.getNode("pos_lat").getValue());
#setprop("/autopilot/route-manager/vnav/td/longitude-deg",ofpFix.getNode("pos_long").getValue());
#ident = "(T/D)";
continue; # restore skip TOC/TOD
}
coords = geo.Coord.new();

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

@ -180,7 +180,7 @@ var MessageController = {
TypeIMessage.new("USING COST INDEX N", 1),TypeIMessage.new("WAIT FOR SYSTEM RESPONSE"),TypeIMessage.new("RWY/LS MISMATCH"),
TypeIMessage.new("VHF3 VOICE MSG NOT GEN"),TypeIMessage.new("NO COMM MSG NOT GEN"),TypeIMessage.new("WX UPLINK"),
TypeIMessage.new("SIMBRIEF DOWNLOAD FAILED"),TypeIMessage.new("MISSING USERNAME"),TypeIMessage.new("AOC ACT F-PLN UPLINK"),
TypeIMessage.new("NO ANSWER TO REQUEST"),TypeIMessage.new("NO D-ATIS AVAILABLE"),TypeIMessage.new("BAD SERVER RESPONSE"),
TypeIMessage.new("NO ANSWER TO REQUEST"),TypeIMessage.new("NO D-ATIS AVAILABLE"),TypeIMessage.new("NO METAR AVAILABLE"),TypeIMessage.new("BAD SERVER RESPONSE"),
TypeIMessage.new("WIND DATA UPLINK"),TypeIMessage.new("CHECK ALT WIND"),TypeIMessage.new("INVALID WIND UPLINK"),TypeIMessage.new("WIND UPLINK EXISTS"), #p.533
TypeIMessage.new("FM DATALINK UNAVAIL"),TypeIMessage.new("NOT XMITTED TO ACARS"), #p.559
TypeIMessage.new("PRINTER NOT AVAILABLE"),

View file

@ -32,7 +32,7 @@ var variousReset = func() {
setprop("/controls/CVR/gndctl", 0);
setprop("/controls/CVR/erase", 0);
setprop("/controls/switches/pneumatics/cabin-fans", 1);
setprop("/controls/oxygen/crewOxyPB", 1); # 0 = OFF 1 = AUTO
setprop("/controls/oxygen/crewOxyPB", 0); # 0 = OFF 1 = AUTO
setprop("/controls/switches/emerCallLtO", 0); # ON light, flashes white for 10s
setprop("/controls/switches/emerCallLtC", 0); # CALL light, flashes amber for 10s
setprop("/controls/switches/emerCall", 0);
@ -62,8 +62,9 @@ var variousReset = func() {
setprop("/modes/fcu/hdg-time", -45);
setprop("/controls/navigation/switching/att-hdg", 0);
setprop("/controls/navigation/switching/air-data", 0);
setprop("/controls/switches/no-smoking-sign", 0.5);
setprop("/controls/switches/seatbelt-sign", 1);
setprop("/controls/switches/no-smoking-sign", 0.0);
setprop("/controls/switches/seatbelt-sign", 0);
setprop("/controls/switches/emer-lights", 0);
}
var BUTTONS = {

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();
@ -378,4 +377,51 @@ foreach (var name; keys(input)) {
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 Libraries", name, input[name]));
}
var hideCanvas = props.globals.getNode("/options/hide-canvas-outside");
var internal = props.globals.getNode("/sim/current-view/internal");
var toggleScreen = func() {
if (!internal.getValue() and hideCanvas.getValue()) {
canvas_pfd.PFD_update.stop();
canvas_ecam.lowerECAM_update.stop();
canvas_nd.nd_update.stop();
canvas_dcdu.DCDU_update.stop();
canvas_mcdu.MCDU_update.stop();
} else {
canvas_pfd.rateApply();
canvas_ecam.l_rateApply();
canvas_nd.rateApply();
canvas_dcdu.rateApply();
canvas_mcdu.MCDU_update.start();
}
};
setlistener("/options/hide-canvas-outside", func() {
toggleScreen();
}, 0, 0);
setlistener("/sim/current-view/internal", func() {
toggleScreen();
}, 0, 0);
# TODO split EFIS altimeters
var newinhg = nil;
setlistener("/instrumentation/altimeter/setting-inhg", func() {
newinhg = getprop("/instrumentation/altimeter/setting-inhg");
setprop("/instrumentation/altimeter[1]/setting-inhg", newinhg);
setprop("/instrumentation/altimeter[2]/setting-inhg", newinhg);
setprop("/instrumentation/altimeter[3]/setting-inhg", newinhg);
setprop("/instrumentation/altimeter[4]/setting-inhg", newinhg);
setprop("/instrumentation/altimeter[5]/setting-inhg", newinhg);
}, 0, 0);
var newhpa = nil;
setlistener("/instrumentation/altimeter/setting-hpa", func() {
newhpa = getprop("/instrumentation/altimeter/setting-hpa");
setprop("/instrumentation/altimeter[1]/setting-hpa", newhpa);
setprop("/instrumentation/altimeter[2]/setting-hpa", newhpa);
setprop("/instrumentation/altimeter[3]/setting-hpa", newhpa);
setprop("/instrumentation/altimeter[4]/setting-hpa", newhpa);
setprop("/instrumentation/altimeter[5]/setting-hpa", newhpa);
}, 0, 0);
setprop("/systems/acconfig/libraries-loaded", 1);

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

@ -117,15 +117,15 @@ var fplnItem = {
},
getAlt: func() {
if (me.index == 0 and left(me.wp.wp_name, 4) == fmgc.FMGCInternal.depApt and fmgc.flightPlanController.flightplans[me.plan].departure != nil) {
return [" " ~ sprintf("%5.0f", math.round(fmgc.flightPlanController.flightplans[me.plan].departure.elevation * M2FT)), "grn"]; #fixed - aligned to right
return [" " ~ sprintf("%5.0f", math.round(fmgc.flightPlanController.flightplans[me.plan].departure.elevation * M2FT)), "grn"];
} elsif (me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1) and fmgc.flightPlanController.fromWptAlt != nil) {
return [" " ~ fmgc.flightPlanController.fromWptAlt, "mag"];
} elsif (me.wp.alt_cstr != nil and me.wp.alt_cstr > 0) {
var tcol = (me.wp.alt_cstr_type == "computed" or me.wp.alt_cstr_type == "computed_mach") ? "grn" : "mag"; # TODO - check if only computed
if (me.wp.alt_cstr > fmgc.FMGCInternal.transAlt) {
return [" " ~ sprintf("%5s", "FL" ~ math.round(num(me.wp.alt_cstr) / 100)), tcol]; #fixed - aligned to right
return [" " ~ sprintf("%5s", "FL" ~ math.round(num(me.wp.alt_cstr) / 100)), tcol];
} else {
return [" " ~ sprintf("%5.0f", me.wp.alt_cstr), tcol]; #fixed - aligned to right
return [" " ~ sprintf("%5.0f", me.wp.alt_cstr), tcol];
}
} else {
return ["------", "wht"];

View file

@ -2,12 +2,17 @@
# Basic OOOI system implementation
var OOOIReport = {
new: func(state,fob="",time="") {
new: func(state,time=0,fob="") {
var report = {parents:[OOOIReport]};
report.state = state;
report.fob = (fob != "") ? fob : fmgc.FMGCInternal.fob;
report.time = (time != "") ? time : sprintf("%02d.%02d", getprop("/sim/time/utc/hour"), getprop("/sim/time/utc/minute"));
report.elapsed = int(getprop("/sim/time/elapsed-sec"));
if (time != 0) {
report.time = formatSecToHHMM(time);
report.elapsed = time;
} else {
report.time = sprintf("%02d.%02d", getprop("/sim/time/utc/hour"), getprop("/sim/time/utc/minute"));
report.elapsed = int(getprop("/sim/time/elapsed-sec"));
}
report.gmt = getprop("/sim/time/gmt-string");
report.date = getprop("/sim/time/utc/day");
report.fltnum = (fmgc.FMGCInternal.flightNumSet == 1) ? fmgc.FMGCInternal.flightNum : "----";
@ -42,12 +47,15 @@ var formatSecToHHMM = func(sec) {
var FlightLogDatabase = {
database: std.Vector.new(),
pages: std.Vector.new(),
currpageindex: 0,
addReport: func(report) {
if (report.state == 0) me.pages.append( OOOIReportPage.new(me.getSize()) );
if (report.state == 0 or me.getPageSize()==0) me.addPage();
me.database.append(report);
var pg = me.pages.vector[me.pages.size()-1];
pg.fltnum = report.fltnum;
pg.tofrom = report.tofrom;
if (report.state < 3) { # IN states (3/4) don't update page data
if (report.fltnum != "") pg.fltnum = report.fltnum;
if (report.tofrom != "") pg.tofrom = report.tofrom;
}
if (report.state == 0) {
pg.fltstate = "OUT";
pg.blkstart = report.elapsed;
@ -65,6 +73,10 @@ var FlightLogDatabase = {
if (pg.blkstart > 0) pg.blktime = formatSecToHHMM(report.elapsed - pg.blkstart);
}
},
reset: func() {
#Actually reset occurs before IN state - I have no solution for this
#if (me.getPageSize()>0 and me.currpageindex < me.getSize()) me.addPage();
},
getSize: func() {
return me.database.size();
},
@ -82,6 +94,10 @@ var FlightLogDatabase = {
}
return lst;
},
addPage: func() {
me.currpageindex = me.getSize();
me.pages.append( OOOIReportPage.new(me.getSize()) );
},
getPage: func(pg) {
return (pg<=me.getPageSize()) ? me.pages.vector[pg-1] : OOOIReportPage.new(0);
},
@ -110,7 +126,12 @@ var doorR1_pos = props.globals.getNode("/sim/model/door-positions/doorr1/positio
var doorL4_pos = props.globals.getNode("/sim/model/door-positions/doorl4/position-norm", 1);
var doorR4_pos = props.globals.getNode("/sim/model/door-positions/doorr4/position-norm", 1);
#check for A/C state change - advice me for a better method, please :/
# Detect OFF without IN
var lastgs0 = 0;
#var lastgear0 = 0;
var lastgsrestart = 0;
# Check for A/C state change - advice me for a better method, please :/
var waitingOOOIChange = maketimer(1, func(){ # 1sec precision
var phase = fmgc.FMGCInternal.phase;
@ -121,7 +142,7 @@ var waitingOOOIChange = maketimer(1, func(){ # 1sec precision
if (expectedOOOIState == 0) { # OUT
if (gear0 and phase == 0) {
if (gs>9) { # imho - it's useful few speed tollerance, 10kts min speed on taxiways - CHECKME - better with pushback detection?
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;
}
@ -141,14 +162,29 @@ 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;
lastgs0 = 0;
lastgsrestart = 0;
}
} else if (expectedOOOIState == 3) { # IN
if (gear0 and gs < 1) {
if (lastgs0 == 0) {
lastgs0 = int(getprop("/sim/time/elapsed-sec"));
lastgsrestart = 0;
}
if (doorL1_pos.getValue()>0 or doorR1_pos.getValue()>0 or doorL4_pos.getValue()>0 or doorR4_pos.getValue()>0) {
FlightLogDatabase.addReport(OOOIReport.new(expectedOOOIState));
expectedOOOIState = 0;
}
}
else if (!gear0) { # OFF without IN -> TO without stop and opening doors
if (lastgs0>0) FlightLogDatabase.addReport(OOOIReport.new(expectedOOOIState,lastgs0)); # IN (estimated)
FlightLogDatabase.addPage();
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
lastgsrestart = int(getprop("/sim/time/elapsed-sec"));
}
}
});

View file

@ -238,11 +238,12 @@ var initInputA = func(key, i) {
fmgc.flightPlanController.reset(2);
fmgc.flightPlanController.init();
Simbrief.SimbriefParser.inhibit = 0;
fmgc.updateARPT();
mcdu_scratchpad.scratchpads[i].empty();
#} else if (scratchpad == "") {
#fmgc.FMGCInternal.altSelected = 0;
#setprop("MCDU[" ~ i ~ "]/page", "ROUTESELECTION");
} else {
} else {
if (!fmgc.flightPlanController.temporaryFlag[i]) {
var tfs = size(scratchpad);
if (tfs == 9 and find("/", scratchpad) != -1) {
@ -264,6 +265,7 @@ var initInputA = func(key, i) {
mcdu_scratchpad.scratchpads[i].empty();
fmgc.flightPlanController.updateAirports(fromto[0], fromto[1], 2);
fmgc.FMGCInternal.altSelected = 0;
fmgc.updateARPT();
fmgc.updateArptLatLon();
#setprop("MCDU[" ~ i ~ "]/page", "ROUTESELECTION");
} else {

View file

@ -237,9 +237,11 @@ var lskbutton = func(btn, i) {
canvas_mcdu.myCRZWIND[i].pushButtonLeft(1);
} else if (page == "WINDDES") {
canvas_mcdu.myDESWIND[i].pushButtonLeft(1);
} else if (page == "PROGPREF") {
progTOInput("L1",i); # same fn as TO
} else if (page == "PROGTO") {
progTOInput("L1",i);
} else if (page == "PROGCLB") {
} else if (page == "PROGCLB" or page == "PROGAPPR") { # APPR restore to CLB
progCLBInput("L1",i);
} else if (page == "PROGCRZ") {
progCRZInput("L1",i);
@ -532,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") {
@ -632,6 +636,8 @@ var lskbutton = func(btn, i) {
mcdu_scratchpad.scratchpads[i].empty();
}
}
} else if (page == "VERTREV") {
canvas_mcdu.myVertRev[i].pushButtonLeft(3);
} else if (page == "MCDUTEXT") {
atsu.freeTexts[i].selection = 2;
atsu.freeTexts[i].changed = 1;
@ -851,7 +857,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") {
@ -885,6 +897,8 @@ var lskbutton = func(btn, i) {
pageNode[i].setValue("ATIS");
} else if (page == "AOCCONFIG") {
pageNode[i].setValue("AOCMENU");
} else if (page == "POSMON") {
canvas_mcdu.togglePageFreeze(i);
} else {
mcdu_message(i, "NOT ALLOWED");
}
@ -1080,6 +1094,8 @@ var rskbutton = func(btn, i) {
atsu.freeTexts[i].changed = 1;
} else if (page == "ATCMENU") {
pageNode[i].setValue("MCDUTEXT");
} else if (page == "VERTREV") {
canvas_mcdu.myVertRev[i].pushButtonRight(3);
} else {
mcdu_message(i, "NOT ALLOWED");
}
@ -1126,6 +1142,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") {
@ -1420,21 +1438,27 @@ var pagebutton = func(btn, i) {
# A more flexible system/page tracking for future system expansion
if (getprop("/MCDU[" ~ i ~ "]/active-system") == "fmgc") setprop("/MCDU[" ~ i ~ "]/last-fmgc-page", page);
else setprop("/MCDU[" ~ i ~ "]/last-atsu-page", page);
else if (getprop("/MCDU[" ~ i ~ "]/active-system") == "atsu") setprop("/MCDU[" ~ i ~ "]/last-atsu-page", page);
if (btn == "atc") setprop("/MCDU[" ~ i ~ "]/active-system","atsu");
else setprop("/MCDU[" ~ i ~ "]/active-system","fmgc");
if (btn == "radnav") {
pageNode[i].setValue("RADNAV");
} else if (btn == "prog") {
if (fmgc.FMGCInternal.phase == 0 or fmgc.FMGCInternal.phase == 1) {
if (fmgc.FMGCInternal.phase == 0) {
pageNode[i].setValue("PROGPREF");
} else if (fmgc.FMGCInternal.phase == 1) {
pageNode[i].setValue("PROGTO");
} else if (fmgc.FMGCInternal.phase == 2) {
pageNode[i].setValue("PROGCLB");
} else if (fmgc.FMGCInternal.phase == 3) {
pageNode[i].setValue("PROGCRZ");
} else if (fmgc.FMGCInternal.phase == 4 or fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
} else if (fmgc.FMGCInternal.phase == 4) {
pageNode[i].setValue("PROGDES");
} else if (fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
pageNode[i].setValue("PROGAPPR");
} else if (fmgc.FMGCInternal.phase == 7) {
pageNode[i].setValue("PROGDONE");
}
} else if (btn == "perf") {
if (fmgc.FMGCInternal.phase == 0 or fmgc.FMGCInternal.phase == 1) {

View file

@ -19,91 +19,81 @@ var perfTOCheckVSpeeds = func(i) {
}
}
var perfTOInput = func(key, i) {
var perfTOInput = func(key, i) {
var modifiable = (fmgc.FMGCInternal.phase == 1) ? 0 : 1;
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1") {
if (fmgc.FMGCInternal.phase != 1) {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.v1 = 0;
fmgc.FMGCInternal.v1set = 0;
fmgc.FMGCNodes.v1.setValue(0);
fmgc.FMGCNodes.v1set.setValue(0);
mcdu_scratchpad.scratchpads[i].empty();
} else {
var tfs = size(scratchpad);
if (tfs == 3) {
if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) {
fmgc.FMGCInternal.v1 = scratchpad;
fmgc.FMGCInternal.v1set = 1;
# for sounds:
fmgc.FMGCNodes.v1.setValue(scratchpad);
fmgc.FMGCNodes.v1set.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeeds(i); # do V-speeds validation
} else {
mcdu_message(i, "NOT ALLOWED");
}
if (key == "L1" and modifiable) {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.v1 = 0;
fmgc.FMGCInternal.v1set = 0;
fmgc.FMGCNodes.v1.setValue(0);
fmgc.FMGCNodes.v1set.setValue(0);
mcdu_scratchpad.scratchpads[i].empty();
} else {
var tfs = size(scratchpad);
if (tfs == 3) {
if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) {
fmgc.FMGCInternal.v1 = scratchpad;
fmgc.FMGCInternal.v1set = 1;
# for sounds:
fmgc.FMGCNodes.v1.setValue(scratchpad);
fmgc.FMGCNodes.v1set.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeeds(i); # do V-speeds validation
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "L2") {
if (fmgc.FMGCInternal.phase != 1) {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.vr = 0;
fmgc.FMGCInternal.vrset = 0;
mcdu_scratchpad.scratchpads[i].empty();
} else {
var tfs = size(scratchpad);
if (tfs == 3) {
if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) {
fmgc.FMGCInternal.vr = scratchpad;
fmgc.FMGCInternal.vrset = 1;
mcdu_scratchpad.scratchpads[i].empty();
} else if (key == "L2" and modifiable) {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.vr = 0;
fmgc.FMGCInternal.vrset = 0;
mcdu_scratchpad.scratchpads[i].empty();
} else {
var tfs = size(scratchpad);
if (tfs == 3) {
if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) {
fmgc.FMGCInternal.vr = scratchpad;
fmgc.FMGCInternal.vrset = 1;
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeeds(i); # do V-speeds validation
} else {
mcdu_message(i, "NOT ALLOWED");
}
perfTOCheckVSpeeds(i); # do V-speeds validation
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "L3") {
if (fmgc.FMGCInternal.phase != 1) {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.v2 = 0;
fmgc.FMGCInternal.v2set = 0;
setprop("/it-autoflight/settings/togaspd", 157);
mcdu_scratchpad.scratchpads[i].empty();
} else {
var tfs = size(scratchpad);
if (tfs == 3) {
if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) {
fmgc.FMGCInternal.v2 = scratchpad;
fmgc.FMGCInternal.v2set = 1;
fmgc.updatePitchArm2();
setprop("/it-autoflight/settings/togaspd", scratchpad);
mcdu_scratchpad.scratchpads[i].empty();
} else if (key == "L3" and modifiable) {
if (scratchpad == "CLR") {
fmgc.FMGCInternal.v2 = 0;
fmgc.FMGCInternal.v2set = 0;
setprop("/it-autoflight/settings/togaspd", 157);
mcdu_scratchpad.scratchpads[i].empty();
} else {
var tfs = size(scratchpad);
if (tfs == 3) {
if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) {
fmgc.FMGCInternal.v2 = scratchpad;
fmgc.FMGCInternal.v2set = 1;
fmgc.updatePitchArm2();
setprop("/it-autoflight/settings/togaspd", scratchpad);
mcdu_scratchpad.scratchpads[i].empty();
perfTOCheckVSpeeds(i); # do V-speeds validation
} else {
mcdu_message(i, "NOT ALLOWED");
}
perfTOCheckVSpeeds(i); # do V-speeds validation
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "L4") {
if (scratchpad == "CLR") {
@ -120,7 +110,7 @@ var perfTOInput = func(key, i) {
mcdu_message(i, "NOT ALLOWED");
}
}
} else if (key == "L5") {
} else if (key == "L5" and modifiable) {
if (scratchpad == "CLR") {
setprop("/systems/thrust/clbreduc-ft", 1500);
setprop("/FMGC/internal/accel-agl-ft", 1500);
@ -160,7 +150,7 @@ var perfTOInput = func(key, i) {
mcdu_message(i, "NOT ALLOWED");
}
}
} else if (key == "R3") {
} else if (key == "R3" and modifiable) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/to-flap", 0);
setprop("/FMGC/internal/to-ths", "0.0");
@ -230,9 +220,9 @@ var perfTOInput = func(key, i) {
mcdu_message(i, "NOT ALLOWED");
}
}
} else if (key == "R4") {
} else if (key == "R4" and modifiable) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/flex", 0);
setprop("/FMGC/internal/flex", 45);
setprop("/FMGC/internal/flex-set", 0);
mcdu_scratchpad.scratchpads[i].empty();
} else {
@ -241,8 +231,6 @@ var perfTOInput = func(key, i) {
if (int(scratchpad) != nil and scratchpad >= 0 and scratchpad <= 99) {
setprop("/FMGC/internal/flex", scratchpad);
setprop("/FMGC/internal/flex-set", 1);
var flex_calc = getprop("/FMGC/internal/flex") - getprop("environment/temperature-degc");
setprop("/FMGC/internal/flex-cmd", flex_calc);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -251,7 +239,7 @@ var perfTOInput = func(key, i) {
mcdu_message(i, "NOT ALLOWED");
}
}
} else if (key == "R5") {
} else if (key == "R5" and modifiable) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/eng-out-reduc", "1500");
setprop("MCDUC/reducacc-set", 0);
@ -268,5 +256,7 @@ var perfTOInput = func(key, i) {
}
} else if (key == "R6") {
setprop("MCDU[" ~ i ~ "]/page", "PERFCLB");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
}

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

@ -1,3 +1,5 @@
var scratchpadStore = nil;
var vertRev = {
title: [nil, nil, nil],
subtitle: [nil, nil],
@ -42,6 +44,28 @@ var vertRev = {
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
}
},
getSpd: func() {
if (me.wp.speed_cstr != nil and me.wp.speed_cstr > 0) {
var tcol = (me.wp.speed_cstr_type == "computed" or me.wp.speed_cstr_type == "computed_mach") ? "grn" : "mag"; # TODO - check if only computed
return [" " ~ sprintf("%3.0f", me.wp.speed_cstr), tcol];
} else {
return [nil,nil];
}
},
getAlt: func() {
if (me.wp.alt_cstr != nil and me.wp.alt_cstr > 0) {
var tcol = (me.wp.alt_cstr_type == "computed" or me.wp.alt_cstr_type == "computed_mach") ? "grn" : "mag"; # TODO - check if only computed
if (me.wp.alt_cstr > fmgc.FMGCInternal.transAlt) {
return [sprintf("%5s", "FL" ~ math.round(num(me.wp.alt_cstr) / 100)) ~ " ", tcol];
} else {
return [sprintf("%5.0f", me.wp.alt_cstr) ~ " ", tcol];
}
} else {
return [nil,nil];
}
},
alt: nil,
speed: nil,
_setupPageWithData: func() {
if (me.type == 3) {
me.title = ["VERT REV", " AT ", "PPOS"];
@ -57,15 +81,30 @@ var vertRev = {
me.fontMatrix = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
} elsif (me.type == 2) {
me.title = ["VERT REV", " AT ", me.id];
me.fontMatrix = [[0, 0, 1, 0, 0, 0], [0, 0, 1, 0, 0, 0]];
me.L1 = ["", " EFOB ---.-", "wht"];
me.R1 = ["", "EXTRA ---.- ", "wht"];
me.L2 = ["250/10000", " CLB SPD LIM", "mag"];
me.L3 = [" [ ]", " SPD CSTR", "blu"];
me.speed = me.getSpd();
if (me.speed[0] == nil) {
me.L3 = [" [ ]", " SPD CSTR", "blu"];
me.fontMatrix[0][2] = 1;
} else {
me.L3 = [me.speed[0], " SPD CSTR", me.speed[1]];
me.fontMatrix[0][2] = 0;
}
me.L4 = [" CONSTANT MACH", nil, "wht"];
me.L5 = [" WIND DATA", nil, "wht"];
me.L6 = [" CLB", nil, "amb"];
me.R2 = ["RTA ", nil, "wht"];
me.R3 = ["[ ] ", "ALT CSTR ", "blu"];
me.alt = me.getAlt();
if (me.alt[0] == nil) {
me.R3 = ["[ ] ", "ALT CSTR ", "blu"];
me.fontMatrix[1][2] = 1;
} else {
me.R3 = [me.alt[0], "ALT CSTR ", me.alt[1]];
me.fontMatrix[1][2] = 0;
}
me.R6 = ["DES ", nil, "amb"];
# When the system does vertical planning, L6 should be RETURN and R6 not used if the MCDU knows the waypoint is during climb or descent.
# The CLB or DES prompts should only be shown for a vertical revision in the cruise phase.
@ -74,7 +113,6 @@ var vertRev = {
# The 'arrows' for CLB/DES should actually be asterisks.
me.arrowsMatrix = [[0, 0, 0, 1, 1, 1], [0, 1, 0, 0, 0, 1]];
me.arrowsColour = [["ack", "ack", "ack", "wht", "wht", "amb"], ["ack", "wht", "ack", "ack", "wht", "amb"]];
me.fontMatrix = [[0, 0, 1, 0, 0, 0], [0, 0, 1, 0, 0, 0]];
} else {
me.title = ["VERT REV", " AT ", me.id];
@ -135,8 +173,22 @@ var vertRev = {
}
},
pushButtonLeft: func(index) {
if (index == 5) {
#print("role: ", me.wp.wp_role, ", type: ", me.wp.wp_type);
scratchpadStore = mcdu_scratchpad.scratchpads[me.computer].scratchpad;
if (index == 3 and me.type == 2) {
if (scratchpadStore == "CLR") {
me.wp.setSpeed("delete");
mcdu_scratchpad.scratchpads[me.computer].empty();
me._setupPageWithData();
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
} elsif (num(scratchpadStore) != nil and size(scratchpadStore) == 3 and scratchpadStore >= 100 and scratchpadStore <= 350) {
me.wp.setSpeed(scratchpadStore, "at");
mcdu_scratchpad.scratchpads[me.computer].empty();
me._setupPageWithData();
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
} else {
mcdu_message(me.computer, "FORMAT ERROR");
}
} elsif (index == 5) {
if (me.wp.wp_role == "sid") {
if (canvas_mcdu.myCLBWIND[me.computer] == nil) {
canvas_mcdu.myCLBWIND[me.computer] = windCLBPage.new(me.computer);
@ -182,6 +234,24 @@ var vertRev = {
mcdu_message(me.computer, "NOT ALLOWED");
}
},
pushButtonRight: func(index) {
scratchpadStore = mcdu_scratchpad.scratchpads[me.computer].scratchpad;
if (index == 3 and me.type == 2) {
if (scratchpadStore == "CLR") {
me.wp.setAltitude("delete");
mcdu_scratchpad.scratchpads[me.computer].empty();
me._setupPageWithData();
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
} elsif (num(scratchpadStore) != nil and (size(scratchpadStore) == 4 or size(scratchpadStore) == 5) and scratchpadStore >= 0 and scratchpadStore <= 39000) {
me.wp.setAltitude(math.round(scratchpadStore, 10), "at");
mcdu_scratchpad.scratchpads[me.computer].empty();
me._setupPageWithData();
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
} else {
mcdu_message(me.computer, "FORMAT ERROR");
}
}
},
};
var updateCrzLvlCallback = func () {

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

@ -1,8 +1,10 @@
#
# Chrono - Clock - ET
# Chrono - Clock - ET
#
var chr = aircraft.timer.new("instrumentation/chrono[0]/elapsetime-sec",1);
var clk = aircraft.timer.new("instrumentation/clock/elapsetime-sec",1);
var chrono_cpt = aircraft.timer.new("instrumentation/ndchrono[0]/elapsetime-sec",1);
var chrono_fo = aircraft.timer.new("instrumentation/ndchrono[1]/elapsetime-sec",1);
var chr_min = nil;
var chr_sec = nil;
@ -36,7 +38,6 @@ var clock = {
hhMM: props.globals.initNode("/instrumentation/clock/clock_hh_mm", 0, "STRING"),
utcDate: [props.globals.initNode("/instrumentation/clock/utc-date", "", "STRING"), props.globals.initNode("/instrumentation/clock/utc-date1", "", "STRING"),
props.globals.initNode("/instrumentation/clock/utc-date2", "", "STRING"),props.globals.initNode("/instrumentation/clock/utc-date3", "", "STRING")],
};
var chrono = {
@ -49,6 +50,22 @@ var chrono = {
started: props.globals.getNode("/instrumentation/chrono[0]/started"),
};
#Cpt chrono
var cpt_chrono = {
etHh_cpt: props.globals.initNode("/instrumentation/ndchrono[0]/etHh_cpt", 0, "INT"),
etMin_cpt: props.globals.initNode("/instrumentation/ndchrono[0]/etMin_cpt", 0, "INT"),
etSec_cpt: props.globals.initNode("/instrumentation/ndchrono[0]/etSec_cpt", 0, "INT"),
text: props.globals.initNode("/instrumentation/ndchrono[0]/text", "0' 00''", "STRING"),
};
#Fo chrono
var fo_chrono = {
etHh_fo: props.globals.initNode("/instrumentation/ndchrono[1]/etHh_fo", 0, "INT"),
etMin_fo: props.globals.initNode("/instrumentation/ndchrono[1]/etMin_fo", 0, "INT"),
etSec_fo: props.globals.initNode("/instrumentation/ndchrono[1]/etSec_fo", 0, "INT"),
text: props.globals.initNode("/instrumentation/ndchrono[1]/text", "0' 00''", "STRING"),
};
var rudderTrim = {
rudderTrimDisplay: props.globals.initNode("/controls/flight/rudder-trim-display", 0, "STRING"),
rudderTrimDisplayLetter: props.globals.initNode("/controls/flight/rudder-trim-letter-display", "", "STRING"),
@ -59,6 +76,8 @@ setlistener("sim/signals/fdm-initialized", func {
chr.reset();
clk.stop();
clk.reset();
chrono_cpt.reset();
chrono_fo.reset();
rudderTrim.rudderTrimDisplay.setValue(sprintf("%2.1f", pts.Fdm.JSBsim.Hydraulics.Rudder.trimDeg.getValue()));
start_loop.start();
});
@ -120,6 +139,31 @@ setlistener("/instrumentation/chrono[0]/chrono-reset", func(et){
};
}, 0, 0);
#Chrono
setlistener("instrumentation/efis[0]/inputs/CHRONO", func(et){
chrono0 = et.getValue();
if (chrono0 == 1){
chrono_cpt.start();
} elsif (chrono0 == 2) {
chrono_cpt.stop();
} elsif (chrono0 == 0) {
chrono_cpt.reset();
setprop("instrumentation/ndchrono[0]/elapsetime-sec", 0);
}
}, 0, 0);
setlistener("instrumentation/efis[1]/inputs/CHRONO", func(et){
chrono1 = et.getValue();
if (chrono1 == 1){
chrono_fo.start();
} elsif (chrono1 == 2) {
chrono_fo.stop();
} elsif (chrono1 == 0) {
chrono_fo.reset();
setprop("instrumentation/ndchrono[1]/elapsetime-sec", 0);
}
}, 0, 0);
setlistener("instrumentation/clock/et-selector", func(et){
tmp1 = et.getValue();
if (tmp1 == 2){
@ -131,6 +175,31 @@ setlistener("instrumentation/clock/et-selector", func(et){
}
}, 0, 0);
#Chrono
setlistener("instrumentation/efis[0]/inputs/CHRONO", func(et){
chrono0 = et.getValue();
if (chrono0 == 1){
chrono_cpt.start();
} elsif (chrono0 == 2) {
chrono_cpt.stop();
} elsif (chrono0 == 0) {
chrono_cpt.reset();
setprop("instrumentation/ndchrono[0]/elapsetime-sec", 0);
}
}, 0, 0);
setlistener("instrumentation/efis[1]/inputs/CHRONO", func(et){
chrono1 = et.getValue();
if (chrono1 == 1){
chrono_fo.start();
} elsif (chrono1 == 2) {
chrono_fo.stop();
} elsif (chrono1 == 0) {
chrono_fo.reset();
setprop("instrumentation/ndchrono[1]/elapsetime-sec", 0);
}
}, 0, 0);
var start_loop = maketimer(0.1, func {
if (systems.ELEC.Bus.dcEss.getValue() < 25) { return; }
@ -225,6 +294,40 @@ var start_loop = maketimer(0.1, func {
item.update(nil);
}
}
#Cpt Chrono
chr0_tmp = getprop("instrumentation/ndchrono[0]/elapsetime-sec");
if (chr0_tmp >= 360000) {
setprop("instrumentation/ndchrono[0]/elapsetime-sec", getprop("instrumentation/ndchrono[0]/elapsetime-sec") - 360000);
};
chr0_hh = int(chr0_tmp * 0.000277777777778);
chr0_min = int((chr0_tmp * 0.0166666666667) - (chr0_hh * 60));
chr0_sec = int(chr0_tmp - (chr0_min * 60) - (chr0_hh * 3600));
setprop("instrumentation/ndchrono[0]/etHh_cpt", chr0_hh);
setprop("instrumentation/ndchrono[0]/etMin_cpt", chr0_min);
setprop("instrumentation/ndchrono[0]/etSec_cpt", chr0_sec);
if (chr0_tmp >= 3600) {
setprop("instrumentation/ndchrono[0]/text", sprintf("%02d H %02d'", chr0_hh, chr0_min));
} else {
setprop("instrumentation/ndchrono[0]/text", sprintf("%02d' %02d''", chr0_min, chr0_sec));
}
#Fo Chrono
chr1_tmp = getprop("instrumentation/ndchrono[1]/elapsetime-sec");
if (chr1_tmp >= 360000) {
setprop("instrumentation/ndchrono[1]/elapsetime-sec", getprop("instrumentation/ndchrono[1]/elapsetime-sec") - 360000);
};
chr1_hh = int(chr1_tmp * 0.000277777777778);
chr1_min = int(chr1_tmp * 0.0166666666667);
chr1_sec = int(chr1_tmp - (chr1_min * 60) - (chr1_hh * 3600));
setprop("instrumentation/ndchrono[1]/etHh_fo", chr1_hh);
setprop("instrumentation/ndchrono[1]/etMin_fo", chr1_min);
setprop("instrumentation/ndchrono[1]/etSec_fo", chr1_sec);
if (chr1_tmp >= 3600) {
setprop("instrumentation/ndchrono[1]/text", sprintf("%02d H %02d'", chr1_hh, chr1_min));
} else {
setprop("instrumentation/ndchrono[1]/text", sprintf("%02d' %02d''", chr1_min, chr1_sec));
}
});
var updateRudderTrim = func() {
@ -255,4 +358,4 @@ var update_items = [
),
];
setlistener("/controls/switches/annun-test", updateRudderTrim, 0, 0);
setlistener("/controls/switches/annun-test", updateRudderTrim, 0, 0);

View file

@ -144,6 +144,7 @@ var ADIRU = {
call(canvas_nd.ND_2.NDFo.predicates[predicate]);
}
},
_excessMotion: 0,
alignLoop: func() {
me._roll = pts.Orientation.roll.getValue();
me._pitch = pts.Orientation.pitch.getValue();
@ -152,13 +153,18 @@ var ADIRU = {
# todo use IR values
if (me._gs > 5 or abs(me._pitch) > 5 or abs(me._roll) > 10) {
me.stopAlignNoAlign();
me._excessMotion = 1;
print("Excessive motion, restarting");
me.update(); # update operative
me.align(calcAlignTime(pts.Position.latitude.getValue()));
} elsif (me.operative == 0) {
me.stopAlignNoAlign();
me._excessMotion = 0;
} elsif (pts.Sim.Time.elapsedSec.getValue() >= me._alignTime) {
me.stopAlignAligned();
me._excessMotion = 0;
} else {
me._excessMotion = 0;
}
if (!me.operating and pts.Sim.Time.elapsedSec.getValue() >= me._pfdTime) {
@ -318,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
@ -342,7 +348,6 @@ var ADIRS = {
}
# Update VFE
notification = nil;
foreach (var update_item; me.update_items) {
update_item.update(notification);
}

View file

@ -101,7 +101,7 @@ var APU = {
me.inletFlap.open();
me.listenSignals = 1;
settimer(func() {
if (APUNodes.Controls.master.getValue() and !getprop("/systems/acconfig/autoconfig-running")) {
if (APUNodes.Controls.master.getValue() and !pts.Acconfig.running.getValue()) {
me.setState(2);
}
}, 3);
@ -131,7 +131,7 @@ var APU = {
apuStartTimer.start();
},
waitStart: func() {
if (pts.APU.rpm.getValue() >= 4.9) {
if (pts.APU.rpm.getValue() >= 4.9 or me.fastStart) {
me.GenericControls.cutoff.setValue(0);
if (me.fastStart) {
setprop("/fdm/jsbsim/propulsion/set-running", 2);

View file

@ -169,12 +169,12 @@ var AOC = {
var serverString = "";
if (me.server.getValue() == "vatsim") {
serverString = "https://api.flybywiresim.com/metar?source=vatsim&icao=";
serverString = "https://api.flybywiresim.com/metar/" ~ airport ~ "?source=vatsim";
} else {
serverString = defaultServer;
serverString = defaultServer ~ airport;
}
http.load(serverString ~ airport)
http.load(serverString)
.fail(func(r) me.downloadFail(i, r))
.done(func(r) {
var errs = [];
@ -213,7 +213,23 @@ var AOC = {
},
processMETAR: func(r, i) {
var raw = r.response;
if (find('"statusCode":404',raw) != -1) {
me.received = 0;
me.sent = 0;
mcdu.mcdu_message(i, "NO METAR AVAILABLE");
return;
}
if (me.server.getValue() == "vatsim") {
if (find("metar", raw) != -1) {
raw = split('"metar":"', raw)[1];
raw = split('","source":"Vatsim"}', raw)[0];
} else {
me.received = 0;
me.sent = 0;
mcdu.mcdu_message(i, "BAD SERVER RESPONSE");
return;
}
me.lastMETAR = raw;
} else if (find("<raw_text>", raw) != -1) {
raw = split("<raw_text>", raw)[1];
@ -331,7 +347,7 @@ var ATIS = {
},
processATIS: func(r, i) {
var raw = r.response;
if (r.response == "FBW_ERROR: D-ATIS not available at this airport" or find("atis not avail",r.response) != -1 or find('"statusCode":404',r.response) != -1) {
if (raw == "FBW_ERROR: D-ATIS not available at this airport" or find("atis not avail",raw) != -1 or find('"statusCode":404',raw) != -1) {
me.received = 0;
me.sent = 0;
mcdu.mcdu_message(i,"NO D-ATIS AVAILABLE");

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

@ -2153,14 +2153,26 @@
<condition>
<and>
<or>
<greater-than>
<property>/fdm/jsbsim/fcs/left-brake-cmd-norm</property>
<value>0.95</value>
</greater-than>
<greater-than>
<property>/fdm/jsbsim/fcs/right-brake-cmd-norm</property>
<value>0.95</value>
</greater-than>
<and>
<greater-than>
<property>/fdm/jsbsim/fcs/left-brake-cmd-norm</property>
<value>0.95</value>
</greater-than>
<equals>
<property>/gear/gear[1]/wow</property>
<value>1</value>
</equals>
</and>
<and>
<greater-than>
<property>/fdm/jsbsim/fcs/right-brake-cmd-norm</property>
<value>0.95</value>
</greater-than>
<equals>
<property>/gear/gear[2]/wow</property>
<value>1</value>
</equals>
</and>
</or>
<greater-than>
<property>/velocities/groundspeed-kt</property>

File diff suppressed because it is too large Load diff

View file

@ -18,8 +18,8 @@
<factor>1</factor>
</volume>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -39,8 +39,8 @@
<factor>1</factor>
</volume>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -60,8 +60,8 @@
<factor>1</factor>
</volume>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -81,8 +81,8 @@
<factor>1</factor>
</volume>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -103,8 +103,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -125,8 +125,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -147,8 +147,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -169,8 +169,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -191,8 +191,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -213,8 +213,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -235,8 +235,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -257,8 +257,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -279,8 +279,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -301,8 +301,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -323,8 +323,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -345,8 +345,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -367,8 +367,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -389,8 +389,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -411,8 +411,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -433,8 +433,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -471,8 +471,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -501,8 +501,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -531,8 +531,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -561,8 +561,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -591,8 +591,8 @@
</orientation>
<reference-dist>60</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -621,8 +621,8 @@
</orientation>
<reference-dist>60</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -655,8 +655,8 @@
</orientation>
<reference-dist>90</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -689,8 +689,8 @@
</orientation>
<reference-dist>90</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -723,8 +723,8 @@
</orientation>
<reference-dist>60</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -757,8 +757,8 @@
</orientation>
<reference-dist>60</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -791,8 +791,8 @@
</orientation>
<reference-dist>500</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -825,8 +825,8 @@
</orientation>
<reference-dist>500</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -859,8 +859,8 @@
</orientation>
<reference-dist>300</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -893,8 +893,8 @@
</orientation>
<reference-dist>300</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -927,8 +927,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -961,8 +961,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -986,7 +986,7 @@
<offset>0</offset>
</pitch>
<orientation>
<x>0</x>
<x>-5</x>
<y>1</y>
<z>0</z>
<inner-angle>195</inner-angle>
@ -995,8 +995,8 @@
</orientation>
<reference-dist>90</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1020,7 +1020,7 @@
<offset>0</offset>
</pitch>
<orientation>
<x>0</x>
<x>-5</x>
<y>-1</y>
<z>0</z>
<inner-angle>15</inner-angle>
@ -1029,8 +1029,8 @@
</orientation>
<reference-dist>90</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1063,8 +1063,8 @@
</orientation>
<reference-dist>90</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1097,8 +1097,8 @@
</orientation>
<reference-dist>90</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1131,8 +1131,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1165,8 +1165,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1199,8 +1199,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1233,8 +1233,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1264,8 +1264,8 @@
</orientation>
<reference-dist>1000</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1295,8 +1295,8 @@
</orientation>
<reference-dist>1000</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1329,8 +1329,8 @@
</orientation>
<reference-dist>120</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1363,8 +1363,8 @@
</orientation>
<reference-dist>120</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1397,8 +1397,8 @@
</orientation>
<reference-dist>120</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1431,8 +1431,8 @@
</orientation>
<reference-dist>120</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1456,7 +1456,7 @@
<offset>0</offset>
</pitch>
<orientation>
<x>0</x>
<x>-5</x>
<y>1</y>
<z>0</z>
<inner-angle>100</inner-angle>
@ -1465,8 +1465,8 @@
</orientation>
<reference-dist>120</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1490,7 +1490,7 @@
<offset>0</offset>
</pitch>
<orientation>
<x>0</x>
<x>-5</x>
<y>-1</y>
<z>0</z>
<inner-angle>280</inner-angle>
@ -1499,8 +1499,8 @@
</orientation>
<reference-dist>120</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1533,8 +1533,8 @@
</orientation>
<reference-dist>500</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1567,8 +1567,8 @@
</orientation>
<reference-dist>500</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1598,8 +1598,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1623,8 +1623,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1648,8 +1648,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1673,8 +1673,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1698,8 +1698,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1723,8 +1723,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1748,8 +1748,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1773,8 +1773,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1798,8 +1798,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1823,8 +1823,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1848,8 +1848,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1873,8 +1873,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1898,8 +1898,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1923,8 +1923,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1948,8 +1948,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1973,8 +1973,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1998,8 +1998,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -2023,8 +2023,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -2059,8 +2059,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -2084,8 +2084,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -2109,8 +2109,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -2134,8 +2134,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -2159,8 +2159,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -2184,8 +2184,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -2209,8 +2209,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -2234,8 +2234,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -2259,8 +2259,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -2284,8 +2284,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -2309,8 +2309,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -2334,8 +2334,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -2359,8 +2359,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -2384,8 +2384,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -2409,8 +2409,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -2434,8 +2434,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>

View file

@ -18,8 +18,8 @@
<factor>1</factor>
</volume>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -39,8 +39,8 @@
<factor>1</factor>
</volume>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -60,8 +60,8 @@
<factor>1</factor>
</volume>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -81,8 +81,8 @@
<factor>1</factor>
</volume>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -102,8 +102,8 @@
<factor>1</factor>
</volume>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -123,8 +123,8 @@
<factor>1</factor>
</volume>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -145,8 +145,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -167,8 +167,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -189,8 +189,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -211,8 +211,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -233,8 +233,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -255,8 +255,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -277,8 +277,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -299,8 +299,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -321,8 +321,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -343,8 +343,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -374,8 +374,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -404,8 +404,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -434,8 +434,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -464,8 +464,8 @@
</orientation>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -486,8 +486,8 @@
</volume>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -508,8 +508,8 @@
</volume>
<reference-dist>30</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -538,8 +538,8 @@
</orientation>
<reference-dist>60</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -568,8 +568,8 @@
</orientation>
<reference-dist>60</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -602,8 +602,8 @@
</orientation>
<reference-dist>90</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -636,8 +636,8 @@
</orientation>
<reference-dist>90</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -670,8 +670,8 @@
</orientation>
<reference-dist>60</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -704,8 +704,8 @@
</orientation>
<reference-dist>60</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -738,8 +738,8 @@
</orientation>
<reference-dist>90</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -772,8 +772,8 @@
</orientation>
<reference-dist>90</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -806,8 +806,8 @@
</orientation>
<reference-dist>120</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -840,8 +840,8 @@
</orientation>
<reference-dist>120</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -874,8 +874,8 @@
</orientation>
<reference-dist>150</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -908,8 +908,8 @@
</orientation>
<reference-dist>150</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -942,8 +942,8 @@
</orientation>
<reference-dist>150</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -976,8 +976,8 @@
</orientation>
<reference-dist>150</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1007,8 +1007,8 @@
</orientation>
<reference-dist>1500</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1038,8 +1038,8 @@
</orientation>
<reference-dist>1500</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1072,8 +1072,8 @@
</orientation>
<reference-dist>200</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1106,8 +1106,8 @@
</orientation>
<reference-dist>200</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1140,8 +1140,8 @@
</orientation>
<reference-dist>120</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1174,8 +1174,8 @@
</orientation>
<reference-dist>120</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1199,7 +1199,7 @@
<offset>0</offset>
</pitch>
<orientation>
<x>0</x>
<x>-5</x>
<y>1</y>
<z>0</z>
<inner-angle>95</inner-angle>
@ -1208,8 +1208,8 @@
</orientation>
<reference-dist>110</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1233,7 +1233,7 @@
<offset>0</offset>
</pitch>
<orientation>
<x>0</x>
<x>-5</x>
<y>-1</y>
<z>0</z>
<inner-angle>275</inner-angle>
@ -1242,8 +1242,8 @@
</orientation>
<reference-dist>110</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1276,8 +1276,8 @@
</orientation>
<reference-dist>500</reference-dist>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1310,8 +1310,8 @@
</orientation>
<reference-dist>500</reference-dist>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1338,8 +1338,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1363,8 +1363,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1388,8 +1388,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1413,8 +1413,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1438,8 +1438,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1463,8 +1463,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1488,8 +1488,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1513,8 +1513,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1538,8 +1538,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1563,8 +1563,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1588,8 +1588,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1613,8 +1613,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1649,8 +1649,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1674,8 +1674,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1699,8 +1699,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1724,8 +1724,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1749,8 +1749,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1774,8 +1774,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1799,8 +1799,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1824,8 +1824,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1849,8 +1849,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1874,8 +1874,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>
@ -1899,8 +1899,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>20</y>
<x>-5</x>
<y>5.5</y>
<z>0</z>
</position>
</engine>
@ -1924,8 +1924,8 @@
<offset>0</offset>
</pitch>
<position>
<x>0</x>
<y>-20</y>
<x>-5</x>
<y>-5.5</y>
<z>0</z>
</position>
</engine>

View file

@ -914,7 +914,7 @@
</clipto>
</pure_gain>
<pure_gain name="/instrumentation/radar-altimeter[1]/radar-altitude-ft">
<pure_gain name="/instrumentation/radar-altimeter[1]/radar-altitude-ft-corrected">
<input>/instrumentation/radar-altimeter[1]/radar-altitude-ft</input>
<gain>1</gain>
<clipto>

View file

@ -152,7 +152,7 @@
<property>aero/qbar-psf</property>
<property>metrics/Sw-sqft</property>
<toradians><property>hydraulics/elevator-l/final-deg</property></toradians>
<value>0.0936445</value>
<value>0.0233096</value>
</product>
</function>
@ -162,7 +162,7 @@
<property>aero/qbar-psf</property>
<property>metrics/Sw-sqft</property>
<toradians><property>hydraulics/elevator-r/final-deg</property></toradians>
<value>0.0936445</value>
<value>0.0233096</value>
</product>
</function>
@ -306,9 +306,7 @@
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<tableData>
0.00 0.000
0.20 0.000
0.82 0.002
0.82 0.000
1.10 0.016
1.80 0.012
</tableData>

View file

@ -0,0 +1,223 @@
<?xml version="1.0"?>
<!-- Airbus A320 CFM56-5B4 Engine -->
<!-- Copyright (c) 2021 Josh Davidson (Octal450) -->
<system name="A320: CFM56 Engine">
<property value="45">fadec/limit/rated-temp</property>
<property value="30">fadec/limit/flex-rated-temp</property>
<property value="27000">fadec/limit/rated-thrust</property>
<channel name="Thrust Limits">
<fcs_function name="fadec/limit/rated-thrust-n1"> <!-- Vs 98.7, 104.8 (-15 bias + 1), 103.2 -->
<function>
<table>
<independentVar lookup="row">/position/altitude-ft</independentVar>
<independentVar lookup="column">propulsion/tat-c</independentVar>
<tableData>
-45 -15 15 45 75
0 79.5 84.6 89.2 93.8 98.3
10000 90.1 94.8 99.1 100.6 99.3
43000 88.7 89.1 94.2 99.3 104.3
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fadec/limit/milthrust-unmodified"> <!-- Copy of MilThrust table in engines file -->
<function>
<table>
<independentVar lookup="row">velocities/mach</independentVar>
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
<tableData>
-10000 0 10000 20000 30000 40000 50000
0.0 1.2600 1.0000 0.7400 0.5640 0.3920 0.2710 0.0000
0.2 1.1710 0.9740 0.6970 0.5360 0.3850 0.2610 0.0000
0.4 1.1500 0.9570 0.6920 0.5460 0.3870 0.2530 0.0000
0.6 1.1810 0.9410 0.7210 0.5660 0.3580 0.2180 0.0000
0.8 1.2290 1.0200 0.7820 0.5570 0.3040 0.1930 0.0000
0.9 1.2580 1.0200 0.7820 0.5220 0.2710 0.1140 0.0000
1.0 1.1810 0.9510 0.7210 0.4410 0.1740 0.0450 0.0000
1.2 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
1.4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
</tableData>
</table>
</function>
</fcs_function>
<!-- Following functions fix a FGTurbine inaccuracy... rated thrust N1% should be rated thrust lbs -->
<!-- These calculations change it so that the rated power at sea level is at the correct N1% value. It still changes with altitude and mach as it should -->
<fcs_function name="fadec/limit/fgturbine-thrust-lbs">
<function>
<sum>
<product>
<property>propulsion/engine/IdleThrust</property>
<property>fadec/limit/rated-thrust</property>
</product>
<product>
<difference>
<property>fadec/limit/rated-thrust</property>
<product>
<property>propulsion/engine[0]/IdleThrust</property> <!-- It doesn't matter which engine, its same for all -->
<property>fadec/limit/rated-thrust</property>
</product>
</difference>
<property>fadec/limit/milthrust-unmodified</property>
</product>
</sum>
</function>
</fcs_function>
<fcs_function name="fadec/limit/rated-thrust-lbs">
<function>
<sum>
<product>
<property>propulsion/engine[0]/IdleThrust</property> <!-- It doesn't matter which engine, its same for all -->
<property>fadec/limit/rated-thrust</property>
</product>
<product>
<product>
<difference>
<property>fadec/limit/rated-thrust</property>
<product>
<property>propulsion/engine[0]/IdleThrust</property> <!-- It doesn't matter which engine, its same for all -->
<property>fadec/limit/rated-thrust</property>
</product>
</difference>
<property>fadec/limit/milthrust-unmodified</property>
</product>
<quotient>
<difference>
<property>fadec/limit/rated-thrust-n1</property>
<value>18.9</value>
</difference>
<value>85.1</value>
</quotient>
<quotient>
<difference>
<property>fadec/limit/rated-thrust-n1</property>
<value>18.9</value>
</difference>
<value>85.1</value>
</quotient>
</product>
</sum>
</function>
</fcs_function>
<fcs_function name="fadec/limit/rated-thrust-factor"> <!-- Normalize -->
<function>
<ifthen>
<eq>
<property>/systems/acconfig/autoconfig-running</property>
<value>1</value>
</eq>
<value>0</value>
<ifthen>
<nq> <!-- Prevent divide by 0 -->
<property>fadec/limit/rated-thrust-lbs</property>
<value>0</value>
</nq>
<quotient>
<property>fadec/limit/fgturbine-thrust-lbs</property>
<property>fadec/limit/rated-thrust-lbs</property>
</quotient>
<value>1</value>
</ifthen>
</ifthen>
</function>
</fcs_function>
<fcs_function name="fadec/limit/toga-ref"> <!-- Vs 98.7, 104.8 (-15 bias + 1), 103.2 -->
<function>
<table> <!-- TODO: Figure out how to integrate FCOM table with this one -->
<independentVar lookup="row">/position/altitude-ft</independentVar>
<independentVar lookup="column">propulsion/tat-c</independentVar>
<tableData>
-45 -15 15 45 75
0 79.5 84.6 89.2 93.8 89.1
10000 90.1 94.8 99.1 100.6 96.2
43000 88.7 89.1 94.2 99.3 97.2
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fadec/limit/toga">
<function>
<quotient>
<integer>
<sum>
<product>
<property>fadec/limit/toga-ref</property>
<value>10</value>
</product>
<value>0.5</value> <!-- Make it round correctly -->
</sum>
</integer>
<value>10</value>
</quotient>
</function>
</fcs_function>
<summer name="fadec/limit/flex-temp-input"> <!-- (Rated - Flex) + TAT -->
<input>fadec/limit/flex-rated-temp</input> <!-- Fix the calculations -->
<input>-/FMGC/internal/flex</input>
<input>propulsion/tat-c</input>
</summer>
<fcs_function name="fadec/limit/flex-ref">
<function>
<min> <!-- FLEX can not increase thrust past TOGA -->
<property>fadec/limit/toga-ref</property>
<table> <!-- TODO: Figure out how to integrate FCOM table with this one -->
<independentVar lookup="row">/position/altitude-ft</independentVar>
<independentVar lookup="column">fadec/limit/flex-temp-input</independentVar>
<tableData>
-45 -15 15 45 75
0 79.5 84.6 89.2 93.8 89.1
10000 90.1 94.8 99.1 100.6 96.2
43000 88.7 89.1 94.2 99.3 97.2
</tableData>
</table>
</min>
</function>
</fcs_function>
<fcs_function name="fadec/limit/flex">
<function>
<quotient>
<integer>
<sum>
<product>
<property>fadec/limit/flex-ref</property>
<value>10</value>
</product>
<value>0.5</value> <!-- Make it round correctly -->
</sum>
</integer>
<value>10</value>
</quotient>
</function>
</fcs_function>
<!--
TODO: need to figure out how to make MCT work, 24370lbs
<switch name="fadec/limit/mct-final-ref">
<default value="fadec/limit/mct-ref"/>
<test value="fadec/limit/flex-ref">
fadec/limit/flex-active eq 1
</test>
</switch>
<fcs_function name="fadec/limit/mct-ref">
<function>
</function>
</fcs_function>
-->
</channel>
</system>

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

@ -979,8 +979,13 @@
</table>
</scheduled_gain>
<lag_filter name="fbw/tiller-handle">
<actuator name="fbw/tiller-handle-cmd">
<input>fbw/tiller-handle-scheduled</input>
<rate_limit>0.16</rate_limit> <!-- 12/75 -->
</actuator>
<lag_filter name="fbw/tiller-handle">
<input>fbw/tiller-handle-cmd</input>
<c1>20</c1>
</lag_filter>

View file

@ -633,9 +633,9 @@
/systems/fuel/quantity/center-low eq 1
/systems/fuel/feed-center-2 eq 0
</test>
/systems/fuel/feed-left-inner eq 0
/systems/fuel/feed-right-inner eq 1
/systems/fuel/valves/crossfeed-valve eq 1
/consumables/fuel/tank[1]/level-gal_us le /consumables/fuel/tank[3]/unusable-gal_us
/consumables/fuel/tank[3]/level-gal_us gt /consumables/fuel/tank[3]/unusable-gal_us
propulsion/tank[5]/contents-lbs lt 9
</test>
@ -649,9 +649,9 @@
/systems/fuel/feed-center-1 eq 0
</test>
/systems/fuel/feed-left-inner eq 1
/systems/fuel/feed-right-inner eq 0
/systems/fuel/valves/crossfeed-valve eq 1
/consumables/fuel/tank[1]/level-gal_us gt /consumables/fuel/tank[1]/unusable-gal_us
/consumables/fuel/tank[3]/level-gal_us le /consumables/fuel/tank[3]/unusable-gal_us
propulsion/tank[6]/contents-lbs lt 9
</test>
</switch>

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

@ -72,7 +72,6 @@
<rolling_friction>0.02</rolling_friction>
<spring_coeff unit="LBS/FT">59785</spring_coeff>
<damping_coeff unit="LBS/FT/SEC">23957</damping_coeff>
<damping_coeff_rebound unit="LBS/FT/SEC">25</damping_coeff_rebound>
<max_steer unit="DEG">0</max_steer>
<table name="CORNERING_COEFF" type="internal">
<tableData> <!-- jsbsim-pacejka.py 3.0 0.06 2.8 0.4 1.03 0.4 -->
@ -129,7 +128,6 @@
<rolling_friction>0.02</rolling_friction>
<spring_coeff unit="LBS/FT">59785</spring_coeff>
<damping_coeff unit="LBS/FT/SEC">23957</damping_coeff>
<damping_coeff_rebound unit="LBS/FT/SEC">25</damping_coeff_rebound>
<max_steer unit="DEG">0</max_steer>
<table name="CORNERING_COEFF" type="internal">
<tableData> <!-- jsbsim-pacejka.py 3.0 0.06 2.8 0.4 1.03 0.4 -->

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

@ -10,14 +10,13 @@
<name>OAT Thrust Scale</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
<property>/environment/temperature-degc</property>
<entry><ind> 70</ind><dep>0.788</dep></entry>
<entry><ind> 40</ind><dep>0.813</dep></entry>
<entry><ind>-60</ind><dep>1.000</dep></entry>
<property>/fdm/jsbsim/fadec/limit/toga</property>
<entry><ind> 18.9</ind><dep>0</dep></entry>
<entry><ind>104.0</ind><dep>1</dep></entry>
</table>
</expression>
</input>
@ -28,11 +27,11 @@
<name>FLX Thrust Scale</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
<property>/FMGC/internal/flex</property>
<property>/fdm/jsbsim/fadec/limit/flex</property>
<entry><ind> 70</ind><dep>0.788</dep></entry>
<entry><ind> 40</ind><dep>0.813</dep></entry>
<entry><ind>-60</ind><dep>1.000</dep></entry>
@ -46,7 +45,7 @@
<name>IDLE Limit</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<condition>
<and>
@ -80,12 +79,45 @@
<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>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -107,7 +139,7 @@
<name>MAN Two</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -129,7 +161,7 @@
<name>MAN CMD One</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<product>
@ -154,7 +186,7 @@
<name>MAN CMD Two</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<product>
@ -179,7 +211,7 @@
<name>N1 CMD 1</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<condition>
<and>
@ -220,7 +252,7 @@
<name>N1 CMD 2</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<condition>
<and>
@ -1057,19 +1089,8 @@
<name>N1 Limit TOGA</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<input>
<expression>
<table>
<product>
<value>0.99</value>
<property>/controls/engines/throttle-scale</property>
</product>
<entry><ind>0.00</ind><dep> 18.9</dep></entry>
<entry><ind>1.00</ind><dep>103.8</dep></entry>
</table>
</expression>
</input>
<update-interval-secs>0.05</update-interval-secs>
<input>/fdm/jsbsim/fadec/limit/toga</input>
<output>/systems/thrust/n1/toga-lim</output>
</filter>
@ -1077,7 +1098,7 @@
<name>N1 Limit MCT</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -1097,19 +1118,8 @@
<name>N1 Limit FLX</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<input>
<expression>
<table>
<product>
<value>0.99</value>
<property>/engines/flx-throttle</property>
</product>
<entry><ind>0.00</ind><dep> 18.9</dep></entry>
<entry><ind>1.00</ind><dep>103.8</dep></entry>
</table>
</expression>
</input>
<update-interval-secs>0.05</update-interval-secs>
<input>/fdm/jsbsim/fadec/limit/flex</input>
<output>/systems/thrust/n1/flx-lim</output>
</filter>
@ -1117,7 +1127,7 @@
<name>N1 Limit CLB</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>

View file

@ -10,7 +10,7 @@
<name>OAT Thrust Scale</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -28,7 +28,7 @@
<name>FLX Thrust Scale</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -46,7 +46,7 @@
<name>IDLE Limit</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<condition>
<and>
@ -80,12 +80,45 @@
<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>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -107,7 +140,7 @@
<name>MAN Two</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -129,7 +162,7 @@
<name>MAN CMD One</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<product>
@ -154,7 +187,7 @@
<name>MAN CMD Two</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<product>
@ -1328,7 +1361,7 @@
<name>EPR Limit TOGA</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -1356,7 +1389,7 @@
<name>EPR CMD TOGA</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<sum>
@ -1372,7 +1405,7 @@
<name>EPR Limit MCT</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -1400,7 +1433,7 @@
<name>EPR CMD MCT</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<sum>
@ -1416,7 +1449,7 @@
<name>EPR Limit FLX</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -1444,7 +1477,7 @@
<name>EPR CMD FLX</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<sum>
@ -1460,7 +1493,7 @@
<name>EPR Limit CLB</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<table>
@ -1488,7 +1521,7 @@
<name>EPR CMD CLB</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.05</update-interval-secs>
<update-interval-secs>0.05</update-interval-secs>
<input>
<expression>
<sum>

Some files were not shown because too many files have changed in this diff Show more