<!--
Joystick binding definitions for "Saitek Cyborg Evo" Joystick.
aitek Cyborg USB Stick
This file borrows heavily from "Cyborg-Gold-3d-USB.xml"

The Saitek Cyborg Evo is designed to be easily switchable between a 
left-handed or right handed person.  With that in mind {^, F1, F2} buttons 
on the left, and {^, F3, F4 } buttons on the right have repeated
functionality as the 'modifier' buttons.

Axis #	(direction)			mapped to
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
axis 0:	(left-right)		aileron
axis 1: (forward-backward)	elevator
axis 2:	(slider)			throttle
axis 3: (twist)				rudder

~~~~ Left Side Modifiers ~~~~
button 10:	"^"				Modifier 1
button 6:	"F1"			Modifier 2
button 7:	"F2"			Modifier 3

~~~~ Right Side Modifiers ~~~~
button 11:	"^"				Modifier 1
button 8:	"F3"			Modifier 2
button 9:	"F4"			Modifier 3

Button #	(location)		No Mod			Mod 1				Mod 2			Mod 3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
button 0:	(trigger)		Brakes			Parking Brake		Speed Brake		Thrust Reverse
button 1:	(middle)		Reset View		Reset All Trim		Cockpit View	Tail Wheel Lock
button 2:	(left)			Flaps Up		Gear Up				Zoom In			#
button 3:	(right)			Flaps Down		Gear Down			Zoom Out		#
button 4:	(left of hat)	Previous View	Trim Rudder			#				#
button 5:	(right of hat)	Next View		Trim Rudder			#				#

axis 4: 	(hat left-right)	look l/r		Trim Aileron		Adj Mixture		#
axis 5: 	(hat up-down)		look u/d		Trim Elevator		Adj Propeller	#

-->

<PropertyList>

<name>Saitek Cyborg USB Stick</name>
<name>Saitek Cyborg Evo</name>
<name>Saitek Cyborg evo Wireless</name>
<name>Saitek Cyborg Evo Force</name>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~ Axis Bindings ~~~~~~~~~~~~~~~~~~~~~~~~ -->

<axis n="0">
	<desc>Aileron</desc>
	<binding>
		<command>property-scale</command>
		<property>/controls/flight/aileron</property>
		<power type="double">2</power>
	</binding>
</axis>

<axis n="1">
	<desc>Elevator</desc>
	<binding>
		<command>property-scale</command>
		<property>/controls/flight/elevator</property>
		<factor type="double">-1.0</factor>
		<power type="double">2</power>
	</binding>
</axis>

<axis>
	<number>
		<mac>3</mac>
		<unix>2</unix>
		<windows>2</windows> 
	</number>
	<desc>Throttle</desc>
	<binding>
		<command>nasal</command>
		<script>controls.throttleAxis()</script>
	</binding>
</axis>

<axis>
	<number>
		<mac>2</mac>
		<unix>3</unix>
		<windows>3</windows>
	</number>
	<desc>Rudder</desc>
	<binding>
		<command>property-scale</command>
		<property>/controls/flight/rudder</property>
		<power type="double">2</power>
	</binding>
</axis>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~ Hat Switch ~~~~~~~~~~~~~~~~~~~~~~~~ -->
<axis>
	<desc>View Direction; Aileron Trim;</desc>
	<number>
		<unix>4</unix>
		<mac>4</mac>
		<windows>6</windows>
	</number>
	<low>
		<repeatable>true</repeatable>
		<binding>
			<command>nasal</command>
			<script>
				mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
				if (mod == nil or mod == 0) {
					v = getprop("/sim/current-view/view-number");
					if (v == 0 or v == 4) {
						view.panViewDir(2);
					} else {
						view.panViewDir(2);
					}
				} elsif (mod == 1) {
					controls.aileronTrim(-0.75);
				} elsif (mod == 2) {
					controls.adjMixture(-2);
				} elsif (mod == 3) {
					#
				}
			</script>
		</binding>
	</low>
	<high>
		<repeatable>true</repeatable>
		<binding>
			<command>nasal</command>
			<script>
				mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
				if (mod == nil or mod == 0) {
					v = getprop("/sim/current-view/view-number");
					if (v == 0 or v == 4) {
						view.panViewDir(-2);
					} else {
						view.panViewDir(-2);
					}
				} elsif (mod == 1) {
					controls.aileronTrim(0.75);
				} elsif (mod == 2) {
					controls.adjMixture(2);
				} elsif (mod == 3) {
					#
				}
			</script>
		</binding>
	</high>
