1
0
Fork 0

FG1000 : APR and GS modes

Approach and GS modes - FG1000 and GFC700 can now be used for
autopilot coupled ILS or GPS approaches

Also:
- FLC mdoe now include an airspeed bug
- VDI indicator beside altitude tape now works
- Marker beacon displays O/M/I as appropriate
This commit is contained in:
Stuart Buchanan 2019-02-21 22:09:48 +00:00
parent 0ffc00ed18
commit f09b49e006
10 changed files with 571 additions and 125 deletions

View file

@ -185,14 +185,56 @@
<target>LOC-ARM</target> <target>LOC-ARM</target>
<condition> <condition>
<or> <or>
<equals> <and>
<property>/autopilot/settings/nav-mode-source</property> <equals>
<value>NAV1</value> <property>/autopilot/settings/nav-mode-source</property>
</equals> <value>NAV1</value>
<equals> </equals>
<property>/autopilot/settings/nav-mode-source</property> <equals>
<value>NAV2</value> <property>/instrumentation/nav[0]/nav-loc</property>
</equals> <value>true</value>
</equals>
</and>
<and>
<equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>NAV2</value>
</equals>
<equals>
<property>/instrumentation/nav[1]/nav-loc</property>
<value>true</value>
</equals>
</and>
</or>
</condition>
</transition>
<transition>
<name>NAV-VOR</name>
<source>NAV-SRC</source>
<target>VOR-ARM</target>
<condition>
<or>
<and>
<equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>NAV1</value>
</equals>
<equals>
<property>/instrumentation/nav[0]/nav-loc</property>
<value>false</value>
</equals>
</and>
<and>
<equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>NAV1</value>
</equals>
<equals>
<property>/instrumentation/nav[1]/nav-loc</property>
<value>false</value>
</equals>
</and>
</or> </or>
</condition> </condition>
</transition> </transition>
@ -212,16 +254,10 @@
<source>GPS-ARM</source> <source>GPS-ARM</source>
<target>GPS</target> <target>GPS</target>
<condition> <condition>
<and> <equals>
<less-than> <property>/autopilot/internal/nav-capture</property>
<property>/instrumentation/gps/wp/wp[1]/course-error-nm</property> <value>1</value>
<value>0.5</value> </equals>
</less-than>
<greater-than>
<property>/instrumentation/gps/wp/wp[1]/course-error-nm</property>
<value>-0.5</value>
</greater-than>
</and>
</condition> </condition>
</transition> </transition>
@ -239,6 +275,18 @@
</enter> </enter>
</state> </state>
<transition>
<name>LOC-ARM - LOC</name>
<source>LOC-ARM</source>
<target>LOC</target>
<condition>
<equals>
<property>/autopilot/internal/nav-capture</property>
<value>1</value>
</equals>
</condition>
</transition>
<state> <state>
<name>VOR-ARM</name> <name>VOR-ARM</name>
<enter> <enter>
@ -253,6 +301,18 @@
</enter> </enter>
</state> </state>
<transition>
<name>VOR-ARM - VOR</name>
<source>VOR-ARM</source>
<target>VOR</target>
<condition>
<equals>
<property>/autopilot/internal/nav-capture</property>
<value>1</value>
</equals>
</condition>
</transition>
<state> <state>
<name>GPS</name> <name>GPS</name>
<enter> <enter>
@ -289,6 +349,11 @@
<property>/autopilot/annunciator/lateral-mode-armed</property> <property>/autopilot/annunciator/lateral-mode-armed</property>
<value></value> <value></value>
</enter> </enter>
<enter>
<command>property-assign</command>
<property>/autopilot/locks/heading</property>
<value>nav-hold</value>
</enter>
</state> </state>
<state> <state>
@ -303,6 +368,11 @@
<property>/autopilot/annunciator/lateral-mode-armed</property> <property>/autopilot/annunciator/lateral-mode-armed</property>
<value></value> <value></value>
</enter> </enter>
<enter>
<command>property-assign</command>
<property>/autopilot/locks/heading</property>
<value>nav-hold</value>
</enter>
</state> </state>
<!-- From the OFF state, pressing any of FD, AP, CWS, NAV, BC, APR, changes to ROL mode --> <!-- From the OFF state, pressing any of FD, AP, CWS, NAV, BC, APR, changes to ROL mode -->
@ -323,7 +393,6 @@
</condition> </condition>
</transition> </transition>
<transition> <transition>
<name>OFF-HDG</name> <name>OFF-HDG</name>
<source>OFF</source> <source>OFF</source>
@ -414,19 +483,26 @@
</condition> </condition>
</transition> </transition>
<!-- From (just about) any state, pressing NAV goes to NAV mode--> <!-- From (just about) any state, pressing NAV or APR goes to NAV mode. APR mode should
have a slightly different VOR version (VAPP), but is otherwise identical in lateral,
if not vertical modes. So we will just overload the states for simplicity. -->
<transition> <transition>
<name>To NAV</name> <name>To NAV</name>
<target>NAV-SRC</target> <target>NAV-SRC</target>
<exclude-target>true</exclude-target> <exclude-target>true</exclude-target>
<condition> <condition>
<and> <and>
<equals><property>/autopilot/lateral-mode-button</property><value>NAV</value></equals> <or>
<equals><property>/autopilot/lateral-mode-button</property><value>NAV</value></equals>
<equals><property>/autopilot/lateral-mode-button</property><value>APR</value></equals>
</or>
<not><equals><property>/autopilot/locks/heading</property><value>nav-hold</value></equals></not> <not><equals><property>/autopilot/locks/heading</property><value>nav-hold</value></equals></not>
</and> </and>
</condition> </condition>
</transition> </transition>
<!-- Only switch off NAV/APR when NAV is pressed, as user may press APR to enable glideslope while already
in NAV mode -->
<transition> <transition>
<name>From NAV</name> <name>From NAV</name>
<source>GPS-ARM</source> <source>GPS-ARM</source>

View file

