Aide programmation Thrustmaster Warthog TARGET / F4BMS

Pour discuter des problèmes d'nstallation, de bugs et de réglages divers.
Avatar de l’utilisateur

Topic author
Flow32
Elève Pilote
Elève Pilote
Messages : 635
Inscription : février 2018

Aide programmation Thrustmaster Warthog TARGET / F4BMS

Message #1 par Flow32 » 05 avr. 2018, 17:43

AIDE POUR LA PROGRAMMATION DU THRUSTMASTER WARTHOG TARGET / F4BMS
Plus particulièrement destiné à Falcon 4 BMS


Préambule
Je ne suis pas un pro en informatique. Ce post peut contenir des erreurs, merci de m'en faire part et je corrigerais :)
Je m'inspire beaucoup du travail de "Morphine" et du fichier excel pour la programmation clavier de Falcon BMS.
Je l'ai adapté, et selon moi amélioré (à mon niveau)
Je débute avec Falcon BMS, et du coup je ne connais pas encore bien les fonctions qui seront utiles plus tard, quand on "maîtrise un peu plus" :)



Bonjour tout le monde,

Avec ce post je ne cherche pas à faire un nouveau guide de programmation pour le Warthog, il y a déjà l'officiel de chez Thrustmaster, et quelques autres aides, traduites ou pas, que l'on trouve sur le web.
Je cherche plus particulièrement à préciser le fonctionnement avec Falcon 4 BMS, et les différentes interfaces DirectX et/ou TARGET qu'il peut y avoir avec le jeu.

Je me suis lancé là dedans car je cherchais à faire un profil TARGET qui fonctionne avec Falcon 4, mais aussi d'utiliser la programmation DirectX directement dans le jeu par le fichier .key
Beaucoup de ce travail a été inspiré par le profil TARGET de Morphine, duquel j'ai repris beaucoup d'idées.

Mes raisons d'utiliser un profil TARGET :
- Réglage de la sensibilité du curseur = sans modification impossible de cliquer en laissant le curseur sur place (pour moi tout du moins)
- Création d'une courbe de sensibilité pour le stick spécifique lors du ravitaillement air-air. Mon stick est fixé sur le côté de mon fauteil, et du coup la précision des mouvements fins est diminuée par rapport à un positionnement entre les jambes. Peut-être qu'un jour je passerais sur un capteur de force RealSimulator, mais ce n'est pas encore à l'ordre du jour
- Personnalisation plus poussée de mon HOTAS.

Fort de ces constations, je devais passer par un script TARGET pour arriver à mes fins.

Points négatifs à l'utilisation de TARGET :
- Uniquement 32 boutons DirectX programmables, après combinaison du stick et du throttle
- Il faut penser à lancer le script avant de lancer F4BMS
- Capricieux avec Windows 10, des fois la combinaison et la création d'un contrôleur virtuel plante, et c'est bien **** !!


Voilà pour la petite intro, maintenant, le vif du sujet !

ORDRE DES CONTRÔLEURS DANS FALCON BMS
Falcon BMS voit les contrôleurs dans le même ordre que Windows, et l'affectation des touches DirectX en est affecté, explication :
Chaque contrôleur a 32 boutons DirectX. Le premier aura les boutons 0 à 31, le second 32 à 63, etc...
Si votre joystick apparait en second dans la liste (avec le palonnier en premier), il aura alors les boutons 32 à 63. Si c'est bien programmé comme cela dans votre fichier .key, pas de problème. Par contre, si ce n'est pas le cas, il faut forcer un ordre différent.

Pour connaître l'order des contrôleurs dans Windows 10, voici la procédure :

Code : Tout sélectionner

Touches Windows+R pour ouvrir la fenêtre d'exécution, taper joy.cpl et cliquer sur OK


Image

Le contrôleur #1 est le premier dans la liste, le #2 le second, etc...
L'ordre n'est pas vraiment modifiable, et si on s'entête à le modifier, tout peut sauter au prochain redémarrage, donc pas très stable. A laisser tranquile, expérience personnelle !

