toaruos/boot/kbd.h
2018-07-12 10:53:36 +09:00

59 lines
1.2 KiB
C

#pragma once
#define KBD_SCAN_DOWN 0x50
#define KBD_SCAN_UP 0x48
#define KBD_SCAN_LEFT 0x4B
#define KBD_SCAN_RIGHT 0x4D
#define KBD_SCAN_ENTER 0x1C
#define KBD_SCAN_1 2
#define KBD_SCAN_9 10
#ifdef EFI_PLATFORM
static int read_scancode(void) {
EFI_INPUT_KEY Key;
unsigned long int index;
uefi_call_wrapper(ST->BootServices->WaitForEvent, 3, 1, &ST->ConIn->WaitForKey, &index);
uefi_call_wrapper(ST->ConIn->ReadKeyStroke, 2, ST->ConIn, &Key);
switch (Key.ScanCode) {
case 0:
switch (Key.UnicodeChar) {
case L'\r':
return KBD_SCAN_ENTER;
case L'1':
case L'2':
case L'3':
case L'4':
case L'5':
case L'6':
case L'7':
case L'8':
case L'9':
return Key.UnicodeChar - L'1' + KBD_SCAN_1;
case L'y':
return 'y';
case L'n':
return 'n';
default:
return 0xFF;
}
break;
case 0x01: return KBD_SCAN_UP;
case 0x02: return KBD_SCAN_DOWN;
case 0x03: return KBD_SCAN_RIGHT;
case 0x04: return KBD_SCAN_LEFT;
default:
return 0xFF;
}
}
#else
static int read_scancode(void) {
while (!(inportb(0x64) & 1));
int out;
while (inportb(0x64) & 1) {
out = inportb(0x60);
}
return out;
}
#endif