@ -305,6 +305,100 @@
<name>VNV</name> <name>VNV</name>
</state> </state>
<state>
<name>GS-ARM</name>
<enter>
<command>property-assign</command>
<property>/autopilot/annunciator/vertical-mode-armed</property>
<value>GS</value>
</enter>
<enter>
<!-- Reset button to avoid triggering next transition immediately -->
<command>property-assign</command>
<property>/autopilot/vertical-mode-button</property>
<value></value>
</enter>
</state>
<transition>
<name>GS Enabled</name>
<source>GS-ARM</source>
<target>GS</target>
<condition>
<or>
<and>
<not-equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>NAV2</value>
</not-equals>
<equals>
<property>/instrumentation/nav[0]/gs-in-range</property>
<value>true</value>
</equals>
<less-than>
<!-- Must intercept the glideslope from below -->
<property>/instrumentation/nav[0]/gs-needle-deflection-norm</property>
<value>0.2</value>
</less-than>
<greater-than>
<!-- Must intercept the glideslope from below -->
<property>/instrumentation/nav[0]/gs-needle-deflection-norm</property>
<value>0.0</value>
</greater-than>
</and>
<and>
<equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>NAV2</value>
</equals>
<equals>
<property>/instrumentation/nav[1]/gs-in-range</property>
<value>true</value>
</equals>
<less-than>
<!-- Must intercept the glideslope from below -->
<property>/instrumentation/nav[1]/gs-needle-deflection-norm</property>
<value>0.2</value>
</less-than>
<greater-than>
<!-- Must intercept the glideslope from below -->
<property>/instrumentation/nav[1]/gs-needle-deflection-norm</property>
<value>0.0</value>
</greater-than>
</and>
</or>
</condition>
</transition>
<state>
<name>GS</name>
<enter>
<command>property-assign</command>
<property>/autopilot/annunciator/vertical-mode</property>
<value>GS</value>
</enter>
<enter>
<command>property-assign</command>
<property>/autopilot/annunciator/vertical-mode-armed</property>
<value></value>
</enter>
<enter>
<command>property-assign</command>
<property>/autopilot/annunciator/vertical-mode-target</property>
<value></value>
</enter>
<enter>
<command>property-assign</command>
<property>/autopilot/locks/altitude</property>
<value>gs-hold</value>
</enter>
<enter>
<command>property-assign</command>
<property>/autopilot/locks/speed</property>
<value></value>
</enter>
</state>
<state> <state>
<name>BC</name> <name>BC</name>
</state> </state>
@ -446,6 +540,19 @@
</condition> </condition>
</transition> </transition>
<!-- From any state pressing APR changes to GS mode, if not already enabled -->
<transition>
<name>GS-ON</name>
<target>GS-ARM</target>
<exclude-target>true</exclude-target>
<condition>
<and>
<equals><property>/autopilot/vertical-mode-button</property><value>APR</value></equals>
<not><equals><property>/autopilot/locks/altitude</property><value>gs-hold</value></equals></not>
</and>
</condition>
</transition>
<!-- Transitions to switch off various AP modes, which return to PIT mode. This is complicated as in many cases they may be in ALTS-ARM --> <!-- Transitions to switch off various AP modes, which return to PIT mode. This is complicated as in many cases they may be in ALTS-ARM -->

View file

@ -262,6 +262,58 @@
<output>/autopilot/annunciator/flight-director-enabled</output> <output>/autopilot/annunciator/flight-director-enabled</output>
</logic> </logic>
<!-- Logic filter to indicate if we can transtion to GPS/LOC/VOR mode -->
<logic>
<input>
<or>
<and>
<equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>NAV1</value>
</equals>
<less-than>
<property>/instrumentation/nav[0]/heading-needle-deflection</property>
<value>4.0</value>
</less-than>
<greater-than>
<property>/instrumentation/nav[0]/heading-needle-deflection</property>
<value>-4.0</value>
</greater-than>
</and>
<and>
<equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>NAV2</value>
</equals>
<less-than>
<property>/instrumentation/nav[1]/heading-needle-deflection</property>
<value>4.0</value>
</less-than>
<greater-than>
<property>/instrumentation/nav[1]/heading-needle-deflection</property>
<value>-4.0</value>
</greater-than>
</and>
<and>
<equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>GPS</value>
</equals>
<less-than>
<property>/instrumentation/gps/wp/wp[1]/course-error-nm</property>
<value>0.5</value>
</less-than>
<greater-than>
<property>/instrumentation/gps/wp/wp[1]/course-error-nm</property>
<value>-0.5</value>
</greater-than>
</and>
</or>
</input>
<output>/autopilot/internal/nav-capture</output>
</logic>
<!-- =============================================================== --> <!-- =============================================================== -->
<!-- Roll Axis Modes --> <!-- Roll Axis Modes -->
<!-- =============================================================== --> <!-- =============================================================== -->
@ -655,16 +707,27 @@
<!-- Glideslope hold. --> <!-- Glideslope hold. -->
<!-- Stage #2 drives the elevator-trim to achieve the desired climb rate. -->
<pid-controller> <pid-controller>
<name>Glideslope Hold</name> <name>NAV1/GPS Glideslope Hold</name>
<debug>false</debug> <debug>false</debug>
<enable> <enable>
<condition> <condition>
<equals> <and>
<property>/autopilot/locks/altitude</property> <equals>
<value>gs1-hold</value> <property>/autopilot/locks/altitude</property>
</equals> <value>gs-hold</value>
</equals>
<or>
<equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>GPS</value>
</equals>
<equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>NAV1</value>
</equals>
</or>
</and>
</condition> </condition>
</enable> </enable>
<input> <input>
@ -677,15 +740,54 @@
<prop>/autopilot/settings/target-pitch-deg</prop> <prop>/autopilot/settings/target-pitch-deg</prop>
</output> </output>
<config> <config>
<Kp>-0.01</Kp> <!-- proportional gain --> <Kp>0.1</Kp> <!-- proportional gain -->
<beta>1.0</beta> <!-- input value weighing factor --> <beta>1.0</beta> <!-- input value weighing factor -->
<alpha>0.1</alpha> <!-- low pass filter weighing factor --> <alpha>0.1</alpha> <!-- low pass filter weighing factor -->
<gamma>0.0</gamma> <!-- input value weighing factor for --> <gamma>0.0</gamma> <!-- input value weighing factor for -->
<!-- unfiltered derivative error --> <!-- unfiltered derivative error -->
<Ti>10.0</Ti> <!-- integrator time --> <Ti>1.0</Ti> <!-- integrator time -->
<Td>0.00001</Td> <!-- derivator time --> <Td>0.00001</Td> <!-- derivator time -->
<u_min>-1.0</u_min> <!-- minimum output clamp --> <u_min>-15.0</u_min><!-- minimum output clamp -->
<u_max>1.0</u_max> <!-- maximum output clamp --> <u_max>15.0</u_max> <!-- maximum output clamp -->
</config>
</pid-controller>
<pid-controller>
<name>NAV1/GPS Glideslope Hold</name>
<debug>false</debug>
<enable>
<condition>
<and>
<equals>
<property>/autopilot/locks/altitude</property>
<value>gs-hold</value>
</equals>
<equals>
<property>/autopilot/settings/nav-mode-source</property>
<value>NAV2</value>
</equals>
</and>
</condition>
</enable>
<input>
<prop>/velocities/vertical-speed-fps</prop>
</input>
<reference>
<prop>/instrumentation/nav[1]/gs-rate-of-climb</prop>
</reference>
<output>
<prop>/autopilot/settings/target-pitch-deg</prop>
</output>
<config>
<Kp>0.1</Kp> <!-- proportional gain -->
<beta>1.0</beta> <!-- input value weighing factor -->
<alpha>0.1</alpha> <!-- low pass filter weighing factor -->
<gamma>0.0</gamma> <!-- input value weighing factor for -->
<!-- unfiltered derivative error -->
<Ti>1.0</Ti> <!-- integrator time -->
<Td>0.00001</Td> <!-- derivator time -->
<u_min>-15.0</u_min><!-- minimum output clamp -->
<u_max>15.0</u_max> <!-- maximum output clamp -->
</config> </config>
</pid-controller> </pid-controller>

View file

