www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

kbc.c (1514B)


      1 #include <module.h>
      2 #include <types.h>
      3 #include <pc/kbc/kbc.h>
      4 #include <pc/irq/irq.h>
      5 #include <pc/io/io.h>
      6 #include <interfaceUtilisateur/console/console.h>
      7 
      8 MODULE(Kbc);
      9 
     10 DEPENDANCE_MODULE(Kbc, Irq);
     11 DEPENDANCE_MODULE(Kbc, Io);
     12 DEPENDANCE_MODULE(Kbc, Console);
     13 
     14 void gestionnaireRequeteInterruptionKbc() {
     15 	etatKbc->gestionnaireClavier(inb(PORT_KBC_SCANCODE));
     16 }
     17 
     18 void gestionnaireClavierVide(uint8 scancode) {
     19 	scancode = scancode;
     20 }
     21 
     22 void activerClavier() {
     23 	uint8 ppi = inb(PORT_KBC_PPI);
     24 	ppi = ppi & ~0x80;
     25 	outb(PORT_KBC_PPI, ppi);
     26 }
     27 
     28 void activerSouris() {
     29 	
     30 }
     31 
     32 void desactiverClavier() {
     33 	uint8 ppi = inb(PORT_KBC_PPI);
     34 	ppi = ppi | 0x80;
     35 	outb(PORT_KBC_PPI, ppi);
     36 }
     37 
     38 void attenteKbc() {
     39 	/* Attendre un tampon d'entrée vide */
     40 	while ((inb(PORT_KBC_COMMANDE) & 2) == 2);
     41 }
     42 
     43 void attenteLectureKbc() {
     44 	/* Attendre un tampon d'entrée plein */
     45 	while ((inb(PORT_KBC_COMMANDE) & 2) != 2);
     46 }
     47 
     48 void resetCpu() {
     49 	attenteKbc();
     50 	outb(PORT_KBC_COMMANDE, KBC_DEMMANDE_ECRITURE_CLAVIER);
     51 	
     52 	attenteKbc();
     53 	outb(PORT_KBC_SCANCODE, KBC_RESET_CPU);
     54 }
     55 
     56 void definirGestionnaireClavier(GestionnaireClavier gestionnaireClavier) {
     57 	etatKbc->gestionnaireClavier = gestionnaireClavier;
     58 }
     59 
     60 void initKbc (void** etat) {
     61 	*etat = etatKbc;
     62 	
     63 	etatKbc->gestionnaireClavier = gestionnaireClavierVide;
     64 	
     65 	definirGestionnaireRequeteInterruption(LIGNE_IRQ_CLAVIER, gestionnaireRequeteInterruptionKbc);
     66 	activerLigneRequeteInterruption(LIGNE_IRQ_CLAVIER);
     67 	
     68 	activerClavier();
     69 }
     70 
     71 void deinitKbc (void** etat) {
     72 	*etat = NULL;
     73 }