From 1ce599cee1801284eefe1f0b6898e9bf2a998957 Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Sat, 22 Mar 2025 14:54:48 +0300 Subject: [PATCH] keyboard: fix capslock LED --- src/keyboard.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index 6ccc014..5ba2288 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -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; + } +}