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 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;
}
}