π
<-

Problème de détection multi-flèches sur toutes CX

C, C++, ASM...

Problème de détection multi-flèches sur toutes CX

Unread postby matref » 04 May 2014, 19:44

Salut,

On me l'avait encore jamais faite celle-là ... pour un même programme, nspire_emu comprend le multi-flèches uniquement si il émule une Nspire non-CX. Si il émule une CX, la dernière touche appuyée écrase la précédente (exemple : si j'appuyais sur haut et que sans relacher haut j'appuie sur droite, ça appuie que sur droite).

Au début je me disais que c'était juste nspire_emu qui merdait, mais pierrotdu18 me confirme que sur HW ça fait pareil (sur ma Nspire CAS, ça marche correctement).

Donc je me suis dit que c'était le touchpad. Voilà le code que j'utilise actuellement :

Code: Select all
typedef int KeyEvent; // question de préférence
inline KeyEvent getk(void)
{
   return (((isKeyPressed(KEY_NSPIRE_UP) << 1) + isKeyPressed(KEY_NSPIRE_RIGHT) << 1) + isKeyPressed(KEY_NSPIRE_LEFT) << 1) + isKeyPressed(KEY_NSPIRE_DOWN);
}


J'vous ai gentiment fait un petit layer de debug si vous voulez :

Code: Select all
typedef int KeyEvent;
KeyEvent getk(void)
{
   int i;
   KeyEvent k;
   while(!isKeyPressed(KEY_NSPIRE_ENTER))
   {
      k = (((isKeyPressed(KEY_NSPIRE_UP) << 1) + isKeyPressed(KEY_NSPIRE_RIGHT) << 1) + isKeyPressed(KEY_NSPIRE_LEFT) << 1) + isKeyPressed(KEY_NSPIRE_DOWN);
      for(i = 3; i >= 0; i--)
         printf("%d", (k >> i) & 1);
      printf("\n");
      SDL_Delay(1000);
   }
   return k;
}

Regardez la console pendant que vous appuyez sur des touches et faites [enter] pour quitter.

Des idées ?
User avatar
matref
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 25%
 
Posts: 506
Joined: 11 Dec 2011, 03:08
Location: France, Châteaurenard
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prépa MPSI

Re: Problème de détection multi-flèches sur toutes CX

Unread postby Levak » 04 May 2014, 20:47

Partant du fait que même l'OS a ce problème sur toutes les Nspire TouchPad, je doute que tu puisses faire mieux.

Edit :
D'ailleurs, juste entre nous, je ne comprends pas ta ligne :
Code: Select all
      k = (((isKeyPressed(KEY_NSPIRE_UP) << 1) + isKeyPressed(KEY_NSPIRE_RIGHT) << 1) + isKeyPressed(KEY_NSPIRE_LEFT) << 1) + isKeyPressed(KEY_NSPIRE_DOWN);

Ce n'est pas ceci que tu voulais faire ?
Code: Select all
      k = isKeyPressed(KEY_NSPIRE_DOWN) | (isKeyPressed(KEY_NSPIRE_UP) << 1) | (isKeyPressed(KEY_NSPIRE_RIGHT) << 2) | (isKeyPressed(KEY_NSPIRE_LEFT) << 3);
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: Problème de détection multi-flèches sur toutes CX

Unread postby matref » 04 May 2014, 20:49

Ah ben c'est con.

J'avais lu que le touchpad ne supportait effectivement pas le contact à plusieurs endroits en même temps, mais même l'appui est concerné ?
User avatar
matref
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 25%
 
Posts: 506
Joined: 11 Dec 2011, 03:08
Location: France, Châteaurenard
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prépa MPSI

Re: Problème de détection multi-flèches sur toutes CX

Unread postby critor » 04 May 2014, 20:52

De mémoire, il me semble qu mViewer gère correctement les directions diagonales.
Donc, c'est possible.

Je crois que Ndless a quatre KEY_NSPIRE_* spécifiques pour ce genre de cas.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 51.4%
 
Posts: 42257
Images: 16712
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Problème de détection multi-flèches sur toutes CX

Unread postby matref » 04 May 2014, 20:53

Oui effectivement, mais j'ai déjà essayé et ça ne donne rien de bien plus convaincant. Je vais réessayer juste au cas où et poster le code ici.
User avatar
matref
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 25%
 
Posts: 506
Joined: 11 Dec 2011, 03:08
Location: France, Châteaurenard
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prépa MPSI

Re: Problème de détection multi-flèches sur toutes CX

Unread postby Levak » 04 May 2014, 20:53

matref wrote: mais même l'appui est concerné ?

