/* Updates the key descriptions from the ASCII values. */ static void update_key_descriptions(void) { char str[64]; int i; for (i = 0; i < KEY_MAX; i++) { int ascii = scancode_to_ascii (i); if (_pckeys_names[i]) _AL_FREE(_pckeys_names[i]); if (ascii > ' ') { uszprintf(str, sizeof str, "%c", ascii); _pckeys_names[i] = strdup (str); } else { _pckeys_names[i] = strdup(_keyboard_common_names[i]); } } }
void isr_kbd_int(void) { u8 key = get_scancode(); if (key & 0x80) { if (key == 170) shift_locked = 0; } else { if (key == 42) { shift_locked = 1; } else if (key == 58) shift_locked = !shift_locked; else { u8 c = scancode_to_ascii(key); if (c) putchar(c); } } send_eoi(1); }
int getUnicodeFromScancode(KeyScancode scancode) override { if (isKeyPressed(scancode)) return scancode_to_ascii(she_to_alleg_scancode(scancode)); else return false; }
// Handle scancode static void handle_scancode(char scancode_8) { //printk(KERN_INFO "Got scancode %02x in handle_scancode.\n", scancode_8); if (should_ignore(scancode_8)) return; #ifdef DEBUG to_tty_string("[simple_keyboard.c] Handling scancode.\n\r"); #endif // save last scancode keyboard_status.last_scancode = keyboard_status.current_scancode; // update press status keyboard_status.press = is_press(scancode_8); // update current scancode char scancode_7 = get_scancode_7(scancode_8); keyboard_status.current_scancode = scancode_7; // update control scancode if (scancode_7 == SCAN_CAP && keyboard_status.press) { #ifdef DEBUG to_tty_string("[simple_keyboard.c] CAPSLOCK.\n\r"); #endif keyboard_status.caps = !keyboard_status.caps; } if (scancode_7 == SCAN_ALT_L || scancode_7 == SCAN_ALT_R) { #ifdef DEBUG to_tty_string("[simple_keyboard.c] ALT.\n\r"); #endif if (keyboard_status.press) keyboard_status.alt = true; else keyboard_status.alt = false; return; } if (scancode_7 == SCAN_CTRL_L || scancode_7 == SCAN_CTRL_R) { #ifdef DEBUG to_tty_string("[simple_keyboard.c] CTLR.\n\r"); #endif if (keyboard_status.press) keyboard_status.ctrl = true; else keyboard_status.ctrl = false; return; } if (scancode_7 == SCAN_SHIFT_L || scancode_7 == SCAN_SHIFT_R) { #ifdef DEBUG to_tty_string("[simple_keyboard.c] SHIFT.\n\r"); #endif if (keyboard_status.press) keyboard_status.shift = true; else keyboard_status.shift = false; return; } #ifdef DEBUG to_tty_string("[simple_keyboard.c] Normal Key.\n\r"); #endif if (!keyboard_status.press) return; // update keycode keyboard_status.current_ascii = scancode_to_ascii(scancode_7, keyboard_status.shift); to_tty_char(keyboard_status.current_ascii); }