L'ordre des contrôleurs peut être forcé dans le fichier "DeviceSorting.txt" situé dans le dossier de Falcon BMS/User/Config
A vous de modifier le votre pour que l'ordre soit bien respecté !

LE NOM DES BOUTONS
Lors de la combinaison du stick et du throttle, TARGET crée un contrôleur virtuel "THRUSTMASTER COMBINED" qui les rassemble en un seul contrôleur DirectX, contenant 32 boutons.
Ci-dessous le nom de chaque bouton pour la programmation sous TARGET, ainsi que le numéro DirectX s'il y en a un, dans le cas de l'utilisation de deux contrôleurs séparés (sans script TARGET), ou d'un seul contrôleur "Combined" (avec utilisation d'un script TARGET).

Image

Ensuite, j'ai décidé de faire un maximum de programmation DirectX directement par le fichier Key de Falcon BMS, ce qui n'est pas facile en ligne de code.
Le fichier excel permettant la création de ce fichier clé n'a pas d'option pour le contrôleur "TRUSTMASTER COMBINED", je l'ai donc créé en utiliser la page "GENERIC PRIMARY" que j'ai personnalisé pour l'occasion.
Vous pouvez télécharger le fichier avec le lien à la fin de ce post.

Avec ce fichier vous pouvez directement programmation les 32 premiers boutons DirectX et générer votre fichier clé.
Je ne rentrerais pas dans les détails de son utilisation, vous pouvez tout trouver dans la documentation de Falcon BMS.

Pour les boutons restants, je les ai programmés par des appels clavier en utilisant TARGET.
Afin de rendre la chose plus lisible, j'ai séparé les macros et la programmation. Ca permet de mieux comprendre les étapes, et rend les modifications beaucoup plus faciles.
J'ai nommé les macros avec le même nom que l'appel de fonction F4BMS, comme cela l'édition et la vérification du code est encore plus facile.
J'ai également créé des sensibilités spécifiques pour le curseur et le stick lors du ravitaillement air-air.

Les macros :

Code : Tout sélectionner

