<!-- 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>