<!-- Airbus A320 FCS -->

<!-- Copyright (c) 2019 Joshua Davidson (Octal450) -->

<system name="A320: Spoilers">
	
	<property value="0">hydraulics/spoiler-l2/main-cmd-feedback</property>
	
	<channel name="Spoiler Logic">
		
		<switch name="spoilers/main-gear-or">
			<default value="0"/>
			<test logic="OR" value="1">
				gear/unit[1]/WOW eq 1
				gear/unit[2]/WOW eq 1
			</test>
		</switch>
		
		<switch name="spoilers/main-gear-and">
			<default value="0"/>
			<test logic="AND" value="1">
				gear/unit[1]/WOW eq 1
				gear/unit[2]/WOW eq 1
			</test>
		</switch>
		
		<switch name="spoilers/throttle[0]">
			<default value="/controls/engines/engine[0]/throttle"/>
			<test logic="OR" value="0">
				/controls/engines/engine[0]/reverser eq 1
			</test>
		</switch>
		
		<switch name="spoilers/throttle[1]">
			<default value="/controls/engines/engine[1]/throttle"/>
			<test logic="OR" value="0">
				/controls/engines/engine[1]/reverser eq 1
			</test>
		</switch>
		
		<switch name="spoilers/auto-speedbrake-cmd">
			<default value="spoilers/auto-speedbrake-cmd"/>
			<test logic="OR" value="0"> <!-- Reset -->
				spoilers/throttle[0] ge 0.01
				spoilers/throttle[1] ge 0.01
				/controls/flight/speedbrake-arm ne 1
			</test>
			<test logic="AND" value="1"> <!-- EXT Set -->
				spoilers/throttle[0] lt 0.01
				spoilers/throttle[1] lt 0.01
				/controls/flight/speedbrake-arm eq 1
				spoilers/main-gear-and eq 1
				/velocities/groundspeed-kt ge 72
			</test>
			<test logic="AND" value="0.25"> <!-- PLD Set -->
				spoilers/throttle[0] lt 0.01
				spoilers/throttle[1] lt 0.01
				/controls/flight/speedbrake-arm eq 1
				spoilers/main-gear-or eq 1
				/velocities/groundspeed-kt ge 72
			</test>
		</switch>
		
		<switch name="spoilers/max-spoiler">
			<default value="1.0"/>
			<test logic="AND" value="0.5">
				spoilers/main-gear-or eq 0
				fbw/fmgc/enabled eq 1
			</test>
		</switch>
		
		<fcs_function name="spoilers/speedbrake-nul">
			<function>
				<table>
					<independentVar lookup="row">/controls/flight/speedbrake</independentVar>
					<tableData>
						0.10  0.0
						0.45  0.5
						0.55  0.5
						0.95  1.0
					</tableData>
				</table>
			</function>
		</fcs_function>
		
		<lag_filter name="spoilers/main-lever">
			<input>spoilers/speedbrake-nul</input>
			<c1>20</c1>
		</lag_filter>
		
		<summer name="spoilers/main-cmd">
			<input>spoilers/speedbrake-nul</input>
			<input>spoilers/auto-speedbrake-cmd</input>
			<clipto>
				<min>0.0</min>
				<max>spoilers/max-spoiler</max>
			</clipto>
			<output>fbw/spoiler-output</output>
		</summer>
		
		<lag_filter name="spoilers/lever-arm">
			<input>/controls/flight/speedbrake-arm</input>
			<c1>20</c1>
		</lag_filter>
	
	</channel>
	
	<channel name="Spoiler L1">
		
		<switch name="hydraulics/spoiler-l1/switch">
			<default value="0"/>
			<test logic="AND" value="spoilers/main-cmd">
				/systems/hydraulic/green-psi ge 1500
				spoilers/main-gear-and eq 1
				/systems/failures/spoiler-l1 eq 0
			</test>
			<clipto>
				<min>0.0</min>
				<max>1.0</max>
			</clipto>
		</switch>
		
		<pure_gain name="hydraulics/spoiler-l1/cmd-deg">
			<input>hydraulics/spoiler-l1/switch</input>
			<gain>40.0</gain>
		</pure_gain>
		
		<actuator name="hydraulics/spoiler-l1/final-actuator">
			<input>hydraulics/spoiler-l1/cmd-deg</input>
			<rate_limit>35</rate_limit>
			<lag>26.5</lag>
			<output>hydraulics/spoiler-l1/final-deg</output>
		</actuator>
	
	</channel>
	
	<channel name="Spoiler L2">
		
		<switch name="hydraulics/spoiler-l2/main-cmd-rate">
			<default value="0.72"/>
			<test value="0.9">
				spoilers/main-gear-and eq 1
			</test>
		</switch>
		
		<actuator name="hydraulics/spoiler-l2/main-cmd">
			<input>spoilers/main-cmd</input>
			<rate_limit>hydraulics/spoiler-l2/main-cmd-rate</rate_limit>
			<output>hydraulics/spoiler-l2/main-cmd-feedback</output>
		</actuator>
		
		<fcs_function name="hydraulics/spoiler-l2/air-extended">
			<function>
				<sum>
					<product>
						<property>hydraulics/spoiler-l2/main-cmd</property>
						<value>0.5</value>
					</product>
					<table>
						<independentVar lookup="row">fbw/roll/s-l</independentVar>
						<tableData>
							0.0  0.0
							1.0 -0.4
						</tableData>
					</table>
				</sum>
			</function>
		</fcs_function>
		
		<fcs_function name="hydraulics/spoiler-l2/ground-extended">
			<function>
				<sum>
					<property>spoilers/main-cmd</property>
					<table>
						<independentVar lookup="row">fbw/roll/s-l</independentVar>
						<tableData>
							0.0  0.0
							1.0 -0.5
						</tableData>
					</table>
				</sum>
			</function>
		</fcs_function>
		
		<fcs_function name="hydraulics/spoiler-l2/retracted">
			<function>
				<table>
					<independentVar lookup="row">fbw/roll/s-l</independentVar>
					<tableData>
						-1.0  0.5
						 0.0  0.0
					</tableData>
				</table>
			</function>
		</fcs_function>
		
		<switch name="hydraulics/spoiler-l2/switch">
			<default value="0"/>
			<test logic="AND" value="hydraulics/spoiler-l2/air-extended">
				/systems/hydraulic/yellow-psi ge 1500
				spoilers/main-gear-and eq 0
				/systems/failures/spoiler-l2 eq 0
				spoilers/main-cmd gt 0
			</test>
			<test logic="AND" value="hydraulics/spoiler-l2/ground-extended">
				/systems/hydraulic/yellow-psi ge 1500
				spoilers/main-gear-and eq 1
				/systems/failures/spoiler-l2 eq 0
				spoilers/main-cmd gt 0
			</test>
			<test logic="AND" value="hydraulics/spoiler-l2/retracted">
				/systems/hydraulic/yellow-psi ge 1500
				/systems/failures/spoiler-l2 eq 0
				spoilers/main-cmd eq 0
			</test>
			<clipto>
				<min>0.0</min>
				<max>1.0</max>
			</clipto>
		</switch>
		
		<pure_gain name="hydraulics/spoiler-l2/cmd-deg">
			<input>hydraulics/spoiler-l2/switch</input>
			<gain>40.0</gain>
		</pure_gain>
		
		<actuator name="hydraulics/spoiler-l2/final-actuator">
			<input>hydraulics/spoiler-l2/cmd-deg</input>
			<rate_limit>35</rate_limit>
			<lag>26.5</lag>
			<output>hydraulics/spoiler-l2/final-deg</output>
		</actuator>
	
	</channel>
	
	<channel name="Spoiler L3">
		
		<fcs_function name="hydraulics/spoiler-l3/extended">
			<function>
				<sum>
					<property>spoilers/main-cmd</property>
					<table>
						<independentVar lookup="row">fbw/roll/s-l</independentVar>
						<tableData>
							0.0  0.0
							1.0 -0.5
						</tableData>
					</table>
				</sum>
			</function>
		</fcs_function>
		
		<fcs_function name="hydraulics/spoiler-l3/retracted">
			<function>
				<table>
					<independentVar lookup="row">fbw/roll/s-l</independentVar>
					<tableData>
						-1.0  0.5
						 0.0  0.0
					</tableData>
				</table>
			</function>
		</fcs_function>
		
		<switch name="hydraulics/spoiler-l3/switch">
			<default value="0"/>
			<test logic="AND" value="hydraulics/spoiler-l3/extended">
				/systems/hydraulic/blue-psi ge 1500
				/systems/failures/spoiler-l3 eq 0
				spoilers/main-cmd gt 0
			</test>
			<test logic="AND" value="hydraulics/spoiler-l3/retracted">
				/systems/hydraulic/blue-psi ge 1500
				/systems/failures/spoiler-l3 eq 0
				spoilers/main-cmd eq 0
			</test>
			<clipto>
				<min>0.0</min>
				<max>1.0</max>
			</clipto>
		</switch>
		
		<pure_gain name="hydraulics/spoiler-l3/cmd-deg">
			<input>hydraulics/spoiler-l3/switch</input>
			<gain>40.0</gain>
		</pure_gain>
		
		<actuator name="hydraulics/spoiler-l3/final-actuator">
			<input>hydraulics/spoiler-l3/cmd-deg</input>
			<rate_limit>35</rate_limit>
			<lag>26.5</lag>
			<output>hydraulics/spoiler-l3/final-deg</output>
		</actuator>
	
	</channel>
	
	<channel name="Spoiler L4">
		
		<fcs_function name="hydraulics/spoiler-l4/extended">
			<function>
				<sum>
					<property>spoilers/main-cmd</property>
					<table>
						<independentVar lookup="row">fbw/roll/s-l</independentVar>
						<tableData>
							0.0  0.0
							1.0 -0.5
						</tableData>
					</table>
				</sum>
			</function>
		</fcs_function>
		
		<fcs_function name="hydraulics/spoiler-l4/retracted">
			<function>
				<table>
					<independentVar lookup="row">fbw/roll/s-l</independentVar>
					<tableData>
						-1.0  0.5
						 0.0  0.0
					</tableData>
				</table>
			</function>
		</fcs_function>
		
		<switch name="hydraulics/spoiler-l4/switch">
			<default value="0"/>
			<test logic="AND" value="hydraulics/spoiler-l4/extended">
				/systems/hydraulic/yellow-psi ge 1500
				/systems/failures/spoiler-l4 eq 0
				spoilers/main-cmd gt 0
			</test>
			<test logic="AND" value="hydraulics/spoiler-l4/retracted">
				/systems/hydraulic/yellow-psi ge 1500
				/systems/failures/spoiler-l4 eq 0
				spoilers/main-cmd eq 0
			</test>
			<clipto>
				<min>0.0</min>
				<max>1.0</max>
			</clipto>
		</switch>
		
		<pure_gain name="hydraulics/spoiler-l4/cmd-deg">
			<input>hydraulics/spoiler-l4/switch</input>
			<gain>40.0</gain>
		</pure_gain>
		
		<actuator name="hydraulics/spoiler-l4/final-actuator">
			<input>hydraulics/spoiler-l4/cmd-deg</input>
			<rate_limit>35</rate_limit>
			<lag>26.5</lag>
			<output>hydraulics/spoiler-l4/final-deg</output>
		</actuator>
	
	</channel>
	
	<channel name="Spoiler L5">
		
		<fcs_function name="hydraulics/spoiler-l5/ground-extended">
			<function>
				<sum>
					<property>spoilers/main-cmd</property>
					<table>
						<independentVar lookup="row">fbw/roll/s-l</independentVar>
						<tableData>
							0.0  0.0
							1.0 -0.5
						</tableData>
					</table>
				</sum>
			</function>
		</fcs_function>
		
		<fcs_function name="hydraulics/spoiler-l5/retracted">
			<function>
				<table>
					<independentVar lookup="row">fbw/roll/s-l</independentVar>
					<tableData>
						-1.0  0.5
						 0.0  0.0
					</tableData>
				</table>
			</function>
		</fcs_function>
		
		<switch name="hydraulics/spoiler-l5/switch">
			<default value="0"/>
			<test logic="AND" value="hydraulics/spoiler-l5/ground-extended">
				/systems/hydraulic/green-psi ge 1500
				spoilers/main-gear-and eq 1
				/systems/failures/spoiler-l5 eq 0
				spoilers/main-cmd gt 0
			</test>
			<test logic="AND" value="hydraulics/spoiler-l5/retracted">
				/systems/hydraulic/green-psi ge 1500
				/systems/failures/spoiler-l5 eq 0
				spoilers/main-cmd eq 0
			</test>
			<clipto>
				<min>0.0</min>
				<max>1.0</max>
			</clipto>
		</switch>
		
		<pure_gain name="hydraulics/spoiler-l5/cmd-deg">
			<input>hydraulics/spoiler-l5/switch</input>
			<gain>40.0</gain>
		</pure_gain>
		
		<actuator name="hydraulics/spoiler-l5/final-actuator">
			<input>hydraulics/spoiler-l5/cmd-deg</input>
			<rate_limit>35</rate_limit>
			<lag>26.5</lag>
			<output>hydraulics/spoiler-l5/final-deg</output>
		</actuator>
	
	</channel>
	
	<channel name="Spoiler R1">
		
		<switch name="hydraulics/spoiler-r1/switch">
			<default value="0"/>
			<test logic="AND" value="spoilers/main-cmd">
				/systems/hydraulic/green-psi ge 1500
				spoilers/main-gear-and eq 1
				/systems/failures/spoiler-r1 eq 0
			</test>
			<clipto>
				<min>0.0</min>
				<max>1.0</max>
			</clipto>
		</switch>
		
		<pure_gain name="hydraulics/spoiler-r1/cmd-deg">
			<input>hydraulics/spoiler-r1/switch</input>
			<gain>40.0</gain>
		</pure_gain>
		
		<actuator name="hydraulics/spoiler-r1/final-actuator">
			<input>hydraulics/spoiler-r1/cmd-deg</input>
			<rate_limit>35</rate_limit>
			<lag>26.5</lag>
			<output>hydraulics/spoiler-r1/final-deg</output>
		</actuator>
	
	</channel>
	
	<channel name="Spoiler R2">
		
		<switch name="hydraulics/spoiler-r2/main-cmd-rate">
			<default value="0.72"/>
			<test value="0.9">
				spoilers/main-gear-and eq 1
			</test>
		</switch>
		
		<actuator name="hydraulics/spoiler-r2/main-cmd">
			<input>spoilers/main-cmd</input>
			<rate_limit>hydraulics/spoiler-r2/main-cmd-rate</rate_limit>
			<output>hydraulics/spoiler-r2/main-cmd-feedback</output>
		</actuator>
		
		<fcs_function name="hydraulics/spoiler-r2/air-extended">
			<function>
				<sum>
					<product>
						<property>hydraulics/spoiler-r2/main-cmd</property>
						<value>0.5</value>
					</product>
					<table>
						<independentVar lookup="row">fbw/roll/s-l</independentVar>
						<tableData>
							-1.0 -0.4
							 0.0  0.0
						</tableData>
					</table>
				</sum>
			</function>
		</fcs_function>
		
		<fcs_function name="hydraulics/spoiler-r2/ground-extended">
			<function>
				<sum>
					<property>spoilers/main-cmd</property>
					<table>
						<independentVar lookup="row">fbw/roll/s-l</independentVar>
						<tableData>
							-1.0 -0.5
							 0.0  0.0
						</tableData>
					</table>
				</sum>
			</function>
		</fcs_function>
		
		<fcs_function name="hydraulics/spoiler-r2/retracted">
			<function>
				<table>
					<independentVar lookup="row">fbw/roll/s-l</independentVar>
					<tableData>
						0.0  0.0
						1.0  0.5
					</tableData>
				</table>
			</function>
		</fcs_function>
		
		<switch name="hydraulics/spoiler-r2/switch">
			<default value="0"/>
			<test logic="AND" value="hydraulics/spoiler-r2/air-extended">
				/systems/hydraulic/yellow-psi ge 1500
				spoilers/main-gear-and eq 0
				/systems/failures/spoiler-r2 eq 0
				spoilers/main-cmd gt 0
			</test>
			<test logic="AND" value="hydraulics/spoiler-r2/ground-extended">
				/systems/hydraulic/yellow-psi ge 1500
				spoilers/main-gear-and eq 1
				/systems/failures/spoiler-r2 eq 0
				spoilers/main-cmd gt 0
			</test>
			<test logic="AND" value="hydraulics/spoiler-r2/retracted">
				/systems/hydraulic/yellow-psi ge 1500
				/systems/failures/spoiler-r2 eq 0
				spoilers/main-cmd eq 0
			</test>
			<clipto>
				<min>0.0</min>
				<max>1.0</max>
			</clipto>
		</switch>
		
		<pure_gain name="hydraulics/spoiler-r2/cmd-deg">
			<input>hydraulics/spoiler-r2/switch</input>
			<gain>40.0</gain>
		</pure_gain>
		
		<actuator name="hydraulics/spoiler-r2/final-actuator">
			<input>hydraulics/spoiler-r2/cmd-deg</input>
			<rate_limit>35</rate_limit>
			<lag>26.5</lag>
			<output>hydraulics/spoiler-r2/final-deg</output>
		</actuator>
	
	</channel>
	
	<channel name="Spoiler R3">
		
		<fcs_function name="hydraulics/spoiler-r3/extended">
			<function>
				<sum>
					<property>spoilers/main-cmd</property>
					<table>
						<independentVar lookup="row">fbw/roll/s-l</independentVar>
						<tableData>
							-1.0 -0.5
							 0.0  0.0
						</tableData>
					</table>
				</sum>
			</function>
		</fcs_function>
		
		<fcs_function name="hydraulics/spoiler-r3/retracted">
			<function>
				<table>
					<independentVar lookup="row">fbw/roll/s-l</independentVar>
					<tableData>
						0.0  0.0
						1.0  0.5
					</tableData>
				</table>
			</function>
		</fcs_function>
		
		<switch name="hydraulics/spoiler-r3/switch">
			<default value="0"/>
			<test logic="AND" value="hydraulics/spoiler-r3/extended">
				/systems/hydraulic/blue-psi ge 1500
				/systems/failures/spoiler-r3 eq 0
				spoilers/main-cmd gt 0
			</test>
			<test logic="AND" value="hydraulics/spoiler-r3/retracted">
				/systems/hydraulic/blue-psi ge 1500
				/systems/failures/spoiler-r3 eq 0
				spoilers/main-cmd eq 0
			</test>
			<clipto>
				<min>0.0</min>
				<max>1.0</max>
			</clipto>
		</switch>
		
		<pure_gain name="hydraulics/spoiler-r3/cmd-deg">
			<input>hydraulics/spoiler-r3/switch</input>
			<gain>40.0</gain>
		</pure_gain>
		
		<actuator name="hydraulics/spoiler-r3/final-actuator">
			<input>hydraulics/spoiler-r3/cmd-deg</input>
			<rate_limit>35</rate_limit>
			<lag>26.5</lag>
			<output>hydraulics/spoiler-r3/final-deg</output>
		</actuator>
	
	</channel>
	
	<channel name="Spoiler R4">
		
		<fcs_function name="hydraulics/spoiler-r4/extended">
			<function>
				<sum>
					<property>spoilers/main-cmd</property>
					<table>
						<independentVar lookup="row">fbw/roll/s-l</independentVar>
						<tableData>
							-1.0 -0.5
							 0.0  0.0
						</tableData>
					</table>
				</sum>
			</function>
		</fcs_function>
		
		<fcs_function name="hydraulics/spoiler-r4/retracted">
			<function>
				<table>
					<independentVar lookup="row">fbw/roll/s-l</independentVar>
					<tableData>
						0.0  0.0
						1.0  0.5
					</tableData>
				</table>
			</function>
		</fcs_function>
		
		<switch name="hydraulics/spoiler-r4/switch">
			<default value="0"/>
			<test logic="AND" value="hydraulics/spoiler-r4/extended">
				/systems/hydraulic/yellow-psi ge 1500
				/systems/failures/spoiler-r4 eq 0
				spoilers/main-cmd gt 0
			</test>
			<test logic="AND" value="hydraulics/spoiler-r4/retracted">
				/systems/hydraulic/yellow-psi ge 1500
				/systems/failures/spoiler-r4 eq 0
				spoilers/main-cmd eq 0
			</test>
			<clipto>
				<min>0.0</min>
				<max>1.0</max>
			</clipto>
		</switch>
		
		<pure_gain name="hydraulics/spoiler-r4/cmd-deg">
			<input>hydraulics/spoiler-r4/switch</input>
			<gain>40.0</gain>
		</pure_gain>
		
		<actuator name="hydraulics/spoiler-r4/final-actuator">
			<input>hydraulics/spoiler-r4/cmd-deg</input>
			<rate_limit>35</rate_limit>
			<lag>26.5</lag>
			<output>hydraulics/spoiler-r4/final-deg</output>
		</actuator>
	
	</channel>
	
	<channel name="Spoiler R5">
		
		<fcs_function name="hydraulics/spoiler-r5/ground-extended">
			<function>
				<sum>
					<property>spoilers/main-cmd</property>
					<table>
						<independentVar lookup="row">fbw/roll/s-l</independentVar>
						<tableData>
							-1.0 -0.5
							 0.0  0.0
						</tableData>
					</table>
				</sum>
			</function>
		</fcs_function>
		
		<fcs_function name="hydraulics/spoiler-r5/retracted">
			<function>
				<table>
					<independentVar lookup="row">fbw/roll/s-l</independentVar>
					<tableData>
						0.0  0.0
						1.0  0.5
					</tableData>
				</table>
			</function>
		</fcs_function>
		
		<switch name="hydraulics/spoiler-r5/switch">
			<default value="0"/>
			<test logic="AND" value="hydraulics/spoiler-r5/ground-extended">
				/systems/hydraulic/green-psi ge 1500
				spoilers/main-gear-and eq 1
				/systems/failures/spoiler-r5 eq 0
				spoilers/main-cmd gt 0
			</test>
			<test logic="AND" value="hydraulics/spoiler-r5/retracted">
				/systems/hydraulic/green-psi ge 1500
				/systems/failures/spoiler-r5 eq 0
				spoilers/main-cmd eq 0
			</test>
			<clipto>
				<min>0.0</min>
				<max>1.0</max>
			</clipto>
		</switch>
		
		<pure_gain name="hydraulics/spoiler-r5/cmd-deg">
			<input>hydraulics/spoiler-r5/switch</input>
			<gain>40.0</gain>
		</pure_gain>
		
		<actuator name="hydraulics/spoiler-r5/final-actuator">
			<input>hydraulics/spoiler-r5/cmd-deg</input>
			<rate_limit>35</rate_limit>
			<lag>26.5</lag>
			<output>hydraulics/spoiler-r5/final-deg</output>
		</actuator>
	
	</channel>
	
	<channel name="Output">
		
		<summer name="fcs/spoiler-left-sum">
			<input>hydraulics/spoiler-l1/final-actuator</input>
			<input>hydraulics/spoiler-l2/final-actuator</input>
			<input>hydraulics/spoiler-l3/final-actuator</input>
			<input>hydraulics/spoiler-l4/final-actuator</input>
			<input>hydraulics/spoiler-l5/final-actuator</input>
		</summer>
		
		<fcs_function name="fcs/spoiler-left-deg">
			<function>
				<quotient>
					<property>fcs/spoiler-left-sum</property>
					<value>5</value>
				</quotient>
			</function>
		</fcs_function>
		
		<summer name="fcs/spoiler-right-sum">
			<input>hydraulics/spoiler-r1/final-actuator</input>
			<input>hydraulics/spoiler-r2/final-actuator</input>
			<input>hydraulics/spoiler-r3/final-actuator</input>
			<input>hydraulics/spoiler-r4/final-actuator</input>
			<input>hydraulics/spoiler-r5/final-actuator</input>
		</summer>
		
		<fcs_function name="fcs/spoiler-right-deg">
			<function>
				<quotient>
					<property>fcs/spoiler-right-sum</property>
					<value>5</value>
				</quotient>
			</function>
		</fcs_function>
	
	</channel>

</system>