My Project
Chargement...
Recherche...
Aucune correspondance
clavier.c
Aller à la documentation de ce fichier.
1
2/* @file : clavier.c */
3/* @brief: Implantation des sous-programmes de manipulation du clavier. */
4/* */
5/* (C) Manu Chaput 2000-2023 */
6/*----------------------------------------------------------------------------*/
7#include <manux/clavier.h>
8
9#include <manux/io.h>
10#include <manux/intel-8259a.h>
11#include <manux/printk.h>
13#include <manux/memoire.h> // NULL
14#include <manux/scheduler.h> // basculeConsoleDemandee
15
16#ifdef MANUX_CLAVIER_CONSOLE
17# include <manux/console.h>
18#endif
19
20#include <keymaps/french.h>
21
22/*
23 * Description de l'état courant du clavier
24 */
25int codeClavier = 0; // Code de la dernière touche manipulée
26int shiftActif = 0;
27
29{
30 codeClavier = 0;
31
33
34 // On s'enregistre auprès du PIC
36
37 /* Activation du clavier */
39 outb(portCmdClavier, 0xae);
40
42}
43
44#define KEYCODE_ESC 0x01
45#define KEYCODE_TAB 0x0F
46#define KEYCODE_F1 0x3b
47#define KEYCODE_F2 0x3c
48#define KEYCODE_F3 0x3d
49#define KEYCODE_F4 0x3e
50#define KEYCODE_F5 0x3f
51#define KEYCODE_F6 0x40
52#define KEYCODE_F7 0x41
53#define KEYCODE_F8 0x42
54#define KEYCODE_F9 0x43
55#define KEYCODE_F10 0x44
56
57#define SC_SHIFT_GAUCHE 0x2a
58
64void handlerClavier(void * toto)
65{
66 uint8_t etat;
67
68 (void) toto; // Présent uniquement pour la signature de la fonction
69 inb(0x64, etat);
70
71 if (etat & 0x01) {
72 inb(0x60, codeClavier);
73 codeClavier &= 0xFF;
74
75 // Gestion des shifts
77 shiftActif++;
78 return;
79 }
80 if (codeClavier == (SC_SHIFT_GAUCHE | 0x80)) {
81 shiftActif--;
82 return;
83 }
84 // printk("[KBD-0x%x / %d]\n", codeClavier, shiftActif);
85
86#ifdef MANUX_CONSOLES_VIRTUELLES
87 if (codeClavier == KEYCODE_ESC) {
89 return;
90 }
91#endif
92
93#ifdef MANUX_TACHES
94 if (codeClavier == KEYCODE_F1) {
96 return;
97 }
98#endif
99#ifdef MANUX_CLAVIER_CONSOLE
100 Console * cons;
101# ifdef MANUX_CONSOLES_VIRTUELLES
102 cons = consoleActive;
103# else
104 cons = consoleNoyau();
105# endif
106
107 if (codeClavier & 0x80) {
108 //printk("(up)\n");
109 } else {
110 if (cons->bufferClavier){
111 if (cons->nbCarAttente < 4096) {
112 cons->bufferClavier[(cons->indiceProchainCar + cons->nbCarAttente)%4096] =
114 cons->nbCarAttente++;
115 }
116 }
117 }
118#endif
119 }
120}
#define SC_SHIFT_GAUCHE
Definition clavier.c:57
void handlerClavier(void *toto)
Le handler du clavier.
Definition clavier.c:64
#define KEYCODE_F1
Definition clavier.c:46
#define KEYCODE_ESC
Definition clavier.c:44
void initialiserClavier(void)
Definition clavier.c:28
int shiftActif
Definition clavier.c:26
int codeClavier
Definition clavier.c:25
uint8_t keymap[128]
Definition french.h:1
uint8_t keymapShift[128]
Definition french.h:8
Définition des fonctions de base d'accés à la console.
Console * consoleNoyau(void)
Obtention d'un pointeur sur la console par défaut.
Definition console.c:808
typedef void(Handler(void))
Définition des fonctions de base d'entrée-sortie du noyau.
#define NULL
Definition stddef.h:10
#define TRUE
Definition types.h:36
unsigned char uint8_t
Definition types.h:12
void i8259aInterdireIRQ(uint8_t numIRQ)
int i8259aAjouterHandler(int numIRQ, void(*handler)(void *), void *private)
Ajout d'un handler.
void i8259aAutoriserIRQ(uint8_t numIRQ)
Masquage d'une IRQ.
#define outb(port, octet)
Emission d'un octet sur un port.
Definition io.h:13
#define inb(port, adresseOctet)
Lecture d'un octet depuis un port.
Definition io.h:19
#define portDonneesClavier
Definition clavier.h:11
#define portCmdClavier
Definition clavier.h:12
#define IRQ_CLAVIER
Definition pc-i386.h:58
booleen basculerTacheDemande
Definition scheduler.c:54
booleen basculeConsoleDemandee
Definition scheduler.c:52
Structure d'une console.
Definition console.h:37