TARGET software - Virtual HOTAS

I’ve been try to use the Target software so I can add curves to my pitch and roll axis to improve my FA Off flying.

Can get to the point where I run the script but when I then open Elite Dangerous I can’t see the virtual hotas to enable me to select it and then go fly.

I am sure it will be something simple but I’ve tried for a couple of days now with no luck. Can anyone help?
 
You can't "select" is as such, you need to re-bind the keys since the HOTAS has now become "Thrustmaster Combiined" (or similar) instead of what it was called previously.

Because of the way that Target works I think you will have to bind all of the buttons to a key or mouse press or DX button etc, there is no default mapping and the buttons on the stick don't automatically passthrough to the "Thrustmaster Combined" controller, so unless you assign a mapping in Target they will not do anything. Once you have assigned an action to them in Target you can then bind them in ED.

Because of this I stuck with the default keyboard/mouse keymapping for ED as a base setup and assigned the keystroke in Target to match what I wanted.
 
If you decide to do this I suggest also creating a Target macro file that will assign eg GearDown to g. Then in your Target files you can put GearDown as the assigned action rather than g, which makes it easier to remember what you have done later.
 
You can't "select" is as such, you need to re-bind the keys since the HOTAS has now become "Thrustmaster Combiined" (or similar) instead of what it was called previously.

Because of the way that Target works I think you will have to bind all of the buttons to a key or mouse press or DX button etc, there is no default mapping and the buttons on the stick don't automatically passthrough to the "Thrustmaster Combined" controller, so unless you assign a mapping in Target they will not do anything. Once you have assigned an action to them in Target you can then bind them in ED.

Because of this I stuck with the default keyboard/mouse keymapping for ED as a base setup and assigned the keystroke in Target to match what I wanted.
So does this mean in the elite dangerous options menu you select “blank” and re-assign all binds?

I was expecting to see a joystick called “Thrustmaster Combined” in the options screen.
 
I got it all running but I am not sure its all done correctly. My setup includes T.16000M, TWCS Throttle and TFRP Peddles. The peddles have always been connected to my PC via a dedicated USB plug, however to get Target to work I needed to use the RJ45 plug from the peddles into the back of the TWCS Throttle. I also needed to Delete the file "DeviceManagementApp.exe" from "\Program Files (x86)\Thrustmaster\TARGET\" directory. A clever guy ad worked out that this file was responsible for unhooking and reallocating the USB connections required when running/stopping the target script this allows the Virtual joystick to take the place of the three devices and also to return the three devices back to working when you've finished. Apparently Windows 10 does it all by default now and the two apps just clash and cause intermittent loss of the joystick. The last trick needed was to reassign the various 8 axis across the three controllers I ended up not using any on the actual peddles instead I set the Yaw through the throttle. You can see that on the attached screenshot, also not in yellow I replaced JOYY on the Joystick with DX_slider Axis, this seemed to be needed to get the script to run but I will take another look tomorrow incase it was getting messed up with "DeviceManagementApp.exe".

Config.jpg


Like I am sure most people I now want to actuate the curves via a button, so in FA-on they are straight lines and with FA-off they get activated as S curves.

Here is my code so far