@ -11,7 +11,7 @@
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="PFDInstruments.svg" sodipodi:docname="PFDInstruments.svg"
inkscape:version="0.91 r13725" inkscape:version="0.92.3 (2405546, 2018-03-11)"
version="1.1" version="1.1"
id="svg3140" id="svg3140"
height="768" height="768"
@ -24,18 +24,18 @@
borderopacity="1" borderopacity="1"
inkscape:pageopacity="1" inkscape:pageopacity="1"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="2.6295535" inkscape:zoom="1.8593751"
inkscape:cx="378.97168" inkscape:cx="588.67127"
inkscape:cy="351.68237" inkscape:cy="449.20136"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="PFDInstrumentsBankPoint" inkscape:current-layer="PFDInstrumentsSelectedALT"
showgrid="false" showgrid="false"
showguides="false" showguides="false"
inkscape:guide-bbox="true" inkscape:guide-bbox="true"
inkscape:window-width="2495" inkscape:window-width="2493"
inkscape:window-height="1416" inkscape:window-height="1385"
inkscape:window-x="65" inkscape:window-x="67"
inkscape:window-y="24" inkscape:window-y="27"
inkscape:window-maximized="1" inkscape:window-maximized="1"
inkscape:snap-grids="true" inkscape:snap-grids="true"
inkscape:snap-to-guides="true" inkscape:snap-to-guides="true"
@ -2335,8 +2335,7 @@
y="427.92041" y="427.92041"
x="460.43945" x="460.43945"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:0%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:0%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:0%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:0%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1"
y="427.92041" y="427.92041"
x="460.43945" x="460.43945"
@ -2468,6 +2467,15 @@
y="-393.92044" y="-393.92044"
transform="matrix(0.6108206,0.79176903,-0.6108206,0.79176903,0,0)" transform="matrix(0.6108206,0.79176903,-0.6108206,0.79176903,0,0)"
inkscape:label="GS-ILS" /> inkscape:label="GS-ILS" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.33333333px;line-height:150%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;"
x="683.56299"
y="172.10088"
id="PFDInstrumentsGS-type"
inkscape:label="#text2095"><tspan
sodipodi:role="line"
id="tspan2103">G</tspan></text>
</g> </g>
<g <g
style="display:inline;opacity:1" style="display:inline;opacity:1"
@ -5838,8 +5846,7 @@
y="291.20926" y="291.20926"
x="873.64142" x="873.64142"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"><tspan
sodipodi:linespacing="0%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5397" id="tspan5397"
x="873.64142" x="873.64142"
@ -5857,8 +5864,7 @@
x="204.87395" x="204.87395"
y="294.5" y="294.5"
id="PFDInstrumentsSpeed110" id="PFDInstrumentsSpeed110"
inkscape:label="Speed110" inkscape:label="Speed110"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4971" id="tspan4971"
x="206.87395" x="206.87395"
@ -6616,8 +6622,7 @@
x="770.98077" x="770.98077"
y="294.26346" y="294.26346"
id="PFDInstrumentsAlt11100" id="PFDInstrumentsAlt11100"
inkscape:label="Alt11100" inkscape:label="Alt11100"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan4973" id="tspan4973"
x="770.98077" x="770.98077"
@ -6630,8 +6635,7 @@
x="799.36157" x="799.36157"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4691-7)" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4691-7)"
xml:space="preserve" xml:space="preserve"
clip-path="none" clip-path="none"><tspan
sodipodi:linespacing="0%"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end;fill:#ffffff;fill-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end;fill:#ffffff;fill-opacity:1"
y="-32.394936" y="-32.394936"
x="799.36157" x="799.36157"
@ -6895,8 +6899,7 @@
x="239.58443" x="239.58443"
y="611.12927" y="611.12927"
id="PFDInstrumentsDME1-title" id="PFDInstrumentsDME1-title"
inkscape:label="DME1-title" inkscape:label="DME1-title"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan6098" id="tspan6098"
x="239.58443" x="239.58443"
@ -6908,8 +6911,7 @@
x="239.77455" x="239.77455"
y="628.24243" y="628.24243"
id="PFDInstrumentsDME1-SRC-text" id="PFDInstrumentsDME1-SRC-text"
inkscape:label="DME1-SRC-text" inkscape:label="DME1-SRC-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan6111" id="tspan6111"
x="239.77455" x="239.77455"
@ -6921,8 +6923,7 @@
x="237.4928" x="237.4928"
y="647.4472" y="647.4472"
id="PFDInstrumentsDME1-FREQ-text" id="PFDInstrumentsDME1-FREQ-text"
inkscape:label="DME1-FREQ-text" inkscape:label="DME1-FREQ-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan6115" id="tspan6115"
x="237.4928" x="237.4928"
@ -6934,8 +6935,7 @@
x="237.68295" x="237.68295"
y="666.27173" y="666.27173"
id="PFDInstrumentsDME1-DST-text" id="PFDInstrumentsDME1-DST-text"
inkscape:label="DME1-DST-text" inkscape:label="DME1-DST-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan6119" id="tspan6119"
x="237.68295" x="237.68295"
@ -6970,8 +6970,7 @@
x="239.5529" x="239.5529"
y="695.16937" y="695.16937"
id="PFDInstrumentsBRG1-DST-text" id="PFDInstrumentsBRG1-DST-text"
inkscape:label="BRG1-DST-text" inkscape:label="BRG1-DST-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5857-2-0" id="tspan5857-2-0"
x="239.5529" x="239.5529"
@ -6983,8 +6982,7 @@
x="241.2616" x="241.2616"
y="713.16797" y="713.16797"
id="PFDInstrumentsBRG1-WPID-text" id="PFDInstrumentsBRG1-WPID-text"
inkscape:label="BRG1-WPID-text" inkscape:label="BRG1-WPID-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5857-9-3" id="tspan5857-9-3"
x="241.2616" x="241.2616"
@ -6996,8 +6994,7 @@
x="240.84253" x="240.84253"
y="731.08093" y="731.08093"
id="PFDInstrumentsBRG1-SRC-text" id="PFDInstrumentsBRG1-SRC-text"
inkscape:label="BRG1-SRC-text" inkscape:label="BRG1-SRC-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5857-0" id="tspan5857-0"
x="240.84253" x="240.84253"
@ -7053,7 +7050,6 @@
x="186.54517" x="186.54517"
y="508.86316" y="508.86316"
id="PFDInstrumentsOrientationDisplay" id="PFDInstrumentsOrientationDisplay"
sodipodi:linespacing="125%"
inkscape:label="#text14869"><tspan inkscape:label="#text14869"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan14871" id="tspan14871"
@ -7069,7 +7065,6 @@
id="rect14873" id="rect14873"
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.97517461;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.97517461;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text <text
sodipodi:linespacing="125%"
id="PFDInstrumentsRangeDisplay" id="PFDInstrumentsRangeDisplay"
y="704.09003" y="704.09003"
x="223.3855" x="223.3855"
@ -7118,8 +7113,7 @@
x="681.39441" x="681.39441"
y="729.5387" y="729.5387"
id="PFDInstrumentsBRG2-SRC-text" id="PFDInstrumentsBRG2-SRC-text"
inkscape:label="BRG2-SRC-text" inkscape:label="BRG2-SRC-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5857" id="tspan5857"
x="681.39441" x="681.39441"
@ -7131,8 +7125,7 @@
x="681.29822" x="681.29822"
y="712.19135" y="712.19135"
id="PFDInstrumentsBRG2-WPID-text" id="PFDInstrumentsBRG2-WPID-text"
inkscape:label="BRG2-WPID-text" inkscape:label="BRG2-WPID-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5857-9" id="tspan5857-9"
x="681.29822" x="681.29822"
@ -7144,8 +7137,7 @@
x="681.88885" x="681.88885"
y="694.95819" y="694.95819"
id="PFDInstrumentsBRG2-DST-text" id="PFDInstrumentsBRG2-DST-text"
inkscape:label="BRG2-DST-text" inkscape:label="BRG2-DST-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5857-2" id="tspan5857-2"
x="681.88885" x="681.88885"
@ -7200,8 +7192,7 @@
x="8.9626169" x="8.9626169"
y="458.55432" y="458.55432"
id="PFDInstrumentsWindData-OPTN2-SPD-text" id="PFDInstrumentsWindData-OPTN2-SPD-text"
inkscape:label="WindData-OPTN2-SPD-text" inkscape:label="WindData-OPTN2-SPD-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan10920" id="tspan10920"
x="8.9626179" x="8.9626179"
@ -7237,8 +7228,7 @@
x="16.583868" x="16.583868"
y="477.01712" y="477.01712"
id="PFDInstrumentsWindData-OPTN3-SPD-text" id="PFDInstrumentsWindData-OPTN3-SPD-text"
inkscape:label="WindData-OPTN3-SPD-text" inkscape:label="WindData-OPTN3-SPD-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan10667-6" id="tspan10667-6"
x="16.583868" x="16.583868"
@ -7250,8 +7240,7 @@
x="-24.043869" x="-24.043869"
y="441.57062" y="441.57062"
id="PFDInstrumentsWindData-OPTN3-HDG-text" id="PFDInstrumentsWindData-OPTN3-HDG-text"
inkscape:label="WindData-OPTN3-HDG-text" inkscape:label="WindData-OPTN3-HDG-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan10667" id="tspan10667"
x="-24.043869" x="-24.043869"
@ -7288,8 +7277,7 @@
y="518.24725" y="518.24725"
id="PFDInstrumentsWindData-OPTN1-crosswind-text" id="PFDInstrumentsWindData-OPTN1-crosswind-text"
inkscape:label="WindData-OPTN1-crosswind-text" inkscape:label="WindData-OPTN1-crosswind-text"
transform="matrix(0.99992526,-0.0122259,0.0122259,0.99992526,0,0)" transform="matrix(0.99992526,-0.0122259,0.0122259,0.99992526,0,0)"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan11152" id="tspan11152"
x="-15.893252" x="-15.893252"
@ -7302,7 +7290,6 @@
y="542.45251" y="542.45251"
id="PFDInstrumentsWindData-OPTN1-headwind-text" id="PFDInstrumentsWindData-OPTN1-headwind-text"
inkscape:label="WindData-OPTN1-headwind-text" inkscape:label="WindData-OPTN1-headwind-text"
sodipodi:linespacing="125%"
transform="matrix(0.99992526,-0.0122259,0.0122259,0.99992526,0,0)"><tspan transform="matrix(0.99992526,-0.0122259,0.0122259,0.99992526,0,0)"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan11152-7" id="tspan11152-7"
@ -7346,8 +7333,7 @@
x="285.13638" x="285.13638"
y="483.44598" y="483.44598"
id="PFDInstrumentsWindData-NODATA" id="PFDInstrumentsWindData-NODATA"
inkscape:label="WindData-NODATA" inkscape:label="WindData-NODATA"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan6137" id="tspan6137"
x="285.13638" x="285.13638"
@ -7376,8 +7362,7 @@
x="755.6665" x="755.6665"
y="475.64999" y="475.64999"
id="PFDInstrumentsBARO-text" id="PFDInstrumentsBARO-text"
inkscape:label="BARO-text" inkscape:label="BARO-text"><tspan
sodipodi:linespacing="125%"><tspan
sodipodi:role="line" sodipodi:role="line"
id="tspan5399" id="tspan5399"
x="755.6665" x="755.6665"
@ -7418,8 +7403,7 @@
y="737.25531" y="737.25531"
x="4.242641" x="4.242641"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:100%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:100%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"><tspan
sodipodi:linespacing="100%"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:100%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:100%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff"
y="737.25531" y="737.25531"
x="4.242641" x="4.242641"
@ -7431,8 +7415,7 @@
x="96.332848" x="96.332848"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"
inkscape:label="OAT-text" inkscape:label="OAT-text"><tspan
sodipodi:linespacing="125%"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end;fill:#ffffff" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end;fill:#ffffff"
y="738.1048" y="738.1048"
x="96.332848" x="96.332848"
@ -7458,8 +7441,7 @@
y="471.6181" y="471.6181"
x="70.5" x="70.5"
style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"><tspan
sodipodi:linespacing="125%"><tspan
style="fill:#ffffff" style="fill:#ffffff"
y="471.6181" y="471.6181"
x="70.5" x="70.5"
@ -7471,8 +7453,7 @@
y="474.04486" y="474.04486"
x="92.749992" x="92.749992"
style="font-style:normal;font-weight:normal;font-size:18.66666603px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-weight:normal;font-size:18.66666603px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"><tspan
sodipodi:linespacing="125%"><tspan
style="text-align:start;text-anchor:start;fill:#ffffff" style="text-align:start;text-anchor:start;fill:#ffffff"
y="474.04486" y="474.04486"
x="92.749992" x="92.749992"
@ -7498,8 +7479,7 @@
y="471.6181" y="471.6181"
x="156.5" x="156.5"
style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"><tspan
sodipodi:linespacing="125%"><tspan
style="fill:#ffffff" style="fill:#ffffff"
y="471.6181" y="471.6181"
x="156.5" x="156.5"
@ -7511,8 +7491,7 @@
x="179.75" x="179.75"
style="font-style:normal;font-weight:normal;font-size:18.66666603px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-weight:normal;font-size:18.66666603px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"
inkscape:label="TAS-text" inkscape:label="TAS-text"><tspan
sodipodi:linespacing="125%"><tspan
style="text-align:start;text-anchor:start;fill:#ffffff" style="text-align:start;text-anchor:start;fill:#ffffff"
y="474.04486" y="474.04486"
x="179.75" x="179.75"
@ -7536,8 +7515,7 @@
y="444.86816" y="444.86816"
x="564.85876" x="564.85876"
style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"><tspan
sodipodi:linespacing="125%"><tspan
style="fill:#ffffff" style="fill:#ffffff"
y="444.86816" y="444.86816"
x="564.85876" x="564.85876"
@ -7549,8 +7527,7 @@
x="644.60211" x="644.60211"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"
inkscape:label="SelectedCRS-text" inkscape:label="SelectedCRS-text"><tspan
sodipodi:linespacing="125%"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end;fill:#ff00ff;fill-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end;fill:#ff00ff;fill-opacity:1"
y="448.26562" y="448.26562"
x="644.60211" x="644.60211"
@ -7574,8 +7551,7 @@
y="444.86816" y="444.86816"
x="277" x="277"
style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"><tspan
sodipodi:linespacing="125%"><tspan
style="fill:#ffffff" style="fill:#ffffff"
y="444.86816" y="444.86816"
x="277" x="277"
@ -7587,8 +7563,7 @@
x="358.6001" x="358.6001"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#00ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#00ffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"
inkscape:label="SelectedHDG-text" inkscape:label="SelectedHDG-text"><tspan
sodipodi:linespacing="125%"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end;fill:#00ffff;fill-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33374977px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end;fill:#00ffff;fill-opacity:1"
y="448.26562" y="448.26562"
x="358.6001" x="358.6001"
@ -7620,8 +7595,7 @@
y="106.73632" y="106.73632"
x="725.75" x="725.75"
style="font-style:normal;font-weight:normal;font-size:24px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-weight:normal;font-size:24px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve" xml:space="preserve"><tspan
sodipodi:linespacing="125%"><tspan
style="fill:#ffffff" style="fill:#ffffff"
y="106.73632" y="106.73632"
x="725.75" x="725.75"
@ -7634,6 +7608,41 @@
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" sodipodi:nodetypes="cccccccc"
inkscape:label="SelectedALT-symbol" /> inkscape:label="SelectedALT-symbol" />
<path
style="fill:#00ffff;stroke:none;stroke-width:1.00699997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 239.50495,273.07678 -13.50494,0.0625 -1e-5,4.92322 9.00001,6.4375 -9.00001,6.5625 1e-5,4.12239 13.50494,-0.0625 z"
id="PFDInstrumentsSelectedSPD-bug"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
inkscape:label="SelectedALT-bug" />
<rect
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:1.08987784;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="PFDInstrumentsSelectedSPD-bg"
width="86.139915"
height="21.767265"
x="153.36008"
y="91.687782"
inkscape:label="SelectedALT-bg" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="166.88083"
y="117.39941"
id="PFDInstrumentsSelectedSPD-text"
inkscape:label="SelectedALT-text"
transform="scale(1.0797965,0.92610045)"><tspan
sodipodi:role="line"
id="tspan2109"
x="166.88083"
y="117.39941"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke-width:1px">99999</tspan></text>
<path
inkscape:label="SelectedALT-symbol"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="PFDInstrumentsSelectedSPD-symbol"
d="m 157.11026,94.787023 11.08867,0.04401 1e-5,3.466989 -7.38975,4.533368 7.38975,4.62139 -1e-5,2.90303 -11.08867,-0.044 z"
style="display:inline;fill:#00ffff;stroke:none;stroke-width:1.00699997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g> </g>
</g> </g>
<g <g

