nativeos/kernel/device/vtcon/scancodes.h

187 lines
7.3 KiB
C

/**
* \file
* \brief Scancodes
*
* Not the prettiest way to do this at the moment, but this file contains
* the translation tables used to convert between a scancode and a virtual
* key in the different keyboard layouts that are supported at the moment.
*/
#pragma once
/* Non printable characters from the ASCII table. */
#define VK_NUL 0
#define VK_SOH 1
#define VK_STX 2
#define VK_ETX 3
#define VK_EOT 4
#define VK_ENQ 5
#define VK_ACK 6
#define VK_BEL 7
#define VK_BS 8
#define VK_HT 9
#define VK_LF 10
#define VK_VT 11
#define VK_FF 12
#define VK_CR 13
#define VK_SO 14
#define VK_SI 15
#define VK_DLE 16
#define VK_DC1 17
#define VK_DC2 18
#define VK_DC3 19
#define VK_DC4 20
#define VK_NAK 21
#define VK_SYN 22
#define VK_ETB 23
#define VK_CAN 24
#define VK_EM 25
#define VK_SUB 26
#define VK_ESC 27
#define VK_FS 28
#define VK_GS 29
#define VK_RS 30
#define VK_US 31
#define VK_SP 32
#define VK_DEL 127
#define VK_CUP 224
#define VK_CLFT 225
#define VK_CRGT 226
#define VK_CDWN 227
#define VK_PGUP 228
#define VK_PGDN 229
#define VK_INSERT 230
#define VK_HOME 231
#define VK_END 232
#define VK_LCTL 233
#define VK_RCTL 234
#define VK_LSHF 235
#define VK_RSHF 236
#define VK_LALT 237
#define VK_RALT 238
#define VK_CAPL 239
#define VK_NUML 240
#define VK_SCRL 241
#define VK_BTAB 242
#define VK_F1 243
#define VK_F2 244
#define VK_F3 245
#define VK_F4 246
#define VK_F5 247
#define VK_F6 248
#define VK_F7 249
#define VK_F8 250
#define VK_F9 251
#define VK_F10 252
#define VK_F11 253
#define VK_F12 254
typedef struct kbdev {
unsigned short vk;
unsigned short flags;
} kbdev_t;
typedef struct scancode {
unsigned char nomod; /**< Mapping for no mod is down. */
unsigned char shift; /**< Mapping for SHIFT is on. */
unsigned char ctrl; /**< Mapping for CTRL is on. */
unsigned char ctrlshift; /**< Mapping for CTRL-SHIFT is on. */
unsigned char alt; /**< Mapping for ALT is on. */
unsigned char altshift; /**< Mapping for SHIFT-ALT is on. */
unsigned char altctrl; /**< Mapping for CTRL-ALT is on. */
unsigned char altctrlshift; /**< Mapping for CTRL-SHIFT-ALT is on. */
} scancode_t;
static struct scancode us_scancodes_1[] = {
{VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL},
{VK_ESC, VK_ESC, VK_ESC, VK_ESC, VK_ESC, VK_ESC, VK_ESC, VK_ESC},
{'1', '!', VK_NUL, VK_NUL, '1', '!', VK_NUL, VK_NUL},
{'2', '@', VK_NUL, VK_NUL, '1', '@', VK_NUL, VK_NUL},
{'3', '#', VK_NUL, VK_NUL, '1', '#', VK_NUL, VK_NUL},
{'4', '$', VK_NUL, VK_NUL, '1', '$', VK_NUL, VK_NUL},
{'5', '%', VK_NUL, VK_NUL, '1', '%', VK_NUL, VK_NUL},
{'6', '^', VK_NUL, VK_NUL, '1', '^', VK_NUL, VK_NUL},
{'7', '&', VK_NUL, VK_NUL, '1', '&', VK_NUL, VK_NUL},
{'8', '*', VK_NUL, VK_NUL, '1', '*', VK_NUL, VK_NUL},
{'9', '(', VK_NUL, VK_NUL, '1', '(', VK_NUL, VK_NUL},
{'0', ')', VK_NUL, VK_NUL, '1', ')', VK_NUL, VK_NUL},
{'-', '_', VK_US, VK_US, '-', '_', VK_US, VK_US},
{'=', '+', VK_NUL, VK_NUL, '=', '+', VK_NUL, VK_NUL},
{VK_BS, VK_BS, VK_DEL, VK_DEL, VK_BS, VK_BS, VK_DEL, VK_DEL},
{VK_HT, VK_BTAB, VK_NUL, VK_NUL, VK_VT, VK_BTAB, VK_NUL, VK_NUL},
{'q', 'Q', VK_DC1, VK_DC1, 'q', 'Q', VK_DC1, VK_DC1},
{'w', 'W', VK_ETB, VK_ETB, 'w', 'W', VK_ETB, VK_ETB},
{'e', 'E', VK_ENQ, VK_ENQ, 'e', 'E', VK_ENQ, VK_ENQ},
{'r', 'R', VK_DC2, VK_DC2, 'r', 'R', VK_DC2, VK_DC2},
{'t', 'T', VK_DC4, VK_DC4, 't', 'T', VK_DC4, VK_DC4},
{'y', 'Y', VK_EM, VK_EM, 'y', 'Y', VK_EM, VK_EM},
{'u', 'U', VK_NAK, VK_NAK, 'u', 'U', VK_NAK, VK_NAK},
{'i', 'I', VK_HT, VK_HT, 'i', 'I', VK_HT, VK_HT},
{'o', 'O', VK_SI, VK_SI, 'o', 'O', VK_SI, VK_SI},
{'p', 'P', VK_DLE, VK_DLE, 'p', 'P', VK_DLE, VK_DLE},
{'[', '{', VK_ESC, VK_ESC, '[', '{', VK_ESC, VK_ESC},
{']', '}', VK_GS, VK_GS, ']', '}', VK_GS, VK_GS},
{VK_LF, VK_LF, VK_CR, VK_CR, VK_LF, VK_LF, VK_CR, VK_CR},
{VK_LCTL, VK_LCTL, VK_LCTL, VK_LCTL, VK_LCTL, VK_LCTL, VK_LCTL, VK_LCTL},
{'a', 'A', VK_SOH, VK_SOH, 'a', 'A', VK_SOH, VK_SOH},
{'s', 'S', VK_DC3, VK_DC3, 's', 'S', VK_DC3, VK_DC3},
{'d', 'D', VK_EOT, VK_EOT, 'd', 'D', VK_EOT, VK_EOT},
{'f', 'F', VK_ACK, VK_ACK, 'f', 'F', VK_ACK, VK_ACK},
{'g', 'G', VK_BEL, VK_BEL, 'g', 'G', VK_BEL, VK_BEL},
{'h', 'H', VK_BS, VK_BS, 'h', 'H', VK_BS, VK_BS},
{'j', 'J', VK_LF, VK_LF, 'j', 'J', VK_LF, VK_LF},
{'k', 'K', VK_VT, VK_VT, 'k', 'K', VK_VT, VK_VT},
{'l', 'L', VK_FF, VK_FF, 'l', 'L', VK_FF, VK_FF},
{';', ':', VK_NUL, VK_NUL, ';', ':', VK_NUL, VK_NUL},
{'\'', '"', VK_NUL, VK_NUL, '\'', '"', VK_NUL, VK_NUL},
{'`', '~', VK_NUL, VK_NUL, '`', '~', VK_NUL, VK_NUL},
{VK_LSHF, VK_LSHF, VK_LSHF, VK_LSHF, VK_LSHF, VK_LSHF, VK_LSHF, VK_LSHF},
{'\\', '|', VK_FS, VK_FS, '\\', '|', VK_FS, VK_FS},
{'z', 'Z', VK_SUB, VK_SUB, 'z', 'Z', VK_SUB, VK_SUB},
{'x', 'X', VK_CAN, VK_CAN, 'x', 'X', VK_CAN, VK_CAN},
{'c', 'C', VK_ETX, VK_ETX, 'c', 'C', VK_ETX, VK_ETX},
{'v', 'V', VK_SYN, VK_SYN, 'v', 'V', VK_SYN, VK_SYN},
{'b', 'B', VK_STX, VK_STX, 'b', 'B', VK_STX, VK_STX},
{'n', 'N', VK_SO, VK_SO, 'n', 'N', VK_SO, VK_SO},
{'m', 'M', VK_CR, VK_CR, 'm', 'M', VK_CR, VK_CR},
{',', '<', VK_NUL, VK_NUL, ',', '<', VK_NUL, VK_NUL},
{'.', '>', VK_NUL, VK_NUL, '.', '>', VK_NUL, VK_NUL},
{'/', '?', VK_NUL, VK_NUL, '/', '?', VK_NUL, VK_NUL},
{VK_RSHF, VK_RSHF, VK_RSHF, VK_RSHF, VK_RSHF, VK_RSHF, VK_RSHF, VK_RSHF},
{'*', '*', '*', '*', '*', '*', '*', '*'},
{VK_LALT, VK_LALT, VK_LALT, VK_LALT, VK_LALT, VK_LALT, VK_LALT, VK_LALT},
{' ', ' ', VK_NUL, ' ', ' ', ' ', VK_NUL, ' '},
{VK_CAPL, VK_CAPL, VK_CAPL, VK_CAPL, VK_CAPL, VK_CAPL, VK_CAPL, VK_CAPL},
{VK_F1, VK_F1, VK_F1, VK_F1, VK_F1, VK_F1, VK_F1, VK_F1},
{VK_F2, VK_F2, VK_F2, VK_F2, VK_F2, VK_F2, VK_F2, VK_F2},
{VK_F3, VK_F3, VK_F3, VK_F3, VK_F3, VK_F3, VK_F3, VK_F3},
{VK_F4, VK_F4, VK_F4, VK_F4, VK_F4, VK_F4, VK_F4, VK_F4},
{VK_F5, VK_F5, VK_F5, VK_F5, VK_F5, VK_F5, VK_F5, VK_F5},
{VK_F6, VK_F6, VK_F6, VK_F6, VK_F6, VK_F6, VK_F6, VK_F6},
{VK_F7, VK_F7, VK_F7, VK_F7, VK_F7, VK_F7, VK_F7, VK_F7},
{VK_F8, VK_F8, VK_F8, VK_F8, VK_F8, VK_F8, VK_F8, VK_F8},
{VK_F9, VK_F9, VK_F9, VK_F9, VK_F9, VK_F9, VK_F9, VK_F9},
{VK_F10, VK_F10, VK_F10, VK_F10, VK_F10, VK_F10, VK_F10, VK_F10},
{VK_NUML, VK_NUML, VK_NUML, VK_NUML, VK_NUML, VK_NUML, VK_NUML, VK_NUML},
{VK_SCRL, VK_SCRL, VK_SCRL, VK_SCRL, VK_SCRL, VK_SCRL, VK_SCRL, VK_SCRL},
{'7', '7', '7', '7', '7', '7', '7', '7'},
{'8', '8', '8', '8', '8', '8', '8', '8'},
{'9', '9', '9', '9', '9', '9', '9', '9'},
{'-', '-', '-', '-', '-', '-', '-', '-'},
{'4', '4', '4', '4', '4', '4', '4', '4'},
{'5', '5', '5', '5', '5', '5', '5', '5'},
{'6', '6', '6', '6', '6', '6', '6', '6'},
{'+', '+', '+', '+', '+', '+', '+', '+'},
{'1', '1', '1', '1', '1', '1', '1', '1'},
{'2', '2', '2', '2', '2', '2', '2', '2'},
{'3', '3', '3', '3', '3', '3', '3', '3'},
{'0', '0', '0', '0', '0', '0', '0', '0'},
{'.', '.', '.', '.', '.', '.', '.', '.'},
{VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL},
{VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL},
{VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL},
{VK_F11, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL},
{VK_F12, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL, VK_NUL},
{0, 0, 0, 0, 0, 0, 0, 0},
/* TODO: Add 0xE0 and 0xF0. */
};