My Microsoft SideWinder 3D Pro joystick was not recognized by
FlightGear, so I wrote the following joystick configuration file -
which I hereby contribute, and request that it be added to CVS.

There were two issues that arose while writing it, which I think may
have the same resolution:

 (1) Joystick file authors have to decide how many engines the
     throttle will control.  Most authors seem to have chosen eight,
     which will break once ten-engine planes start appearing in
     FlightGear; the author of the default four-axis-joystick.xml file
     seems to have chosen two instead, which sent my B-52 off the
     runway sideways if I remember correctly. :-)

 (2) I have mapped the joystick hat to view control, to match all of
     the other joystick configurations I read; and then I wanted to
     make the narrow button just below the hat center the view.  What
     it actually does is set the view heading and pitch to zero -
     which for most 3D cockpits seems *not* to be the designer's idea
     of "straight ahead", since they often want the eyes cast down
     somewhat to see the instrument panel.  What I want therefore is
     not a static definition of what the button does, but a dynamic
     one that returns to whatever angle the current aircraft's
     designer chose as "straight ahead".

The common feature of both of these problems is that XML is static.
Of course we could hack XML to include more complicated descriptions
of actions (and maybe it is already complicated enough, without my
knowing it, to set the view angles to the default for the current 3D
cockpit); but what one really wants is for configuration files to be
specified through a scripting language.  That way, one can just loop
through the engines and assign them each to the throttle slider, and
one can define the button below the hat as running a (probably
pre-defined) function that returns the view to the default for the
current cockpit.

I have seen recent discussion of a scripting language, and of the idea
that maybe cases like the above could be handled by putting XML inside
of the scripting language sometimes, or putting scripting language
code inside of XML sometimes.  I would like to respectfully argue that
this is most likely to create a mess, with users having to learn two
different ways of setting values and specifying settings, and then
having to figure when when they are supposed to use XML and when they
are supposed to use the scripting language, and when they should
include either one in the other.

Might things be far simpler, going into the future, if XML is simply
eliminated in favor of scripts?  Assuming the language syntax is
reasonable, scripts should be far easier to write and read than XML
anyway (since a good scripting language makes far fewer demands upon
the typist than the HTML-derived set of languages).

I make this suggestion hesitantly, and only because I ran into the
above problems and found recent scripting vs XML discussion relevant;
I have still not seen most of FlightGear's data directory and may be
missing all sorts of reasons why XML is a wonderful and necessary idea. :-)

<?xml version="1.0"?>

<!--
************************************************************************
* Bindings for Microsoft SideWinder Force Feed joystick.
*
*
* Axis 0: ailerons
* Axis 1: elevator
* Axis 2 (twist): rudder
* Axis 3: throttle
* Axes 6 and 7 (hat): view direction
*
* Button 0: all brakes
* Button 1: elevator trim up
* Button 2: elevator trim down
* Button 3: center view
* Button 4: flap up
* Button 5: flap down
* Button 6: right brake only
* Button 7: left brake only
************************************************************************
-->

<PropertyList>

 <name>Microsoft SideWinder 3D Pro</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="2">
  <desc>Rudder</desc>
  <binding>
   <command>property-scale</command>
   <property>/controls/flight/rudder</property>
   <factor type="double">1.0</factor>
  </binding>
 </axis>

 <axis n="3">
  <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="4">
   <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="5">
   <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="0">
  <desc>Brakes</desc>
  <binding>
   <command>property-assign</command>
   <property>/controls/gear/wheel[0]/brake</property>
   <value type="double">1.0</value>
  </binding>
  <binding>
   <command>property-assign</command>
   <property>/controls/gear/wheel[1]/brake</property>
   <value type="double">1.0</value>
  </binding>
  <binding>
   <command>property-assign</command>
   <property>/controls/gear/wheel[2]/brake</property>
   <value type="double">1.0</value>
  </binding>
  <mod-up>
   <binding>
    <command>property-assign</command>
    <property>/controls/gear/wheel[0]/brake</property>
    <value type="double">0.0</value>
   </binding>
   <binding>
    <command>property-assign</command>
    <property>/controls/gear/wheel[1]/brake</property>
    <value type="double">0.0</value>
   </binding>
   <binding>
    <command>property-assign</command>
    <property>/controls/gear/wheel[2]/brake</property>
    <value type="double">0.0</value>
   </binding>
  </mod-up>
 </button>

 <button n="1">
  <desc>Elevator trim up</desc>
  <repeatable type="bool">true</repeatable>
  <binding>
   <command>property-adjust</command>
   <property>/controls/flight/elevator-trim</property>
   <step type="double">0.001</step>
  </binding>
 </button>

 <button n="2">
  <desc>Elevator trim down</desc>
  <repeatable type="bool">true</repeatable>
  <binding>
   <command>property-adjust</command>
   <property>/controls/flight/elevator-trim</property>
   <step type="double">-0.001</step>
  </binding>
 </button>

 <button n="3">
  <desc>Center View</desc>
  <repeatable type="bool">false</repeatable>
  <binding>
   <command>property-assign</command>
   <property>/sim/current-view/goal-heading-offset-deg</property>
   <value type="double">0.0</value>
  </binding>
  <binding>
   <command>property-assign</command>
   <property>/sim/current-view/goal-pitch-offset-deg</property>
   <value type="double">0.0</value>
  </binding>
 </button>

 <button n="4">
  <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>

 <button n="5">
  <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="6">
  <desc>Right brake</desc>
  <binding>
   <command>property-assign</command>
   <property>/controls/gear/wheel[1]/brake</property>
   <value type="double">1.0</value>
  </binding>
  <mod-up>
   <binding>
    <command>property-assign</command>
    <property>/controls/gear/wheel[1]/brake</property>
    <value type="double">0.0</value>
   </binding>
  </mod-up>
 </button>

 <button n="7">
  <desc>Left brake</desc>
  <binding>
   <command>property-assign</command>
   <property>/controls/gear/wheel[0]/brake</property>
   <value type="double">1.0</value>
  </binding>
  <mod-up>
   <binding>
    <command>property-assign</command>
    <property>/controls/gear/wheel[0]/brake</property>
    <value type="double">0.0</value>
   </binding>
  </mod-up>
 </button>

</PropertyList>
-- 
Brandon Craig Rhodes   [EMAIL PROTECTED]   http://rhodesmill.org/brandon
_______________________________________________
Flightgear-devel mailing list
[EMAIL PROTECTED]
http://mail.flightgear.org/mailman/listinfo/flightgear-devel

Reply via email to