keyboard: fix capslock LED

This commit is contained in:
2025-03-22 14:54:48 +03:00
parent ef2c779798
commit 1ce599cee1
+16 -3
View File
@@ -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;
}
}