L'appuis est juste un contact qui permet de dire "je suis en état appuyé". Le touchpad ne dispose pas d'API permettant de récupérer le pôle appuyé, donc tu le récupères depuis la zone touchée, qui n'est pas multitouch.
C'est pour ça que depuis les TouchPad, tout le monde utilise les touches 2, 4, 6 et 8.

critor wrote:De mémoire, il me semble qu mViewer gère correctement les directions diagonales.

On ne parle pas des diagonales mais de la présence de deux doigts sur le touchpad (souvent en position antagoniste), et l'un qui appui.
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: Problème de détection multi-flèches sur toutes CX

Unread postby pierrotdu18 » 04 May 2014, 20:54

Code: Select all
   if(isKeyPressed(KEY_NSPIRE_UP))        evt |= 0x4;
   if(isKeyPressed(KEY_NSPIRE_DOWN))      evt |= 0x8;
   if(isKeyPressed(KEY_NSPIRE_RIGHT))     evt |= 0x10;
   if(isKeyPressed(KEY_NSPIRE_LEFT))      evt |= 0x20;
   if(isKeyPressed(KEY_NSPIRE_UPRIGHT))   evt |= 0x14;
   if(isKeyPressed(KEY_NSPIRE_RIGHTDOWN)) evt |= 0x18;
   if(isKeyPressed(KEY_NSPIRE_LEFTUP))    evt |= 0x24;
   if(isKeyPressed(KEY_NSPIRE_DOWNLEFT))  evt |= 0x28;
Bonjour
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

Re: Problème de détection multi-flèches sur toutes CX

Unread postby matref » 04 May 2014, 20:56

Ah non non je parlais bien des diagonales moi. Je veux bien deux appuis, pas deux contacts. M'enfin je suis actuellement en état de test.
User avatar
matref
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 25%
 
Posts: 506
Joined: 11 Dec 2011, 03:08
Location: France, Châteaurenard
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prépa MPSI

Re: Problème de détection multi-flèches sur toutes CX

Unread postby matref » 04 May 2014, 21:00

Nope, même avec les constantes des diagonales ça affiche qu'un bit à 1 à chaque fois.

Code: Select all
KeyEvent getk(void)
{
   int i;
   KeyEvent k;
   while(!isKeyPressed(KEY_NSPIRE_ENTER))
   {
      k = (((isKeyPressed(KEY_NSPIRE_UP) << 1) + isKeyPressed(KEY_NSPIRE_RIGHT) << 1) + isKeyPressed(KEY_NSPIRE_LEFT) << 1) + isKeyPressed(KEY_NSPIRE_DOWN);
      if(isKeyPressed(KEY_NSPIRE_UPRIGHT)) k |= 0x0c;
      if(isKeyPressed(KEY_NSPIRE_RIGHTDOWN)) k |= 0x05;
      if(isKeyPressed(KEY_NSPIRE_DOWNLEFT)) k |= 0x03;
      if(isKeyPressed(KEY_NSPIRE_LEFTUP)) k |= 0x0a;
      
      for(i = 3; i >= 0; i--)
         printf("%d", (k >> i) & 1);
      printf("\n");
      SDL_Delay(1000);
   }
   return k;
}
User avatar
matref
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 25%
 
Posts: 506
Joined: 11 Dec 2011, 03:08
Location: France, Châteaurenard
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prépa MPSI

Re: Problème de détection multi-flèches sur toutes CX

Unread postby Levak » 04 May 2014, 21:11

matref wrote:Ah non non je parlais bien des diagonales moi. Je veux bien deux appuis, pas deux contacts. M'enfin je suis actuellement en état de test.

Alors je sais pas comment tu fais, mais moi, si je prends un seul doigts, et que j'appuie sur "Haut" et que je le fais glisser vers la gauche, je suis sur la diagonale KEY_NSPIRE_LEFTUP, et je n'ai qu'un seul appuis, un seul contact. Il est évident qu'à partir du moment où deux doigts sont en train de toucher le TouchPad, c'est mort.
Maintenant, sur nspire_emu, l'appui simultané de gauche et haut doit résulter dans l'activation des flags KEY_NSPIRE_UP, KEY_NSPIRE_LEFT et KEY_NSPIRE_LEFTUP. Teste en 3.1 et 3.6 (je n'ai pas le matos pour le faire désolé) et s'il y a une différence, alors contacte ExtendeD. Ce comportement fonctionnait au moins en 3.1 sur CX CAS (cf nClock).
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Next

Return to Native: Ndless, Linux, ...

Who is online

Users browsing this forum: ClaudeBot [spider] and 7 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1522 utilisateurs:
>1508 invités
>8 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)