[Voyageurs] Add a basic ps/2 keyboard driver.
This commit is contained in:
parent
7151a509ee
commit
8365d47cbe
18 changed files with 532 additions and 0 deletions
34
sys/voyageurs/keyboard/keyboard_driver.cpp
Normal file
34
sys/voyageurs/keyboard/keyboard_driver.cpp
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#include "keyboard/keyboard_driver.h"
|
||||
|
||||
#include <mammoth/util/debug.h>
|
||||
|
||||
void InterruptEnter(void* void_keyboard) {
|
||||
KeyboardDriver* keyboard = static_cast<KeyboardDriver*>(void_keyboard);
|
||||
|
||||
keyboard->InterruptLoop();
|
||||
}
|
||||
|
||||
KeyboardDriver::KeyboardDriver() { check(ZIrqRegister(kZIrqKbd, &irq_cap_)); }
|
||||
|
||||
void KeyboardDriver::RegisterListener(uint64_t port_cap) {
|
||||
listeners_.PushFront(mmth::PortClient::AdoptPort(port_cap));
|
||||
}
|
||||
|
||||
Thread KeyboardDriver::StartInterruptLoop() {
|
||||
return Thread(InterruptEnter, this);
|
||||
}
|
||||
|
||||
void KeyboardDriver::InterruptLoop() {
|
||||
dbgln("Interrupt");
|
||||
while (true) {
|
||||
uint8_t scancode;
|
||||
uint64_t num_bytes = 1;
|
||||
uint64_t num_caps = 0;
|
||||
check(ZPortRecv(irq_cap_, &num_bytes, &scancode, &num_caps, nullptr));
|
||||
dbgln("Scan {x}", scancode);
|
||||
|
||||
for (mmth::PortClient& client : listeners_) {
|
||||
client.WriteByte(scancode);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue