diff --git a/Input/Joysticks/Saitek/Cyborg-X.xml b/Input/Joysticks/Saitek/Cyborg-X.xml new file mode 100644 index 000000000..25abfeaad --- /dev/null +++ b/Input/Joysticks/Saitek/Cyborg-X.xml @@ -0,0 +1,559 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Joystick binding definitions for "Saitek Cyborg X" and "Saitek F.L.Y. 5" Joysticks. +This file was modified from the "Cyborg-Gold-3d-USB.xml" file that is distributed with FlightGear v2.60 + +Modified By Andy Wagner(e-Tron on FlightGear forum) + + + + +Axis # (direction) mapped to +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +axis 0:(left-right) aileron +axis 1:(forward-backward) elevator +axis 2:(slider) throttle +axis 3:(twist) rudder + + + + + +~~~~ Modifiers ~~~~ +button 9:(Button 10) "^" Modifier 1 +button 10:(Button 11) "F3" Modifier 2 +button 13:(Shift state) "F4" Modifier 3 + + + + +Button #(location) No Mod Mod 1 Mod 2 Mod 3 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +button 0:(trigger) Brakes Parking Brake SpeedBrake Thrust Reverse +button 1:(Button 2) Flaps Up Gear Up # # +button 2:(Button 3) Flaps Down Gear Down # # +button 3:(Button 4) Previous View Trim Rudder # # +button 4:(Button 5) Next View Trim Rudder # # +button 5:(Button 6) Reset View Reset All Trim Cockpit View Tail Wheel Lock +button 6:(Button 7) Pause # # # +button 7:(Button 8) # # # # +button 8:(Button 9) # # # # +button 11:(scroll wheel up) Zoom In # # # +button 12:(scroll wheel dwn) Zoom Out # # # + +axis 5: (hat left-right) look l/r Trim Aileron Adj Mixture # +axis 6: (hat up-down) look u/d Trim Elevator Adj Propeller # + +--> + + +<PropertyList> + + +<name>Saitek Cyborg X</name> +<name>Cyborg X</name> +<name>F.L.Y 5</name> +<name>FLY 5</name> +<name>FLY5</name> +<name>Saitek FLY5</name> +<name>Saitek F.L.Y. 5</name> +<name>Saitek FLY 5</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>5</unix> + <mac>5</mac> + <windows>5</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>6</unix> + <mac>6</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) { + 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> + + + +<!-- Left Button below Hat-switch, labeled "2" --> +<button n="1"> + <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) { + # + } 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 "3" --> +<button n="2"> + <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) { + # + } 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 '4' --> +<button n="3"> + <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 '5' --> +<button n="4"> + <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> + +<!-- Button labeled "6" --> +<button> + <desc>Reset view; toggle tail-wheel lock; reset trim</desc> + <number> + <unix>5</unix> + <mac>5</mac> + <windows>5</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> + +<!-- Button labeled "7" --> +<button n="6"> + <desc>Toggle the pause state of the sim</desc> + <number> + <unix>6</unix> + <mac>6</mac> + <windows>6</windows> + </number> + <binding> + <command>property-toggle</command> + <property>/sim/freeze/master</property> + </binding> + <binding> + <command>property-toggle</command> + <property>/sim/freeze/clock</property> + </binding> + <binding> + <condition> + <property>/sim/freeze/replay-state</property> + </condition> + <command>property-assign</command> + <property>/sim/freeze/replay-state</property> + <value type="int">0</value> + </binding> +</button> +<!-- Scroll wheel down --> +<button n="12"> + <desc>Zoom 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.increase(); + } elsif (mod == 1) { + # + } elsif (mod == 2) { + # + } elsif (mod == 3) { + # + } + </script> + </binding> +</button> + +<!-- Scroll wheel up --> +<button n="11"> + <desc>Zoom 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.decrease(); + } elsif (mod == 1) { + # + } elsif (mod == 2) { + # + } elsif (mod == 3) { + # + } + </script> + </binding> +</button><!-- ~~~~~~~~~~~~~~~~~~~~~~~~ Modifier Buttons ~~~~~~~~~~~~~~~~~~~~~~~~ --> + +<!-- Button labeled '10' --> +<button n="9"> + <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> + +<!-- Button labeled '11' --> +<button n="10"> + <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> + +<!-- Button labeled 0/O (Shift State Button) --> +<button n="13"> + <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>