Hi Everyone!
New here. I have downloaded the latest FlightGear and A320 and trying to calibrate my Thrustmaster A320 throttle and am running into some issues.
With the aircraft loaded, I clicked File | Joystick Configuration.
From there I put some random (but independently verifiable) selections and accessed the configuration XML file:
- Code ("C:/Users/username1/AppData/Roaming/flightgear.org/Input/Joysticks/TCA-Q-Eng-1&2.xml"): Select all
<?xml version="1.0"?>
<PropertyList>
<name type="string">TCA Q-Eng 1&2</name>
<axis>
<desc type="string">Throttle Engine 0</desc>
<binding>
<command type="string">property-scale</command>
<property type="string">/controls/engines/engine[0]/throttle</property>
<factor type="double">-1</factor>
<offset type="double">0</offset>
<power type="double">1</power>
</binding>
</axis>
<axis n="1">
<desc type="string">Throttle Engine 1</desc>
<binding>
<command type="string">property-scale</command>
<property type="string">/controls/engines/engine[1]/throttle</property>
<factor type="double">-1</factor>
<offset type="double">0</offset>
<power type="double">1</power>
</binding>
</axis>
<button>
<desc type="string">Aileron Trim Left</desc>
<binding>
<command type="string">nasal</command>
<script type="string">controls.aileronTrim(-1);</script>
</binding>
<repeatable type="double">1</repeatable>
</button>
<button n="1">
<desc type="string">Aileron Trim Right</desc>
<binding>
<command type="string">nasal</command>
<script type="string">controls.aileronTrim(1);</script>
</binding>
<repeatable type="double">1</repeatable>
</button>
<button n="2">
<desc type="string">Weapon previous</desc>
<binding>
<command type="string">property-adjust</command>
<property type="string">/controls/armament/weapon-selected</property>
<step type="string">-1</step>
</binding>
</button>
<button n="3">
<desc type="string">Target next</desc>
<binding>
<command type="string">property-adjust</command>
<property type="string">/controls/armament/target-selected</property>
<step type="string">1</step>
</binding>
</button>
<button n="6">
<desc type="string">Propeller Coarse</desc>
<binding>
<command type="string">nasal</command>
<script type="string">controls.adjPropeller(-1);</script>
</binding>
<repeatable type="double">1</repeatable>
</button>
<button n="7">
<desc type="string">Mixture Rich</desc>
<binding>
<command type="string">nasal</command>
<script type="string">controls.adjMixture(1);</script>
</binding>
<repeatable type="double">1</repeatable>
</button>
<button n="8">
<desc type="string">Azimuth left</desc>
<binding>
<command type="string">property-adjust</command>
<property type="string">/controls/radar/azimuth-deg</property>
<step type="string">-5</step>
</binding>
</button>
<button n="9">
<desc type="string">View Up</desc>
<binding>
<command type="string">property-adjust</command>
<property type="string">/sim/current-view/goal-pitch-offset-deg</property>
<step type="string">20.0</step>
</binding>
</button>
<button n="10">
<desc type="string">View Left</desc>
<binding>
<command type="string">property-adjust</command>
<property type="string">/sim/current-view/goal-heading-offset-deg</property>
<step type="string">30.0</step>
</binding>
</button>
<button n="11">
<desc type="string">Elevation up</desc>
<binding>
<command type="string">property-adjust</command>
<property type="string">/controls/radar/elevation-deg</property>
<step type="string">5</step>
</binding>
</button>
<button n="12">
<desc type="string">Azimuth right</desc>
<binding>
<command type="string">property-adjust</command>
<property type="string">/controls/radar/azimuth-deg</property>
<step type="string">5</step>
</binding>
</button>
<button n="13">
<desc type="string">View Down</desc>
<binding>
<command type="string">property-adjust</command>
<property type="string">/sim/current-view/goal-pitch-offset-deg</property>
<step type="string">-20.0</step>
</binding>
</button>
<button n="14">
<desc type="string">View Right</desc>
<binding>
<command type="string">property-adjust</command>
<property type="string">/sim/current-view/goal-heading-offset-deg</property>
<step type="string">-30.0</step>
</binding>
</button>
<button n="15">
<desc type="string">Elevation down</desc>
<binding>
<command type="string">property-adjust</command>
<property type="string">/controls/radar/elevation-deg</property>
<step type="string">-5</step>
</binding>
</button>
</PropertyList>
The device inputs with their corresponding (random) selections are:
Throttle Left: (axis) Throttle Engine 0 (input 0.48 @ idle)
Throttle Right (axis 1) Throttle Engine 1 (input 0.46 @ idle)
Dent CLB Left: (button 10) View Left (input 0.01)
Dent CLB RIght: (button 14) View Right (input 0.00)
Dent FLX/MCT Left: (button 9) View Up (input -0.48)
Dent FLX/MCT Right: (button 13) View Down (input -0.49)
Dent TOGA Left: (button 8) Azimuth Left (input -1.00)
Dent TOGA Right: (button 12) Azimuth Right (input -1.00)
Reverser Left: (button 11) Elevation Up (1.00 @ full reverse)
Reverser Right: (button 15) Elevation Down (1.00 @ full reverse)
A/THR Disconnect Left: (button) Aileron Trim Left
A/THR Disconnect Right: (button 1) Aileron Trim Right
Eng Master Left: (button 2) Weapon Previous
Eng Master Right: (button 3) Target Next
CRANK: (button 6) Propeller Coarse
IGN/START:: (button 7) Mixture Rich
Naturally I want to assign them to the relevant A320 modes. I tried to see if there was some hints in the source and looked within the code and found this:
- Code (D:/FlightGear 2020.3/data/Aircraft/A320-family/Nasal/Systems/FADEC/engines-common.nas): Select all
# Engine thrust commands
var doIdleThrust = func {
# Idle does not respect selected engines, because it is used to respond
# to "Retard" and both engines must be idle for spoilers to deploy
pts.Controls.Engines.Engine.throttle[0].setValue(0.0);
pts.Controls.Engines.Engine.throttle[1].setValue(0.0);
}
var doCLThrust = func {
if (pts.Sim.Input.Selected.engine[0].getBoolValue()) {
pts.Controls.Engines.Engine.throttle[0].setValue(0.63);
}
if (pts.Sim.Input.Selected.engine[1].getBoolValue()) {
pts.Controls.Engines.Engine.throttle[1].setValue(0.63);
}
}
var doMCTThrust = func {
if (pts.Sim.Input.Selected.engine[0].getBoolValue()) {
pts.Controls.Engines.Engine.throttle[0].setValue(0.80);
}
if (pts.Sim.Input.Selected.engine[1].getBoolValue()) {
pts.Controls.Engines.Engine.throttle[1].setValue(0.80);
}
}
var doTOGAThrust = func {
if (pts.Sim.Input.Selected.engine[0].getBoolValue()) {
pts.Controls.Engines.Engine.throttle[0].setValue(1.00);
}
if (pts.Sim.Input.Selected.engine[1].getBoolValue()) {
pts.Controls.Engines.Engine.throttle[1].setValue(1.00);
}
}
But at this point I think I'd do more damage than good. I notice that the thrust in the code varies between 0 (IDLE) to 1 (TOGA), where as the throttle seems to vary between 0.5 (IDLE) to -1.00 (TOGA).
Please note, the device doesn't have a Reverser IDLE dent. The closest I can to reverse IDLE is an input value between 0.7-0.8, or the device will through design click to thrust IDLE.
Any help will be greatly appreciated!
Many thanks,
remenary