Variables et structures

TouchLib utilise dans ses fonctions différentes variables et structures, pour pouvoir fonctionner correctement. Il y a trois types de données possibles : les structures, les #define, et les variables globales.

Les structures

Il existe deux structures, mais vous ne pourrez rien faire sans la première. C'est une structure contenant deux variables, coordonnées d'un point. Vous pouvez l'initialiser avec l'une de ces manières :

TL_Point myPoint = {0, 0};

TL_Point myPoint;

myPoint.x = 0;
myPoint.y = 0;

La plupart des fonctions demandent un pointeur sur TLPoint, dans notre cas, l'utilisation de TL_getTouchXY se fait de la manière suivante :

TL_Point myPoint = {0, 0};

TL_getTouchXY(&mypoint);
// myPoint contient maintenant les coordonnées de l'appui tactile

Les coordonnées d'un TL_Point sont bornées entre (0, 0) et (20, 20), (-1, -1) étant les valeurs en cas de non appui.

La seconde est une structure contenant plusieurs données utilisées avec la fonction TL_gestureTimer. Elle contient ceci :

TL_GlobalVariables
{
  TL_Point TL_GestureTimer_Origin; // Les coordonnées du point d'arrivée du mouvement
  TL_Point TL_GestureTimer_PreviousOrigin; // Les coordonnées du point de départ du mouvement
  TL_Point TL_GestureTimer_Displacement; // Les coordonnées du vecteur de déplacement
  int TL_GestureTimer_Delay; // Le temps (en occurences du timer) entre deux changement d'état de TL_GestureTimer_IsTouched
  char TL_GestureTimer_IsTouched; // L'état du TouchPad (1 si appui, 0 sinon)
};

Les #define

Il y en a deux : TL_GET_TOUCH_ROUND et TL_TIMER_DELAY.

TL_GET_TOUCH_ROUND correspond au nombre de touches qui seront prises en compte lors de l'appui sur le "TouchPad" : par exemple, si les touches 1, 2 et 4 sont pressées, alors la valeur du TL_Point sera un arrondi entre les valeurs des positions des touches 1, 2 et 4. Attention, la constante doit être superieure ou égale à 1, et plus celle-ci est grande, plus les fonctions sont lentes. Une valeur de 4 est recommandée.
TL_TIMER_DELAY correspond à la fréquence (en millisecondes) à laquelle le timer calculera le déplacement en cours.

Les variables globales

Il en existe 4 et servent à la récupération des données lors de l'utilisation de la fonction TL_gestureTimer : TL_Point TL_GestureTimer_Origin, TL_Point TL_GestureTimer_Displacement, int TL_GestureTimer_Delay, char TL_GestureTimer_IsTouched.

TL_Point TL_GestureTimer_Origin contient les coordonnées du point pressé lors de la dernière mise à jour du timer.

TL_Point TL_GestureTimer_Displacement, sous la forme d'un TL_Point, contient les coordonnées du vecteur déplacement lors de la dernière mise à jour du timer. Ces coordonnées peuvent être positives comme négatives : (0, 0) => aucun déplacement, (-1, -1) => déplacement vers le haut à gauche, (1, 1) => déplacement vers le bas à droite.

int TL_GestureTimer_Delay contient le nombre d'itérations du timer a partir moment où un appui a été déecté ou que celui-ci a été relaché.

char TL_GestureTimer_IsTouched contient 0 si aucun appui n'est détecté, 1 si il y en a un.

TL_getTouchXY

C'est sans doute la fonction la plus importante. Elle demande en paramètre un pointeur sur un TL_Point, et ne retourne rien. Dans la variable passée par le pointeur, vous aurez les coordonées du point sur lequel l'utilisateur appuie.

TL_Point myPoint = (-1, -1);

TL_getTouchXY(&myPoint);

myPoint; // myPoint contient les coordonnées du point pressé.

Ces coordonnées sont négatives (-1, -1) si l'utilisateur n'appuie sur aucune touche. Sinon, celles-ci vont de la touche XTT (0, 0) à la touche EXE (20, 20). Un arrondi est fait pour plus de précision, voir TL_GET_TOUCH_ROUND pour plus d'informations.

TL_gestureTimer

Cette fonction est assez complexe en ce qu'elle demande une initialisation complète : vous lancez un timer qui se chargera de mettre à jour une variable globale sous la forme d'une structure. Pour cela, suivez les étapes suivantes :

TL_GlobalVariables *donnees; // On crée un pointeur sur les variables gloables
donnees = (TL_GlobalVariables*)TL_initGT() // On associe ce pointeur aux variables. Le cast est obligatoire lors de la compilation

TL_startGT(); // On lance le timer. A partir de ce moment, vous pouvez récupérer et traiter les infos contenues dans la structure "donnees"

while(IsKeyUp(KEY_CTRL_F1)) {
   depX = donnees->TL_GestureTimer_Displacement.x; // donnees est un pointeur, donc on accède à ses données avec l'opérateur ->, ensuite, la navigation se fait normalement avec le . pour acceder aux coordonées des TL_Points
   isTouched = variables->TL_GestureTimer_IsTouched;
}

TL_stopGT(); // On quitte le timer

Pour récupérer et traiter les informations contenues dans la structure, référez-vous au chapitre sur les variables.

TL_waitTouchXY

Cette fonction stoppe le programme jusqu'à ce qu'un appui entre les coordonnées précisées soit détecté. S'utilise comme ceci :

TL_waitTouchXY(Xmin, Xmax, Ymin, Ymax);

TL_waitGesture

Cette fonction stoppe le programme jusqu'à ce qu'un mouvement entre les coordonnées précisées soit détecté. Demande une zone de départ, et une zone d'arrivée sous forme de vecteur. S'utilise comme ceci :

TL_waitGesture(origineXmin, origineXmax, origineYmin, origineYmax, deplacementXmin, deplacementXmax, deplacementYmin, deplacementYmax, temps);

La variable "temps" est le nombre de boucles durant lequel on accepte que l'utilisateur ait relevé le doigt, tout en acceptant tout de même le mouvement comme valide. Une valeur de 20 est conseillée.

TL_getGesture

Cette fonction stoppe le programme jusqu'à ce qu'un mouvement complet ai été détecté. Elle demande des pointeurs sur char pour retourner les données.

TL_waitGesture(&originX_min, &originX_max, &originY_min, &originY_max, &displacementX_min, &displacementX_max, &displacementY_min, &displacementY_max, temps);

De la même manière que pour TL_waitGesture, "temps" correspond au nombre de boucles durant lequel on ne détecte aucun appui avant de compter le mouvement comme fini. Une valeur de 20 est ici aussi conseillée.

Remerciements

Merci à toute la communauté de Planète Casio pour son aide et ses conseils.

Vous pouvez réutiliser gratuitement le design de cette documentation pour vos propres documents, DWTFYWT.