Before

Width:  |  Height:  |  Size: 469 KiB

After

Width:  |  Height:  |  Size: 471 KiB

View file

@ -33,6 +33,7 @@ new : func ()
obj.addPropMap("AutopilotAltitudeModeArmed", "/autopilot/annunciator/vertical-mode-armed"); obj.addPropMap("AutopilotAltitudeModeArmed", "/autopilot/annunciator/vertical-mode-armed");
obj.addPropMap("AutopilotTargetPitch", "/autopilot/settings/target-pitch-deg"); obj.addPropMap("AutopilotTargetPitch", "/autopilot/settings/target-pitch-deg");
obj.addPropMap("AutopilotTargetRoll", "/autopilot/settings/target-roll-deg"); obj.addPropMap("AutopilotTargetRoll", "/autopilot/settings/target-roll-deg");
obj.addPropMap("AutopilotTargetSpeed", "/autopilot/settings/target-speed-kt");
obj.addPropMap("AutopilotTargetVertical", "/autopilot/annunciator/vertical-mode-target"); obj.addPropMap("AutopilotTargetVertical", "/autopilot/annunciator/vertical-mode-target");
return obj; return obj;

View file

@ -72,9 +72,10 @@ var GenericNavComPublisher =
obj._periodicPublisher.addPropMap("Nav1CrosstrackErrorM", "/instrumentation/nav/crosstrack-error-m"); obj._periodicPublisher.addPropMap("Nav1CrosstrackErrorM", "/instrumentation/nav/crosstrack-error-m");
obj._periodicPublisher.addPropMap("Nav1Localizer", "/instrumentation/nav/nav-loc"); obj._periodicPublisher.addPropMap("Nav1Localizer", "/instrumentation/nav/nav-loc");
obj._periodicPublisher.addPropMap("Nav1Deflection", "/instrumentation/nav/heading-needle-deflection-norm"); obj._periodicPublisher.addPropMap("Nav1Deflection", "/instrumentation/nav/heading-needle-deflection-norm");
obj._periodicPublisher.addPropMap("Nav1GSDeflection", "/instrumentation/nav/gs-needle-deflection-norm");
obj._periodicPublisher.addPropMap("Nav1GSInRange", "/instrumentation/nav/gs-in-range");
obj._periodicPublisher.addPropMap("Nav1From", "/instrumentation/nav/from-flag"); obj._periodicPublisher.addPropMap("Nav1From", "/instrumentation/nav/from-flag");
obj._triggeredPublisher.addPropMap("Nav1Volume", "/instrumentation/nav/nav-volume"); obj._triggeredPublisher.addPropMap("Nav1Volume", "/instrumentation/nav/nav-volume");
obj._triggeredPublisher.addPropMap("Nav1AudioID", "/instrumentation/nav/audio-btn"); obj._triggeredPublisher.addPropMap("Nav1AudioID", "/instrumentation/nav/audio-btn");
obj._triggeredPublisher.addPropMap("Nav1Serviceable", "/instrumentation/nav/operable"); obj._triggeredPublisher.addPropMap("Nav1Serviceable", "/instrumentation/nav/operable");
@ -90,6 +91,8 @@ var GenericNavComPublisher =
obj._periodicPublisher.addPropMap("Nav2CrosstrackErrorM", "/instrumentation/nav[1]/crosstrack-error-m"); obj._periodicPublisher.addPropMap("Nav2CrosstrackErrorM", "/instrumentation/nav[1]/crosstrack-error-m");
obj._periodicPublisher.addPropMap("Nav2Localizer", "/instrumentation/nav[1]/nav-loc"); obj._periodicPublisher.addPropMap("Nav2Localizer", "/instrumentation/nav[1]/nav-loc");
obj._periodicPublisher.addPropMap("Nav2Deflection", "/instrumentation/nav[1]/heading-needle-deflection-norm"); obj._periodicPublisher.addPropMap("Nav2Deflection", "/instrumentation/nav[1]/heading-needle-deflection-norm");
obj._periodicPublisher.addPropMap("Nav2GSDeflection", "/instrumentation/nav[1]/gs-needle-deflection-norm");
obj._periodicPublisher.addPropMap("Nav2GSInRange", "/instrumentation/nav[1]/gs-in-range");
obj._periodicPublisher.addPropMap("Nav2From", "/instrumentation/nav/from-flag"); obj._periodicPublisher.addPropMap("Nav2From", "/instrumentation/nav/from-flag");
obj._triggeredPublisher.addPropMap("Nav2Volume", "/instrumentation/nav[1]/nav-volume"); obj._triggeredPublisher.addPropMap("Nav2Volume", "/instrumentation/nav[1]/nav-volume");
@ -103,6 +106,10 @@ var GenericNavComPublisher =
obj._triggeredPublisher.addPropMap("ADFVolume", "/instrumentation/adf/volume-norm"); obj._triggeredPublisher.addPropMap("ADFVolume", "/instrumentation/adf/volume-norm");
obj._triggeredPublisher.addPropMap("ADFServiceable", "/instrumentation/adf/operable"); obj._triggeredPublisher.addPropMap("ADFServiceable", "/instrumentation/adf/operable");
obj._triggeredPublisher.addPropMap("MarkerBeaconInner", "/instrumentation/marker-beacon/inner");
obj._triggeredPublisher.addPropMap("MarkerBeaconMiddle", "/instrumentation/marker-beacon/middle");
obj._triggeredPublisher.addPropMap("MarkerBeaconOuter", "/instrumentation/marker-beacon/outer");
obj._triggeredPublisher.addPropMap("NavSelected", "/instrumentation/nav-selected"); obj._triggeredPublisher.addPropMap("NavSelected", "/instrumentation/nav-selected");
obj._triggeredPublisher.addPropMap("TransponderMode", "/instrumentation/transponder/inputs/knob-mode"); obj._triggeredPublisher.addPropMap("TransponderMode", "/instrumentation/transponder/inputs/knob-mode");