define   SimSelectMRMOverride   PULSE+','
define   SimDeselectOverride   PULSE+'c'
define   SimSelectSRMOverride   PULSE+'d'
define   RangeDecrease   AXIS(DX_THROTTLE_AXIS, -500, 20)
define   RangeIncrease   AXIS(DX_THROTTLE_AXIS, 500, 20)
define   SimLightsFlash   PULSE+L_SHIFT+L_CTL+'k'
define   SimExtlMasterNorm   PULSE+L_SHIFT+L_ALT+L_CTL+'t'
define   SimLightsSteady   PULSE+L_SHIFT+L_CTL+'l'
define   SimExtlMasterOff   PULSE+L_SHIFT+L_ALT+L_CTL+'i'
define   SimLaserArmOn   PULSE+L_ALT+'l'
define   SimLaserArmOff   PULSE+L_SHIFT+L_ALT+'l'
define   SimCATI   PULSE+L_SHIFT+L_ALT+L_CTL+'c'
define   SimCATIII   PULSE+L_SHIFT+L_ALT+L_CTL+'v'
define   SimEngContPri   PULSE+L_SHIFT+L_ALT+L_CTL+'y'
define   SimEngContSec   PULSE+L_SHIFT+L_ALT+L_CTL+'u'
define   AFAlternateGear   PULSE+L_ALT+'g'
define   AFAlternateGearReset   PULSE+L_SHIFT+'g'
define   AFGearToggle   PULSE+'g'
define   SimRightAPDown   PULSE+L_SHIFT+L_ALT+L_CTL+'l'
define   SimRightAPMid   PULSE+L_SHIFT+L_ALT+L_CTL+''k'
define   SimRightAPUp   PULSE+L_SHIFT+L_ALT+L_CTL+'j'
define   SimRFNorm   PULSE+L_SHIFT+L_CTL+'r'
define   SimRFQuiet   PULSE+L_SHIFT+L_ALT+L_CTL+'r'
define   SimArmMasterArm   PULSE+L_SHIFT+L_ALT+L_CTL+'w'
define   SimSafeMasterArm   PULSE+L_SHIFT+L_ALT+L_CTL+'x'
define   SimLeftAPUp   PULSE+L_SHIFT+L_ALT+L_CTL+'F'
define   SimLeftAPDown   PULSE+L_SHIFT+L_ALT+L_CTL+'H'
define   SimLeftAPMid   PULSE+L_SHIFT+L_ALT+L_CTL+'G'
define   SimDriftCOOn   PULSE+L_CTL+USB[0x54]
define   SimDriftCOOff   PULSE+L_ALT+USB[0x54]
define   SimParkingBrakeToggle   PULSE+L_ALT+'p'
define   SimFuelDoorOpen   PULSE+L_SHIFT+L_ALT+L_CTL+'q'
define   SimFuelDoorClose   PULSE+L_SHIFT+L_ALT+L_CTL+'s'
define   JoySensitivityReduced   CHAIN(EXEC("SetSCurve(&Joystick, JOYX,0,0,0,0,-1);SetSCurve(&Joystick, JOYY,0,0,0,0,-1);"), D(), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED5))
define   JoySensitivityNorm   CHAIN(EXEC("SetSCurve(&Joystick, JOYX,0,0,0,0,0);SetSCurve(&Joystick, JOYY,0,0,0,0,0);"), D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED5))
define   SimToggleTFR   PULSE+L_CTL+'q'
define   SimDoNothing   0
define   TrackIRRecenter   0
define   TrackIRPause   0
define   TeamSpeakPTT   0
define   TeamSpeakWhisper   0
define   VoiceAttack   0


Le script :

Code : Tout sélectionner

include "target.tmh"
include "F4BMSTargetMacros.ttm"  //Keystrokes macro
int main()
{

Configure(&LMFD, MODE_EXCLUDED);
Configure(&RMFD, MODE_EXCLUDED);
Configure(&HCougar, MODE_EXCLUDED);
Configure(&T16000, MODE_EXCLUDED);
Configure(&TWCSThrottle, MODE_EXCLUDED);
Configure(&TFRPRudder, MODE_EXCLUDED);
Configure(&T16000L, MODE_EXCLUDED);

if(Init(&EventHandle)) return 1;

SetKBRate(32, 50);
SetKBLayout(KB_FR);
SetShiftButton(&Joystick, S3);

////////////////// LED CONTROLS //////////////////////////////

//initialize LED status all "OFF"
ActKey(PULSE+KEYON+LED(&Throttle, LED_ONOFF, LED_CURRENT-LED1)); //set LED 1 OFF
ActKey(PULSE+KEYON+LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)); //set LED 2 OFF
ActKey(PULSE+KEYON+LED(&Throttle, LED_ONOFF, LED_CURRENT-LED3)); //set LED 3 OFF
ActKey(PULSE+KEYON+LED(&Throttle, LED_ONOFF, LED_CURRENT-LED4)); //set LED 4 OFF
ActKey(PULSE+KEYON+LED(&Throttle, LED_ONOFF, LED_CURRENT-LED5)); //set LED 5 OFF

//LED Throttle Position Indicator; LED 1 - MIL Power; LED 2 - AfterBurner
KeyAxis(&Throttle, THR_LEFT, 0, AXMAP2( LIST( 0, 65, 75 ),
                                 LED(&Throttle, LED_ONOFF, LED_CURRENT-LED1),                                              //0 to 65% throttle
                                 CHAIN( LED(&Throttle, LED_ONOFF, LED_CURRENT+LED1), D(), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2)),  //65 to 75% throttle
                                 CHAIN( LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2))));                                      //>75% throttle

