X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdrv%2Fkb.c;h=3e461fd6bb5261849b4d3dadb0ea9bd3face150c;hb=ccd6cf2af99fdc050888c70eb4d59f078a15a2da;hp=950f7228edae93b89a7f4a8c285428551ab44660;hpb=049de1f2533477716a12a708c097b199eaa8fb6c;p=tpg%2Facess2.git diff --git a/Kernel/drv/kb.c b/Kernel/drv/kb.c index 950f7228..3e461fd6 100644 --- a/Kernel/drv/kb.c +++ b/Kernel/drv/kb.c @@ -14,14 +14,14 @@ #define USE_KERNEL_MAGIC 1 // === IMPORTS === -void Threads_Dump(); +void Threads_Dump(void); // === PROTOTYPES === int KB_Install(char **Arguments); -void KB_IRQHandler(); +void KB_IRQHandler(int IRQNum); void KB_AddBuffer(char ch); Uint64 KB_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Dest); -void KB_UpdateLEDs(); +void KB_UpdateLEDs(void); int KB_IOCtl(tVFS_Node *Node, int Id, void *Data); // === GLOBALS === @@ -64,6 +64,7 @@ int KB_Install(char **Arguments) temp = inb(0x61); outb(0x61, temp | 0x80); outb(0x61, temp & 0x7F); + inb(0x60); // Clear keyboard buffer IRQ_AddHandler(1, KB_IRQHandler); DevFS_AddDevice( &gKB_DevInfo ); @@ -75,23 +76,22 @@ int KB_Install(char **Arguments) * \fn void KB_IRQHandler() * \brief Called on a keyboard IRQ */ -void KB_IRQHandler() +void KB_IRQHandler(int IRQNum) { Uint8 scancode; Uint32 ch; // int keyNum; - //if( inportb(0x64) & 0x20 ) return; + // Check port 0x64 to tell if this is from the aux port + //if( inb(0x64) & 0x20 ) return; scancode = inb(0x60); // Read from the keyboard's data buffer - Log_Debug("KB", "scancode = %02x"); - - //Log("KB_IRQHandler: scancode = 0x%02x", scancode); + //Log_Debug("Keyboard", "scancode = %02x", scancode); // Ignore ACKs if(scancode == 0xFA) { - // Oh man! This is anachic (I'm leaving it here to represent the - // mess that Acess once was) + // Oh man! This is anarchic (I'm leaving it here to represent + // the mess that Acess once was) //kb_lastChar = KB_ACK; return; } @@ -126,7 +126,7 @@ void KB_IRQHandler() //keyNum = giKB_KeyLayer * 256 + scancode; // Check for unknown key if(!ch && !gbKB_KeyUp) - Warning("UNK %i %x", giKB_KeyLayer, scancode); + Log_Warning("Keyboard", "UNK %i %x", giKB_KeyLayer, scancode); // Key Up? if (gbKB_KeyUp) @@ -173,16 +173,17 @@ void KB_IRQHandler() #if USE_KERNEL_MAGIC if(ch == KEY_LCTRL) { gbKB_MagicState |= 1; - Log_Log("KB", "Kernel Magic LCTRL Down\n"); + //Log_Log("Keyboard", "Kernel Magic LCTRL Down\n"); } if(ch == KEY_LALT) { gbKB_MagicState |= 2; - Log_Log("KB", "Kernel Magic LALT Down\n"); + //Log_Log("Keyboard", "Kernel Magic LALT Down\n"); } if(gbKB_MagicState == 3) { switch(ch) { + case 'q': *((int*)1) = 0; break; case 'd': __asm__ __volatile__ ("xchg %bx, %bx"); break; case 'p': Threads_Dump(); break; } @@ -190,8 +191,8 @@ void KB_IRQHandler() #endif // Is shift pressed - // - Darn ugly hacks !(!x) means (bool)x - if( !(!gbKB_ShiftState) ^ gbKB_CapsState) + // - Darn ugly hacks !!x means (bool)x + if( !!gbKB_ShiftState ^ gbKB_CapsState) { switch(ch) { @@ -228,10 +229,10 @@ void KB_IRQHandler() } /** - * \fn void KB_UpdateLEDs() + * \fn void KB_UpdateLEDs(void) * \brief Updates the status of the keyboard LEDs */ -void KB_UpdateLEDs() +void KB_UpdateLEDs(void) { Uint8 leds;