Jump to content

Thrustmaster HOTAS Warthog Functions Layout


Recommended Posts

When I fired up MSFS 2020 for the first time, it recognized my Thrustmaster HOTAS Warthog stick and throttle. Unlike with some other controllers, MSFS pre-assigned functions to the controllers. I prepared the following documentation.

  1. The default stick layout (tmWhDefault.pdf) for reference, and
  2. A blank function layout (thWhBlank.pdf) for rolling your own.

Click the links to download. Hope some of you might find these useful.

Link to comment
Share on other sites

  • 7 months later...
When I fired up MSFS 2020 for the first time, it recognized my Thrustmaster HOTAS Warthog stick and throttle. Unlike with some other controllers, MSFS pre-assigned functions to the controllers. I prepared the following documentation.
  1. The default stick layout (tmWhDefault.pdf) for reference, and
  2. A blank function layout (thWhBlank.pdf) for rolling your own.

Click the links to download. Hope some of you might find these useful.

 

Thanks, could it be a way you share your Warthog config? (or anyone)

Specially for the switching cams and zoom in zoom out etc.

 

Excuse me, i am a newcomer with this Joystick.

Link to comment
Share on other sites

Here is the .tmc file I use that came from programming the Warthog. It's a text file with the .tmc extension, and I run it via the Target Script Editor -- actually I just drag its icon onto the icon for the Target Script Editor, then when the editor comes up I hit the RUN button. Then you can run the Event Tester and Device Analyzer to see how it's set up and/or test your Warthog. One note: The flap switch is set up to add/remove one "notch" of flaps if you operate the Flap switch for a second or less, and to go to full flaps/full retract if you just operate the switch and leave it there. The remainder of what is set up is shown below, though you may need to consult your manual (or the labels on the box, if you still have it). It's all so "natural" to me now (ingrained habits), after using it for a number of years, and it fits my needs. Hope it helps someone:

 

include "target.tmh"

int main()

{

Configure(&HCougar, MODE_EXCLUDED);

Configure(&T16000, MODE_EXCLUDED);

Configure(&LMFD, MODE_EXCLUDED);

Configure(&RMFD, MODE_EXCLUDED);

if(Init(&EventHandle)) return 1;

SetKBRate(32, 50);

SetKBLayout(KB_ENG);

SetShiftButton(0, 0, 0, 0, 0, 0);

MapKeyIOUMD(&Joystick, TG1, DX1, DX1, DX1, DX1, DX1, DX1);

MapKeyIOUMD(&Joystick, S2, PULSE+DX2, PULSE+DX2, PULSE+DX2, PULSE+DX2, PULSE+DX2, PULSE+DX2);

MapKeyIOUMD(&Joystick, S3, PULSE+L_SHIFT+'s', PULSE+L_SHIFT+'s', PULSE+L_SHIFT+'s', PULSE+L_SHIFT+'s', PULSE+L_SHIFT+'s', PULSE+L_SHIFT+'s');

MapKeyIOUMD(&Joystick, S4, PULSE+DX4, PULSE+DX4, PULSE+DX4, PULSE+DX4, PULSE+DX4, PULSE+DX4);

MapKeyIOUMD(&Joystick, S1, PULSE+DX5, PULSE+DX5, PULSE+DX5, PULSE+DX5, PULSE+DX5, PULSE+DX5);

MapKeyIOUMD(&Joystick, H2U, DX7, DX7, DX7, DX7, DX7, DX7);

MapKeyIOUMD(&Joystick, H2R, DX8, DX8, DX8, DX8, DX8, DX8);

MapKeyIOUMD(&Joystick, H2D, DX9, DX9, DX9, DX9, DX9, DX9);

MapKeyIOUMD(&Joystick, H2L, DX10, DX10, DX10, DX10, DX10, DX10);

MapKeyIOUMD(&Joystick, H4R, PULSE+DX16, PULSE+DX16, PULSE+DX16, PULSE+DX16, PULSE+DX16, PULSE+DX16);

MapKeyIOUMD(&Joystick, H4L, PULSE+DX18, PULSE+DX18, PULSE+DX18, PULSE+DX18, PULSE+DX18, PULSE+DX18);

MapKeyIOUMD(&Joystick, H4P, PULSE+'z', PULSE+'z', PULSE+'z', PULSE+'z', PULSE+'z', PULSE+'z');

MapAxis(&Joystick, JOYX, DX_X_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);

SetSCurve(&Joystick, JOYX, 0, 2, 0, 0, 0);

MapAxis(&Joystick, JOYY, DX_Y_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);

SetSCurve(&Joystick, JOYY, 0, 2, 0, 0, 0);

MapKeyIOUMD(&Throttle, MSP, PULSE+DX26, PULSE+DX26, PULSE+DX26, PULSE+DX26, PULSE+DX26, PULSE+DX26);

MapKeyIOUMD(&Throttle, BSF, CHAIN( D(600), DX8), CHAIN( D(600), DX8), CHAIN( D(600), DX8), CHAIN( D(600), DX8), CHAIN( D(600), DX8), CHAIN( D(600), DX8));

MapKeyIOUMD(&Throttle, BSB, CHAIN( D(600), DX10), CHAIN( D(600), DX10), CHAIN( D(600), DX10), CHAIN( D(600), DX10), CHAIN( D(600), DX10), CHAIN( D(600), DX10));

MapKeyIOUMD(&Throttle, CHF, CHAIN( PULSE+L_CTL+'f', D(200), L_CTL+'f', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED5)), CHAIN( PULSE+L_CTL+'f', D(200), L_CTL+'f', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED5)), CHAIN( PULSE+L_CTL+'f', D(200), L_CTL+'f', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED5)), CHAIN( PULSE+L_CTL+'f', D(200), L_CTL+'f', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED5)), CHAIN( PULSE+L_CTL+'f', D(200), L_CTL+'f', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED5)), CHAIN( PULSE+L_CTL+'f', D(200), L_CTL+'f', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED5)));

