La liaison PS2 clavier
Scan codes
Le processeur du clavier passe
la plupart de son temps à scanner la matrice de touches. S'il trouve
qu'une touche a été enfoncée ou relâchée ou
tenue appuyée, le clavier enverra un paquet d'information, le scan code,
à l'odinateur.
Il y a 2 types différents de scan codes Les "Make Codes" (MC)
et les "Break Codes" (BC).
Un MC est envoyé quand une touche est appuyée ou maintenue appuyée.
Un BC est envoyé quand une touche est relâchée.
Un seul MC et un seul BC sont assignés à chaque touche, ce qui
fait que le PC peut déterminer exactement ce qui est arrivé à
chaque touche en regardant un simple scan code.
L'ensemble des MC et BC pour chaque touche forme un "scan code set".Il
n'y a pas de formule simple pour représenter les scan codes pour chaque
touche. Si vous voulez savoir quels sont les MC et BC pour une touche donnée,
vous devez consulter une table. Il existe 3 tables de scan codes les "scan
codes set" 1 , 2 et 3. Tous les claviers modernes ont par défaut
l'ensemble "scan codes set 2".
Make Codes, Break Codes et répétition automatique
Lorsqu'on appuie sur une touche,
son MC est envoyé à l'ordinateur. Gardez à l'esprit qu'un
MC représente seulement une touche sur le clavier, il ne représente
pas le caractère imprimé sur cette touche. Celà signifie
qu'il n'y a pas de relation définie entre un MC et un code ASCII. C'est
à l'ordinateur de transcrire les scan codes en caractères.
Bien que la plupart des scan codes
de l'ensemble 2 soit de 1 octet, il y a une poignée de "touches
étendues" dont les scan codes sont définis sur 2 ou 4 octets.
Leurs MC peuvent être identifiés par le fait que leur premier octet
est E0h.
De la même façon qu'un
MC est envoyé à l'ordinateur lorsqu'une touche est enfoncée,
un BC est envoyé quand une touche est relâchée. Chaque touche
a son propre BC. Heureusement, on a pas toujours à utiliser les tables
pour représenter le BC d'une touche. Des relations existent entre les
MC et les BC. La plupart des BC ont 2 octets, le premier étant F0h et
le second étant le MC de la touche. Les BC pour les touches étendues
font habituellement 3 octets dont les 2 premiers sont E0h, F0h et le dernier
octet est le dernier octet du MC de la touche considérée.
Exemple (scan code set 2)
|
Make Code |
Break Code |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Exemples: quelle séquence de MC et BC doit-elle être envoyée
à l'ordinateur pour que le caractère "G" apparaisse
dans un traitement de texte?
Etant donné qu'il s'agit d'une lettre majuscule, la séquence d'événements
à mettre en place est: appuyer sur "shift", appuyer sur "G",
relâcher "G", relâcher "shift". Les scan codes
associées à ces événements sont les suivants:
MC pour la touche "shift"
(12h), MC pour la touche "G" (34h), BC pour la touche "G"
(F0h, 34h), BC pour la touche "shift"(F0h, 12h)
De là les données envoyées à l'ordinateur:
12h, 34h, F0h, 34h, F0h, 12h
Si vous appuyez sur une touche, son MC est envoyé à l'ordinateur. Quand vous appuyez et tenez une touche enfoncée, cette touche devient "typematic" (TM), ce qui signifie que le clavier va continuer à envoyer le MC de cette touche jusqu'à ce que cette touche soit relâchée ou qu'une autre touche soit appuyée. Pour vérifier ceci, vous ouvrez un traitement de texte et vous tenez la touche "A" appuyée. Lorsque vous appuyez, le caractère "a" apparaît immédiatement sur l'écran. Après un court délai, un autre "a" apparaît suivi par une série de "a" jusqu'à ce que vous relachiez le "A" du clavier. Il y a ici deux paramètres importants: le "typematic delay" (TMD) qui est le court délai entre le premier et le second "a" et le "typematic rate" (TMR) qui indique combien de caractères par seconde vont apparaître sur votre écran après le "typematic delay" - le TDM peut varier de 0,25 à 1 sec et le TMR de 2 cps à 30 cps (caractères par seconde). Vous pouvez changer les TDM et TDR en utilisant la commande "Set Typematic Rate/Delay" (0xF3).
Les données TM ne sont pas bufférisées dans le clavier. Dans le cas ou plus d'une touche est enfoncée, seule la dernière touche devient TM. TM se répète et stoppe quand cette touche est relâchée, même si d'autres touches sont appuyées.
Reset
A la mise sous tension ou au reset logiciel,
le clavier effectue un test de diagnostic appelé BAT (test d'assurance
de base) et charge les valeurs suivantes par défaut:
TDM 500ms
TMR 10,9 cps
Scan Code set 2
Toutes les touches typematic/make/break
Lorsque le clavier entre dans le BAT, il
allume ses 3 leds et les éteint lorsque le BAT est fini. A ce moment,
un code de fin de BAT soit AA (succès), soit FC (erreur) est envoyé
à l'ordinateur. Ce code doit être envoyé de 500 à
750 ms après la mise sous tension.
Beaucoup de claviers ignorent les lignes Clock et Data tant que le code de BAT
n'a pas été envoyé. De là une condition d'inhibition
(Clock à 0) peut ne pas prévenir l'envoi du code de fin de BAT
par le clavier.
Ensemble de commandes
Quelques notes concernant les commandes que l'ordinateur peut émettre vers le clavier.
- Le clavier efface son buffer de sortie quand il reçoit une commande
- Si le clavier reçoit une commande invalide, il doit répondre avec "renvoyer" (FE)
- Le clavier ne doit pas envoyer de scan code quand le process d'une commande est en cours.
- Si le clavier est en attente d'un octet argument et qu'il reçoit à la place une commande, il doit supprimer la commande précédente et prendre en compte la nouvelle commande.
Voici quelques exemples de commandes que l'hôte peut envoyer au clavier:
- FF (reset) le clavier répond avec "ack" (FA) et entre dans le mode reset
- FE (resend) le clavier répond en renvoyant le dernier octet envoyé. L'exception à cela est: si le dernier octet envoyé était "resend" (0xFE) Dans ce cas le clavier envoie le dernier non-FE byte. Cette commande est utilisée pour indiquer une erreur dans la réception.
- EE Echo A l'envoi d'une commande d'écho, le clavier devrait répondre avec Echo (EE)
- F0 Set Scan Code Set. A l'envoi de F0, le clavier doit répondre avec ACK (FA) et attendre une autre octet, 01-03 qui détermine le scan code utilisé. L'envoi de 00 renvoie le scan code actuellemnt utilisé.
- F3 Set Typematic Repeat Rate. Le clavier accuse réception avec FA et attend le second octet qui détermine le TMR
- F4 Keyboard Enable - Efface le buffer de sortie du clavier, autorise le scan du clavier, le clavier retourne un ACK (FA)
- F5 Keyboard Disable - reset le clavier, désactive le scan clavier, le clavier retourne un ACK (FA)
Initialisation
Ce qui suit est un exemple de communication entre un PC et son clavier quand il démarre.
Keyboard: AA Self-test passed ;Keyboard controller init
Host: ED Set/Reset Status Indicators
Keyboard: FA Acknowledge
Host: 00 Turn off all LEDs
Keyboard: FA Acknowledge
Host: F2 Read ID
Keyboard: FA Acknowledge
Keyboard: AB First byte of ID
Host: ED Set/Reset Status Indicators ;BIOS init
Keyboard: FA Acknowledge
Host: 02 Turn on Num Lock LED
Keyboard: FA Acknowledge
Host: F3 Set Typematic Rate/Delay ;Windows init
Keyboard: FA Acknowledge
Host: 20 500 ms / 30.0 reports/sec
Keyboard: FA Acknowledge
Host: F4 Enable
Keyboard: FA Acknowledge
Host: F3 Set Typematic Rate/delay
Keyboard: FA Acknowledge
Host: 00 250 ms / 30.0 reports/sec
Keyboard: FA Acknowledge