////////////////// AXIS CONTROLS //////////////////////////////

MapAxis(&Joystick, JOYX, DX_X_AXIS);
MapAxis(&Joystick, JOYY, DX_Y_AXIS);

MapAxis(&Throttle, THR_LEFT, DX_ZROT_AXIS);
SetCustomCurve(&Throttle, THR_LEFT, LIST(0,5, 65,70, 75,70, 100,100)); //start at 5% for idle cuttoff & create a deadzone between 65% and 75% for AB

MapAxis(&Throttle, THR_RIGHT, DX_Z_AXIS);
SetCustomCurve(&Throttle, THR_RIGHT, LIST(0,5, 65,70, 75,70, 100,100)); //start at 5% for idle cuttoff & create a deadzone between 65% and 75% for AB

//Cursor control :
MapAxis(&Throttle, SCX, DX_XROT_AXIS);
SetSCurve(&Throttle, SCX,    0,   //Left Deadzone
                     95,  //Center Deadzone
                     0,   //Right Deadzone
                     0,   //Curve
                     -1); //Scale/zoom

MapAxis(&Throttle, SCY, DX_YROT_AXIS);
SetSCurve(&Throttle, SCY,    0,   //Left Deadzone
                     95,  //Center Deadzone
                     0,   //Right Deadzone
                     0,   //Curve
                     -1); //Scale/zoom

MapAxis(&Throttle, THR_FC, DX_SLIDER_AXIS);
SetSCurve(&Throttle, THR_FC, 0, 0, 0, 5, 0); //Radar antenna elevation. Reduced sensitivity in the center.

////////////////// Idle Cutoff Code //////////////////////////////

MapKey (&Throttle, IDLELON,
EXEC("TrimDXAxis(DX_ZROT_AXIS, 90);"
));

MapKeyR (&Throttle, IDLELON,
EXEC("TrimDXAxis(DX_ZROT_AXIS, SET(0));"
));

MapKey (&Throttle, IDLERON,
EXEC("TrimDXAxis(DX_Z_AXIS, 90);"
));

MapKeyR (&Throttle, IDLERON,
EXEC("TrimDXAxis(DX_Z_AXIS, SET(0));"
));

////////////////// JOYSTICK KEY MAPPING //////////////////////////////

//TG1
   //keyflie controlled

//Pickle/S2
   //keyflie controlled

//Pinky/S3
   //keyflie controlled

//Paddle/S4
   //keyflie controlled

//MslStep/S1
   //keyflie controlled

//TG2
   //keyflie controlled

//TMS/H2
   //keyflie controlled

//DMS/H3
   //keyflie controlled
   
//CMS/H4/Z-Axis
   //keyflie controlled

////////////////// THROTTLE KEY MAPPING //////////////////////////////

//Left Throttle Button
   //keyflie controlled

//Cursor Button
   //keyflie controlled

//Coolie Switch
   //keyflie controlled
   
//Mic Switch
   //Keyfile controlled
   
//Speedbrakes
   //keyflie controlled

//Boat Switch
   MapKey(&Throttle, BSF, SimSelectMRMOverride);
   MapKey(&Throttle, BSM, SimDeselectOverride);
   MapKey(&Throttle, BSB, SimSelectSRMOverride);

//China Hat
   MapKey(&Throttle, CHF, RangeDecrease);
   MapKey(&Throttle, CHB, RangeIncrease);

//Pinky Switch
   MapKey(&Throttle, PSF, CHAIN(SimExtlMasterNorm, D(), SimLightsFlash));
   MapKey(&Throttle, PSM, CHAIN(SimExtlMasterNorm, D(), SimLightsSteady));
   MapKey(&Throttle, PSB, SimExtlMasterOff);

//Engine Fuel Flow Left
   MapKey(&Throttle, EFLNORM, SimRFNorm);
   MapKey(&Throttle, EFLOVER, SimRFQuiet);
   
