next up previous contents
suivant: Le pilote de tty monter: Pilote du clavier précédent: Conversion des scan codes   Table des matières

Implémentation dans KoinKoin

Un petit rappel d'importance avant de continuer : dans KoinKoin le driver clavier, comme la quasi totalité des drivers, est externalisé du noyau. Il d'agit d'une tâche autonome, s'écutant en espace utilisateur, et communiquant par messages (c'est-à-dire un service).

Ainsi le pilote du clavier ne reçoit pas directement les interruptions 0x1. Elles lui sont en effet relayées par le handler associé à l'entrée 0x1 de l'IDT, sous la forme d'un message.

A réception de ce message, le pilote va alors lire le ou les scan codes composant la touche, selon qu'il s'agisse d'une touche étendue ou non (fonction int Irq1_FillKeyboardBuffer(void)). Avant de lire le scan code sur le port 0x60, on vérifie bien que la donnée est disponible en testant la valeur du registre de contrôle. L'intégralité des scan codes composant la touche est récupéré et stockée dans le tampon : gl_key_buf. Ne sont bufferisés que les make codes, le traitement associé à la touche ayant déjà été effectué lorsque survient le break code.

L'étape suivante consiste, à partir de l'ensemble des scan codes de la touche, de déterminer le code ascii associé, si il y en a. Le pilote commence par ``poper'' le buffer, afin de récupérer dans la variable globale gl_kbd l'ensemble des scan codes composant la touche. Cette structure possède également la valeur ascii de la touche si elle existe, ainsi qu'un ensemble de variables précisant si une touche spéciale est activée (c'est-à-dire enfoncée).

Les touches spéciales ainsi mémorisées sont : Shift, Ctrl, Windows, Alt et Altgr. Lors de la réception du make code d'une de ces touches, on affecte 1 à la variable, 0 lors de la réception de son make code.

Lorsqu'une touche possède une équivalence ascii, on utilise la table de correspondance. Le pilote sait quelles touches spéciales sont activées, et il n'y a donc pas de problème pour déterminer le code ascii (par exemple 'a' et 'A'.).

De plus certaines combinaisons de touches sont prises en compte, telles que:


next up previous contents
suivant: Le pilote de tty monter: Pilote du clavier précédent: Conversion des scan codes   Table des matières
nicolas 2006-07-30