Code:
include "target.tmh"
int main()
{
    Configure(&HCougar, MODE_EXCLUDED);
    Configure(&Joystick, MODE_EXCLUDED);
    Configure(&JoystickF18, MODE_EXCLUDED);
    Configure(&Throttle, MODE_EXCLUDED);
    Configure(&A320Pilot, MODE_EXCLUDED);
    Configure(&A320Copilot, MODE_EXCLUDED);
    Configure(&TCAQuadrant12, MODE_EXCLUDED);
    Configure(&TCAQuadrant34, MODE_EXCLUDED);
    Configure(&TCAYokeBoeing, MODE_EXCLUDED);
    Configure(&TCAQBoeing12, MODE_EXCLUDED);
    Configure(&TCAQBoeing34, MODE_EXCLUDED);
    Configure(&T16000L, MODE_EXCLUDED);
    Configure(&LMFD, MODE_EXCLUDED);
    Configure(&RMFD, MODE_EXCLUDED);
    Configure(&TFRPHARudder, MODE_EXCLUDED);
    if(Init(&EventHandle)) return 1;
    SetKBRate(32, 50);
    SetKBLayout(KB_ENG);
    SetShiftButton(0, 0, 0, 0, 0, 0);
    MapKeyIOUMD(&T16000, TS1, SPC, SPC, SPC, SPC, SPC, SPC);
    MapKeyIOUMD(&T16000, TS2, PULSE+'g', PULSE+'g', PULSE+'g', PULSE+'g', PULSE+'g', PULSE+'g');
    MapKeyIOUMD(&T16000, TS3, 'h', 'h', 'h', 'h', 'h', 'h');
    MapKeyIOUMD(&T16000, TS4, PULSE+'f', PULSE+'f', PULSE+'f', PULSE+'f', PULSE+'f', PULSE+'f');
    MapKeyIOUMD(&T16000, B5, PULSE+'i', PULSE+'i', PULSE+'i', PULSE+'i', PULSE+'i', PULSE+'i');
    MapKeyIOUMD(&T16000, B6, PULSE+'j', PULSE+'j', PULSE+'j', PULSE+'j', PULSE+'j', PULSE+'j');
    MapKeyIOUMD(&T16000, B7, PULSE+'k', PULSE+'k', PULSE+'k', PULSE+'k', PULSE+'k', PULSE+'k');
    MapKeyIOUMD(&T16000, B8, PULSE+'l', PULSE+'l', PULSE+'l', PULSE+'l', PULSE+'l', PULSE+'l');
    MapKeyIOUMD(&T16000, B9, PULSE+'m', PULSE+'m', PULSE+'m', PULSE+'m', PULSE+'m', PULSE+'m');
    MapKeyIOUMD(&T16000, B10, PULSE+'n', PULSE+'n', PULSE+'n', PULSE+'n', PULSE+'n', PULSE+'n');
    MapKeyIOUMD(&T16000, B11, PULSE+'o', PULSE+'o', PULSE+'o', PULSE+'o', PULSE+'o', PULSE+'o');
    MapKeyIOUMD(&T16000, B12, PULSE+'p', PULSE+'p', PULSE+'p', PULSE+'p', PULSE+'p', PULSE+'p');
    MapKeyIOUMD(&T16000, B13, PULSE+'q', PULSE+'q', PULSE+'q', PULSE+'q', PULSE+'q', PULSE+'q');
    MapKeyIOUMD(&T16000, B14, PULSE+'r', PULSE+'r', PULSE+'r', PULSE+'r', PULSE+'r', PULSE+'r');
    MapKeyIOUMD(&T16000, B15, PULSE+'a', PULSE+'a', PULSE+'a', PULSE+'a', PULSE+'a', PULSE+'a');
    MapKeyIOUMD(&T16000, B16, PULSE+'t', PULSE+'t', PULSE+'t', PULSE+'t', PULSE+'t', PULSE+'t');
    MapKeyIOUMD(&T16000, H1U, CHAIN( D(10), 'w'), CHAIN( D(10), 'w'), CHAIN( D(10), 'w'), CHAIN( D(10), 'w'), CHAIN( D(10), 'w'), CHAIN( D(10), 'w'));
    MapKeyIOUMD(&T16000, H1R, CHAIN( D(10), 'd'), CHAIN( D(10), 'd'), CHAIN( D(10), 'd'), CHAIN( D(10), 'd'), CHAIN( D(10), 'd'), CHAIN( D(10), 'd'));
    MapKeyIOUMD(&T16000, H1D, CHAIN( D(10), 'd'), CHAIN( D(10), 'd'), CHAIN( D(10), 'd'), CHAIN( D(10), 'd'), CHAIN( D(10), 'd'), CHAIN( D(10), 'd'));
    MapKeyIOUMD(&T16000, H1L, CHAIN( D(10), 's'), CHAIN( D(10), 's'), CHAIN( D(10), 's'), CHAIN( D(10), 's'), CHAIN( D(10), 's'), CHAIN( D(10), 's'));
    MapAxis(&T16000, JOYX, DX_X_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&T16000, JOYX, 0, 4, 0, 4, 0);
    MapAxis(&T16000, JOYY, DX_SLIDER_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&T16000, JOYY, 0, 4, 0, 4, 0);
    MapAxis(&T16000, RUDDER, 0, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&T16000, RUDDER, 0, 0, 0, 0, 0);
    MapAxis(&T16000, THR, 0, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&T16000, THR, 0, 0, 0, 0, 0);
    MapAxis(&TFRPRudder, TRPRIGHT, 0, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TFRPRudder, TRPRIGHT, 0, 0, 0, 0, 0);
    MapAxis(&TFRPRudder, TRUDDER, 0, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TFRPRudder, TRUDDER, 0, 0, 0, 0, 0);
    MapAxis(&TFRPRudder, TRPLEFT, 0, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TFRPRudder, TRPLEFT, 0, 0, 0, 0, 0);
    MapKeyIOUMD(&TWCSThrottle, TBTN1, PULSE+'/', PULSE+'/', PULSE+'/', PULSE+'/', PULSE+'/', PULSE+'/');
    MapKeyIOUMD(&TWCSThrottle, TBTN2, 'z', 'z', 'z', 'z', 'z', 'z');
    MapKeyIOUMD(&TWCSThrottle, TBTN3, 'y', 'y', 'y', 'y', 'y', 'y');
    MapKeyIOUMD(&TWCSThrottle, TBTN4, PULSE+'u', PULSE+'u', PULSE+'u', PULSE+'u', PULSE+'u', PULSE+'u');
    MapKeyIOUMD(&TWCSThrottle, TBTN5, PULSE+'v', PULSE+'v', PULSE+'v', PULSE+'v', PULSE+'v', PULSE+'v');
    MapKeyIOUMD(&TWCSThrottle, THAT1U, PULSE+'5', PULSE+'5', PULSE+'5', PULSE+'5', PULSE+'5', PULSE+'5');
    MapKeyIOUMD(&TWCSThrottle, THAT1R, PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6');
    MapKeyIOUMD(&TWCSThrottle, THAT1D, PULSE+'7', PULSE+'7', PULSE+'7', PULSE+'7', PULSE+'7', PULSE+'7');
    MapKeyIOUMD(&TWCSThrottle, THAT1L, PULSE+'8', PULSE+'8', PULSE+'8', PULSE+'8', PULSE+'8', PULSE+'8');
    MapKeyIOUMD(&TWCSThrottle, THAT3U, PULSE+'9', PULSE+'9', PULSE+'9', PULSE+'9', PULSE+'9', PULSE+'9');
    MapKeyIOUMD(&TWCSThrottle, THAT3R, PULSE+'0', PULSE+'0', PULSE+'0', PULSE+'0', PULSE+'0', PULSE+'0');
    MapKeyIOUMD(&TWCSThrottle, THAT3D, PULSE+',', PULSE+',', PULSE+',', PULSE+',', PULSE+',', PULSE+',');
    MapKeyIOUMD(&TWCSThrottle, THAT3L, PULSE+'.', PULSE+'.', PULSE+'.', PULSE+'.', PULSE+'.', PULSE+'.');
    MapKeyIOUMD(&TWCSThrottle, THAT2U, PULSE+'1', PULSE+'1', PULSE+'1', PULSE+'1', PULSE+'1', PULSE+'1');
    MapKeyIOUMD(&TWCSThrottle, THAT2R, PULSE+'2', PULSE+'2', PULSE+'2', PULSE+'2', PULSE+'2', PULSE+'2');
    MapKeyIOUMD(&TWCSThrottle, THAT2D, PULSE+'3', PULSE+'3', PULSE+'3', PULSE+'3', PULSE+'3', PULSE+'3');
    MapKeyIOUMD(&TWCSThrottle, THAT2L, PULSE+'4', PULSE+'4', PULSE+'4', PULSE+'4', PULSE+'4', PULSE+'4');
    MapAxis(&TWCSThrottle, TRDR, DX_Y_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TWCSThrottle, TRDR, 0, 0, 0, 0, 0);
    MapAxis(&TWCSThrottle, TTHR, DX_THROTTLE_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TWCSThrottle, TTHR, 0, 0, 0, 0, 0);
    MapAxis(&TWCSThrottle, TANT, DX_ZROT_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TWCSThrottle, TANT, 0, 0, 0, 0, 0);
    MapAxis(&TWCSThrottle, TMSTX, DX_XROT_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TWCSThrottle, TMSTX, 0, 0, 0, 0, 0);
    MapAxis(&TWCSThrottle, TMSTY, DX_YROT_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TWCSThrottle, TMSTY, 0, 14, 0, 0, 0);
    MapAxis(&TWCSThrottle, TCSRIGHT, 0, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TWCSThrottle, TCSRIGHT, 0, 0, 0, 0, 0);
    MapAxis(&TWCSThrottle, TCSRUDDER, DX_Z_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TWCSThrottle, TCSRUDDER, 0, 6, 0, 0, 0);
    MapAxis(&TWCSThrottle, TCSLEFT, 0, AXIS_NORMAL, MAP_ABSOLUTE);
    SetSCurve(&TWCSThrottle, TCSLEFT, 0, 0, 0, 0, 0);

}
int EventHandle(int type, alias o, int x)
{
    DefaultMapping(&o, x);
}

Ive read the Script manual and at first glance it seems to have what I need but I have not tried it yet and I am wondering how to "toggle" the event.

Example from the manual: If anyone as a working example I would be very grateful to see it.

Code:
Axis control with buttons
You may also manage axes with any kind of button. This is a good alternative solution to accurately control a
mixture or a range parameter without mapping a physical axis controller.
Syntax:
AXIS(DirectX axis name, increment, delay before repeat);
Example: virtual mouse over the Joystick HAT 2
MapKey(&Joystick, H1U, AXIS(MOUSE_Y_AXIS, -80, 20));
MapKey(&Joystick, H1D, AXIS(MOUSE_Y_AXIS, 80, 20));
MapKey(&Joystick, H1L, AXIS(MOUSE_X_AXIS, -80, 20));
MapKey(&Joystick, H1R, AXIS(MOUSE_X_AXIS, 80, 20));

Thanks
 
It looks like if you connect the pedals via the throttle then the pedals are no longer accesable on their own but appear as part of the throttle setup. My guess is that you could remove them from the list of controllers without causing an issue.
 
I think your right, I am playing with the script editor side now rather than the GUI side and will look to change it there. In the meantime I have scripted the curves so that they come on when I am in FA-off and revert to straight line full sensitivity when I am in FA-On.

Change this line

Code:
MapKeyIOUMD(&TWCSThrottle, THAT1R, PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6');

To this

Code:
MapKey(&TWCSThrottle, THAT1R, SEQ(CHAIN ( PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6', EXEC("SetSCurve(&T16000, JOYX, 0, 0, 0, 0, 0); SetSCurve(&T16000, JOYY, 0, 0, 0, 0, 0);")), CHAIN( PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6', PULSE+'6', EXEC("SetSCurve(&T16000, JOYX, 0, 6, 0, 6, 0); SetSCurve(&T16000, JOYY, 0, 6, 0, 6, 0);"))));//TOGGLE Axes based on FA On Off; //FA On Off
 
Back
Top Bottom