Index des articles > Programmation > Tutorial TIGCC - Chapitre 4 - Gestion du clavier

Tutorial TIGCC - Chapitre 4 - Gestion du clavier

Article posté par limmt

Chapitre 4 - Gestion du clavier

A - Lecture à haut niveau - ngetchx()

ngetchx() est une fonction de lecture du clavier à haut niveau. Cela ne signifie pas qu'elle est compliquée, bien au contraire. Cela signifie qu'elle est justement plus simple à utiliser car elle est elle même un ensemble de fonctions bas niveau cependant elle n'est pas aussi performante et ne permet pas de lire l'état du clavier en temps réel.

Prototype de la fonction:

short ngetchx(short);

Cette fonction attend l'appui d'une touche et renvoie le code de cette touche en short. Elle ne prend pas d'arguments.
Les codes des touches renvoyés sont similaires à ceux du TI-basic, cependant les codes des touches directionnelles sont différents et diffèrent également selon la TI utilisée.

TI89:
ToucheNormal+Shift+2nd+Diamant+alpha
Haut337852944331672133105
Droite344853644401672833112
Bas340853244361672433108
Gauche338853044341672233106

TI92 plus/V200:
ToucheNormal+Shift+2nd+Diamond+alpha
Haut338167224434853033106
Droite340167244436853233108
Bas344167284440853633112
Gauche337167214433852933105

B - Lecture à bas niveau - _rowread() et _keytest()

I) Intro

_rowread() et _keytest() sont des fonctions de lecture du clavier à bas niveau, elles sont beaucoup plus performantes que ngetchx et permettent de lire le clavier en temps réel. Cependant elles nécéssitent la désactivation de l'interruption système numéro 1, l'AUTO_INT_1.

II) Interruptions

Les interruptions sont une sorte de compte à rebours qui, à chaque fois qu'ils arriveznt à zéro déclenchent un événement. Nous ne nous occuperons ici que de l'AUTO_INT_1. Les fonctions de lecture du clavier à bas niveau requierent la désactivation de celle-ci, mais l'utilisation des niveaxu de gris nécessitera l'AUTO_INT_1 ; pour pouvoir lire le clavier en pouvant tout de même utiliser les niveaux de gris, nous ne désactiverons pas l'AUOT_INT_1, mais nous la remplacerons par une interruption vide.
Pour cela nous utiliserons une interruption inclue dans TIGCC, le DUMMY_HANDLER. C'est une interruption vide qui comprend uniquement "rte".

Syntaxe de désactivation d'une interruption:

Avant le programme ou au début de main:

INT_HANDLER save_auto_int_1; //Déclare la variable save_auto_int_1 comme INT_HANDLER (sauvegarde d'interruption, ce qui nous permettra de restaurer l'AUTO_INT_1 à la fin du programme)

Au début du programme (avant l''activation des niveaux de gris et avant l'utilisation des fonctions de lecture de clavier à bas niveau):

save_auto_int_1 = GetIntVec (AUTO_INT_1); //Sauvegarde le contenu de l'AUTO_INT_1 dans save_auto_int_1
SetIntVec (AUTO_INT_1, DUMMY_HANDLER); //Redirige l'AUTO_INT_1 vers DUMMY_HANDLER (interruption vide)


A la fin (restauration de l'AUTO_INT_1):

SetIntVec (AUTO_INT_1, save_auto_int_1); //Restaure l'AUTO_INT_1 avec le contenu de save_auto_int_1

! Il est vivement recommandé de désactiver l'AUTO_INT_5 de la même manière car ces fonctions seront alors plus rapides.

III) _keytest()

Je n'expliquerai pas ici en détail l'utilisation de _rowread car il est bien plus simple d'utiliser _keytest, qui a la même vitesse. Si vous voulez utiliser _rowread, reportez vous à la documentation de TIGCC.

Prototype:

short _keytest (short row, short col);

_keytest renvoie TRUE si la touche demandée est pressé ou renvoie FALSE sinon.
On peut soit mettre les numéros de ligne et de colonne de la touche désirée mais il y a plus simple. Dnas le fichier compat.h, il y a des paires de pseudo-constantes prédéfinies pour _keytest et qui repsectent la compatibilité entre TI89 et TI92+/V200.
Ces pseudo-constantes commence toutes par RR_ puis le nom de la touche (voir compat.h dans la doc de TIGCC) et remplacent les deux arguments.

Exemple pour tester l'appui sur ESC:

if(_keytest(RR_ESC))
actions_si_appui_sur_ESC;


! Les fonctions de lecture du clavier à haut et bas niveau sont incompatibles, car pour le bas niveau il est nécessaire de désactiver l'AUTO_INT_1 et ngetchx est un ROM_CALL basée sur l'AUTO_INT_1, elle produira une barre noire si vous l'utilisez avec l'AUTO_INT_1 désactivée.


Limmt Ribeman © 2004

>> Vos commentaires [1]

[Commentaire n°1]

Posté par clechr2 le 04/09/2004
je viens de déceler une faute (de frappe probablement) dans le tableau des codes touches de la TI89 : haut = 337 et non 33
voilà, sinon, ce tuto est très bien (je suis en train de tout lire :D !!)


Poster un commentaire


Seuls les membres peuvent poster des commentaires