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