<?xml version="1.0"?>

<!-- KAP 140 Autopilot Configuration -->
<!-- Each component is evaluated in the order specified.  You can make up -->
<!-- property names to pass the result of one component on to a subsequent -->
<!-- component. -->

<PropertyList>

    <filter>
        <name>heading bug error computer/normalizer</name>
        <debug>false</debug>
        <type>gain</type>
        <input>
            <property>autopilot/settings/heading-bug-deg</property>
            <offset>
                <property>instrumentation/heading-indicator/indicated-heading-deg</property>
                <scale>-1.0</scale>
            </offset>
        </input>
        <output>autopilot/internal/heading-bug-error-deg</output>
        <period>
            <min>-180</min>
            <max>180</max>
        </period>
        <gain>1.0</gain>
    </filter>

    <!-- =============================================================== -->
    <!-- Roll Axis Modes                                                 -->
    <!-- =============================================================== -->

    <!-- Nav hold (NAV) Mode -->
    <pid-controller>
        <name>Nav hold (NAV) Mode</name>
        <debug>false</debug>
        <enable>
            <property>/autopilot/KAP140/locks/nav-hold</property>
            <value type="bool">true</value>
        </enable>
        <input>
            <property>/instrumentation/nav/heading-needle-deflection</property>
        </input>
        <reference>
            <value>0.0</value>
        </reference>
        <output>
            <property>/autopilot/KAP140/settings/target-intercept-angle</property>
        </output>
        <config>
            <Kp>2.0</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>15.0</Ti> <!-- integrator time -->
            <Td>0.0</Td> <!-- derivator time -->
            <u_min>-45.0</u_min> <!-- minimum output clamp -->
            <u_max>45.0</u_max> <!-- maximum output clamp -->
        </config>
    </pid-controller>

    <!-- Approach hold (APR) Mode -->
    <pid-controller>
        <name>Approach hold (APR) Mode</name>
        <debug>false</debug>
        <enable>
            <property>/autopilot/KAP140/locks/apr-hold</property>
            <value type="bool">true</value>
        </enable>
        <input>
            <property>/instrumentation/nav/heading-needle-deflection</property>
        </input>
        <reference>
            <value>0.0</value>
        </reference>
        <output>
            <property>/autopilot/KAP140/settings/target-intercept-angle</property>
        </output>
        <config>
            <Kp>2.0</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>15.0</Ti> <!-- integrator time -->
            <Td>0.001</Td> <!-- derivator time -->
            <u_min>-45.0</u_min> <!-- minimum output clamp -->
            <u_max>45.0</u_max> <!-- maximum output clamp -->
        </config>
    </pid-controller>

    <!-- Backcourse hold (REV) Mode -->
    <pid-controller>
        <name>Backcourse hold (REV) Mode</name>
        <debug>false</debug>
        <enable>
            <property>/autopilot/KAP140/locks/rev-hold</property>
            <value type="bool">true</value>
        </enable>
        <input>
            <property>/instrumentation/nav/heading-needle-deflection</property>
            <scale>-1.0</scale>
        </input>
        <reference>
            <value>0.0</value>
        </reference>
        <output>
            <property>/autopilot/KAP140/settings/target-intercept-angle</property>
        </output>
        <config>
            <Kp>2.0</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>15.0</Ti> <!-- integrator time -->
            <Td>0.0</Td> <!-- derivator time -->
            <u_min>-45.0</u_min> <!-- minimum output clamp -->
            <u_max>45.0</u_max> <!-- maximum output clamp -->
        </config>
    </pid-controller>

    <!-- Heading Select (HDG) Mode -->
    <pid-controller>
        <name>Heading Select (HDG) Mode</name>
        <debug>false</debug>
        <enable>
            <property>/autopilot/KAP140/locks/hdg-hold</property>
            <value type="bool">true</value>
        </enable>
        <input>
            <property>/autopilot/internal/heading-bug-error-deg</property>
            <!--      <property>/instrumentation/gps/true-bug-error-deg</property> -->
        </input>
        <reference>
            <property>/autopilot/KAP140/settings/target-intercept-angle</property>
        </reference>
        <output>
            <property>/autopilot/KAP140/settings/target-turn-rate</property>
        </output>
        <config>
            <Kp>-0.05</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>15.0</Ti> <!-- integrator time -->
            <Td>0.0</Td> <!-- derivator time -->
            <u_min>-1.0</u_min> <!-- minimum output clamp -->
            <u_max>1.0</u_max> <!-- maximum output clamp -->
        </config>
    </pid-controller>

    <!-- Wing leveler (ROL) Mode -->
    <pid-controller>
        <name>Wing Leveler (ROL) Mode</name>
        <debug>false</debug>
        <enable>
            <property>/autopilot/KAP140/locks/roll-axis</property>
            <value type="bool">true</value>
        </enable>
        <input>
            <property>/instrumentation/turn-indicator/indicated-turn-rate</property>
        </input>
        <reference>
            <property>/autopilot/KAP140/settings/target-turn-rate</property>
        </reference>
        <output>
            <property>/controls/flight/aileron</property>
        </output>
        <config>
            <Kp>0.15</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>15.0</Ti> <!-- integrator time -->
            <Td>0.0</Td> <!-- derivator time -->
            <u_min>-0.25</u_min> <!-- minimum output clamp -->
            <u_max>0.25</u_max> <!-- maximum output clamp -->
        </config>
    </pid-controller>

    <!-- =============================================================== -->
    <!-- Pitch Axis Modes                                                -->
    <!-- =============================================================== -->

    <!-- Altitude Hold (ALT) Mode -->
    <pid-controller>
        <name>Altitude Hold (ALT) Mode</name>
        <debug>false</debug>
        <enable>
            <property>/autopilot/KAP140/locks/alt-hold</property>
            <value type="bool">true</value>
        </enable>
        <input>
            <property>/systems/static[0]/pressure-inhg[0]</property>
        </input>
        <reference>
            <property>/autopilot/KAP140/settings/target-alt-pressure</property>
        </reference>
        <output>
            <property>/autopilot/KAP140/settings/target-pressure-rate</property>
        </output>
        <config>
            <Kp>0.125</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>12.0</Ti> <!-- integrator time -->
            <Td>0.0</Td> <!-- derivator time -->
            <u_min>-0.007</u_min> <!-- minimum output clamp -->
            <u_max>0.007</u_max> <!-- maximum output clamp -->
        </config>
    </pid-controller>

    <!-- Glideslope Hold (GS) Mode -->
    <pid-controller>
        <name>Glideslope Hold (GS) Mode</name>
        <debug>false</debug>
        <enable>
            <property>/autopilot/KAP140/locks/gs-hold</property>
            <value type="bool">true</value>
        </enable>
        <input>
            <property>/instrumentation/nav/gs-needle-deflection-norm</property>
        </input>
        <reference>
            <value>0.0</value>
        </reference>
        <output>
            <property>/autopilot/KAP140/settings/target-pressure-rate</property>
        </output>
        <config>
            <Kp>0.025</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>15.0</Ti> <!-- integrator time -->
            <Td>0.0</Td> <!-- derivator time -->
            <u_min>-0.001</u_min> <!-- minimum output clamp -->
            <u_max>0.017</u_max> <!-- maximum output clamp -->
        </config>
    </pid-controller>

    <filter>
        <name>static port pressure rate computer</name>
        <debug>false</debug>
        <type>derivative</type>
        <input>
            <property>systems/static[0]/pressure-inhg</property>
        </input>
        <output>
            <property>autopilot/internal/pressure-rate</property>
        </output>
        <filter-time>1.0</filter-time>
    </filter>

    <filter>
        <name>pressure-rate-filter</name>
        <debug>false</debug>
        <type>double-exponential</type>
        <input>
            <property>/autopilot/internal/pressure-rate</property>
        </input>
        <output>
            <property>/autopilot/internal/filtered-pressure-rate</property>
        </output>
        <filter-time>0.1</filter-time>
    </filter>

    <filter>
        <name>conversion to fpm</name>
        <debug>false</debug>
        <type>gain</type>
        <input>
            <property>/autopilot/KAP140/settings/target-pressure-rate</property>
        </input>
        <output>
            <property>/autopilot/KAP140/settings/target-pressure-rate-fpm</property>
        </output>
        <gain>-58000</gain>
    </filter>

    <!-- Vertical Speed (VS) Mode -->
    <pid-controller>
        <name>Vertical Speed (VS) Mode</name>
        <debug>false</debug>
        <enable>
            <property>/autopilot/KAP140/locks/pitch-axis</property>
            <value type="bool">true</value>
        </enable>
        <input>
            <property>/autopilot/internal/filtered-pressure-rate</property>
        </input>
        <reference>
            <property>/autopilot/KAP140/settings/target-pressure-rate</property>
        </reference>
        <output>
            <property>/controls/flight/elevator</property>
        </output>
        <config>
            <Kp>5.0</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>4.0</Ti> <!-- integrator time -->
            <Td>0.0</Td> <!-- derivator time -->
            <u_min>-0.5</u_min> <!-- minimum output clamp -->
            <u_max>0.5</u_max> <!-- maximum output clamp -->
        </config>
    </pid-controller>

</PropertyList>