</axis>

<axis>
	<desc>View Elevation; Elevator Trim;</desc>
	<number>
		<unix>5</unix>
		<mac>5</mac>
		<windows>7</windows>
	</number>
	<low>
		<repeatable>true</repeatable>
		<binding>
			<command>nasal</command>
			<script>
				mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
				if (mod == nil or mod == 0) {
					view.panViewPitch(2);
				} elsif (mod == 1) {
					controls.elevatorTrim(0.75);
				} elsif (mod == 2) {
					controls.adjPropeller(1);
				} elsif (mod == 3) {
					#
				}
			</script>
		</binding>
	</low>
	<high>
		<repeatable>true</repeatable>
		<binding>
			<command>nasal</command>
			<script>
				mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
				if (mod == nil or mod == 0) {
					view.panViewPitch(-2);
				} elsif (mod == 1) {
					controls.elevatorTrim(-0.75);
				} elsif (mod == 2) {
					controls.adjPropeller(-1);
				} elsif (mod == 3) {
					#
				}
			</script>
		</binding>
	</high>
</axis>


<!-- ~~~~~~~~~~~~~~~~~~~~~~~~ Button Bindings ~~~~~~~~~~~~~~~~~~~~~~~~ -->
 
<!-- Trigger Button - Brakes, Parking Brake, Thrust Reverser -->
<button n="0">
	<desc>Brakes</desc>
	<repeatable type="bool">true</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
			if (mod == nil or mod == 0) {
				interpolate("/controls/gear/brake-left", 1, 0.075);
				interpolate("/controls/gear/brake-right", 1, 0.075);
			} elsif (mod == 1) {
				setprop("/controls/gear/brake-left", 1);
				setprop("/controls/gear/brake-right", 1);
			} elsif (mod == 2) {
				#
			} elsif (mod == 3) {
				#
			}
		</script>
	</binding>
	<mod-up>
	<repeatable type="bool">true</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
			if (mod == nil or mod == 0) {
				interpolate("/controls/gear/brake-left", 0, 0.075);
				interpolate("/controls/gear/brake-right", 0, 0.075);
			} elsif (mod == 1) {
				brake = !getprop("/controls/gear/brake-parking");
				setprop("/controls/gear/brake-parking", brake);
				if (brake) {
					gui.popupTip("Parking Brake ON");
				} else {
					gui.popupTip("Parking Brake OFF");
				}
				setprop("/controls/gear/brake-left", 0);
				setprop("/controls/gear/brake-right", 0);
			} elsif (mod == 2) {
				speedbrake = !getprop("/controls/flight/speedbrake");
				setprop("/controls/flight/speedbrake", speedbrake);
			} elsif (mod == 3) {
				reverser = !getprop("/controls/engines/engine[0]/reverser");
				props.setAll("/controls/engines/engine", "reverser", reverser);
				if (reverser) {
					gui.popupTip("Thrust Reverser ON");
				} else {
					gui.popupTip("Thrust Reverser OFF");
				}
			}
		</script>
	</binding>
	</mod-up>
</button>

<!-- Middle Button below Hat-switch, labeled "2" -->
<button>
	<desc>Reset view; toggle tail-wheel lock; reset trim</desc>
	<number>
		<unix>1</unix>
		<mac>1</mac>
		<windows>1</windows>
	</number>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
			if (mod == nil or mod == 0) {
				view.resetView();
			} elsif (mod == 1) {
				setprop("/controls/flight/elevator-trim", 0);
				setprop("/controls/flight/aileron-trim", 0);
				setprop("/controls/flight/rudder-trim", 0);
			} elsif (mod == 2) {
				setprop("/sim/current-view/view-number", 0);
				view.resetView();
			} elsif (mod == 3) {
				twlock = !getprop("/controls/gear/tailwheel-lock");
				setprop("/controls/gear/tailwheel-lock", twlock);
				if (twlock) {
					gui.popupTip("Tail Wheel LOCKED");
				} else {
					gui.popupTip("Tail Wheel UNLOCKED");
				}
			}
		</script>
	</binding>
</button>

