2 contributor
<?xml version="1.0"?>
<!--
************************************************************************
* Bindings for Microsoft SideWinder Joystick.
*
*
* Axis 0: ailerons in air, rudder on ground if not heli
* Axis 1: elevator
* Axis 2: throttle
*
* Button 1: all brakes on ground, heli view in air
* Button 2: Push To Talk with FGCOM
* Button 3: left aileron trim for aircrafts, left pedal for helis
* Button 4: right aileron trim for aircrafts, right pedal for helis
* Button 5: elevator trim up
* Button 6: elevator trim down
* Button 7: flaps up
* Button 8: flaps down
************************************************************************
$Id: sidewinder.xml,v 1.5 2005/06/22 13:08:02 mfranz Exp $
modified by zakharov
-->
<PropertyList>
<nasal>
<script><![CDATA[
var skipFlightControls = props.globals.getNode("/sim/mouse/skip-flight-controls-mode");
setlistener("/sim/signals/fdm-initilized", func {
skipFlightControls.setBoolValue(1);
print("JOYSTICK set mouse flight control OFF: ", skipFlightControls.getValue());
}, 1 );
setlistener("/sim/signals/save", func {
skipFlightControls.setBoolValue(0);
print("JOYSTICK save mouse flight control ON: ", skipFlightControls.getValue());
} );
var shift = props.globals.getNode("/devices/status/keyboard/shift");
var ctrl = props.globals.getNode("/devices/status/keyboard/ctrl");
var alt = props.globals.getNode("/devices/status/keyboard/alt");
var previousMouseMode = 0;
var get_modifiers = func {
shift.getValue() + 2 * ctrl.getValue() + 4 * alt.getValue();
}
var space_release = func {}
var space = func(state, mod) {
if (!state) {
space_release();
return space_release = func {};
}
if (mod == 0 or mod == 1) {
controls.ptt(mod + 1);
space_release = func { controls.ptt(0) }
}
}
var button0 = func {}
var gunned = props.globals.getNode("/controls/armament/trigger");
if (gunned != nil)
button0 = func (v) {
setprop("/ai/submodels/trigger", v);
setprop("/controls/armament/trigger", v);
}
else
button0 = func (v) {
if (v) {
previousMouseMode = getprop("/devices/status/mice/mouse[0]/mode");
setprop("/devices/status/mice/mouse[0]/mode", 2);
}
else setprop("/devices/status/mice/mouse[0]/mode", previousMouseMode);
setprop("/sim/current-view/view-number", v);
}
]]></script>
</nasal>
<name>Microsoft SideWinder Joystick</name>
<axis n="0">
<desc>Rudder if not heli (auto-coordination), on ground and in air</desc>
<binding>
<condition>
<not>
<property>/rotors/rotor/brake</property>
</not>
</condition>
<command>property-scale</command>
<property>/controls/flight/rudder</property>
<squared type="bool">true</squared>
</binding>
<desc>Aileron, only in air</desc>
<binding>
<condition>
<not>
<and>
<property>/gear/gear[1]/wow</property>
<property>/gear/gear[2]/wow</property>
</and>
</not>
</condition>
<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>Throttle</desc>
<binding>
<command>nasal</command>
<script>controls.throttleAxis()</script>
</binding>
</axis>
<button n="0">
<desc>Brakes on ground, change view or fire gun if exists on air</desc>
<binding>
<condition>
<and>
<property>/gear/gear[1]/wow</property>
<property>/gear/gear[2]/wow</property>
</and>
</condition>
<command>nasal</command>
<script>controls.applyBrakes(1)</script>
</binding>
<binding>
<condition>
<not>
<and>
<property>/gear/gear[1]/wow</property>
<property>/gear/gear[2]/wow</property>
</and>
</not>
</condition>
<command>nasal</command>
<script>button0(1)</script>
</binding>
<mod-up>
<binding>
<condition>
<not>
<and>
<property>/gear/gear[1]/wow</property>
<property>/gear/gear[2]/wow</property>
</and>
</not>
</condition>
<command>nasal</command>
<script>button0(0)</script>
</binding>
<binding>
<condition>
<and>
<property>/gear/gear[1]/wow</property>
<property>/gear/gear[2]/wow</property>
</and>
</condition>
<command>nasal</command>
<script>controls.applyBrakes(0)</script>
</binding>
</mod-up>
</button>
<button n="1">
<desc>PTT - Push To Talk (via VoIP)</desc>
<binding>
<command>nasal</command>
<script>
var m = get_modifiers();
if (m == 4) aircraft.autotrim.start();
else space(1, m);
</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>
var m = get_modifiers();
if (m == 4) aircraft.autotrim.stop();
else space(0, m);
</script>
</binding>
</mod-up>
</button>
<button n="4">
<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.002</step>
</binding>
</button>
<button n="5">
<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.002</step>
</binding>
</button>
<button n="6">
<desc>Flaps up</desc>
<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>
<button n="7">
<desc>Flaps down</desc>
<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>
<button n="2">
<desc>Aileron trim left</desc>
<repeatable>true</repeatable>
<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>
<binding>
<condition>
<not>
<property>/rotors/tail/rpm</property>
</not>
</condition>
<command>property-adjust</command>
<property>/controls/flight/aileron-trim</property>
<step type="double">-0.001</step>
</binding>
<desc>Rudder for helis</desc>
<binding>
<condition>
<property>/rotors/tail/rpm</property>
</condition>
<command>property-adjust</command>
<property>/controls/flight/rudder</property>
<step type="double">-0.01</step>
</binding>
</button>
<button n="3">
<desc>Aileron trim right</desc>
<repeatable>true</repeatable>
<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>
<binding>
<condition>
<not>
<property>/rotors/tail/rpm</property>
</not>
</condition>
<command>property-adjust</command>
<property>/controls/flight/aileron-trim</property>
<step type="double">0.001</step>
</binding>
<desc>Rudder for helis</desc>
<binding>
<condition>
<property>/rotors/tail/rpm</property>
</condition>
<command>property-adjust</command>
<property>/controls/flight/rudder</property>
<step type="double">0.01</step>
</binding>
</button>
</PropertyList>