View file

@ -90,15 +90,15 @@ getElement : func(e) {
return me._elements[e]; return me._elements[e];
}, },
addTextElements : func(symbols) { addTextElements : func(symbols, style=nil) {
foreach (var s; symbols) { foreach (var s; symbols) {
me._textElements[s] = PFD.TextElement.new(me.pageName, me._SVGGroup, s); me._textElements[s] = PFD.TextElement.new(me.pageName, me._SVGGroup, s, style);
} }
}, },
addTextElement : func(e) { addTextElement : func(e, style=nil) {
if (me._textElements[e] == nil) { if (me._textElements[e] == nil) {
me._textElements[e] = PFD.TextElement.new(me.pageName, me._SVGGroup, e); me._textElements[e] = PFD.TextElement.new(me.pageName, me._SVGGroup, e, style);
} else { } else {
die("addTextElement element already exists: "~ me.pageName ~ e); die("addTextElement element already exists: "~ me.pageName ~ e);
} }

View file

@ -45,6 +45,8 @@ var PFDInstruments =
_Multiline : 0, _Multiline : 0,
_annunciation : 0, _annunciation : 0,
_fd_enabled : 1, # Mark the Flight Director as enabled, as it is visible in the SVG. _fd_enabled : 1, # Mark the Flight Director as enabled, as it is visible in the SVG.
_selected_spd : 0,
_selected_spd_visible : 0,
}; };
# Hide various elements for the moment. TODO - implement # Hide various elements for the moment. TODO - implement
@ -61,9 +63,12 @@ var PFDInstruments =
"HDG-text", "HDG-text",
"SelectedHDG-text", "SelectedHDG-text",
"SelectedALT-text", "SelectedALT-text",
"SelectedSPD-text",
"XPDR-DIGIT-3-text", "XPDR-DIGIT-2-text", "XPDR-DIGIT-1-text", "XPDR-DIGIT-0-text", "XPDR-DIGIT-3-text", "XPDR-DIGIT-2-text", "XPDR-DIGIT-1-text", "XPDR-DIGIT-0-text",
"XPDR-MODE-text", "XPDR-MODE-text",
"TIME-text", "TIME-text",
"GS-type",
"MarkerText",
]); ]);
# Set clipping for the various tapes # Set clipping for the various tapes
@ -383,6 +388,14 @@ var PFDInstruments =
me.getElement("IAS-" ~ v).hide(); me.getElement("IAS-" ~ v).hide();
} }
} }
if ((me._selected_spd_visible) and ((me._selected_spd - ias) < 30)) {
me.getElement("SelectedSPD-bug")
.setTranslation(0, (ias - me._selected_spd) * 5.711)
.show();
} else {
me.getElement("SelectedSPD-bug").hide();
}
}, },
updateVSI: func (vsi) { updateVSI: func (vsi) {
@ -395,6 +408,11 @@ var PFDInstruments =
#me.getElement("GSPD-text").setText(sprintf("%iKT", tas)); #me.getElement("GSPD-text").setText(sprintf("%iKT", tas));
}, },
updateGS : func (deflection_norm, type) {
me.getElement("GS-ILS").setTranslation(0, - deflection_norm * 100);
me.setTextElement("GS-type", type);
},
updateALT: func (alt, alt_trend, selected_alt) { updateALT: func (alt, alt_trend, selected_alt) {
if (alt < 0) { if (alt < 0) {
me.setTextElement("Alt11100", sprintf("-% 3i",abs(math.ceil(alt/100)))); me.setTextElement("Alt11100", sprintf("-% 3i",abs(math.ceil(alt/100))));
@ -563,6 +581,26 @@ var PFDInstruments =
me.setTextElement("SelectedALT-text", sprintf("%i", selected_alt)); me.setTextElement("SelectedALT-text", sprintf("%i", selected_alt));
}, },
setSelectedSPDVisible : func(visible) {
me._selected_spd_visible = visible;
if (visible) {
me.getElement("SelectedSPD-text").show();
me.getElement("SelectedSPD-bg").show();
me.getElement("SelectedSPD-bug").show();
me.getElement("SelectedSPD-symbol").show();
} else {
me.getElement("SelectedSPD-text").hide();
me.getElement("SelectedSPD-bg").hide();
me.getElement("SelectedSPD-bug").hide();
me.getElement("SelectedSPD-symbol").hide();
}
},
updateSelectedSPD : func (selected_spd) {
me._selected_spd = selected_spd;
me.setTextElement("SelectedSPD-text", sprintf("%ikt", me._selected_spd));
},
setBRG1 : func(option) { me._setBRG("BRG1",option); }, setBRG1 : func(option) { me._setBRG("BRG1",option); },
setBRG2 : func(option) { me._setBRG("BRG2",option); }, setBRG2 : func(option) { me._setBRG("BRG2",option); },
@ -780,7 +818,7 @@ var PFDInstruments =
me.getElement("OMI").hide(); me.getElement("OMI").hide();
} else { } else {
me.getElement("OMI").show(); me.getElement("OMI").show();
me.getElement("MarkerText").setText(omi); me.setTextElement("MarkerText", omi);
} }
me._OMI = omi; me._OMI = omi;
}, },

