Appui court / long Pinkie sous Target

Salle dedieé aux péripheriques : Joystick, palloniers, Track-Ir
Avatar de l’utilisateur

Topic author
Fullnegi
Rédacteur
Rédacteur
Messages : 2142
Inscription : 17 juin 2009

Appui court / long Pinkie sous Target

#1

Message par Fullnegi »

Salut !

Tout est dans le titre, je partage car j'ai du faire une recherche pour un ami.

Certains ont un Warthog (ou même un Cougar) et travail sous Target et il leur était très difficile de pouvoir programmer un pinkie switch "à l'ancienne".
C'est à dire appui court : assignation d'un raccourci (pinkie dans Falcon par ex.) et appui long : DX Shift (pour "doubler" les autres boutons)

Voici donc le code que donne le service Thrusmaster afin de pouvoir faire les deux à la fois.
En espérant que ça puisse en aider quelques-un.
Quant au switch I/O, le paramétrage que vous souhaitez faire n'est pas normalement possible, même dans le Script Editor.
Il est par contre possible de créer une nouvelle commande de zéro qui puisse générer ce résultat.
Vous trouverez ci-dessous un exemple de code qui fait justement cela. NB : cet exemple de code (qui correspond au joystick HOTAS Warthog) est le plus loin qu'on peut aller pour vous aider avec ce problème de switch.

Code : Tout sélectionner

include "target.tmh" //program startup define VIRTUAL_SHIFT 51 int main() { if(Init(&EventHandle)) return 1; // declare the event handler, return on error MapKey(&Joystick, TG1, TEMPO(0, EXEC("Joystick[VIRTUAL_SHIFT]=1;DefaultMapping(&Joystick, VIRTUAL_SHIFT);", "Joystick[VIRTUAL_SHIFT]=0;DefaultMapping(&Joystick, VIRTUAL_SHIFT);"))); SetShiftButton(&Joystick, VIRTUAL_SHIFT); MapKeyIO(&Joystick, S2, PULSE+'i', PULSE+'o'); } //event handler int EventHandle(int type, alias o, int x) { DefaultMapping(&o, x); //add event handling code here }

Pour rappel et à titre d'info, voici ce qu'était le code à rentrer dans Foxy :

Code : Tout sélectionner

BTN S3 /P LOCK (ANT LASTVALUE) KD(X2) DLY(200) KU(X2) /R UNLOCK (ANT) DEF X3 X2 AND ( NOT S3 ) BTN X3 FOV
Y a une petite différence... Comme quoi, on arrête pas le progrès ! :jerry:
> Mon pit sur C6 <
Fabriquer un cockpit F16 ? -> THE VAULT
ImageFFW01
Avatar de l’utilisateur

eutoposWildcat
Webmaster
Webmaster
Messages : 15996
Inscription : 28 janvier 2005

Re: Appui court / long Pinkie sous Target

#2

Message par eutoposWildcat »

Pour Falcon 4.0 BMS, tu peux aussi obtenir la même chose sans programmation dans Target pour le bouton pinky, en lui assignant la fonction SimHotasPinkyShift dans le fichier .key d'affectation des touches. :)
Image
"If everyone is thinking alike, then somebody isn’t thinking."
Avatar de l’utilisateur

Topic author
Fullnegi
Rédacteur
Rédacteur
Messages : 2142
Inscription : 17 juin 2009

Re: Appui court / long Pinkie sous Target

#3

Message par Fullnegi »

Si le bouton est un DX Shift, il ne sera pas reconnu dans Falcon il me semble?
> Mon pit sur C6 <
Fabriquer un cockpit F16 ? -> THE VAULT
ImageFFW01
Avatar de l’utilisateur

eutoposWildcat
Webmaster
Webmaster
Messages : 15996
Inscription : 28 janvier 2005

Re: Appui court / long Pinkie sous Target

#4

Message par eutoposWildcat »

Euh, je ne suis pas certain de comprendre ta question. En tout cas, tu affectes la fonction que j'ai décrite au bouton que tu veux, et il aura deux usages : sur un appui court, il servira au zoom (fonction du pinky switch sur le manche du F-16 réel), et sur un appui long il sert alors de bouton SHIFT.
Dans le coup dans ton fichier .key tu entres deux couches d'affectation de touches, et ça marche ensuite très bien en jeu. :)
Tu as le tuto d'Icewind ici, qui l'explique : http://www.checksix-forums.com/viewtopi ... 1&t=187446
Image
"If everyone is thinking alike, then somebody isn’t thinking."
Avatar de l’utilisateur

dimebug
Webmaster
Webmaster
Messages : 6865
Inscription : 18 août 2001

Re: Appui court / long Pinkie sous Target

#5

Message par dimebug »

RTFM ! la solution est souvent pas loin !

Sous TARGET script :
MapKey(&Joystick, TG1, TEMPO('x', 'y')); // selon la durée de l'appui on aura un x ou un y


Si on veux customiser la durée a presser :
MapKey(&Joystick, TG1, TEMPO('x', 'y', 1000)); //if pressed for more than 1 second

Autre exemple, en cumulant un Shift, + tempo, ce qui donne 4 outputs possibles sur un bouton :

MapKeyIO(&Joystick, TG2, TEMPO('x', 'y'), TEMPO('z', DX1)); //X ou y en fonction de la durée d'appuis quand le shift est pressé, z ou bouton DX1 en fonction de la durée d'appuis sur le bouton, sans activer le shift.

On peut également cumuler les couche U/M/D a l'IO + tempo ce qui permet de donner 3x4= 12 outputs possibles sur un seul bouton. Si ca suffis pas on peut créer sons propre registre de shift et la on a une infinité de sortie possible par bouton, mais ça devient ingérable :)

Autre particularité de TARGET, le shift peut etre en "press" ou en "toggle". Pour accéder a une autre couche on peu soit envoyer une simple impulsion sur un bouton et l'ensemble des bouton sera "shifté" tant qu'on ne renvois pas d'impulsion sur le bouton shift. Ou alors on doit constamment presser le bouton Shift pour accéder a la couche "shiftée" (on va dire que c'est le mode normal).
Image Dresseur de cochon (sauvage)
Avatar de l’utilisateur

Topic author
Fullnegi
Rédacteur
Rédacteur
Messages : 2142
Inscription : 17 juin 2009

Re: Appui court / long Pinkie sous Target

#6

Message par Fullnegi »

Petit déterrage.

Salut Dimebug.
Le but était de faire le contraire.... Je ne vais pas m'amuser à mettre un tempo à chaque bouton... J'avais bien précisé : "pour le pinky : appui court : assignation d'un raccourci (pinkie dans Falcon par ex.) et appui long : DX Shift (pour "doubler" les autres boutons)"

Donc, je souhaite avoir une couche ou tous les boutons ont une affectation nativement et une seconde couche en utlisant le pinky en plus.
MAIS, que dans un premier temps, en dessous d'une certaine durée, le pinky effectue un raccourci "natif", sans être considéré comme un layer.

Merci de ta solution Wildcat, mais je préfère centraliser l'émulation de mes périphériques dans target que dans falcon pour plusieurs raisons.
Je ne pense pas être le seul dans ce cas.
D'autant que ce code sera aussi utile pour les autres simulateurs. Autant le partager dès lors...

La solution n'était pas dans le manuel, aucune ligne ne parle d'affecter ET un layer ET un raccourci simultanément à une même touche.
Et pour cause, il a fallu définir un Virtual_shift dont aucun manuel ne parle (ni en FR, ni en EN, ni en EN avancé), ainsi qu'un EXEC dont le paragraphe du manuel est très succin.
Thrustmaster m'a envoyé un template de ce code par mail en me précisant "c'est le plus loin qu'on puisse aller dans la programmation". C'est ce que j'ai mis dans mon premier post.




Excepté que... Adrien à trouvé une méthode pour ajouter une couche UMD dans le bazar... :banana: :emlaugh:

Autrement dit :
- Le pinky : en dessous d'une durée effectue un raccourci (la touche v), au dela, il agit comme layer I/O
- Le Uncage : en dessous d'une durée effectue un raccourci (la touche u), au dela, il agit comme layer U/M

Avec les couches de layer habituelles :
Nativement, chaque touche à un raccourci propre. (-> boutons de base : CMS, TMS, ...)
S'il maintient le pinky, chaque touche à une 2e affectation. ( -> raccourcis classiques : vue, padlock, master arm, ...)
S'il maintient le uncage, chaque touche peut avoir une 3e affectation. (-> Plus anecdotique, on ne va pas vraiment s'en servir).
S'il maintient le Pinky ET le uncage, chaque touche peut avoir une 4 affectation. Ce cas plus particulier sert de sécurité à 2-3 raccourcis bien choisit, comme le IDLE Detent, ou il faudra donc appuyer sur 3 boutons en même temps pour le déclencher).


Bref, des choses classiques qu'on faisait sous foxy très facilement, mais qui sont moins évidente sous Target.
J'ai vu pas mal de config sous Foxy ou le pinky agissait de cette façon et ou il fallait appuyer sur Coms-VHF+uncage+pinky pour déclancher le cut off par exemple.


Je lui laisse le soin à Adry de vous expliquer sa méthode et le décryptage du code que TM m'a envoyé. Bravo à lui en tout cas. :jerry:
> Mon pit sur C6 <
Fabriquer un cockpit F16 ? -> THE VAULT
ImageFFW01
Avatar de l’utilisateur

Adry
Nouvelle Recrue
Nouvelle Recrue
Messages : 21
Inscription : 11 avril 2017