MapKeyIOUMD(&Throttle, CHB, CHAIN( PULSE+L_CTL+'d', D(200), L_CTL+'d', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED5)), CHAIN( PULSE+L_CTL+'d', D(200), L_CTL+'d', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED5)), CHAIN( PULSE+L_CTL+'d', D(200), L_CTL+'d', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED5)), CHAIN( PULSE+L_CTL+'d', D(200), L_CTL+'d', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED5)), CHAIN( PULSE+L_CTL+'d', D(200), L_CTL+'d', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED5)), CHAIN( PULSE+L_CTL+'d', D(200), L_CTL+'d', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED5)));

MapKeyIOUMD(&Throttle, PSF, CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)));

MapKeyRIOUMD(&Throttle, PSF, CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)));

MapKeyIOUMD(&Throttle, PSB, CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED1)), CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED1)), CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED1)), CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED1)), CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED1)), CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED1)));

MapKeyRIOUMD(&Throttle, PSB, CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED1)), CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED1)), CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED1)), CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED1)), CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED1)), CHAIN( PULSE+'i', D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED1)));

MapKeyIOUMD(&Throttle, LTB, PULSE+'s', PULSE+'s', PULSE+'s', PULSE+'s', PULSE+'s', PULSE+'s');

MapKeyIOUMD(&Throttle, EFLNORM, CHAIN( PULSE+'e', D(200), PULSE+'1'), CHAIN( PULSE+'e', D(200), PULSE+'1'), CHAIN( PULSE+'e', D(200), PULSE+'1'), CHAIN( PULSE+'e', D(200), PULSE+'1'), CHAIN( PULSE+'e', D(200), PULSE+'1'), CHAIN( PULSE+'e', D(200), PULSE+'1'));

