#include "ps2keyboard.h" #include #include ps2kbd *kbd = 0; static void kbd_irq(registers*) { kbd->kbdIrq(); } ps2kbd::ps2kbd(node* parent) : keyboard(parent) { uint8_t temp = inb(0x60), temp2 = 0; while (temp != temp2) { temp2 = temp; temp = inb(0x60); } kbd = this; idt_handleIrq(1, kbd_irq); escaped = false; updateLeds(); } void ps2kbd::updateLeds() { uint8_t tmp = 0; if (scroll) tmp |= 1; if (num) tmp |= 2; if (caps) tmp |= 4; outb(0x60, tmp); } void ps2kbd::kbdIrq() { uint8_t scancode = inb(0x60); if (scancode == 0xE0) { escaped = true; } else { if (scancode & 0x80) { if (escaped) { handle(scancode, false); } else { handle(scancode & 0x7F, false); } } else { if (escaped) { handle(scancode | 0x80, true); } else { handle(scancode, true); } } escaped = false; } }