View file

@ -72,6 +72,9 @@ var PFDInstrumentsController =
_nav1_distance_m : 0, _nav1_distance_m : 0,
_nav1_deviation_deg : 0, _nav1_deviation_deg : 0,
_nav1_loc : 0, _nav1_loc : 0,
_nav1_deflection : 0,
_nav1_gs_deflection : 0,
_nav1_gs_in_range : 0,
_nav2_id : "", _nav2_id : "",
_nav2_freq : 0.0, _nav2_freq : 0.0,
@ -84,6 +87,9 @@ var PFDInstrumentsController =
_nav2_distance_m : 0, _nav2_distance_m : 0,
_nav2_deviation_deg : 0, _nav2_deviation_deg : 0,
_nav2_loc : 0, _nav2_loc : 0,
_nav2_deflection : 0,
_nav2_gs_deflection : 0,
_nav2_gs_in_range : 0,
_adf_freq : 0.0, _adf_freq : 0.0,
_adf_in_range : 0, _adf_in_range : 0,
@ -93,7 +99,11 @@ var PFDInstrumentsController =
_transponder_code : "1200", # Current code _transponder_code : "1200", # Current code
_transponder_ident : 0, _transponder_ident : 0,
_transponder_edit : 0, # If we're currently editing the transponder code _transponder_edit : 0, # If we're currently editing the transponder code
_transponder_edit_code : 0 # Current value being edited as transponder code _transponder_edit_code : 0, # Current value being edited as transponder code
_marker_beacon_outer : 0,
_marker_beacon_middle : 0,
_marker_beacon_inner : 0,
}; };
obj._current_flightplan = obj.getNavData("Flightplan"); obj._current_flightplan = obj.getNavData("Flightplan");
@ -303,6 +313,13 @@ var PFDInstrumentsController =
if (data["AutopilotTargetPitch"] != nil) me._fd_pitch = data["AutopilotTargetPitch"]; if (data["AutopilotTargetPitch"] != nil) me._fd_pitch = data["AutopilotTargetPitch"];
if (data["AutopilotTargetRoll"] != nil) me._fd_roll = data["AutopilotTargetRoll"]; if (data["AutopilotTargetRoll"] != nil) me._fd_roll = data["AutopilotTargetRoll"];
if (data["AutopilotTargetSpeed"] != nil) {
me._fd_spd = data["AutopilotTargetSpeed"];
me.page.updateSelectedSPD(me._fd_spd);
}
if (data["AutopilotAltitudeMode"] != nil) me.page.setSelectedSPDVisible(data["AutopilotAltitudeMode"] == "FLC");
var update_fp = 0; var update_fp = 0;
if (data["FMSFlightPlanEdited"] != nil) { if (data["FMSFlightPlanEdited"] != nil) {
@ -383,8 +400,10 @@ var PFDInstrumentsController =
if (data["Nav1DistanceMeters"] != nil) me._nav1_distance_m = data["Nav1DistanceMeters"]; if (data["Nav1DistanceMeters"] != nil) me._nav1_distance_m = data["Nav1DistanceMeters"];
if (data["Nav1CourseDeviationDeg"] != nil) me._nav1_deviation_deg = data["Nav1CourseDeviationDeg"]; if (data["Nav1CourseDeviationDeg"] != nil) me._nav1_deviation_deg = data["Nav1CourseDeviationDeg"];
# Deflection range is [-10,10], while deflection_dots is [-2.4, 2.4]; # Deflection range is [-1,1], while deflection_dots is [-2.4, 2.4];
if (data["Nav1Deflection"] != nil) me._nav1_deflection = data["Nav1Deflection"] * 2.4; if (data["Nav1Deflection"] != nil) me._nav1_deflection = data["Nav1Deflection"] * 2.4;
if (data["Nav1GSDeflection"] != nil) me._nav1_gs_deflection = data["Nav1GSDeflection"];
if (data["Nav1GSInRange"] != nil) me._nav1_gs_in_range = data["Nav1GSInRange"];
if (data["Nav1CrosstrackErrorM"] != nil) me._nav1_crosstrack_m = data["Nav1CrosstrackErrorM"]; if (data["Nav1CrosstrackErrorM"] != nil) me._nav1_crosstrack_m = data["Nav1CrosstrackErrorM"];
if (data["Nav1From"] != nil) me._nav1_from = data["Nav1From"]; if (data["Nav1From"] != nil) me._nav1_from = data["Nav1From"];
if (data["Nav1Localizer"] != nil) me._nav1_loc = data["Nav1Localizer"]; if (data["Nav1Localizer"] != nil) me._nav1_loc = data["Nav1Localizer"];
@ -399,6 +418,8 @@ var PFDInstrumentsController =
# Deflection range is [-1,1], while deflection_dots is [-2.4, 2.4]; # Deflection range is [-1,1], while deflection_dots is [-2.4, 2.4];
if (data["Nav2Deflection"] != nil) me._nav2_deflection = data["Nav2Deflection"] * 2.4; if (data["Nav2Deflection"] != nil) me._nav2_deflection = data["Nav2Deflection"] * 2.4;
if (data["Nav2GSDeflection"] != nil) me._nav2_gs_deflection = data["Nav2GSDeflection"];
if (data["Nav2GSInRange"] != nil) me._nav2_gs_in_range = data["Nav2GSInRange"];
if (data["Nav2CrosstrackErrorM"] != nil) me._nav2_crosstrack_m = data["Nav2CrosstrackErrorM"]; if (data["Nav2CrosstrackErrorM"] != nil) me._nav2_crosstrack_m = data["Nav2CrosstrackErrorM"];
if (data["Nav2From"] != nil) me._nav2_from = data["Nav2From"]; if (data["Nav2From"] != nil) me._nav2_from = data["Nav2From"];
if (data["Nav2Localizer"] != nil) me._nav2_loc = data["Nav2Localizer"]; if (data["Nav2Localizer"] != nil) me._nav2_loc = data["Nav2Localizer"];
@ -411,6 +432,10 @@ var PFDInstrumentsController =
if (data["TransponderCode"] != nil) me._transponder_code = data["TransponderCode"]; if (data["TransponderCode"] != nil) me._transponder_code = data["TransponderCode"];
if (data["TransponderIdent"] != nil) me._transponder_ident = data["TransponderIdent"]; if (data["TransponderIdent"] != nil) me._transponder_ident = data["TransponderIdent"];
if (data["MarkerBeaconInner"] != nil) me._marker_beacon_inner = data["MarkerBeaconInner"];
if (data["MarkerBeaconMiddle"] != nil) me._marker_beacon_middle = data["MarkerBeaconMiddle"];
if (data["MarkerBeaconOuter"] != nil) me._marker_beacon_outer = data["MarkerBeaconOuter"];
if (me.getBRG1() == "NAV1") me.page.updateBRG1(me._nav1_in_range, me._nav1_id, me._nav1_distance_m * M2NM, me._heading_magnetic_deg, me._nav1_heading_deg); if (me.getBRG1() == "NAV1") me.page.updateBRG1(me._nav1_in_range, me._nav1_id, me._nav1_distance_m * M2NM, me._heading_magnetic_deg, me._nav1_heading_deg);
if (me.getBRG1() == "NAV2") me.page.updateBRG1(me._nav2_in_range, me._nav2_id, me._nav2_distance_m * M2NM, me._heading_magnetic_deg, me._nav2_heading_deg); if (me.getBRG1() == "NAV2") me.page.updateBRG1(me._nav2_in_range, me._nav2_id, me._nav2_distance_m * M2NM, me._heading_magnetic_deg, me._nav2_heading_deg);
if (me.getBRG1() == "ADF") me.page.updateBRG1(me._adf_in_range, sprintf("%.1f", me._adf_freq), 0, me._heading_magnetic_deg, me._adf_heading_deg); if (me.getBRG1() == "ADF") me.page.updateBRG1(me._adf_in_range, sprintf("%.1f", me._adf_freq), 0, me._heading_magnetic_deg, me._adf_heading_deg);
@ -432,6 +457,12 @@ var PFDInstrumentsController =
annun: "", annun: "",
loc : me._nav1_loc, loc : me._nav1_loc,
); );
if (me._nav1_gs_in_range) {
me.page.updateGS(me._nav1_gs_deflection, "G");
} else {
me.page.updateGS(0, "");
}
} }
if (me.getCDISource() == "NAV2") { if (me.getCDISource() == "NAV2") {
@ -447,6 +478,22 @@ var PFDInstrumentsController =
annun: "", annun: "",
loc : me._nav2_loc, loc : me._nav2_loc,
); );
if (me._nav2_gs_in_range) {
me.page.updateGS(me._nav2_gs_deflection, "G");
} else {
me.page.updateGS(0, "");
}
}
# Special case - if the GPS is being used as the CDI source, then it'll be slaved to Nav1
# and we should used the Nav1 Glideslope to show GPS-controlled glideslope.
if (me.getCDISource() == "GPS") {
if (me._nav1_gs_in_range) {
me.page.updateGS(me._nav1_gs_deflection, "G");
} else {
me.page.updateGS(0, "");
}
} }
if ((me._transponder_edit == 0) and if ((me._transponder_edit == 0) and
@ -456,6 +503,16 @@ var PFDInstrumentsController =
me.page.updateTransponder(me._transponder_mode, me._transponder_code, me._transponder_ident); me.page.updateTransponder(me._transponder_mode, me._transponder_code, me._transponder_ident);
} }
if (me._marker_beacon_outer == 1) {
me.page.setOMI("O");
} else if (me._marker_beacon_middle == 1) {
me.page.setOMI("M");
} else if (me._marker_beacon_inner == 1) {
me.page.setOMI("I");
} else {
me.page.setOMI("");
}
return emesary.Transmitter.ReceiptStatus_OK; return emesary.Transmitter.ReceiptStatus_OK;
}, },