//Engine Fuel Flow Right
   MapKey(&Throttle, EFRNORM, SimDriftCOOn);
   MapKey(&Throttle, EFROVER, SimDriftCOOff);

//Engine Operate Left
    MapKey(&Throttle, EOLIGN, SimDoNothing);
   MapKey(&Throttle, EOLNORM, SimEngContPri);
   MapKey(&Throttle, EOLMOTOR, SimEngContSec);
   
//Engine Operate Right
   MapKey(&Throttle, EORIGN, SimDoNothing);
   MapKey(&Throttle, EORNORM, SimCATI);
   MapKey(&Throttle, EORMOTOR, SimCATIII);

//APU
   MapKey(&Throttle, APUON, CHAIN(SimFuelDoorClose, D(), JoySensitivityNorm));
   MapKey(&Throttle, APUOFF, CHAIN(SimFuelDoorOpen, D(), JoySensitivityReduced));

//Landing Gear
   MapKeyIO(&Throttle, LDGH, SEQ(AFAlternateGear, AFAlternateGearReset), AFGearToggle);

//Autopilot
   MapKey(&Throttle, APPAT, SimRightAPDown);
   MapKey(&Throttle, APAH, SimRightAPMid);
   MapKey(&Throttle, APALT, SimRightAPUp);

//Autopilot Engage/Disengage
   MapKeyIO(&Throttle, APDIS, SimParkingBrakeToggle, SimToggleTFR);

//Radar Altimeter
   MapKey(&Throttle, RDRNRM, SimLaserArmOn);
   MapKey(&Throttle, RDRDIS, SimLaserArmOff);

//EAC
   MapKey(&Throttle, EACON, SimArmMasterArm);
   MapKey(&Throttle, EACOFF, SimSafeMasterArm);

//Flaps
   MapKey(&Throttle, FLAPU, SimLeftAPUp);
   MapKey(&Throttle, FLAPD, SimLeftAPDown);
   MapKey(&Throttle, FLAPM, SimLeftAPMid);

//Idle Off
   //See Idle Cutoff code in Axis Controls

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


Et le tout en téléchargement :

https://www.dropbox.com/s/v95btb3w7u8je ... G.zip?dl=0


Voilà, j'espère que cela vous donne un peu plus de matière pour personnaliser votre Warthog :)
Tout ça sont des infos qui me manquaient quand j'ai programmé le miens, et je souhaite que mes recherches vous facilitent un peu la vie !
Image
Avatar de l’utilisateur

Vico
Pilote Philanthrope
Pilote Philanthrope
Messages : 3344
Inscription : avril 2009
Localisation : Lille (59) - LFQQ

Re: Aide programmation Thrustmaster Warthog TARGET / F4BMS

Message #2 par Vico » 06 avr. 2018, 11:52

En lisant le début du post, j'ai cru à une demande d'aide :hum: ...alors que c'est un petit tuto sans nul doute bien sympa pour les possesseurs de Warthog. :yes: . :notworthy
Image
CM MSI Z97 - Core I7 4790 3,60 GHz - 8 Go DDR3 Kingston -NVIDIA GeForce GTX970 4Go DDR5- HOTAS Cougar modé FCC1 - Saitek Pro Combat Rudder Pedals - ED Tracker - MFD Cougar - ICP "CatPlombe" - Carte Pokeys - Windows Seven 64 bits avec Falcon BMS 4.33
Avatar de l’utilisateur

Topic author
Flow32
Elève Pilote
Elève Pilote
Messages : 635
Inscription : février 2018

Re: Aide programmation Thrustmaster Warthog TARGET / F4BMS

Message #3 par Flow32 » 06 avr. 2018, 13:31

Oui, c'est pour tenter d'aider ceux qui veulent utiliser un script TARGET avec F4BMS :)
J'ai pas mal galéré, et fais pas mal de recherches, et du coup si ça peut aider, ce sera avec plaisir !
Image

Revenir vers « Support technique »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités