Page 1 sur 1

Appui court / long Pinkie sous Target

Publié : dim. août 27, 2017 12:34 am
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:

Re: Appui court / long Pinkie sous Target

Publié : dim. août 27, 2017 10:00 am
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. :)

Re: Appui court / long Pinkie sous Target

Publié : dim. août 27, 2017 11:08 am
par Fullnegi
Si le bouton est un DX Shift, il ne sera pas reconnu dans Falcon il me semble?

Re: Appui court / long Pinkie sous Target

Publié : mar. août 29, 2017 12:49 pm
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

Re: Appui court / long Pinkie sous Target

Publié : mar. août 29, 2017 4:49 pm
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).

Re: Appui court / long Pinkie sous Target

Publié : jeu. janv. 17, 2019 12:05 am
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:

Re: Appui court / long Pinkie sous Target

Publié : jeu. janv. 17, 2019 1:45 am
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:

Re: Appui court / long Pinkie sous Target

Publié : lun. janv. 22, 2024 10:46 am
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 !