keyboard: fix capslock LED
This commit is contained in:
+16
-3
@@ -85,6 +85,8 @@ unsigned char kbdus2[128] =
|
||||
bool shift_pressed;
|
||||
bool caps_pressed;
|
||||
|
||||
void keyboard_wait();
|
||||
|
||||
void handle_keyboard()
|
||||
{//3a
|
||||
uint8_t scancode = inb(0x60);
|
||||
@@ -107,9 +109,9 @@ void handle_keyboard()
|
||||
if(scancode == 0x3a)
|
||||
{
|
||||
caps_pressed = !caps_pressed;
|
||||
outb(0x64, 0xed);//set LED command
|
||||
int status = inb(0x64);
|
||||
outb(0x60, 0b100);//bits are scroll lock, number lock, caps lock
|
||||
outb(0x60, 0xed);//set LED command
|
||||
keyboard_wait();
|
||||
outb(0x60, caps_pressed << 2);//0 is scroll lock, 1 is numlock, 2 is caps lock
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -119,3 +121,14 @@ void handle_keyboard()
|
||||
printf("%c", kbdus[scancode]); //printf("(0x%X)%c", scancode, kbdus[scancode]);
|
||||
}
|
||||
}
|
||||
|
||||
void keyboard_wait()
|
||||
{
|
||||
int status;
|
||||
while(1)
|
||||
{
|
||||
status = inb(0x60);
|
||||
if(status == 0xfa || status == 0xfe)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user