Thrustmaster Flightstick X
pluggin in
$ dmesg | tail
[ 21.010553] usb 10-5.2.2: new full-speed USB device number 9 using ehci-pci
[ 21.103981] usb 10-5.2.2: New USB device found, idVendor=044f, idProduct=b106
[ 21.103990] usb 10-5.2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 21.103997] usb 10-5.2.2: Product: T.Flight Stick X
[ 21.104003] usb 10-5.2.2: Manufacturer: Thrustmaster
[ 21.106673] input: Thrustmaster T.Flight Stick X as /devices/pci0000:00/0000:00:13.2/usb10/10-5/10-5.2/10-5.2.2/10-5.2.2:1.0/0003:044F:B106.0005/input/input16
[ 21.106941] hid-generic 0003:044F:B106.0005: input,hidraw4: USB HID v1.00 Joystick [Thrustmaster T.Flight Stick X] on usb-0000:00:13.2-5.2.2/input0
FGROOT/Input/joystick.xml
<?xml version="1.0"?>
<PropertyList>
<js-named include="../../../../../custom/Input/Joystick/Thrustmaster/FlightStickX.xml"/>
<js-named include="../../../../../custom/Input/Joystick/Saitek/Pro-Flight-Combat-Rudder-Pedals.xml"/>
</PropertyList>
Functionality check under Flightgear
Aileron |
correct |
Elevator |
inverted |
Rudder |
correct |
Pedal brakes |
correct |
Throttle |
inactive |
Flaps |
correct |
Elevator-trim |
correct |
View-elevation/View-deg |
correct |
View-reset |
correct |
Corrections in my FlightStickX.xml
<?xml version="1.0"?>
<PropertyList>
<name>Thrustmaster T.Flight Stick X</name>
<axis n="0">
<desc>Aileron</desc>
<name>Joystick longitudinal axis</name>
<binding>
<command>property-scale</command>
<property>/controls/flight/aileron</property>
</binding>
</axis>
<axis n="1">
<desc>Elevator</desc>
<name>Joystick lateral axis</name>
<binding>
<command>property-scale</command>
<property>/controls/flight/elevator</property>
<factor type="double">-1.0</factor>
</binding>
</axis>
<axis n="2">
<desc>Rudder</desc>
<name>Joystick vertical axis</name>
</axis>
<axis n="3">
<desc>Throttle</desc>
<name>Joystick Throttle</name>
<command>nasal</command>
<script>
<![CDATA[
controls.throttleAxis();
]]>
</script>
</axis>
<axis n="4">
<desc>View Direction</desc>
<name>Coolie hat left-right</name>
<low>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>/sim/current-view/goal-heading-offset-deg</property>
<step type="double">2.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">-2.0</step>
</binding>
</high>
</axis>
<axis n="5">
<desc>View Elevation</desc>
<name>Coolie hat top-bottom</name>
<low>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>/sim/current-view/goal-pitch-offset-deg</property>
<step type="double">2.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">-2.0</step>
</binding>
</high>
</axis>
<button n="1">
<desc></desc>
<name>Fire Button 2</name>
<binding>
<command>nasal</command>
<script>
<![CDATA[
view.resetView();
]]>
</script>
</binding>
</button>
<button n="2">
<desc>Elevator trim up</desc>
<name>Button 3</name>
<repeatable type="bool">true</repeatable>
<binding>
<command>nasal</command>
<script>controls.elevatorTrim(1)</script>
</binding>
</button>
<button n="3">
<desc>Elevator trim down</desc>
<name>Button 4</name>
<repeatable type="bool">true</repeatable>
<binding>
<command>nasal</command>
<script>controls.elevatorTrim(-1)</script>
</binding>
</button>
<button n="4">
<desc>Flaps Down</desc>
<name>Button 5</name>
<binding>
<command>nasal</command>
<script>controls.flapsDown(1);</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.flapsDown(0)</script>
</binding>
</mod-up>
</button>
<button n="5">
<desc>Flaps Up</desc>
<name>Button 6</name>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>controls.flapsDown(-1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.flapsDown(0)</script>
</binding>
</mod-up>
</button>
</PropertyList>