News:

Precision Simulator update 10.188 (22 June 2026) is now available.
Navburo update 13 (23 November 2022) is now available.
NG FMC and More is released.

Main Menu

Thrustmasters TCA yoke Pack Boeing Edition

Started by om, Sun, 9 Mar 2025 13:08

om

Hey everyone!,
I have just bought Thrustmasters TCA yoke Pack Boeing Edition (TYP). It seems very nice and really increase my simulation environment. On the otherhand, even though it equips various useful functional hardware, i.e., "gear lever" or MCP function, I can't assign these function to PSX. For the case of landing gear, as TYP has only two mode which is "up" and "down" whereas real ship has three mode which is "up","down" and "off", I can't gear up by TYP, neither set and heading or other items.
I would appreciate if anyone can advise me about the resolusion.
Thanks!

Jeroen Hoppenbrouwers

What software comes with this unit? Can you assign whatever keystrokes to functions, can you mini-program it for multiple keystrokes, etc?

voipmeister

Hi om, I suggest you have a look at the Github repository of macroflight (who is also a user here): https://github.com/macroflight/psxhacks

You'd need to install python and download the scripts from Github and use them. The README should be self-explanatory.
Seb

om

Thank you very much for the quick response to my request.
What I've done is to assign key bottoms and/or swiches of TYP and TCA Quadrant Boeing Edition to PSX USB preference. Various key functions went well, however, as I mentioned, heading serector, IAS and alltitude, from TCA Quadrant Boeing Editionan can't be set.
om

Hardy Heinlin

Note that in one of the latest PSX updates I introduced these additional key combinations for 2-way landing gear selectors:

CTRL+ALT+U (directly up)

CTRL+ALT+D (directly down)

This excludes the OFF step in between.


|-|ardy

macroflight

The PSX USB interface works very well but is a bit limited. You can assign USB axes and buttons to certain PSX functions. If a PSX function is not in the list, you can't map an USB device to that function. If you want to go beyond that, you will need to talk directly to PSX via the much more complete network protocol (discussed in the Networkers part of this forum).

In the "psxhacks" GitHub repo I have some utilities I've written for PSX (using Hoppie's excellent psx.py module), among them "frankenusb.py" which can connect USB peripherals to PSX in a more flexible way.
 
To use any of these utilities you need to be somewhat comfortable editing config files, starting things from a PowerShell window, etc. If you can write Python code, you can also add new features yourself. I wrote these utilities for my own use and they are only as user-friendly as I need them to be. :) I'm happy to help if you want to try, but some effort on your part will be needed. Feel free to reach out on Discord if you need help.

The frankenusb.py script receives (using pygame) USB axis and button events. It then looks these up in a config file and performs actions in PSX. Some action types are simple, e.g "SET" which just sends a value to a PSX variable (e.g GearLever). Some are more complex, like "THROTTLE_WITH_REVERSE_BUTTON", which uses one USB axis and one USB button to control one or more PSX thrust+reverse levers (the button toggles between normal mode in which the axis goes from idle to full power, and reverse mode in which the axis goes from idle reverse to full reverse).

The TM yoke gear lever should be possible to use with frankenusb.py. If I remember correctly, the two-position gear lever is actually a single USB button which is pressed when the lever is down and released when the lever is up. TO use it you would tell frankenusb.py to send "gear lever up" to PSX when it gets a USB button up event and "gear lever down" when it gets a USB button down event.

If you want to handle the neutral position there are several ways:
- map another button to send "gear lever neutral" to PSX
- set it to neutral yourself by clicking in the PSX window
- let the PSX copilot do it for you

The Thrustmaster Boeing throttle: I have it but don't use it with PSX anymore since I now have HOTAS throttle with even more buttons. :)

It should be possible to extend frankenusb.py to handle this knob but it would require some Python coding. E.g have three virtual rotaries, the HDG/IAS/ALT selector decides which of the virtual rotaries the physical one controls. But IIRC there was some extra complication... I think the physical rotary sent USB button presses, but only when you stopped or started moving it, or something like that. It was strange enough to make me give up temporarily, and then I got other hardware which had friendlier rotary buttons.


om

