SCRIPTS TARGET TM WARTHOG etc
#101
Juste en passant (trop tard pour faire des essais):
1 - if((Joystick[H3U] & Joystick[H3R]) & !(Joystick[H3U] | Joystick[H3R])
(Joystick[H3U] & Joystick[H3R]) devrait suffire pour savoir si H3 est en haut à droite.
... et méfiance avec les & et les | ... c'est une vraie merde! il s'agit en fait d'opérateurs binaires et non logiques! Pour faire bien, ça devrait être && et || ... pas supporté.
Du coup, faut tout ramener à des 1 et des 0 pour que ça marche presque pareil! Je dis presque parce qu'en C tout ce qui n'est pas 0 est vrai mais avec les opérateurs binaires, (2 & 1) ça fait FALSE ! '10' & '01' == '00'... marrant TARGET non ?
2 - Le if du main n'est pas évalué par le handler d'évènements mais juste une fois au lancement... ce qui revient à évaluer la séquence en passant... et elle ne sera plus jamais prise en compte pendant l'exécution du script.
En fait, il ne reste que ce que tu auras stocké quelque part avec des MapKey et ce n'est pas le cas de ce qui appelle la fonction H3UR().
...faudra pousser les essais mais cette idée des hat dans le coins est intéressante
1 - if((Joystick[H3U] & Joystick[H3R]) & !(Joystick[H3U] | Joystick[H3R])
(Joystick[H3U] & Joystick[H3R]) devrait suffire pour savoir si H3 est en haut à droite.
... et méfiance avec les & et les | ... c'est une vraie merde! il s'agit en fait d'opérateurs binaires et non logiques! Pour faire bien, ça devrait être && et || ... pas supporté.
Du coup, faut tout ramener à des 1 et des 0 pour que ça marche presque pareil! Je dis presque parce qu'en C tout ce qui n'est pas 0 est vrai mais avec les opérateurs binaires, (2 & 1) ça fait FALSE ! '10' & '01' == '00'... marrant TARGET non ?
2 - Le if du main n'est pas évalué par le handler d'évènements mais juste une fois au lancement... ce qui revient à évaluer la séquence en passant... et elle ne sera plus jamais prise en compte pendant l'exécution du script.
En fait, il ne reste que ce que tu auras stocké quelque part avec des MapKey et ce n'est pas le cas de ce qui appelle la fonction H3UR().
...faudra pousser les essais mais cette idée des hat dans le coins est intéressante
#102
Non pas marrant du tout !!! mais je comprends mieux la cause de ce qui marchait pas dans mes scripts maintenant...ivanwfr a écrit :Juste en passant (trop tard pour faire des essais):
1 - if((Joystick[H3U] & Joystick[H3R]) & !(Joystick[H3U] | Joystick[H3R])
(Joystick[H3U] & Joystick[H3R]) devrait suffire pour savoir si H3 est en haut à droite.
... et méfiance avec les & et les | ... c'est une vraie merde! il s'agit en fait d'opérateurs binaires et non logiques! Pour faire bien, ça devrait être && et || ... pas supporté.
Du coup, faut tout ramener à des 1 et des 0 pour que ça marche presque pareil! Je dis presque parce qu'en C tout ce qui n'est pas 0 est vrai mais avec les opérateurs binaires, (2 & 1) ça fait FALSE ! '10' & '01' == '00'... marrant TARGET non ?
[/quote]2 - Le if du main n'est pas évalué par le handler d'évènements mais juste une fois au lancement... ce qui revient à évaluer la séquence en passant... et elle ne sera plus jamais prise en compte pendant l'exécution du script.
En fait, il ne reste que ce que tu auras stocké quelque part avec des MapKey et ce n'est pas le cas de ce qui appelle la fonction H3UR().
...faudra pousser les essais mais cette idée des hat dans le coins est intéressante
des REXEC RNOSTOP ?
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm
#104
Code : Tout sélectionner
ActKey[color=#00ffff]([/color]KEYON[color=#00ffff]+[/color]REXEC[color=#00ffff]([/color][color=#fff5ee]10[/color], [color=#fff5ee]25[/color], [color=#ff8c00]"if(H3UR()==1){SEQ(CHAIN( LOCK+DOWN+USB_KP_PERIOD, DOWN+USBKey_KP9, LOCK),CHAIN( LOCK+UP+USBKey_KP9, UP+USB_KP_PERIOD, LOCK));} "[/color], RNOSTOP));
par contre les tests marchent pas... tn histoire de & | sans doute
peut etre avec GetInputValue dans Hid.tmh ?
mais est-ce que ça marche en mode "combined" virtuel ?
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm
#105
Après toute une série d'essais avec des CHAIN et des EXEC, j'ai réussi à faire marcher les tests avec le code ci-dessous. Mais ça le fera pas comme ça pour des raisons de multi-threading et de transitions ingérables au niveau des macro-commandes.
Le traitement des CHAIN, ActKey et EXEC est complètement hors de contrôle. Et comme on n'a pas affaire à un POV à 8 valeurs, le positionnement dans les coins provoque deux évènements distincts: Num9 = Num6 + Num8... et ça fout une merde pas possible dans le mapping envisagé Faut arriver à ignorer le premier évènement et appeler ActKey() au traitement du 2ème.
Pour l'instant, ça avance mais pour la suite, il vaut mieux en demander le moins possible aux macros et vraiment prendre les choses en main dans EventHandle(). Et je suis pratiquement certain qu'on doit pouvoir faire quelque chose de bien - reste encore a trouver comment
2 remarques:
* Je pense qu'on parle de USB_KP_0 plutôt que de USB_KP_PERIOD... Il s'agit bien des Snap views non?
* Si on active une Snap View (DOWN), on n'a pas intérêt faire autre-chose que de cliquer dans la même direction sinon, on ne fait pas le UP attendu
A mon avis, y'a encore du boulot mais on doit pouvoir simplifier le tableau avec un peu de jugeote.
Le traitement des CHAIN, ActKey et EXEC est complètement hors de contrôle. Et comme on n'a pas affaire à un POV à 8 valeurs, le positionnement dans les coins provoque deux évènements distincts: Num9 = Num6 + Num8... et ça fout une merde pas possible dans le mapping envisagé Faut arriver à ignorer le premier évènement et appeler ActKey() au traitement du 2ème.
Pour l'instant, ça avance mais pour la suite, il vaut mieux en demander le moins possible aux macros et vraiment prendre les choses en main dans EventHandle(). Et je suis pratiquement certain qu'on doit pouvoir faire quelque chose de bien - reste encore a trouver comment
2 remarques:
* Je pense qu'on parle de USB_KP_0 plutôt que de USB_KP_PERIOD... Il s'agit bien des Snap views non?
* Si on active une Snap View (DOWN), on n'a pas intérêt faire autre-chose que de cliquer dans la même direction sinon, on ne fait pas le UP attendu
A mon avis, y'a encore du boulot mais on doit pouvoir simplifier le tableau avec un peu de jugeote.
Code : Tout sélectionner
include "target.tmh"
define USB_KP_ENTER USB[0x58]
define USB_KP_1 USB[0x59]
define USB_KP_2 USB[0x5A]
define USB_KP_3 USB[0x5B]
define USB_KP_4 USB[0x5C]
define USB_KP_5 USB[0x5D]
define USB_KP_6 USB[0x5E]
define USB_KP_7 USB[0x5F]
define USB_KP_8 USB[0x60]
define USB_KP_9 USB[0x61]
define USB_KP_0 USB[0x62]
int hat_key = USB_KP_5; // [0-9]
int main() {
if(Init(&EventHandle)) return 1;
int h3_mapping =
SEQ( EXEC(
"hat_key = getKey(&Joystick, H3U);"
"ActKey(KEYON+ USB_KP_0);"
"ActKey(KEYON+ hat_key );")
, EXEC(
"hat_key = getKey(&Joystick, H3U);"
"ActKey( hat_key );"
"ActKey( USB_KP_0);")
);
MapKey(&Joystick, H3U, h3_mapping);
MapKey(&Joystick, H3R, h3_mapping);
MapKey(&Joystick, H3D, h3_mapping);
MapKey(&Joystick, H3L, h3_mapping);
}
int getKey(alias o, int hat) {
int u = o[hat ];
int r = o[hat+1];
int d = o[hat+2];
int l = o[hat+3];
int key = 0;
if (u & r) key = USB_KP_9;
else if(u & l) key = USB_KP_7;
else if(d & l) key = USB_KP_1;
else if(d & r) key = USB_KP_3;
else if( u ) key = USB_KP_8;
else if( d ) key = USB_KP_2;
else if( l ) key = USB_KP_4;
else if( r ) key = USB_KP_6;
printf("...getKey: [%d %d %d %d] -- [%d]\xa"
, u, r, d, l, (key - USB_KP_ENTER));
return key;
}
int EventHandle(int type, alias o, int x) { DefaultMapping(&o, x); }
// http://www.checksix-forums.com/showpost.php?p=1166403&postcount=94
Hat dans les coins, ça avance
#106Y'a du mieux :
Code : Tout sélectionner
include "target.tmh"
// USB {{{
define USB_KP_ENTER USB[0x58]
define USB_KP_1 USB[0x59]
define USB_KP_2 USB[0x5A]
define USB_KP_3 USB[0x5B]
define USB_KP_4 USB[0x5C]
define USB_KP_5 USB[0x5D]
define USB_KP_6 USB[0x5E]
define USB_KP_7 USB[0x5F]
define USB_KP_8 USB[0x60]
define USB_KP_9 USB[0x61]
define USB_KP_0 USB[0x62]
// }}}
int main() {
if(Init(&EventHandle)) return 1;
//js_map_h3();
}
int getKey(int hat) { // {{{
int u = Joystick[hat ];
int r = Joystick[hat+1];
int d = Joystick[hat+2];
int l = Joystick[hat+3];
int key = 0;
if (u & r) key = USB_KP_9;
else if(u & l) key = USB_KP_7;
else if(d & l) key = USB_KP_1;
else if(d & r) key = USB_KP_3;
else if( u ) key = USB_KP_8;
else if( d ) key = USB_KP_2;
else if( l ) key = USB_KP_4;
else if( r ) key = USB_KP_6;
alias zu = " u";
alias zr = " r";
alias zd = " d";
alias zl = " l";
if(key != 0)
printf("...getKey: [%c %c %c %c] == [%d]\xa" , zu[u], zr[r], zd[d], zl[l], (key - USB_KP_ENTER));
getKey_pending = 0;
return key;
} // }}}
int getKey_pending = 0;
int start_getKey(int hat)
{
if( !getKey_pending ) {
getKey_pending = 1;
DeferCall(2 * kb_delay, &getKey, hat);
}
else {
// just wait for the pending one to happen
}
}
int EventHandle(int type, alias o, int x) // {{{
{
if((&o==&Joystick) & (x>=H3U) & (x<=H3L)) {
start_getKey(H3U);
}
else {
DefaultMapping(&o, x);
}
}
// }}}
#108
vi, j'ai pas le niveau suffisant pour pondre ça, mais je comprends et j'admire le travail !
et où as tu trouvé cette syntaxe : Joystick[hat+1] ?
et ça :
if((&o==&Joystick) & (x>=H3U) & (x<=H3L)) {
start_getKey(H3U);
}
est-ce là seule / meilleure façon d'intercepter une input ?
et où as tu trouvé cette syntaxe : Joystick[hat+1] ?
et ça :
if((&o==&Joystick) & (x>=H3U) & (x<=H3L)) {
start_getKey(H3U);
}
est-ce là seule / meilleure façon d'intercepter une input ?
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm
#109
Y'a pas de miracle avec le niveau, comme c'est mon boulot ça le fait bien. Et ça rejoint mon intérêt pour ce simulateur: On est toujours récompensé de ses efforts quand on bosse sur les sujets qui méritent! Et pour les miracles, il suffit de farfouiller :
- Joystick[hat+1..3] ... dans target.tmh -- fonction Hat2Btn()
- (x>=H3U) & (x<=H3L) ... dans defines.tmh (Warthog Joystick interface)
Alors: encore plus joli que tout-à l'heure avec le code ci-dessous
(j'ai légèrement pompé dans mon usine à gaz sur la gestion des snap views)
Now we're talking
[SNAP ON] 1 2 3 4 6 4 8 9 OFF]
[SNAP ON] 1 OFF]
[SNAP ON] 1 2 1 OFF]
- Joystick[hat+1..3] ... dans target.tmh -- fonction Hat2Btn()
- (x>=H3U) & (x<=H3L) ... dans defines.tmh (Warthog Joystick interface)
Alors: encore plus joli que tout-à l'heure avec le code ci-dessous
(j'ai légèrement pompé dans mon usine à gaz sur la gestion des snap views)
Now we're talking
[SNAP ON] 1 2 3 4 6 4 8 9 OFF]
[SNAP ON] 1 OFF]
[SNAP ON] 1 2 1 OFF]
Code : Tout sélectionner
include "target.tmh"
int main() { // {{{
if(Init(&EventHandle)) return 1;
}
// }}}
int EventHandle(int type, alias o, int x) // {{{
{
if((&o==&Joystick) & (x>=H3U) & (x<=H3L))
handleHat(H3U);
else
DefaultMapping(&o, x);
} // }}}
int ActHatKeyCalled = 0;
//alias zu=" u"; alias zr=" r"; alias zd=" d"; alias zl=" l";
int ActHatKey(int hat) { // {{{
int u = Joystick[hat ];
int r = Joystick[hat+1];
int d = Joystick[hat+2];
int l = Joystick[hat+3];
int num = 0;
if (u & r) num = 9;
else if(u & l) num = 7;
else if(d & l) num = 1;
else if(d & r) num = 3;
else if( u ) num = 8;
else if( d ) num = 2;
else if( l ) num = 4;
else if( r ) num = 6;
//printf("...ActHatKey: [%c %c %c %c] == [%d]\xa" , zu[u], zr[r], zd[d], zl[l], num);
if(num != 0) {
if(num == view_locked) unlock_view();
else lock_view(num);
}
ActHatKeyCalled = 0;
} // }}}
int handleHat(int hat) // {{{
{
if( !ActHatKeyCalled ) {
ActHatKeyCalled = 1;
DeferCall(2 * kb_delay, &ActHatKey, hat);
}
else {
// just wait for the pending one to happen
}
} // }}}
int view_locked = 0;
int lock_view(int num) // {{{
{
// Enter/Keep "snap view mode"
if(view_locked==0) {
printf("[SNAP ON]");
ActKey(LOCK);
ActKey(KEYON+ R_CTL+ 0);
ActKey(KEYON+ KP0); Sleep( 10 );
ActKey( KP0);
ActKey( R_CTL+ 0);
}
if(num) {
ActKey(LOCK);
ActKey(KEYON+ KPENT+num); Sleep( kb_delay );
ActKey( KPENT+num);
ActKey(LOCK);
view_locked = num;
printf(" %d", view_locked);
}
} // }}}
int unlock_view() // {{{
{
// Leave "snap view mode"
printf(" OFF]\xa", view_locked);
ActKey(LOCK);
ActKey(KEYON+ KP0 ); Sleep( kb_delay );
ActKey( KP0 );
ActKey(LOCK);
view_locked = 0;
} // }}}
#110
vu que tu es motivé et que c'est facile pour toi, un test pour H3M
H3M = HAT 3 au centre
H3M = HAT 3 au centre
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm
#111
J'ai pensé à ça bien sûr mais pourquoi pas H4 sur lequel on peu appuyer ?
On a ça dans defines.tmh:
define H4U 14
define H4R 15
define H4D 16
define H4L 17
define H4P 18
On a ça dans defines.tmh:
define H4U 14
define H4R 15
define H4D 16
define H4L 17
define H4P 18
#112
on fait j'essaie de faire une routine cadre pour pouvoir gérer les coins et les milieux sur TOUS les Hat, stick et throttle...
ça avance, mais me reste un peu de debug à faire, et pas eu le temps d'avancer ce jour...
ça avance, mais me reste un peu de debug à faire, et pas eu le temps d'avancer ce jour...
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm
#113
apparement ça ne lui plait pas :
pour info, sans la throttle, le reste marche bien.
avantage : on met les fonctions que l'on veut dans les fonctions de type H3UL(), on peut réutiliser le script tel quel une fois au point
Code : Tout sélectionner
include "_HATCorners.tmc"
...
int EventHandle(int type, alias o, int x)
[color=White]{
[/color][color=Yellow][color=White] if((&o==&Joystick) & (x>=H1U) & (x<=H1L))
handleHat(H1U);
else if((&o==&Joystick) & (x>=H2U) & (x<=H2L))
handleHat(H2U);
else if((&o==&Joystick) & (x>=H3U) & (x<=H3L))
handleHat(H3U);
else if((&o==&Joystick) & (x>=H4U) & (x<=H4L))
handleHat(H4U);[/color]
else if((&o==&Throttle) & (x>=CSU) & (x<=CSL))
handleHat(CSU);
else if((&o==&throttle) & (x>=MSU) & (x<=MSL))
handleHat(MSU);[/color]
else
DefaultMapping(&o, x);
}
Code : Tout sélectionner
// FUNCTIONS TO PERFORM PROGRAMMATION OF CENTER AND CORNER POSITIONS OF HATS
int ActHatKeyCalled = 0;
//alias zu=" u"; alias zr=" r"; alias zd=" d"; alias zl=" l";
int handleHat(int hat) // {{{
{
if( !ActHatKeyCalled ) { // flag to test one or two input
ActHatKeyCalled = 1;
DeferCall(2 * kb_delay, &ActHatKey, hat);
}
else {
// just wait for the pending one to happen
}
} // }}}
int ActHatKey(int hat) // {{{
{
i[color=Yellow]f ((hat == MSU) | (hat == CSU)) // throttle hat called[/color]
{
[color=Yellow] int u = Throttle[hat ];
int r = Throttle[hat+1];
int d = Throttle[hat+2];
int l = Throttle[hat+3];[/color]
int num = 0;
[color=Yellow] if (hat == MSU)[/color]
{
if (u & r) {MSUR(); num = 9;}
else if(u & l) {MSUL(); num = 7;}
else if(d & l) {MSDL(); num = 1;}
else if(d & r) {MSDR(); num = 3;}
else if( u ) {num = 8;} // H3U(); // is commented not to call H3U funtion as H3U is already mapped in the main profile generaly}
else if( d ) num = 2;
else if( l ) num = 4;
else if( r ) num = 6;
//printf("...ActHatKey: [%c %c %c %c] == [%d]\xa" , zu[u], zr[r], zd[d], zl[l], num);
// to call a function with num as parameter :
//if(num != 0) {
// if(num == view_locked) unlock_view();
// else lock_view(num);
// }
}
[color=Yellow] else if (hat == CSU)[/color]
{
if (u & r) {CSUR(); num = 9;}
else if(u & l) {CSUL(); num = 7;}
else if(d & l) {CSDL(); num = 1;}
else if(d & r) {CSDR(); num = 3;}
else if( u ) {num = 8;} // H3U(); // is commented not to call H3U funtion as H3U is already mapped in the main profile generaly}
else if( d ) num = 2;
else if( l ) num = 4;
else if( r ) num = 6;
//printf("...ActHatKey: [%c %c %c %c] == [%d]\xa" , zu[u], zr[r], zd[d], zl[l], num);
// to call a function with num as parameter :
//if(num != 0) {
// if(num == view_locked) unlock_view();
// else lock_view(num);
// }
}
}
else // joystick hat called
{
int u = Joystick[hat ];
int r = Joystick[hat+1];
int d = Joystick[hat+2];
int l = Joystick[hat+3];
int num = 0;
if (hat == H1U)
{
if (u & r) {H1UR(); num = 9;}
else if(u & l) {H1UL(); num = 7;}
else if(d & l) {H1DL(); num = 1;}
else if(d & r) {H1DR(); num = 3;}
else if( u ) {num = 8;} // H3U(); // is commented not to call H3U funtion as H3U is already mapped in the main profile generaly}
else if( d ) num = 2;
else if( l ) num = 4;
else if( r ) num = 6;
//printf("...ActHatKey: [%c %c %c %c] == [%d]\xa" , zu[u], zr[r], zd[d], zl[l], num);
// to call a function with num as parameter :
//if(num != 0) {
// if(num == view_locked) unlock_view();
// else lock_view(num);
// }
}
else if (hat == H2U)
{
if (u & r) {H2UR(); num = 9;}
else if(u & l) {H2UL(); num = 7;}
else if(d & l) {H2DL(); num = 1;}
else if(d & r) {H2DR(); num = 3;}
else if( u ) {num = 8;} // H3U(); // is commented not to call H3U funtion as H3U is already mapped in the main profile generaly}
else if( d ) num = 2;
else if( l ) num = 4;
else if( r ) num = 6;
//printf("...ActHatKey: [%c %c %c %c] == [%d]\xa" , zu[u], zr[r], zd[d], zl[l], num);
// to call a function with num as parameter :
//if(num != 0) {
// if(num == view_locked) unlock_view();
// else lock_view(num);
// }
}
else if (hat == H3U)
{
if (u & r) {H3UR(); num = 9;}
else if(u & l) {H3UL(); num = 7;}
else if(d & l) {H3DL(); num = 1;}
else if(d & r) {H3DR(); num = 3;}
else if( u ) {num = 8;} // H3U(); // is commented not to call H3U funtion as H3U is already mapped in the main profile generaly}
else if( d ) num = 2;
else if( l ) num = 4;
else if( r ) num = 6;
//printf("...ActHatKey: [%c %c %c %c] == [%d]\xa" , zu[u], zr[r], zd[d], zl[l], num);
// to call a function with num as parameter :
//if(num != 0) {
// if(num == view_locked) unlock_view();
// else lock_view(num);
// }
}
else if (hat == H4U)
{
if (u & r) {H4UR(); num = 9;}
else if(u & l) {H4UL(); num = 7;}
else if(d & l) {H4DL(); num = 1;}
else if(d & r) {H4DR(); num = 3;}
else if( u ) {num = 8;} // H3U(); // is commented not to call H3U funtion as H3U is already mapped in the main profile generaly}
else if( d ) num = 2;
else if( l ) num = 4;
else if( r ) num = 6;
//printf("...ActHatKey: [%c %c %c %c] == [%d]\xa" , zu[u], zr[r], zd[d], zl[l], num);
// to call a function with num as parameter :
//if(num != 0) {
// if(num == view_locked) unlock_view();
// else lock_view(num);
// }
}
}
ActHatKeyCalled = 0;
} // }}}
// HAT1
int H1UR()
{
}
int H1UL()
{
}
int H1DR()
{
}
int H1DL()
{
}
int H1M()
{
}
// HAT2
int H2UR()
{
}
int H2UL()
{
}
int H2DR()
{
}
int H2DL()
{
}
int H2M()
{
}
// HAT3
int H3UR()
{
//ActKey(KEYON+USB_KP_7); // just as exemple
SEQ(
CHAIN( LOCK+DOWN+USB_KP_PERIOD, DOWN+USB_KP_9, LOCK),
CHAIN( LOCK+UP+USB_KP_9, UP+USB_KP_PERIOD, LOCK)
);
}
int H3UL()
{
SEQ(
CHAIN( LOCK+DOWN+USB_KP_PERIOD, DOWN+USB_KP_7, LOCK),
CHAIN( LOCK+UP+USB_KP_7, UP+USB_KP_PERIOD, LOCK)
);
}
int H3DR()
{
//ActKey(KEYON+
SEQ(
CHAIN( LOCK+DOWN+USB_KP_PERIOD, DOWN+USB_KP_3, LOCK),
CHAIN( LOCK+UP+USB_KP_3, UP+USB_KP_PERIOD, LOCK)
));
}
int H3DL()
{
SEQ(
CHAIN( LOCK+DOWN+USB_KP_PERIOD, DOWN+USB_KP_1, LOCK),
CHAIN( LOCK+UP+USB_KP_1, UP+USB_KP_PERIOD, LOCK)
);
}
int H3M()
{
}
// HAT4
int H4UR()
{
}
int H4UL()
{
}
int H4DR()
{
}
int H4DL()
{
}
int H4M()
{
}
// HAT MS
int MSUR()
{
}
int MSUL()
{
}
int MSDR()
{
}
int MSDL()
{
}
int MSM()
{
}
// HAT CS
int CSUR()
{
}
int CSUL()
{
}
int CSDR()
{
}
int CSDL()
{
}
int CSM()
{
}
int view_locked = 0;
int lock_view(int num) // {{{
{
// Enter/Keep "snap view mode"
if(view_locked==0) {
printf("[SNAP ON]");
ActKey(LOCK);
ActKey(KEYON+ R_CTL+ 0);
ActKey(KEYON+ KP0); Sleep( 10 );
ActKey( KP0);
ActKey( R_CTL+ 0);
}
if(num) {
ActKey(LOCK);
ActKey(KEYON+ KPENT+num); Sleep( kb_delay );
ActKey( KPENT+num);
ActKey(LOCK);
view_locked = num;
printf(" %d", view_locked);
}
} // }}}
int unlock_view() // {{{
{
// Leave "snap view mode"
printf(" OFF]\xa", view_locked);
ActKey(LOCK);
ActKey(KEYON+ KP0 ); Sleep( kb_delay );
ActKey( KP0 );
ActKey(LOCK);
view_locked = 0;
} // }}}
avantage : on met les fonctions que l'on veut dans les fonctions de type H3UL(), on peut réutiliser le script tel quel une fois au point
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm
#114
Après simplification, ça donne quelque chose d'exploitable avec bemols...
1 - Les SEQ(CHAIN...) sont des Macros et des macros qui ne vont pas dans un MapKey ne servent à rien parce que c'est là qu'elles sont mises au bon endroit. Il s'agit en fait d'un pseudo-language inventé par les devs Thrustmaster et ça ne fait du code que quand leur interpréteur les voit passer... et là il n'est pas dans le coup -- on fait sans MapKey!
Il faut donc faire son boulot pour indexer des SEQences perso et remplacer les CHAIN par les ActKey équivalents ... c'est ce que faisait la version précédente.
2 - Quand ça s'est mis a marcher, j'ai vu que le Hat #4 (CMS) ne va mécaniquement pas dans les coins -- seulement un switch enfoncé à la fois)
Ce code fait des printf des fonctions appelées, ce qui permet de voir par où ça passe. Et quand il s'agira de faire quelque chose d'utile dans ces fonctions, ce sera à coup de ActKey() mais pas de CHAIN. EXEC ou SEQ..., on est de l'autre côté du rideau là, faut plus compter sur les macros.
1 - Les SEQ(CHAIN...) sont des Macros et des macros qui ne vont pas dans un MapKey ne servent à rien parce que c'est là qu'elles sont mises au bon endroit. Il s'agit en fait d'un pseudo-language inventé par les devs Thrustmaster et ça ne fait du code que quand leur interpréteur les voit passer... et là il n'est pas dans le coup -- on fait sans MapKey!
Il faut donc faire son boulot pour indexer des SEQences perso et remplacer les CHAIN par les ActKey équivalents ... c'est ce que faisait la version précédente.
2 - Quand ça s'est mis a marcher, j'ai vu que le Hat #4 (CMS) ne va mécaniquement pas dans les coins -- seulement un switch enfoncé à la fois)
Ce code fait des printf des fonctions appelées, ce qui permet de voir par où ça passe. Et quand il s'agira de faire quelque chose d'utile dans ces fonctions, ce sera à coup de ActKey() mais pas de CHAIN. EXEC ou SEQ..., on est de l'autre côté du rideau là, faut plus compter sur les macros.
Code : Tout sélectionner
// FUNCTIONS TO PERFORM PROGRAMMATION OF CENTER AND CORNER POSITIONS OF HATS
include "target.tmh"
include "util/util_usb.tmh"
int main() { // {{{
if(Init(&EventHandle)) return 1;
}
// }}}
int EventHandle(int type, alias o, int x) // {{{
{
if ((&o==&Joystick) & (x>=H1U) & (x<=H1L)) // H1[URDL] = [29-32]
handleHat(H1U);
else if((&o==&Joystick) & (x>=H2U) & (x<=H2L)) // H2[URDL] = [ 6- 9]
handleHat(H2U);
else if((&o==&Joystick) & (x>=H3U) & (x<=H3L)) // H3[URDL] = [10-13]
handleHat(H3U);
else if((&o==&Joystick) & (x>=H4U) & (x<=H4P)) // H4[URDLP] = [14-18] -- !order=URDLP -- @see defines.tmh
handleHat(H4U);
else if((&o==&Throttle) & (x>=CSU) & (x<=CSL)) // CS[URDL] = [32-35]
handleHat(CSU);
else if((&o==&Throttle) & (x>=MSP) & (x<=MSL)) // MS[PURDL] = [ 1- 5] -- !order=PURDL -- @see defines.thm
handleHat(MSP);
else
DefaultMapping(&o, x);
} // }}}
int ActHatKeyCalled = 0;
int handleHat(int hat) // {{{
{
if( !ActHatKeyCalled ) {
ActHatKeyCalled = 1;
DeferCall(2 * kb_delay, &ActHatKey, hat);
}
// else just wait for the pending one to happen
} // }}}
int ActHatKey(int hat) // {{{
{
int u, r, d, l, m;
if (hat == CSU) {
u = Throttle[hat ];
r = Throttle[hat+1];
d = Throttle[hat+2];
l = Throttle[hat+3];
}
else if(hat == MSP) { // MS[PURDL] -- !order
m = Throttle[hat ];
u = Throttle[hat+1];
r = Throttle[hat+2];
d = Throttle[hat+3];
l = Throttle[hat+4];
}
else if(hat == H4U) { // H4[URDLP] -- !order
u = Joystick[hat ];
r = Joystick[hat+1];
d = Joystick[hat+2];
l = Joystick[hat+3];
m = Joystick[hat+4];
}
else {
u = Joystick[hat ];
r = Joystick[hat+1];
d = Joystick[hat+2];
l = Joystick[hat+3];
}
// Joystick hats
if (hat == H1U) { if(u & r) H1UR(); else if(u & l) H1UL(); else if(d & l) H1DL(); else if(d & r) H1DR(); }
else if (hat == H2U) { if(u & r) H2UR(); else if(u & l) H2UL(); else if(d & l) H2DL(); else if(d & r) H2DR(); }
else if (hat == H3U) { if(u & r) H3UR(); else if(u & l) H3UL(); else if(d & l) H3DL(); else if(d & r) H3DR(); }
else if (hat == H4U) { if(u & r) H4UR(); else if(u & l) H4UL(); else if(d & l) H4DL(); else if(d & r) H4DR(); else if(m) H4M(); }
// Throttle hats
else if (hat == MSP) { if(u & r) MSUR(); else if(u & l) MSUL(); else if(d & l) MSDL(); else if(d & r) MSDR(); else if(m) MSM(); }
else if (hat == CSU) { if(u & r) CSUR(); else if(u & l) CSUL(); else if(d & l) CSDL(); else if(d & r) CSDR(); }
ActHatKeyCalled = 0;
}
// }}}
// Joystick functions
// H1 {{{
int H1UR() { printf("H1UR\xa"); }
int H1UL() { printf("H1UL\xa"); }
int H1DR() { printf("H1DR\xa"); }
int H1DL() { printf("H1DL\xa"); }
int H1M () { printf("H1M\xa" ); }
// }}}
// H2 {{{
int H2UR() { printf("H2UR\xa"); }
int H2UL() { printf("H2UL\xa"); }
int H2DR() { printf("H2DR\xa"); }
int H2DL() { printf("H2DL\xa"); }
int H2M () { printf("H2M\xa" ); }
// }}}
// H3 {{{
int H3UR() {
printf("H3UR\xa");
//ActKey(KEYON+USB_KP_7); // just as exemple
SEQ(
CHAIN( LOCK+DOWN+USB_KP_PERIOD, DOWN+USB_KP_9, LOCK),
CHAIN( LOCK+UP+USB_KP_9, UP+USB_KP_PERIOD, LOCK)
);
}
int H3UL() {
printf("H3UL\xa");
SEQ(
CHAIN( LOCK+DOWN+USB_KP_PERIOD, DOWN+USB_KP_7, LOCK),
CHAIN( LOCK+UP+USB_KP_7, UP+USB_KP_PERIOD, LOCK)
);
}
int H3DR() {
printf("H3DR\xa");
SEQ(
CHAIN( LOCK+DOWN+USB_KP_PERIOD, DOWN+USB_KP_3, LOCK),
CHAIN( LOCK+UP+USB_KP_3, UP+USB_KP_PERIOD, LOCK)
);
}
int H3DL() {
printf("H3DL\xa");
SEQ(
CHAIN( LOCK+DOWN+USB_KP_PERIOD, DOWN+USB_KP_1, LOCK),
CHAIN( LOCK+UP+USB_KP_1, UP+USB_KP_PERIOD, LOCK)
);
}
int H3M () { printf("H3M \xa"); }
// }}}
// H4 {{{
int H4UR() { printf("H4UR\xa"); }
int H4UL() { printf("H4UL\xa"); }
int H4DR() { printf("H4DR\xa"); }
int H4DL() { printf("H4DL\xa"); }
int H4M () { printf("H4M \xa"); }
// }}}
// Throttle functions
// MS {{{
int MSUR() { printf("MSUR\xa"); }
int MSUL() { printf("MSUL\xa"); }
int MSDR() { printf("MSDR\xa"); }
int MSDL() { printf("MSDL\xa"); }
int MSM () { printf("MSM \xa"); }
// }}}
// CS {{{
int CSUR() { printf("CSUR\xa"); }
int CSUL() { printf("CSUL\xa"); }
int CSDR() { printf("CSDR\xa"); }
int CSDL() { printf("CSDL\xa"); }
int CSP () { printf("CSP \xa"); }
// }}}
#115
merci bcp pour le temps passé et les explications pédagogiques !
c'est un super boulot que tu as fait là...
vu de cette manière on peut presque se passer de la syntaxe TM et programmer des choses très avancées...
par contre c'est hard au niveau syntaxe qd on maitrise mal le langage...
et ils auraient qd meme pu etre plus logique avec leurs ordres inversés à la noix
et l'enchainement C / Target est pas evident à piger dans le déroulement du prog...
EDIT : ton script marche sauf pour MSU qui semble plutot marcher comme HAT4
c'est un super boulot que tu as fait là...
vu de cette manière on peut presque se passer de la syntaxe TM et programmer des choses très avancées...
par contre c'est hard au niveau syntaxe qd on maitrise mal le langage...
et ils auraient qd meme pu etre plus logique avec leurs ordres inversés à la noix
et l'enchainement C / Target est pas evident à piger dans le déroulement du prog...
EDIT : ton script marche sauf pour MSU qui semble plutot marcher comme HAT4
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm
#116
Corrigé ... voir remarque maj
Mais pas de bol, MS fait comme H4... veut pas aller dans les coins non plus!
Quand à TM, faut pas leur en vouloir, je pense que l'ouverture de leur code est sûrement mal vue par les commerciaux... Trop compliqué pour les clients. En général on ne leur demande que de savoir comment faire marcher leur carte bleue, pas plus, ça peut froisser.
En fait y'a pas foulle non plus pour y plonger les mains
Mais pas de bol, MS fait comme H4... veut pas aller dans les coins non plus!
Quand à TM, faut pas leur en vouloir, je pense que l'ouverture de leur code est sûrement mal vue par les commerciaux... Trop compliqué pour les clients. En général on ne leur demande que de savoir comment faire marcher leur carte bleue, pas plus, ça peut froisser.
En fait y'a pas foulle non plus pour y plonger les mains
#117
bas c'est le résultat d'un compromis, avec un script a la Cougar, tu est vite limité, avec du C c'est imbitable pour le commun des mortels, avec le script, en s'y mettant, tout le monde y arrive.
l'important c'est qu'a aucun moment on soit bridé par le langage.
l'important c'est qu'a aucun moment on soit bridé par le langage.
Dresseur de cochon (sauvage)
#118
L'idéal consiste à fournir des moyens adaptés à plusieurs niveaux d'expertise et je crois que TM a fait quelque chose de bien en proposant le GUI et le Script editor. Il suffit de savoir quand on doit changer de registre suivant la complexité de ce qu'on envisage de faire. Y'a du temps réel là dedans et même du multi threading (LOCK)! C'est pas du léger en fait de programmation.
S'il ne s'agit d'envoyer des infos a DX input ou de générer des évènements clavier quand on actionne un switch, y'a tout ce qu'il faut pour faire ça comme il faut sans être programmeur.
Mais l'environnement de développement proposé pas TM va plus loin. Et la recherche de simplification qui apparaît bien dans le manuel a ses inconvénients. Il ne faut pas se faire d'illusions en pensant solutionner simplement des fonctions qui posent de vrais problèmes aux professionnels. Y'a qu'a voir ce que ça donne avec la majorité des périphériques d'autres marques... Input-lag, deadzones, calibration approximative, compromis mécaniques hasardeux...
TM a fait sa part comme un chef, c'est à nous d'en faire autant. Alors je suis tout disposé à creuser les idées du genre de celles de hellfrog lorsque ça coince quelque part et qu'il faut chercher la solution au delà du manuel.
S'il ne s'agit d'envoyer des infos a DX input ou de générer des évènements clavier quand on actionne un switch, y'a tout ce qu'il faut pour faire ça comme il faut sans être programmeur.
Mais l'environnement de développement proposé pas TM va plus loin. Et la recherche de simplification qui apparaît bien dans le manuel a ses inconvénients. Il ne faut pas se faire d'illusions en pensant solutionner simplement des fonctions qui posent de vrais problèmes aux professionnels. Y'a qu'a voir ce que ça donne avec la majorité des périphériques d'autres marques... Input-lag, deadzones, calibration approximative, compromis mécaniques hasardeux...
TM a fait sa part comme un chef, c'est à nous d'en faire autant. Alors je suis tout disposé à creuser les idées du genre de celles de hellfrog lorsque ça coince quelque part et qu'il faut chercher la solution au delà du manuel.
#119
tant qu'on y est ...
continuons l'apprentissage et la pédagogie...
si on veut aussi avoir /I /O, et meme principe pour UMD...
suffit -il d'ajouter
if ((&o==&Joystick) & (x>=H1U) & (x<=H1L) & (x=S3) ) // pour /I ?
et suffit-il pour gérer cela de passer un argument de plus de fonction en fonction :
handleHat(H1U, S3); // par exemple (evidemment en modifiant ensuite la fonction...)
Autre question,
peut-on avoir les fonctions
handleHat()
ActHatKey()
dans un tmh "include" plutot que dans le script principal ?
Comment choisir si on passe une variable à la fonction par définition d'une nouvelle variable locale dans la fonction appelée : int function (int x){}
ou par alias : int function (alias o){}
?
Peut-on avoir des variables de portée globale ? est-ce automatiquement le cas si elles sont définies dans le script principal ? (pour utilisation dans une routine d'un sous programme géré par "include")
nommage des fichiers : les tmh contiennet du code C et les tmc du code target ou c'est juste une convention et ça n'a aucune importance ?
continuons l'apprentissage et la pédagogie...
si on veut aussi avoir /I /O, et meme principe pour UMD...
suffit -il d'ajouter
if ((&o==&Joystick) & (x>=H1U) & (x<=H1L) & (x=S3) ) // pour /I ?
et suffit-il pour gérer cela de passer un argument de plus de fonction en fonction :
handleHat(H1U, S3); // par exemple (evidemment en modifiant ensuite la fonction...)
Autre question,
peut-on avoir les fonctions
handleHat()
ActHatKey()
dans un tmh "include" plutot que dans le script principal ?
Comment choisir si on passe une variable à la fonction par définition d'une nouvelle variable locale dans la fonction appelée : int function (int x){}
ou par alias : int function (alias o){}
?
Peut-on avoir des variables de portée globale ? est-ce automatiquement le cas si elles sont définies dans le script principal ? (pour utilisation dans une routine d'un sous programme géré par "include")
nommage des fichiers : les tmh contiennet du code C et les tmc du code target ou c'est juste une convention et ça n'a aucune importance ?
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm
#120
Faut d'abord viser au plus simple plutôt que d'en rajouter une couche tout de suite. Il faut simplement commencer par l'identification du layer concerné au niveau de chaque évènement, pas besoin d’astuce. Il est accessible au niveau du device passé en argument à la fonction EventHandle(). Tu peux en voir l'utilisation dans le code ci-dessous:hellfrog a écrit :tant qu'on y est ...
continuons l'apprentissage et la pédagogie...
si on veut aussi avoir /I /O, et meme principe pour UMD...
suffit -il d'ajouter
if ((&o==&Joystick) & (x>=H1U) & (x<=H1L)) & (x=S3) // pour /I ?
Code : Tout sélectionner
include "target.tmh"
alias LAYERS_CHAR = "uUoIdD6"; // Lowercase for O-layer, Uppercase for I-Layer
int log_event(alias o, int x)
{
int layer = getEventLayer(&o, x);
alias devName;
if(&o == &Joystick) &devName = "Joystick";
else &devName = "Throttle";
printf("%8s[%c] x=0x%-6x [%d]\xa", &&devName, LAYERS_CHAR[layer], x, x);
}
int getEventLayer(alias o, int x)
{
int i, k;
while(i < 9) {
if(&&o[x] == layer_sw[i]) {
layer_sw[i+2] = layer_sw[i+2] & layer_sw[i+1] ^ o[x];
if(i>0 & layer_sw[i+2]) layer_sw[11-i] = 0;
break;
}
else i = i+3;
}
k = k + layer_sw[2] + ((layer_sw[8] + !layer_sw[5]) << 1);
return k;
}
Je te mets la version actuelle de mon script dans lequel tu trouveras la meilleure solution que j'ai trouvée jusque-là pour structurer l'organisation des fichiers par catégories.Autre question,
peut-on avoir les fonctions
handleHat()
ActHatKey()
dans un tmh "include" plutot que dans le script principal ?
Là tu parles des argument passés à une fonction. Et ta question concerne également deux types de variables. Un int est un nombre entier, un alias est un foutoir dans lequel tu peux mettre tout ce que tu veux sans te faire emmerder par le compilateur... C'est un truc commode pour les langages non-typés... Sauf que c'est au run-time que ça plante, suivant que tu utilises le contenu comme il faut ou pas.Comment choisir si on passe une variable à la fonction par définition d'une nouvelle variable locale dans la fonction appelée : int function (int x){}
ou par alias : int function (alias o){}
?
En fait j'ai pas de réponse simple. On dirait que dès que tu as besoins d'un morceau de mémoire pour contenir autre chose qu'un int ou un char, faut un alias (Genre Variant du VBScript... une sorte de poubelle quoi. Ex: alias LAYERS_CHAR = "uUoIdD6";)
Là c'est pas dur, tout ce que tu déclares en dehors des acollades {...} est global. Tu peux même faire ça entre deux fonction dans les fichiers inclus.Peut-on avoir des variables de portée globale ? est-ce automatiquement le cas si elles sont définies dans le script principal ? (pour utilisation dans une routine d'un sous programme géré par "include")
- Pièces jointes
-
[L’extension « zip » a été désactivée et ne peut plus être affichée.]
#121
j'ai bien vu ton script repris de target.tmh dans ton util_log.tmh
mais comment récupérer U M D ? sous quelle forme ?
j'ai fait qqs essais mais ça marche pas... sans doute pb de syntaxe encore...
dans LAYERS_CHAR[layer] ?
je voudrais avoir la valeur dans une variable pour faire un test dans une autre fonction
pour mapper les HAT corners avec une seule couche par ex, sans que ça interagisse avec une autre (par ex HAT en mode directX sur autre couche)
autre pb :
pourquoi cette ligne dans un tmc (include)
me renvoie l'erreur d'xécution "bad alias"
int LEDS_flash(alias o, alias LedIntensity){
GameOutput(&o, OUT_ID_LED_INTENSITY, &LedIntensity); Sleep(50);
}
appel par par ex :
LEDS_flash( &LMFD, 20);
LEDS_flash( &Throttle, 0);
mais comment récupérer U M D ? sous quelle forme ?
j'ai fait qqs essais mais ça marche pas... sans doute pb de syntaxe encore...
dans LAYERS_CHAR[layer] ?
je voudrais avoir la valeur dans une variable pour faire un test dans une autre fonction
pour mapper les HAT corners avec une seule couche par ex, sans que ça interagisse avec une autre (par ex HAT en mode directX sur autre couche)
autre pb :
pourquoi cette ligne dans un tmc (include)
me renvoie l'erreur d'xécution "bad alias"
int LEDS_flash(alias o, alias LedIntensity){
GameOutput(&o, OUT_ID_LED_INTENSITY, &LedIntensity); Sleep(50);
}
appel par par ex :
LEDS_flash( &LMFD, 20);
LEDS_flash( &Throttle, 0);
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm
#122
La fonction int getEventLayer(alias o, int x) te renvoie exactement ce que tu demandes. Tu peux passer la valeur renvoyée (un entier) à d'autres fonctions si tu veux éviter de l'appeler plusieurs fois pour gérer un même évènement.
Si tu fais les appels suivants:
C'est seulement le premier argument "o" qui est du type alias, LedIntensity est du type int, un simple entier et pas une adressse-mémoire pleine d'infos comme Throttle et Joystick ou LMFD.
Donc :
Devrait être sous cette forme:
Le signe & va avec les variables de type alias, ça veut dire qu'on passe une addresse-mémoire en argument à l'appel d'une fonction qui attend un alias à cet emplacement.
Avec ça tu devrais pouvoir avancer.
---
Sinon, j'ai répondu dans un thread du Forum ED à propos d'un problème de Hat que j'avais également rencontré et j'y ai mis une solution Target. Il s'agit du China Hat qui fait rater des SOI sur le TAD de temps en temps... Justement une histoire de coins Mais cette fois, il s'agit au contraire de les ignorer !
TM:Warthog Coolie Hat issue
---
Si tu fais les appels suivants:
Code : Tout sélectionner
LEDS_flash( &LMFD, 20);
LEDS_flash( &Throttle, 0);
Donc :
Code : Tout sélectionner
int LEDS_flash(alias o, [color="red"]alias[/color] LedIntensity)
{
GameOutput(&o, OUT_ID_LED_INTENSITY, [color="Red"][B]&LedIntensity[/B][/color]); Sleep(50);
}
Code : Tout sélectionner
int LEDS_flash(alias o, [B][color="cyan"]int[/color][/B] LedIntensity)
{
GameOutput(&o, OUT_ID_LED_INTENSITY, [B][color="cyan"]LedIntensity[/color][/B]); Sleep(50);
}
Avec ça tu devrais pouvoir avancer.
---
Sinon, j'ai répondu dans un thread du Forum ED à propos d'un problème de Hat que j'avais également rencontré et j'y ai mis une solution Target. Il s'agit du China Hat qui fait rater des SOI sur le TAD de temps en temps... Justement une histoire de coins Mais cette fois, il s'agit au contraire de les ignorer !
TM:Warthog Coolie Hat issue
---
#123
ok
merci pour tes reponses
autre point :
si j'utilises les scripts vu précédemment pour les HAT,
cela intercepte tous les evenements HAT,
donc on est obligé d'avoir tous les cas ET les layers programmés
comme dans ton exemple :
on ne peut pas avoir ça et en meme temps des MapKey H3U classiques en plus et que le tout fonctionne, c'est bien ça ?
en passant je signale ici les posts sur DCS
où on parle de tes scripts et autres astuces :
http://forums.eagle.ru/showthread.php?t=73271
and the Yoda universal driver project :
http://forums.eagle.ru/showthread.php?t=71233
merci pour tes reponses
autre point :
si j'utilises les scripts vu précédemment pour les HAT,
cela intercepte tous les evenements HAT,
donc on est obligé d'avoir tous les cas ET les layers programmés
comme dans ton exemple :
on ne peut pas avoir ça et en meme temps des MapKey H3U classiques en plus et que le tout fonctionne, c'est bien ça ?
en passant je signale ici les posts sur DCS
où on parle de tes scripts et autres astuces :
http://forums.eagle.ru/showthread.php?t=73271
and the Yoda universal driver project :
http://forums.eagle.ru/showthread.php?t=71233
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm
#124
Si ce que tu appelles MapKey classique correspond aux valeurs par défaut de TARGET, ça doit être ce que tu trouves à la rubrique "Default button mapping" dans target.tmh (ligne 792).
J'ai cherché à comprendre pourquoi TM a choisi cette organisation mais j'ai vite laissé tombé... Si celui qui a fait ça avait une idée derrière la tête, il l'a bien gardée pour lui!
Mieux vaut tout prendre en main et combiner les mapping DX-Input et les raccourcis claviers à partir d'un analyse bien argumentée. C'est ce que j'ai fait avec mes mappings de la couche Middle-Out et le profile Combined qui va avec. Ca donne donc un mapping équivalent au plug and play et il n'en faut pas plus pour avancer.
MapKey() pour les boutons ayant la même fonction sur toutes les couches.
MapKeyIOUMD() pour ceux en ayant 2 à 6 différentes.
J'ai cherché à comprendre pourquoi TM a choisi cette organisation mais j'ai vite laissé tombé... Si celui qui a fait ça avait une idée derrière la tête, il l'a bien gardée pour lui!
Mieux vaut tout prendre en main et combiner les mapping DX-Input et les raccourcis claviers à partir d'un analyse bien argumentée. C'est ce que j'ai fait avec mes mappings de la couche Middle-Out et le profile Combined qui va avec. Ca donne donc un mapping équivalent au plug and play et il n'en faut pas plus pour avancer.
MapKey() pour les boutons ayant la même fonction sur toutes les couches.
MapKeyIOUMD() pour ceux en ayant 2 à 6 différentes.
question mode on/off sur une touche
#125je voudrais faire un truc du genre, mais je trouve pas la bonne syntaxe
comment initialiser flagHover à 0 au lancement,
puis le basculer de 1 à 0 à chaque press ?
je veux que le flash dure tant que le flag est à 1, jusqu'au press suivant
comment cumuler toutes ces imbrications sans violer les règles de syntaxe ? on est obligé de créer des fonctions ? (je sais faire mais j'espérais trouver plus simple)
Code : Tout sélectionner
MapKey(&Throttle, LTB, EXEC("
ActKey(PULSE+KEYON+Hover_On_Off); //hoover mode + led 2 LMFD flash
if(flagHover != 0) REXEC(39, 250, "
GameOutput( &LMFD, OUT_ID_LED_INTENSITY, 200);
GameOutput( &LMFD, OUT_ID_LED_2 , 1);
Sleep(100);
GameOutput( &LMFD, OUT_ID_LED_2 , 0);
GameOutput( &LMFD, OUT_ID_LED_INTENSITY, 20);
Sleep(100);
flagHover = 0;
");
else EXEC("
GameOutput( &LMFD, OUT_ID_LED_2 , 0);
GameOutput( &LMFD, OUT_ID_LED_INTENSITY, 20);
flagHover = 1;
");
")
);
puis le basculer de 1 à 0 à chaque press ?
je veux que le flash dure tant que le flag est à 1, jusqu'au press suivant
comment cumuler toutes ces imbrications sans violer les règles de syntaxe ? on est obligé de créer des fonctions ? (je sais faire mais j'espérais trouver plus simple)
[SIGPIC]http://www.kirikoo.net/images/8WoodMAn- ... 212448.png[/img][/SIGPIC]
(\_/)
(_'.') ..i72600k@4.5GHz + AsusSabertoothZ77 + 16Go GSkill10700 + AC Noctua + Raptor + Win7x64Ult + WH MFDs SaitekThr 1920x1080x3 dt 1 tactile 6950 2G
(")_(")[/align]
(")_(")[/align]
Forbidden Planet = SF , video, old goodie a écrit : http://en.wikipedia.org/wiki/Forbidden_Planet http://www.forbidden-planet.org/forbidden-planet/http://www.jeffbots.com/forbiddenplanet.html http://web.archive.org/web/200412110934 ... fbhome.htm