|
From: Melchior F. <mf...@fl...> - 2006-05-08 17:46:19
|
Update of /var/cvs/FlightGear-0.9/data/Input/Joysticks/Microsoft In directory baron:/tmp/cvs-serv3843 Modified Files: sidewinder-force-feed2.xml Log Message: Dave Perry: rewrite inspired by the Cyborg-Gold-3d-USB.xml driver Index: sidewinder-force-feed2.xml =================================================================== RCS file: /var/cvs/FlightGear-0.9/data/Input/Joysticks/Microsoft/sidewinder-force-feed2.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** sidewinder-force-feed2.xml 1 Mar 2006 18:17:26 -0000 1.2 --- sidewinder-force-feed2.xml 8 May 2006 10:13:29 -0000 1.3 *************** *** 1,200 **** ! <?xml version="1.0" ?> <PropertyList> - <name>Microsoft SideWinder Force Feedback 2</name> ! <axis n="0"> ! <desc>Aileron</desc> ! <binding> ! <command>property-scale</command> ! <property>/controls/flight/aileron</property> ! <squared type="bool">true</squared> ! </binding> ! </axis> ! ! <axis n="1"> ! <desc>Elevator</desc> ! <binding> ! <command>property-scale</command> ! <property>/controls/flight/elevator</property> ! <factor type="double">-1.0</factor> ! <squared type="bool">true</squared> ! </binding> ! </axis> ! ! <axis n="3"> ! <desc>Rudder</desc> ! <binding> ! <command>property-scale</command> ! <property>/controls/flight/rudder</property> ! <factor type="double">1.0</factor> ! </binding> ! </axis> ! ! <axis n="2"> ! <desc>Throttle</desc> ! <binding> ! <command>property-scale</command> ! <property>/controls/engines/engine[0]/throttle</property> ! <offset type="double">-1.0</offset> ! <factor type="double">-0.5</factor> ! </binding> ! <binding> ! <command>property-scale</command> ! <property>/controls/engines/engine[1]/throttle</property> ! <offset type="double">-1.0</offset> ! <factor type="double">-0.5</factor> ! </binding> ! <binding> ! <command>property-scale</command> ! <property>/controls/engines/engine[2]/throttle</property> ! <offset type="double">-1.0</offset> ! <factor type="double">-0.5</factor> ! </binding> ! <binding> ! <command>property-scale</command> ! <property>/controls/engines/engine[3]/throttle</property> ! <offset type="double">-1.0</offset> ! <factor type="double">-0.5</factor> ! </binding> ! <binding> ! <command>property-scale</command> ! <property>/controls/engines/engine[4]/throttle</property> ! <offset type="double">-1.0</offset> ! <factor type="double">-0.5</factor> ! </binding> ! <binding> ! <command>property-scale</command> ! <property>/controls/engines/engine[5]/throttle</property> ! <offset type="double">-1.0</offset> ! <factor type="double">-0.5</factor> ! </binding> ! <binding> ! <command>property-scale</command> ! <property>/controls/engines/engine[6]/throttle</property> ! <offset type="double">-1.0</offset> ! <factor type="double">-0.5</factor> ! </binding> ! <binding> ! <command>property-scale</command> ! <property>/controls/engines/engine[7]/throttle</property> ! <offset type="double">-1.0</offset> ! <factor type="double">-0.5</factor> ! </binding> ! </axis> ! ! <axis n="6"> ! <desc>View Direction</desc> ! <low> ! <repeatable>true</repeatable> ! <binding> ! <command>property-adjust</command> ! <property>/sim/current-view/goal-heading-offset-deg</property> ! <step type="double">1.0</step> ! </binding> ! </low> ! <high> ! <repeatable>true</repeatable> ! <binding> ! <command>property-adjust</command> ! <property>/sim/current-view/goal-heading-offset-deg</property> ! <step type="double">-1.0</step> ! </binding> ! </high> ! </axis> ! ! <axis n="7"> ! <desc>View Elevation</desc> ! <low> ! <repeatable>true</repeatable> ! <binding> ! <command>property-adjust</command> ! <property>/sim/current-view/goal-pitch-offset-deg</property> ! <step type="double">-1.0</step> ! </binding> ! </low> ! <high> ! <repeatable>true</repeatable> ! <binding> ! <command>property-adjust</command> ! <property>/sim/current-view/goal-pitch-offset-deg</property> ! <step type="double">1.0</step> ! </binding> ! </high> ! </axis> ! ! <button n="1"> ! <desc>View Cycle</desc> ! <repeatable>false</repeatable> ! <binding> ! <command>view-cycle</command> ! <step type="double">1</step> ! </binding> ! </button> ! ! <button n="0"> ! <desc>Brakes</desc> ! <binding> ! <command>nasal</command> ! <script>controls.applyBrakes(1)</script> ! </binding> ! <mod-up> ! <binding> ! <command>nasal</command> ! <script>controls.applyBrakes(0)</script> ! </binding> ! </mod-up> ! </button> ! ! <button n="2"> ! <desc>Left Brake</desc> ! <binding> ! <command>nasal</command> ! <script>controls.applyBrakes(1, -1)</script> ! </binding> ! <mod-up> ! <binding> ! <command>nasal</command> ! <script>controls.applyBrakes(0, -1)</script> ! </binding> ! </mod-up> ! </button> ! ! <button n="3"> ! <desc>Right Brake</desc> ! <binding> ! <command>nasal</command> ! <script>controls.applyBrakes(1, 1)</script> ! </binding> ! <mod-up> ! <binding> ! <command>nasal</command> ! <script>controls.applyBrakes(0, 1)</script> ! </binding> ! </mod-up> ! </button> ! ! <button n="6"> ! <desc>Flaps Up</desc> ! <repeatable>false</repeatable> ! <binding> ! <command>property-adjust</command> ! <property>/controls/flight/flaps</property> ! <step type="double">-0.34</step> ! </binding> ! </button> ! ! <button n="5"> ! <desc>Flaps Down</desc> ! <repeatable>false</repeatable> ! <binding> ! <command>property-adjust</command> ! <property>/controls/flight/flaps</property> ! <step type="double">0.34</step> ! </binding> ! </button> </PropertyList> - <!-- end of joystick.xml --> --- 1,544 ---- ! <?xml version="1.0"?> ! <!-- ! $Id$ + Note: This is asimple edit of Melchor Franz Cyborg-Gold-3d-USB.xml file. This Saitek + joystick has the same number of buttons as the MS Sidewinder Force Feedback 2. + _______________________________________ Layout _______________________________________ + + + axis 0: aileron + axis 1: elevator + axis 2: rudder + axis 3: throttle + + + no modifier K7=B6 K8=B7 K7+K8 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + button 0 (trigger): brakes parking brake speed brake thrust revers. + button 2 (left): flaps up gear up previous view * + button 1 (middle): reset view dir tail wheel lock cockpit view reset all trim + button 3 (right): flaps down gear down next view * + button 4 (K5): brakes right * zoom in * + button 5 (K6): brakes left * zoom out * + button 6 (K7): //////////////////////// modifier 0 ///////////////////////// + button 7 (K8): //////////////////////// modifier 1 ///////////////////////// + hat left: look left leaner mixture aileron trim rudder trim + hat right: look right richer mixture aileron trim rudder trim + hat back: look up dec prop pitch elevator trim * + hat forward: look down inc prop pitch elevator trim * + + + K7 and K8 are used like "Shift", "Control", or "Alternate" on computer keyboards. + For example: press K7 and keep holding it down while pressing the fire + button/trigger -> toggle parking brake + + When flying the Harrier, "K7/hat left" and "right" control the thrust vector. + + + + ___________________________________ Customization ____________________________________ + + + + If you want to change some (or all) of the bindings, the recommended way is + to copy this file to your home directory, make your changes there, and include + it from your personal preferences.xml file. You can use any number lower than + 1000 for n in <js-named n="0">. The lowest takes precedence in case of identical + names. You can include such a preferences.xml file with the ~~config option, + e.g. ~~config=$HOME/.fgfs/preferences.xml, and you can put that ~~config line + into your personal $HOME/.fgfsrc file. + + <?xml version="1.0"?> <PropertyList> + <input> + <js-named n="100"> + <joysticks include="your-modified-copy.xml"/> + </js-named> + </input> + </PropertyList> ! The property "/input/joysticks/js[0]/data/modifier" indicates the "shift" level. ! K7 sets bit 0, K8 sets bit 1. The property is zero if none of the shift buttons ! is pressed, 1 if K7 is pressed, 2 if K8 is pressed, and 3 if both K7 and K8 are ! pressed. ! ! Note that you have to enclose nasal scripts in <script><![CDATA[...]]></script> ! if they contain characters that interfere with the xml markup. This is the case ! if you are, for example, using < (lower than). Alternatively, you can 'escape' ! the character with "<". ! ! Also note that all nasal code shares a common namespace, so it's possible to set ! a variable in one nasal binding, and to read it in another. ! ! ! ! ____________________________________ References ______________________________________ ! ! ! ! Joysticks: $FG_ROOT/Docs/README.Joystick.html ! Properties: see property browser (fgfs menu: "File"->"Browse internal properties") ! ! Nasal: http://www.plausible.org/nasal/ ! Nasal examples: $FG_ROOT/Nasal/ ! ! ! ______________________________________________________________________________________ ! ! ~~ Melchior FRANZ <mfranz # aon : at> ! This MS Sidewinder Force Feedback 2 xml is a straight forward edit by Dave Perry ! of the Saitek Cyborg-Gold-3d-USB.xml file written by Melchior Franz. ! --> ! ! <PropertyList> ! <name>Microsoft SideWinder Force Feedback 2</name> ! <data> ! <mode type="int">0</mode> ! <modifier type="int">0</modifier> ! </data> ! ! <nasal> ! <script><![CDATA[ ! data = props.globals.getNode(this).getNode("data"); ! mode = data.getNode("mode"); ! modifier = data.getNode("modifier"); ! f1 = f2 = 0; ! left_brake = right_brake = 0; ! ! get_mode = func { modifier.getValue() + mode.getValue() * 4 } ! ! harrier = func { ! if (getprop("/sim/aero") == "harrier") { ! thv = getprop("/controls/engines/engine[0]/mixture"); ! gui.popupTip("Thrust vector " ~ int(thv * 120 - 20)); ! } ! } ! ]]></script> ! </nasal> ! ! <axis n="0"> ! <desc>Aileron</desc> ! <binding> ! <command>property-scale</command> ! <property>/controls/flight/aileron</property> ! <power type="double">2.0</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.0</power> ! </binding> ! </axis> ! ! <axis> ! <desc>Rudder</desc> ! <number> ! <unix>2</unix> ! <mac>2</mac> ! <windows>3</windows> ! </number> ! <binding> ! <command>property-scale</command> ! <property>/controls/flight/rudder</property> ! <offset type="double">0.0</offset> ! <factor type="double">1.0</factor> ! <power type="double">2.0</power> ! </binding> ! </axis> ! ! <axis> ! <desc>Throttle</desc> ! <number> ! <unix>3</unix> ! <mac>2</mac> ! <windows>2</windows> ! </number> ! <binding> ! <command>nasal</command> ! <script>controls.throttleAxis()</script> ! </binding> ! </axis> ! ! <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Hat Switch ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> ! ! <axis> ! <desc>View Direction; Mixture; Aileron Trim; Rudder Trim;</desc> ! <number> ! <unix>4</unix> ! <mac>4</mac> ! <windows>6</windows> ! </number> ! <low> ! <repeatable>true</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! v = getprop("/sim/current-view/view-number"); ! view.panViewDir(v == 0 or v == 4 ? 1 : -1); ! } elsif (m == 1) { ! controls.adjMixture(-1); ! harrier(); ! } elsif (m == 2) { ! controls.aileronTrim(-0.75); ! } elsif (m == 3) { ! controls.rudderTrim(-0.75); ! } ! </script> ! </binding> ! </low> ! <high> ! <repeatable>true</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! v = getprop("/sim/current-view/view-number"); ! view.panViewDir(v == 0 or v == 4 ? -1 : 1); ! } elsif (m == 1) { ! controls.adjMixture(1); ! harrier(); ! } elsif (m == 2) { ! controls.aileronTrim(0.75); ! } elsif (m == 3) { ! controls.rudderTrim(0.75); ! } ! </script> ! </binding> ! </high> ! </axis> ! ! <axis> ! <desc>View Elevation; Prop Pitch; Elevator Trim;</desc> ! <number> ! <unix>5</unix> ! <mac>5</mac> ! <windows>7</windows> ! </number> ! <low> ! <repeatable>true</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! view.panViewPitch(-1); ! } elsif (m == 1) { ! controls.adjPropeller(-1); ! } elsif (m == 2) { ! controls.elevatorTrim(-0.75); ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! </low> ! <high> ! <repeatable>true</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! view.panViewPitch(1); ! } elsif (m == 1) { ! controls.adjPropeller(1); ! } elsif (m == 2) { ! controls.elevatorTrim(0.75); ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! </high> ! </axis> ! ! <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Buttons ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> ! ! <button n="0"><!-- trigger --> ! <desc>Brakes; Parking Brake; Speed Brake; Thrust Reverse;</desc> ! <repeatable type="bool">false</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! controls.applyBrakes(1); ! } elsif (m == 1) { ! controls.applyBrakes(1); ! } elsif (m == 2) { ! # ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! <mod-up> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! controls.applyBrakes(0); ! } elsif (m == 1) { ! i = controls.applyParkingBrake(1); ! gui.popupTip("Parking Brake " ~ ["OFF", "ON"][i]); ! controls.applyBrakes(0); ! } elsif (m == 2) { ! i = !getprop("/controls/flight/speedbrake"); ! setprop("/controls/flight/speedbrake", i); ! gui.popupTip("Speed Brake " ~ ["OFF", "ON"][i]); ! } elsif (m == 3) { ! i = !getprop("/controls/engines/engine[0]/reverser"); ! props.setAll("/controls/engines/engine", "reverser", i); ! gui.popupTip("Thrust Reverser " ~ ["OFF", "ON"][i]); ! } ! </script> ! </binding> ! </mod-up> ! </button> ! ! <button n="2"><!-- Labeled 3, Left Below Hat --> ! <desc>Flaps Up; Gear Up; Previous View</desc> ! <repeatable type="bool">false</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! controls.flapsDown(-1); ! } elsif (m == 1) { ! controls.gearDown(-1); ! } elsif (m == 2) { ! view.stepView(-1); ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! <mod-up> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! controls.flapsDown(0); ! } elsif (m == 1) { ! controls.gearDown(0); ! } elsif (m == 2) { ! # ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! </mod-up> ! </button> ! ! <button n="1"><!-- Labeled 2, Middle Below Hat--> ! <desc>Reset View; Toggle Tail-wheel lock; Reset Trim;</desc> ! <repeatable type="bool">false</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! view.resetView(); ! } elsif (m == 1) { ! i = !getprop("/controls/gear/tailwheel-lock"); ! setprop("/controls/gear/tailwheel-lock", i); ! gui.popupTip("Tail Wheel " ~ ["UNLOCKED", "LOCKED"][i]); ! } elsif (m == 2) { ! setprop("/sim/current-view/view-number", 0); ! view.resetView(); ! } elsif (m == 3) { ! setprop("/controls/flight/elevator-trim", 0); ! setprop("/controls/flight/aileron-trim", 0); ! setprop("/controls/flight/rudder-trim", 0); ! } ! </script> ! </binding> ! </button> ! ! <button n="3"><!-- Labeled 4, Right Below Hat --> ! <desc>Flaps Down; Gear Down; Next View;</desc> ! <repeatable type="bool">false</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! controls.flapsDown(1); ! } elsif (m == 1) { ! controls.gearDown(1); ! } elsif (m == 2) { ! view.stepView(1); ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! <mod-up> ! <binding> ! <command>nasal</command> ! <script> ! m = get_mode(); ! if (m == 0) { ! controls.flapsDown(0); ! } elsif (m == 1) { ! controls.gearDown(0); ! } elsif (m == 2) { ! # ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! </mod-up> ! </button> ! ! <button n="5"><!-- Labeled 6, Left key on Bottom Row on base --> ! <desc>Brakes left</desc> ! <repeatable type="bool">true</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! f1 = 1; ! m = get_mode(); ! if (m == 0) { ! if (!left_brake) { ! controls.applyBrakes(left_brake = 1, -1); ! } ! } elsif (m == 1) { ! # ! } elsif (m == 2) { ! f2 ? view.resetFOV() : view.increase(); ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! <mod-up> ! <binding> ! <command>nasal</command> ! <script> ! f1 = 0; ! m = get_mode(); ! if (m == 0) { ! controls.applyBrakes(left_brake = 0, -1); ! } elsif (m == 1) { ! # ! } elsif (m == 2) { ! # ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! </mod-up> ! </button> ! ! <button n="4"><!-- Labeled 5, Right key on Bottom Row on base --> ! <desc>Brakes right</desc> ! <repeatable type="bool">true</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! f2 = 1; ! m = get_mode(); ! if (m == 0) { ! if (!right_brake) { ! controls.applyBrakes(right_brake = 1, 1); ! } ! } elsif (m == 1) { ! # ! } elsif (m == 2) { ! f1 ? view.resetFOV() : view.decrease(); ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! <mod-up> ! <binding> ! <command>nasal</command> ! <script> ! f2 = 0; ! m = get_mode(); ! if (m == 0) { ! controls.applyBrakes(right_brake = 0, 1); ! } elsif (m == 1) { ! # ! } elsif (m == 2) { ! # ! } elsif (m == 3) { ! # ! } ! </script> ! </binding> ! </mod-up> ! </button> ! ! <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Modifier Keys ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> ! ! <button n="6"><!-- K7 = Labeled 7, Left on Top Row on Base --> ! <desc>Modifier Bit 0</desc> ! <repeatable type="bool">false</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! m = modifier.getValue(); ! if (m == 0 or m == 2) { ! modifier.setIntValue(m + 1); ! } ! </script> ! </binding> ! <mod-up> ! <binding> ! <command>nasal</command> ! <script> ! m = modifier.getValue(); ! if (m == 1 or m == 3) { ! modifier.setIntValue(m - 1); ! } ! </script> ! </binding> ! </mod-up> ! </button> ! ! <button n="7"><!-- K8 = Labeled 8, Right on Top Row on Base --> ! <desc>Modifier Bit 1</desc> ! <repeatable type="bool">false</repeatable> ! <binding> ! <command>nasal</command> ! <script> ! m = modifier.getValue(); ! if (m == 0 or m == 1) { ! modifier.setIntValue(m + 2); ! } ! </script> ! </binding> ! <mod-up> ! <binding> ! <command>nasal</command> ! <script> ! m = modifier.getValue(); ! if (m == 2 or m == 3) { ! modifier.setIntValue(m - 2); ! } ! </script> ! </binding> ! </mod-up> ! </button> </PropertyList> |