Re: Appui court / long Pinkie sous Target

#7

Message par Adry »

Bonjour, à tous, :banana: :banana: :banana: :banana: :banana: :banana: :banana: :banana: :banana: :banana: :banana:

Comme Full' l'a dit, ce qu'on cherchait à faire n'est dans aucun manuel. D'où le fait qu'on avait pris contact avec Thrustmaster pour avoir plus d'informations.

Dans un premier temps mon but était de comprendre le code fournis par Thrusmaster, ensuite j'ai eu l'idée de le complexifier un peu plus afin qu'il réponde vraiment à mes besoins.


Il faut savoir que dans Target, une fois qu'un Layer est affecté à un bouton physique il n'est plus possible de le réutiliser pour une autre affectation. Afin de résoudre ce problème, on crée donc un bouton virtuel.

La première chose est de définir des boutons virtuels, une sorte de "Macro", dans Target, qui va nous servir de Layer par la suite.
Les boutons qui compose votre Joystick, throttle etc, sont repris dans une base de donnée et affectée à un numéro (fichier "define.tmh").
Ici on crée donc un bouton dont vous inventez un nom et qui sera affecté au numéro 51 et 52. On pourrait leurs donner le numéro 112 ou 45 que le résultats serait le même.
define Layer_I 51
define Layer_U 52




Vu qu'on cherche à avoir un appuis long et un appuis court, on utilise la fonction tempo qui nous permet de définir 2 affectations (une première en appuis court et seconde en appuis long).
MapKey(&Joystick, S3, TEMPO(X, Y], 200));
MapKey(&HCougar, T6, TEMPO(A, B), 200));


La première sera notre raccourci (ou dx) et la seconde sera la commande EXEC, dans la quelle sera lancée le bouton virtuel (Virtual Shift). Il faut juste savoir que notre bouton virtuel n'est pas reconnu comme un bouton à proprement parlé, mais comme une fonction. C'est pour cela que je l'exécute avec la commande EXEC.

MapKey(&Joystick, S3, TEMPO(Pinky, EXEC("Joystick[Layer_I]=1;DefaultMapping(&Joystick, Layer_I);",
"Joystick[Layer_I]=0;DefaultMapping(&Joystick, Layer_I);")
, 200));

MapKey(&HCougar, T6, TEMPO(Uncage, EXEC("Joystick[Layer_U]=1;DefaultMapping(&Joystick, Layer_U);",
"Joystick[Layer_U]=0;DefaultMapping(&Joystick, Layer_U);")
, 200));


Ensuite, on affecte nos bouton virtuel "Layer_I" et "Layer_U" au layer IO et UMD:
SetShiftButton(&Joystick, Layer_I, &Joystick, Layer_U, 0, 0);

Et enfin, on définit les affectations de chaque bouton comme suit :

MapKeyIOUMD(&Joystick, Bouton, IU, OU, IM, OM, ID, OD);
ou
MapKeyIO(&Joystick, Bouton, I, O);


ou
MapKeyUMD(&Joystick, Bouton, U, M, D);



Voici mon code:

Code : Tout sélectionner

include "target.tmh" include "HOTAS_Cougar_Macro.ttm" define Layer_I 51 define Layer_U 52 int main() { if(Init(&EventHandle)) return 1; //SHIFT //VIRTUAL SHIFT MapKey(&Joystick, S3, TEMPO(Pinky, EXEC("Joystick[Layer_I]=1;DefaultMapping(&Joystick, Layer_I);", "Joystick[Layer_I]=0;DefaultMapping(&Joystick, Layer_I);"), 200)); MapKey(&HCougar, T6, TEMPO(Uncage, EXEC("Joystick[Layer_U]=1;DefaultMapping(&Joystick, Layer_U);", "Joystick[Layer_U]=0;DefaultMapping(&Joystick, Layer_U);"), 200)); //Set Shift SetShiftButton(&Joystick, Layer_I, &Joystick, Layer_U, 0, 0); //Affectation des bouton en MapKey } //event handler int EventHandle(int type, alias o, int x) { DefaultMapping(&o, x); //add event handling code here }

:banana: :banana: :banana: :banana: :banana:
Image
Avatar de l’utilisateur

Topic author
Fullnegi
Rédacteur
Rédacteur
Messages : 2142
Inscription : 17 juin 2009

Re: Appui court / long Pinkie sous Target

#8

Message par Fullnegi »

Hello,
Je sais que certains galèrent sous Target (surtout vu l'arrivée de la nouvelle TQS), je Up juste ce post au cas ou, pour ne pas qu'il se perde.
Serait-il possible d'ajouter un lien vers ce post dans le topic Target ?
Merci !
> Mon pit sur C6 <
Fabriquer un cockpit F16 ? -> THE VAULT
ImageFFW01
Répondre

Revenir à « salle: Periphériques: Hotas, Joysticks, Track-IR »