702 lines
16 KiB
XML
702 lines
16 KiB
XML
<?xml version="1.0"?>
|
|
<!--
|
|
Based on X52.xml and Aviator.xml
|
|
Modified by Arvid Norlander; 2007-12-03
|
|
|
|
This file is released under the GPL license.
|
|
-->
|
|
|
|
<!--
|
|
Common Axis/Buttons
|
|
+ Roll/Pitch/Throttle/Rudder: As There are
|
|
+ Top stick hat: Airelon / Elevator trim
|
|
+ Bottom stick hat: View directions (Increase/Decrease visibility & Zoom In/Out when shifted)
|
|
+ Throttle foreside hat: Up/down: View cycles (Shift: flaps up/down). Left/right: Rudder trim
|
|
+ Throttle slider: Boost Control (if available)
|
|
+ Tirgger: Apply all brakes
|
|
+ Fire button: Toggle parking brake
|
|
+ Stick button "A": Gear up (Shift: gear down)
|
|
+ Stick button "B": HUD master switch
|
|
+ Stick button "C": Reset view (hackish) (shift: Toggle speedbrake)
|
|
+ Pinkie button: Shift switch
|
|
+ Throttle button "D": Right brake
|
|
+ Throttle button "E": Left brake
|
|
+ Throttle button "i": PTT (Push to talk, for fgcom)
|
|
+ Throttle mouse button: Start Selected Engine(s)
|
|
+ T1/T2: Hook up/down (Increase/Decrease spoilers when shifted)
|
|
+ T3/T4: Increase/Decrease slats
|
|
+ T5/T6: Increase/Decrease Speedbrake (Increase/Decrease magneto when shifted)
|
|
|
|
Mode 1: Propeller Aircraft
|
|
+ Top rotary dial: Mixture
|
|
+ Bottom rotary dial: Prop Advance
|
|
+ Throttle mouse button: Start Selected Engine(s)
|
|
|
|
Mode 2: Jet Aircraft
|
|
+ Top rotary dial: Carb Heat
|
|
|
|
Mode 3: Not implemented yet
|
|
|
|
Linux Axis Numbers (no idea about window/mac ones, and they are not same as plain X52 axis numbers on linux at least):
|
|
0 Roll (positive == right)
|
|
1 Pitch (positive == down/back/nose-up)
|
|
2 Throttle (positive == back/down/idle)
|
|
3 Bottom "rotary dial" on the throttle (positive == CW)
|
|
4 Top "rotary dial" on the throttle (positive == CCW)
|
|
5 Rocker switch ("rudder" control) on the throttle (positive == right)
|
|
6 Slider on the throttle (positive == forward)
|
|
7 Lower right hat horizontal axis (positive == right)
|
|
8 Lower right hat vertical axis (positive == down (Mac positive is UP))
|
|
9 Mouse Y (positive = up)
|
|
10 Mouse X (positive = right)
|
|
|
|
Button Numbers (Probably identical b/w Linux/Windows/Mac):
|
|
0 Trigger (half pressed)
|
|
1 Stick top "Fire" switch
|
|
2 Stick top "A" switch
|
|
3 Stick top "B" switch
|
|
4 Stick top "C" switch
|
|
5 Stick pinkie switch
|
|
6 Throttle "D" switch
|
|
7 Throttle "E" switch
|
|
8 T1
|
|
9 T2
|
|
10 T3
|
|
11 T4
|
|
12 T5
|
|
13 T6
|
|
15 Throttle mouse switch
|
|
16 Throttle forefinger wheel scroll down
|
|
17 Throttle forefinger wheel scroll up
|
|
18 Throttle forefinger wheel click
|
|
19 Upper left hat in "up" position
|
|
20 Upper left hat in "right" position
|
|
21 Upper left hat in "down" position
|
|
22 Upper left hat in "left" position
|
|
23 Throttle forefinger hat in "up/back" position
|
|
24 Throttle forefinger hat in "right" position
|
|
25 Throttle forefinger hat in "down/forward" position
|
|
26 Throttle forefinger hat in "left" position
|
|
27 Mode 1
|
|
28 Mode 2
|
|
29 Mode 3
|
|
30 Throttle "i" switch
|
|
31 Function wheel (below MFD) click (don't use, it is for timer)
|
|
32 START/STOP (don't use, for features in joystick itself)
|
|
33 RESET (don't use, for features in joystick itself)
|
|
34 Function wheel (below MFD) up
|
|
35 Function wheel (below MFD) down
|
|
36 MFD-select wheel below MFD up
|
|
37 MFD-select wheel below MFD down
|
|
38 MFD-select wheel below MFD click
|
|
$Id$
|
|
-->
|
|
<PropertyList>
|
|
|
|
<name>Saitek X52 Pro Flight Control System</name>
|
|
<name>Saitek Saitek X52 Pro Flight Control System</name>
|
|
|
|
<!-- Custom section for storing some properties, based on Aviator.xml -->
|
|
<data>
|
|
<modifier type="bool">false</modifier>
|
|
<mode type="int">0</mode>
|
|
</data>
|
|
|
|
<nasal>
|
|
<script>
|
|
<![CDATA[
|
|
var self = cmdarg().getParent();
|
|
var data = self.getNode("data");
|
|
var modifier = data.getNode("modifier");
|
|
var mode = data.getNode("mode");
|
|
]]>
|
|
</script>
|
|
</nasal>
|
|
|
|
<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 2 is assigned for Rudder on Mac OS X -->
|
|
<axis n="5">
|
|
<desc>Rudder</desc>
|
|
<binding>
|
|
<command>property-scale</command>
|
|
<property>/controls/flight/rudder</property>
|
|
</binding>
|
|
</axis>
|
|
|
|
<!-- Bottom stick hat -->
|
|
<axis n="7">
|
|
<desc>View Direction; Shift: Increase/Decrease visibility</desc>
|
|
<low>
|
|
<repeatable>true</repeatable>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
# fgcommand("increase-visibility", "/null");
|
|
} else {
|
|
view.panViewDir(1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</low>
|
|
<high>
|
|
<repeatable>true</repeatable>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
# fgcommand("decrease-visibility", "/null");
|
|
} else {
|
|
view.panViewDir(-1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</high>
|
|
</axis>
|
|
|
|
<axis n="8">
|
|
<desc>View Elevation; Shift: Increase/Decrease field of view</desc>
|
|
<low>
|
|
<repeatable>true</repeatable>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
view.increase();
|
|
} else {
|
|
view.panViewPitch(1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</low>
|
|
<high>
|
|
<repeatable>true</repeatable>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
view.decrease();
|
|
} else {
|
|
view.panViewPitch(-1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</high>
|
|
</axis>
|
|
|
|
<axis n="2">
|
|
<desc>Throttle</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>controls.throttleAxis()</script>
|
|
</binding>
|
|
</axis>
|
|
|
|
<!-- Top Rotary dial on the throttle -->
|
|
<axis n="4">
|
|
<desc>Mode1: Mixture; Mode2: Carb Heat</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
var val = mode.getValue();
|
|
if (val == 1) {
|
|
controls.mixtureAxis();
|
|
} elsif (val == 2) {
|
|
controls.carbHeatAxis();
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</axis>
|
|
|
|
<!-- Bottom Rotary dial on the throttle -->
|
|
<axis n="3">
|
|
<desc>Mode1: Propeller Advance</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
var val = mode.getValue();
|
|
if (val == 1) {
|
|
controls.propellerAxis(-1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</axis>
|
|
|
|
<!-- Throttle slider; Please add Unix/Windows axis number -->
|
|
<axis n="6">
|
|
<desc>Boost Control</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
var val = cmdarg().getNode("setting").getValue();
|
|
if (getprop("/controls/engines/engine/raw-boost") != nil) {
|
|
# for j7w
|
|
props.setAll("/controls/engines/engine", "raw-boost", (val+1)/2);
|
|
} else {
|
|
# for other prop airplanes
|
|
props.setAll("/controls/engines/engine", "boost", (val+1)/2);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</axis>
|
|
|
|
<!-- Trigger -->
|
|
<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>
|
|
|
|
<!-- Fire button -->
|
|
<button n="1">
|
|
<desc>Toggle parking brake on or off</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>controls.applyParkingBrake(1);</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<!-- Button "A" -->
|
|
<button n="2">
|
|
<desc>Gear up; Shift: Gear down</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
controls.gearDown(1);
|
|
} else {
|
|
controls.gearDown(-1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
<mod-up>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>controls.gearDown(0);</script>
|
|
</binding>
|
|
</mod-up>
|
|
</button>
|
|
|
|
<!-- Button "B" -->
|
|
<button n="3">
|
|
<desc>HUD Master Switch</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>aircraft.HUD.cycle_color();</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<!-- button "C" -->
|
|
<button n="4">
|
|
<desc>Reset View (Shift: toggle speedbrake)</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
var c = getprop("/controls/flight/speedbrake");
|
|
if (c < 0.1)
|
|
setprop("/controls/flight/speedbrake", 1.0);
|
|
else
|
|
setprop("/controls/flight/speedbrake", 0.0);
|
|
} else {
|
|
view.resetView();
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<!-- pinkie button -->
|
|
<button n="5">
|
|
<desc>Shift switch for X52</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>modifier.setBoolValue(1);</script>
|
|
</binding>
|
|
<mod-up>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>modifier.setBoolValue(0);</script>
|
|
</binding>
|
|
</mod-up>
|
|
</button>
|
|
|
|
<!-- Button "D" -->
|
|
<button n="6">
|
|
<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 "E" -->
|
|
<button n="7">
|
|
<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>
|
|
|
|
<!-- Tail hook up on button T1; -->
|
|
<button n="8">
|
|
<desc>Tail hook up; Shift: Increase spoilers</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
controls.stepSpoilers(1);
|
|
} else {
|
|
setprop("/controls/gear/tailhook", 0);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<!-- Tail hook down on button T2 -->
|
|
<button n="9">
|
|
<desc>Tail hook down; Shift: Decrease spoilers</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
controls.stepSpoilers(-1);
|
|
} else {
|
|
setprop("/controls/gear/tailhook", 1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<!-- Flap control on the T3/T4 -->
|
|
<button n="10">
|
|
<desc>Increase slats</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>controls.stepSlats(1);</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<button n="11">
|
|
<desc>Decrease slats</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>controls.stepSlats(-1);</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<!-- per mode functions on the T6/T5 -->
|
|
<button n="12">
|
|
<desc>Increase speedbrake; Shift: Increase Magneto</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
controls.stepMagnetos(1);
|
|
} else {
|
|
setprop("/controls/flight/speedbrake", 1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<button n="13">
|
|
<desc>Decrease speedbrake; Shift: Decrease Magneto</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
controls.stepMagnetos(-1);
|
|
} else {
|
|
setprop("/controls/flight/speedbrake", 0);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<!-- Button "Trigger Maximum pressed" -->
|
|
<!-- Not implemented yet
|
|
<button n="14">
|
|
</button>
|
|
-->
|
|
|
|
<!-- Trim (upper) hat on the stick -->
|
|
<button n="19">
|
|
<desc>Elevator trim down</desc>
|
|
<repeatable type="bool">true</repeatable>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
setprop("/controls/flight/elevator-trim", 0);
|
|
} else {
|
|
controls.elevatorTrim(1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<button n="20">
|
|
<desc>Aileron trim right</desc>
|
|
<repeatable type="bool">true</repeatable>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
setprop("/controls/flight/aileron-trim", 0);
|
|
} else {
|
|
controls.aileronTrim(1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<button n="21">
|
|
<desc>Elevator trim up</desc>
|
|
<repeatable type="bool">true</repeatable>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
setprop("/controls/flight/elevator-trim", 0);
|
|
} else {
|
|
controls.elevatorTrim(-1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<button n="22">
|
|
<desc>Aileron trim left</desc>
|
|
<repeatable type="bool">true</repeatable>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
setprop("/controls/flight/aileron-trim", 0);
|
|
} else {
|
|
controls.aileronTrim(-1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<!-- Throttle foreside hat -->
|
|
<button n="23">
|
|
<desc>Scroll in reverse through views (shift: flaps up).</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
controls.flapsDown(-1);
|
|
} else {
|
|
view.stepView(-1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
<mod-up>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
controls.flapsDown(0);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</mod-up>
|
|
</button>
|
|
|
|
<button n="24">
|
|
<desc>Rudder trim right</desc>
|
|
<repeatable type="bool">true</repeatable>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
setprop("/controls/flight/rudder-trim", 0);
|
|
} else {
|
|
controls.rudderTrim(1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<button n="25">
|
|
<desc>Scroll views (shift: flaps down).</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
controls.flapsDown(1);
|
|
} else {
|
|
view.stepView(1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
<mod-up>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
controls.flapsDown(0);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</mod-up>
|
|
</button>
|
|
|
|
<button n="26">
|
|
<desc>Rudder trim left</desc>
|
|
<repeatable type="bool">true</repeatable>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>
|
|
<![CDATA[
|
|
if (modifier.getValue()) {
|
|
setprop("/controls/flight/rudder-trim", 0);
|
|
} else {
|
|
controls.rudderTrim(-1);
|
|
}
|
|
]]>
|
|
</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<!-- mode switch (buttons 27-29) -->
|
|
<button n="27">
|
|
<desc>Mode 1</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>mode.setIntValue(1);</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<button n="28">
|
|
<desc>Mode 2</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>mode.setIntValue(2);</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<button n="29">
|
|
<desc>Mode 3</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>mode.setIntValue(3);</script>
|
|
</binding>
|
|
</button>
|
|
|
|
<!-- "i" button -->
|
|
<button n="30">
|
|
<desc>PTT (for fgcom)</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>controls.ptt(1);</script>
|
|
</binding>
|
|
<mod-up>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>controls.ptt(0);</script>
|
|
</binding>
|
|
</mod-up>
|
|
</button>
|
|
|
|
<!-- mouse button on the throttle -->
|
|
<button n="15">
|
|
<desc>Fire Starter on Selected Engine(s)</desc>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>controls.startEngine();</script>
|
|
</binding>
|
|
<mod-up>
|
|
<binding>
|
|
<command>nasal</command>
|
|
<script>props.setAll("/controls/engines/engine", "starter", 0);</script>
|
|
</binding>
|
|
</mod-up>
|
|
</button>
|
|
|
|
</PropertyList>
|