Thank you once again for the kind and useful advises. Unfortunately, I'm not familiar with Python Code, seem to be hard to follow the advises. I hope Hardy will add various functions like landing gear selectors to PSX USB preferences in a near future.
Thanks!

Jeroen Hoppenbrouwers

But Hardy did?!

There is no established USB "Gear Down" standard. It's always a keystroke that eventually comes out. And PSX has those, especially designed for no-OFF-position simplified gear levers -- see three posts up.

So you need the program that comes with your USB controls to tell the thing to emit CTRL+ALT+U when you flip the gear lever up, and it will all be fine.

Hardy Heinlin

The keystrokes for the MCP and many other things are listed in the Aerowinx manual on pages 30 thru 34.

Will

What I have found helpful is to use a program that intercepts controller buttons and transforms those button presses into keyboard commands for PSX. (I use SPAD.next, but there are other options.) Then as long as PSX has a keypress available for a command, it's simple to map that action to any controller button. You can control everything on the MCP this way, along with a number of other things, such as the landing gear.

(I've fantasized about an interpreter that would intercept controller commands and send them directly into the PSX network, thus expanding the repertoire of what could be done with hardware, but that exceeds my programming skillset. I'd contribute to someone's GoFundMe if they were realistically working on this...)
Will /Chicago /USA

Jeroen Hoppenbrouwers

It's quite straightforward to build a program that receives USB HID events (https://en.wikipedia.org/wiki/USB_human_interface_device_class) and then kicks a piece of code to do anything. As usual the real work is to write all those pieces so that they do something. And with nearly everybody having different needs and wishes, this quickly becomes a long list of alternatives. Before you know it, 90% of the program becomes the user interface to select which programmed action is linked to which USB HID event.

There are helpful Python libraries for the base and my PSX Python module does the PSX side. It's not rocket science. But again, don't expect a click-and-assign interface as that is the real work.


Hoppie

macroflight

Quote from: Jeroen Hoppenbrouwers on Fri, 14 Mar 2025 06:42It's quite straightforward to build a program that receives USB HID events
After having written just the thing that Will fantasizes about, I can only say that Hoppie is 100% right. It is not that hard to write something that does what I want done, but to give it a pretty GUI and enough flexibility to work with any USB device and any user's own preference of how things should work is a LOT more work. :)

Hardy Heinlin

For the GUI developer, to provide user defined functions, this might be the easiest way: For each USB button provide a simple editable text line where the user can enter a pure Q message like "Qh34=-1", for example. That can be directly sent into the PSX network. No hard coded specific GUI labels and menus for every button but just one universal text edit field for every button.

macroflight

Quote from: Hardy Heinlin on Fri, 14 Mar 2025 13:47For the GUI developer, to provide user defined functions, this might be the easiest way:
It's easy but still a bit limited. Example: my throttle, which I want mapped so that it normally controls the PSX Tla from idle to full power but can be toggled by an USB button to instead go from reverse idle to full reverse. And of course I don't have four levers, only two, so I need to map one USB axis to two PSX thrust levers, ...

But most things can be handled in a simple way, absolutely. If you look in my sample config file, most parts look a bit like what you suggest, e.g this which set the PSX variable ParkBrkLev to 1 when USB button 7 on the STECS throttle is pushed.

'S-TECS MODERN THROTTLE STANDARD': {
  'button down': {
      7: {
        'button type': 'SET',
        'psx variable': 'ParkBrkLev',
        'value':1,
      },

Some things are slightly more complicated - here I use a button to decrease the ND Range:
26: {
   'button type': 'INCREMENT',
   'psx variable': 'EcpNdRangeCp',
   'increment': -1,
   'min': 0, 'max': 7, 'wrap': True,
},

And then you discover your joystick is noisy, so you need to add a nullzone, and then you realize that you are using half of your very limited speedbrake lever range for the ground range that you never use anyway, so you need to make custom non-linear thingy for that, ... this hobby never ends. :)

Hardy Heinlin


macroflight

Quote from: Hardy Heinlin on Fri, 14 Mar 2025 15:32Great. You've done it already :-)
It's a config file, not GUI. And not the most user-friendly... but it's available to anyone bold enough to try and I'm happy to help people get started (Discord recommended).

Hardy Heinlin

That's what I meant; a text config instead of a GUI. You've done it :-)