MapKeyRIOUMD(&Throttle, EFLNORM, CHAIN( D(200), PULSE+'e', D(200), PULSE+'1', D(200), PULSE+'2'), CHAIN( D(200), PULSE+'e', D(200), PULSE+'1', D(200), PULSE+'2'), CHAIN( D(200), PULSE+'e', D(200), PULSE+'1', D(200), PULSE+'2'), CHAIN( D(200), PULSE+'e', D(200), PULSE+'1', D(200), PULSE+'2'), CHAIN( D(200), PULSE+'e', D(200), PULSE+'1', D(200), PULSE+'2'), CHAIN( D(200), PULSE+'e', D(200), PULSE+'1', D(200), PULSE+'2'));

MapKeyIOUMD(&Throttle, EFRNORM, CHAIN( PULSE+'e', D(200), PULSE+'2'), CHAIN( PULSE+'e', D(200), PULSE+'2'), CHAIN( PULSE+'e', D(200), PULSE+'2'), CHAIN( PULSE+'e', D(200), PULSE+'2'), CHAIN( PULSE+'e', D(200), PULSE+'2'), CHAIN( PULSE+'e', D(200), PULSE+'2'));

MapKeyRIOUMD(&Throttle, EFRNORM, CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'));

MapKeyIOUMD(&Throttle, EOLMOTOR, CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+L_SHIFT+L_CTL+F1), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+L_SHIFT+L_CTL+F1), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+L_SHIFT+L_CTL+F1), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+L_SHIFT+L_CTL+F1), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+L_SHIFT+L_CTL+F1), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+L_SHIFT+L_CTL+F1));

MapKeyRIOUMD(&Throttle, EOLMOTOR, CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'));

MapKeyIOUMD(&Throttle, EORMOTOR, CHAIN( PULSE+'e', D(), PULSE+'2', D(), PULSE+L_SHIFT+L_CTL+F1), CHAIN( PULSE+'e', D(), PULSE+'2', D(), PULSE+L_SHIFT+L_CTL+F1), CHAIN( PULSE+'e', D(), PULSE+'2', D(), PULSE+L_SHIFT+L_CTL+F1), CHAIN( PULSE+'e', D(), PULSE+'2', D(), PULSE+L_SHIFT+L_CTL+F1), CHAIN( PULSE+'e', D(), PULSE+'2', D(), PULSE+L_SHIFT+L_CTL+F1), CHAIN( PULSE+'e', D(), PULSE+'2', D(), PULSE+L_SHIFT+L_CTL+F1));

MapKeyRIOUMD(&Throttle, EORMOTOR, CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'), CHAIN( PULSE+'e', D(), PULSE+'1', D(), PULSE+'2'));

MapKeyIOUMD(&Throttle, APUON, PULSE+L_CTL+'e', PULSE+L_CTL+'e', PULSE+L_CTL+'e', PULSE+L_CTL+'e', PULSE+L_CTL+'e', PULSE+L_CTL+'e');

MapKeyIOUMD(&Throttle, LDGH, PULSE+L_SHIFT+'e', PULSE+L_SHIFT+'e', PULSE+L_SHIFT+'e', PULSE+L_SHIFT+'e', PULSE+L_SHIFT+'e', PULSE+L_SHIFT+'e');

MapKeyIOUMD(&Throttle, FLAPU, TEMPO(PULSE+F7, PULSE+F5, 900), TEMPO(PULSE+F7, PULSE+F5, 900), TEMPO(PULSE+F7, PULSE+F5, 900), TEMPO(PULSE+F7, PULSE+F5, 900), TEMPO(PULSE+F7, PULSE+F5, 900));

MapKeyIOUMD(&Throttle, FLAPD, TEMPO(PULSE+F6, PULSE+F8, 900), TEMPO(PULSE+F6, PULSE+F8, 900), TEMPO(PULSE+F6, PULSE+F8, 900), TEMPO(PULSE+F6, PULSE+F8, 900), TEMPO(PULSE+F6, PULSE+F8, 900));

MapKeyIOUMD(&Throttle, EACON, LED(&Throttle, LED_ONOFF, LED_CURRENT+LED0), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED0), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED0), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED0), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED0), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED0));

