12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #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
|