50 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
51 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
52 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
53 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
54 80, 81, 82, 84, 00, 00, 86, 87, 88, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
55 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
56 00, 00, 00, 00, 00, 00, 00, 00
64 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
65 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 96, 97, 00, 00,
66 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
67 00, 00, 00, 00, 00, 99, 00, 00, 100, 00, 00, 00, 00, 00, 00, 00,
68 00, 00, 00, 00, 00, 00, 00, 102, 103, 104, 00, 105, 00, 106, 00, 107,
69 108, 109, 110, 111, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
70 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
71 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
74 static struct object *keyboardStdin;
102 uint8_t mappedCode = 0;
104 uint16_t *decodeMap = NULL;
113 else if (extended == 1)
124 else if(modifiers.
alt)
129 else if (modifiers.
ctrl)
136 else if (modifiers.
altgr)
143 else if (modifiers.
alt)
151 keyEv.
keyCode = decodeMap[mappedCode] & 0x0FFF;
211 __objectWrite(keyboardStdin, &charCode,
sizeof(charCode));
216 static bool ext1Code = 0;
217 static int ext2Code = 0;
218 static uint16_t e1_prev = 0;
229 static uint32_t keyboard_irq(
UNUSED uint32_t irq)
231 uint8_t scanCode = 0;
239 if ((scanCode & 0x80) && (ext2Code || (scanCode != 0xE1)) && (ext1Code || (scanCode != 0xE0)))
248 if ((scanCode == 0x2A) || (scanCode == 0x36)) {
255 else if (ext2Code == 2)
257 e1_prev |= ((uint16_t) scanCode << 8);
261 else if (ext2Code == 1)
266 else if (scanCode == 0xE0)
268 else if (scanCode == 0xE1)
#define KEY_MODIFIER_CTRLR
uint8_t extendedKeyCodes[128]
const struct keyMap * keyMaps
Supported keymaps.
uint8_t standardKeyCodes[128]
#define KEY_MODIFIER_CTRLL
void processScancode(int extended, uint8_t scanCode, bool keyUp)
Handles key presses after the scancode was decoded.
const struct keyMap keyMapDE
#define KEYBOARD_STATUS_PORT
void outb(uint16_t port, uint8_t val)
#define KEY_MODIFIER_CTRL
uint32_t keyboardLEDFlags
uint8_t inb(uint16_t port)
bool picReserveIRQ(uint32_t irq, irq_callback callback)
Assign a callback function to an IRQ.
uint32_t keyboardGetLEDFlags()
Return the current active LED flags.
uint16_t * altgr_ctrl_map
void keyboardSetLEDFlags(uint32_t flags)
Set LED Flags.
struct keyModifier modifiers
#define KEYBOARD_CMD_ENABLE
struct keyModifier modifiers
uint16_t * shift_ctrl_map
#define KEYBOARD_BUFFER_PORT
void keyboardInit(struct object *obj)
Initializes the keyboard.
#define KEY_MODIFIER_SHIFTR
struct keyMapInfo keyMaps
void keyboardSend(uint8_t cmd)
Send a command to the keyboard controller.
#define KEY_MODIFIER_ALTGR
#define INTERRUPT_CONTINUE_EXECUTION
void consoleEchoChar(char chr)
Echo keyboard input on the console.
#define KEY_MODIFIER_SHIFT
#define KEY_MODIFIER_SHIFTL