MapKeyIOUMD(&Throttle, RDRNRM, PULSE+L_CTL+'h', PULSE+L_CTL+'h', PULSE+L_CTL+'h', PULSE+L_CTL+'h', PULSE+L_CTL+'h', PULSE+L_CTL+'h');

MapKeyRIOUMD(&Throttle, RDRNRM, PULSE+L_CTL+'h', PULSE+L_CTL+'h', PULSE+L_CTL+'h', PULSE+L_CTL+'h', PULSE+L_CTL+'h', PULSE+L_CTL+'h');

MapKeyIOUMD(&Throttle, APENG, PULSE+L_CTL+'r', PULSE+L_CTL+'r', PULSE+L_CTL+'r', PULSE+L_CTL+'r', PULSE+L_CTL+'r', PULSE+L_CTL+'r');

MapKeyIOUMD(&Throttle, APPAT, PULSE+L_CTL+'n', PULSE+L_CTL+'n', PULSE+L_CTL+'n', PULSE+L_CTL+'n', PULSE+L_CTL+'n', PULSE+L_CTL+'n');

MapKeyIOUMD(&Throttle, APALT, PULSE+L_CTL+'z', PULSE+L_CTL+'z', PULSE+L_CTL+'z', PULSE+L_CTL+'z', PULSE+L_CTL+'z', PULSE+L_CTL+'z');

MapKeyIOUMD(&Throttle, EOLIGN, PULSE+DX19, PULSE+DX19, PULSE+DX19, PULSE+DX19, PULSE+DX19, PULSE+DX19);

MapKeyIOUMD(&Throttle, EORIGN, PULSE+DX20, PULSE+DX20, PULSE+DX20, PULSE+DX20, PULSE+DX20, PULSE+DX20);

MapKeyIOUMD(&Throttle, EACOFF, LED(&Throttle, LED_ONOFF, LED_CURRENT-LED0), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED0), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED0), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED0), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED0), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED0));

MapKeyIOUMD(&Throttle, IDLERON, CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)));

MapKeyRIOUMD(&Throttle, IDLERON, CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)));

MapKeyIOUMD(&Throttle, IDLELON, CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)), CHAIN( F2, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2)));

MapKeyRIOUMD(&Throttle, IDLELON, CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)), CHAIN( PULSE+F1, D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)));

MapKeyIOUMD(&Throttle, CSU, DX22, DX22, DX22, DX22, DX22, DX22);

MapKeyIOUMD(&Throttle, CSD, DX24, DX24, DX24, DX24, DX24, DX24);

MapKeyIOUMD(&Throttle, CSR, DX23, DX23, DX23, DX23, DX23, DX23);

MapKeyIOUMD(&Throttle, CSL, DX25, DX25, DX25, DX25, DX25, DX25);

MapAxis(&Throttle, SCX, DX_XROT_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);

SetSCurve(&Throttle, SCX, 0, 0, 0, 0, 0);

MapAxis(&Throttle, SCY, DX_YROT_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);

SetSCurve(&Throttle, SCY, 0, 0, 0, 0, 0);

MapAxis(&Throttle, THR_RIGHT, DX_Z_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);

SetSCurve(&Throttle, THR_RIGHT, 0, 0, 0, 0, 0);

MapAxis(&Throttle, THR_LEFT, DX_ZROT_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);

SetSCurve(&Throttle, THR_LEFT, 0, 0, 0, 0, 0);

MapAxis(&Throttle, THR_FC, DX_SLIDER_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);

SetSCurve(&Throttle, THR_FC, 0, 0, 0, 0, 0);

 

}

int EventHandle(int type, alias o, int x)

{

DefaultMapping(&o, x);

}

 

Larry N.

As Skylab would say:

Remember: Aviation is NOT an exact Science!

Link to comment
Share on other sites

  • 1 year later...
Thank you so much for taking your time to help others and publish your settings. I'm having problems downloading the PDF, it appears your website is offline. I tried using the Wayback Machine to see if I could find a copy before your site went down but they only archived your landing page. Is there somewhere else I can find your setup? Thank you in advance.
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...