<!-- Left Button below Hat-switch, labeled "3" -->
<button n="2">
	<desc>Flaps Up; Gear up</desc>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
			if (mod == nil or mod == 0) {
				controls.flapsDown(-1);
			} elsif (mod == 1) {
				controls.gearDown(-1);
			} elsif (mod == 2) {
				view.increase();
			} elsif (mod == 3) {
				#
			}
		</script>
	</binding>
	<mod-up>
		<binding>
			<command>nasal</command>
			<script>
				mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
				if (mod == nil or mod == 0) {
					controls.flapsDown(0);
				} elsif (mod == 1) {
					controls.gearDown(0);
				} elsif (mod == 2) {
					#
				} elsif (mod == 3) {
					#
				}
			</script>
		</binding>
	</mod-up>
</button>

<!-- Right Button below Hat-switch, labeled "4" -->
<button n="3"><!-- right -->
	<desc>Flaps Down; Gear down</desc>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
			if (mod == nil or mod == 0) {
				controls.flapsDown(1);
			} elsif (mod == 1) {
				controls.gearDown(1);
			} elsif (mod == 2) {
				view.decrease();
			} elsif (mod == 3) {
				#
			}
		</script>
	</binding>
	<mod-up>
		<binding>
			<command>nasal</command>
			<script>
				mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
				if (mod == nil or mod == 0) {
					controls.flapsDown(0);
				} elsif (mod == 1) {
					controls.gearDown(0);
				} elsif (mod == 2) {
					#
				} elsif (mod == 3) {
					#
				}
			</script>
		</binding>
	</mod-up>
</button>

<!-- Button left of Hat switch, Labeled '5' -->
<button n="4">
	<desc>Previous View</desc>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
			if (mod == nil or mod == 0) {
				view.stepView(-1);
			} elsif (mod == 1) {
				controls.rudderTrim(-0.75);
			} elsif (mod == 2) {
				#
			} elsif (mod == 3) {
				#
			}
		</script>
	</binding>
</button>

<!-- Button right of Hat switch, Labeled '6' -->
<button n="5">
	<desc>Next View</desc>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			mod = getprop("/input/joysticks/js[0]/saitek-cyborg-evo-modifier");
			if (mod == nil or mod == 0) {
				view.stepView(1);
			} elsif (mod == 1) {
				controls.rudderTrim(0.75);
			} elsif (mod == 2) {
				#
			} elsif (mod == 3) {
				#
			}
		</script>
	</binding>
</button>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~ Modifier Buttons ~~~~~~~~~~~~~~~~~~~~~~~~ -->

<!-- Left Side Button labeled ^ -->
<button n="10">
	<desc>Modifier 1</desc>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
			<script>
				name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
				setprop(name, 1);
			</script>
	</binding>
	<mod-up>
		<binding>
			<command>nasal</command>
			<script>
				name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
				setprop(name, 0);
			</script>
		</binding>
	</mod-up>
</button>

<!-- Left Side Button labeled F1 -->
<button n="6">
	<desc>Modifier 2</desc>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
			setprop(name, 2);
		</script>
	</binding>
	<mod-up>
		<binding>
			<command>nasal</command>
			<script>
				name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
				setprop(name, 0);
			</script>
		</binding>
	</mod-up>
</button>

<!-- Left Side Button labeled F2 -->
<button n="7">
	<desc>Modifier 3</desc>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
			setprop(name, 3);
		</script>
	</binding>
	<mod-up>
		<binding>
			<command>nasal</command>
			<script>
				name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
				setprop(name, 0);
			</script>
		</binding>
	</mod-up>
</button>

<!-- Right Side Button labeled ^ -->
<button n="11">
	<desc>Modifier 1</desc>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
			<script>
				name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
				setprop(name, 1);
			</script>
	</binding>
	<mod-up>
		<binding>
			<command>nasal</command>
			<script>
				name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
				setprop(name, 0);
			</script>
		</binding>
	</mod-up>
</button>

<!-- Right Side Button labeled F3 -->
<button n="8">
	<desc>Modifier 2</desc>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
			setprop(name, 2);
		</script>
	</binding>
	<mod-up>
		<binding>
			<command>nasal</command>
			<script>
				name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
				setprop(name, 0);
			</script>
		</binding>
	</mod-up>
</button>

<!-- Right Side Button labeled F4 -->
<button n="9">
	<desc>Modifier 3</desc>
	<repeatable type="bool">false</repeatable>
	<binding>
		<command>nasal</command>
		<script>
			name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
			setprop(name, 3);
		</script>
	</binding>
	<mod-up>
		<binding>
			<command>nasal</command>
			<script>
				name = "/input/joysticks/js[0]/saitek-cyborg-evo-modifier";
				setprop(name, 0);
			</script>
		</binding>
	</mod-up>
</button>

</PropertyList>