View file

@ -85,6 +85,16 @@ var AP_STATUS_STYLE = {
NORMAL_TEXT_COLOR : "#00ff00", NORMAL_TEXT_COLOR : "#00ff00",
}; };
# Style element for use by the flight director modes and armed indicators.
# This is normally green text on a black background, but when highlighted is
# black text on a green background
var FD_STATUS_STYLE = {
CURSOR_BLINK_PERIOD : 0.5,
HIGHLIGHT_COLOR : "#00ff00",
HIGHLIGHT_TEXT_COLOR : "#000000",
NORMAL_TEXT_COLOR : "#00ff00",
};
var Surround = var Surround =
{ {
new : func (mfd, myCanvas, device, svg, pfd=0) new : func (mfd, myCanvas, device, svg, pfd=0)
@ -108,11 +118,11 @@ var Surround =
if (pfd) { if (pfd) {
obj.addTextElements(["HeaderFrom", "HeaderTo", "LegDistance", "LegBRG"]); obj.addTextElements(["HeaderFrom", "HeaderTo", "LegDistance", "LegBRG"]);
obj.addTextElements(["HeaderAPLateralArmed", "HeaderAPLateralActive", "HeaderAPVerticalArmed", "HeaderAPVerticalActive", "HeaderAPVerticalReference"]); obj.addTextElements(["HeaderAPLateralArmed", "HeaderAPLateralActive", "HeaderAPVerticalArmed", "HeaderAPVerticalActive", "HeaderAPVerticalReference"], FD_STATUS_STYLE);
obj._apStatus = PFD.TextElement.new(obj.pageName, svg, "HeaderAPStatus", "", AP_STATUS_STYLE); obj._apStatus = PFD.TextElement.new(obj.pageName, svg, "HeaderAPStatus", "", AP_STATUS_STYLE);
obj._apStatusTimer = nil; obj._apStatusTimer = nil;
obj._apHeadingModeTimer = nil; obj._apLateralStatusTimer = nil;
obj._apAltitudeModeTimer = nil; obj._apVerticalStatusTimer = nil;
obj._dto = PFD.HighlightElement.new(obj.pageName, svg, "HeaderDTO", "DTO"); obj._dto = PFD.HighlightElement.new(obj.pageName, svg, "HeaderDTO", "DTO");
obj._leg = PFD.HighlightElement.new(obj.pageName, svg, "HeaderActiveLeg", "Leg"); obj._leg = PFD.HighlightElement.new(obj.pageName, svg, "HeaderActiveLeg", "Leg");
} else { } else {
@ -270,11 +280,32 @@ var Surround =
} }
} }
if (data["AutopilotHeadingMode"] != nil) me.setTextElement("HeaderAPLateralActive", data["AutopilotHeadingMode"]); # When the Autopilot Heading or Altitude modes change we flash the appropriate annunicator for 10 seconds.
if ((data["AutopilotHeadingMode"] != nil) and
(data["AutopilotHeadingMode"] != me.getTextValue("HeaderAPLateralActive"))) {
me.setTextElement("HeaderAPLateralActive", data["AutopilotHeadingMode"]);
# This code crashes FG at present. No idea why - perhaps reference to "me" in maketimer?
#me.highlightTextElement("HeaderAPLateralActive");
#if (me._apLateralStatusTimer == nil) me._apLateralStatusTimer = maketimer(10.0, me, me._stopLateralStatusFlashing);
#me._apLateralStatusTimer.singleShot = 1;
#me._apLateralStatusTimer.restart(10.0);
}
# When the Autopilot Heading or Altitude modes change we flash the appropriate annunicator for 10 seconds.
if ((data["AutopilotAltitudeMode"] != nil) and
(data["AutopilotAltitudeMode"] != me.getTextValue("HeaderAPVerticalActive"))) {
me.setTextElement("HeaderAPVerticalActive", data["AutopilotAltitudeMode"]);
# This code crashes FG at present. No idea why - perhaps reference to "me" in maketimer?
#me.highlightTextElement("HeaderAPVerticalActive");
#if (me._apVerticalStatusTimer == nil) me._apVerticalStatusTimer = maketimer(10.0, me, me._stopVerticalStatusFlashing);
#me._apVerticalStatusTimer.singleShot = 1;
#me._apVerticalStatusTimer.restart(10.0);
}
if (data["AutopilotHeadingModeArmed"] != nil) me.setTextElement("HeaderAPLateralArmed", data["AutopilotHeadingModeArmed"]); if (data["AutopilotHeadingModeArmed"] != nil) me.setTextElement("HeaderAPLateralArmed", data["AutopilotHeadingModeArmed"]);
if (data["AutopilotAltitudeMode"] != nil) me.setTextElement("HeaderAPVerticalActive", data["AutopilotAltitudeMode"]);
if (data["AutopilotAltitudeModeArmed"] != nil) me.setTextElement("HeaderAPVerticalArmed", data["AutopilotAltitudeModeArmed"]); if (data["AutopilotAltitudeModeArmed"] != nil) me.setTextElement("HeaderAPVerticalArmed", data["AutopilotAltitudeModeArmed"]);
# When the Autopilot is disengaged, the AP status element flashes for 5 seconds before disappearing
if (data["AutopilotEnabled"] != nil) { if (data["AutopilotEnabled"] != nil) {
if (data["AutopilotEnabled"] == 1) { if (data["AutopilotEnabled"] == 1) {
me._apStatus.setValue("AP"); me._apStatus.setValue("AP");
@ -289,11 +320,13 @@ var Surround =
# We were previously enabled, so we want to make the AP Status element # We were previously enabled, so we want to make the AP Status element
# flash for 5 seconds before removing it. The highlightElement() # flash for 5 seconds before removing it. The highlightElement()
# starts it flashing, and we use a timer to stop it. # starts it flashing, and we use a timer to stop it.
me._apStatus.highlightElement();
if (me._apStatusTimer == nil) me._apStatusTimer = # This code crashes FG at present. No idea why - perhaps reference to "me" in maketimer?
maketimer(5.0, me, func() { me._apStatus.unhighlightElement(); me._apStatus.setValue(""); } ); #me._apStatus.highlightElement();
me._apStatusTimer.singleShot = 1; #if (me._apStatusTimer == nil) me._apStatusTimer = maketimer(5.0, me, me._stopAPStatusFlashing);
me._apStatusTimer.restart(5.0); #me._apStatusTimer.singleShot = 1;
#me._apStatusTimer.restart(5.0);
me._apStatus.setValue("");
} }
} }
} }
@ -337,6 +370,22 @@ var Surround =
} }
}, },
_stopLateralStatusFlashing : func()
{
me.unhighlightTextElement("HeaderAPLateralActive");
},
_stopVerticalStatusFlashing : func()
{
me.unhighlightTextElement("HeaderAPVerticalActive");
},
_stopAPStatusFlashing : func()
{
me._apStatus.unhighlightElement();
me._apStatus.setValue("");
},
getCurrentPage : func() getCurrentPage : func()
{ {
var currentpage = PAGE_GROUPS[me._selectedPageGroup].pages[me._selectedPage]; var currentpage = PAGE_GROUPS[me._selectedPageGroup].pages[me._selectedPage];