From afbd7ea50ed4c3e98994299263e08b97acb7df43 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 6 Sep 2013 14:43:12 +0200 Subject: [PATCH] Reflection support for input/keycodes.h To enable the specification of key names in configuration files parsed at runtime, we need the association between key-code values and their respective names. --- os/include/input/event.h | 10 + os/include/input/keycodes.h | 896 +++++++++++++++++++----------------- 2 files changed, 477 insertions(+), 429 deletions(-) diff --git a/os/include/input/event.h b/os/include/input/event.h index 4fdecf54e..8fb2fd1bd 100644 --- a/os/include/input/event.h +++ b/os/include/input/event.h @@ -14,6 +14,8 @@ #ifndef _INCLUDE__INPUT__EVENT_H_ #define _INCLUDE__INPUT__EVENT_H_ +#include + namespace Input { class Event @@ -64,6 +66,14 @@ namespace Input { int rx() const { return _rx; } int ry() const { return _ry; } + /** + * Return key code for press/release events + */ + Keycode keycode() const + { + return _type == PRESS || _type == RELEASE ? (Keycode)_code : KEY_UNKNOWN; + } + bool is_absolute_motion() const { return _type == MOTION && !_rx && !_ry; } bool is_relative_motion() const { return _type == MOTION && (_rx || _ry); } }; diff --git a/os/include/input/keycodes.h b/os/include/input/keycodes.h index ff606527e..9acacbdf6 100644 --- a/os/include/input/keycodes.h +++ b/os/include/input/keycodes.h @@ -17,439 +17,477 @@ #ifndef _INCLUDE__INPUT__KEYCODES_H_ #define _INCLUDE__INPUT__KEYCODES_H_ +/* + * C++ provides no reflection of the names of enum value. So we use the + * preprocessor to generate the bodies of both the enum type 'Keycode' and + * the reflection function 'key_name' from one definition. + */ +#define GENODE_INPUT_KEYCODES \ + GENODE_TAG_VALUE(KEY_RESERVED, 0) \ + GENODE_TAG_VALUE(KEY_ESC, 1) \ + GENODE_TAG_VALUE(KEY_1, 2) \ + GENODE_TAG_VALUE(KEY_2, 3) \ + GENODE_TAG_VALUE(KEY_3, 4) \ + GENODE_TAG_VALUE(KEY_4, 5) \ + GENODE_TAG_VALUE(KEY_5, 6) \ + GENODE_TAG_VALUE(KEY_6, 7) \ + GENODE_TAG_VALUE(KEY_7, 8) \ + GENODE_TAG_VALUE(KEY_8, 9) \ + GENODE_TAG_VALUE(KEY_9, 10) \ + GENODE_TAG_VALUE(KEY_0, 11) \ + GENODE_TAG_VALUE(KEY_MINUS, 12) \ + GENODE_TAG_VALUE(KEY_EQUAL, 13) \ + GENODE_TAG_VALUE(KEY_BACKSPACE, 14) \ + GENODE_TAG_VALUE(KEY_TAB, 15) \ + GENODE_TAG_VALUE(KEY_Q, 16) \ + GENODE_TAG_VALUE(KEY_W, 17) \ + GENODE_TAG_VALUE(KEY_E, 18) \ + GENODE_TAG_VALUE(KEY_R, 19) \ + GENODE_TAG_VALUE(KEY_T, 20) \ + GENODE_TAG_VALUE(KEY_Y, 21) \ + GENODE_TAG_VALUE(KEY_U, 22) \ + GENODE_TAG_VALUE(KEY_I, 23) \ + GENODE_TAG_VALUE(KEY_O, 24) \ + GENODE_TAG_VALUE(KEY_P, 25) \ + GENODE_TAG_VALUE(KEY_LEFTBRACE, 26) \ + GENODE_TAG_VALUE(KEY_RIGHTBRACE, 27) \ + GENODE_TAG_VALUE(KEY_ENTER, 28) \ + GENODE_TAG_VALUE(KEY_LEFTCTRL, 29) \ + GENODE_TAG_VALUE(KEY_A, 30) \ + GENODE_TAG_VALUE(KEY_S, 31) \ + GENODE_TAG_VALUE(KEY_D, 32) \ + GENODE_TAG_VALUE(KEY_F, 33) \ + GENODE_TAG_VALUE(KEY_G, 34) \ + GENODE_TAG_VALUE(KEY_H, 35) \ + GENODE_TAG_VALUE(KEY_J, 36) \ + GENODE_TAG_VALUE(KEY_K, 37) \ + GENODE_TAG_VALUE(KEY_L, 38) \ + GENODE_TAG_VALUE(KEY_SEMICOLON, 39) \ + GENODE_TAG_VALUE(KEY_APOSTROPHE, 40) \ + GENODE_TAG_VALUE(KEY_GRAVE, 41) \ + GENODE_TAG_VALUE(KEY_LEFTSHIFT, 42) \ + GENODE_TAG_VALUE(KEY_BACKSLASH, 43) \ + GENODE_TAG_VALUE(KEY_Z, 44) \ + GENODE_TAG_VALUE(KEY_X, 45) \ + GENODE_TAG_VALUE(KEY_C, 46) \ + GENODE_TAG_VALUE(KEY_V, 47) \ + GENODE_TAG_VALUE(KEY_B, 48) \ + GENODE_TAG_VALUE(KEY_N, 49) \ + GENODE_TAG_VALUE(KEY_M, 50) \ + GENODE_TAG_VALUE(KEY_COMMA, 51) \ + GENODE_TAG_VALUE(KEY_DOT, 52) \ + GENODE_TAG_VALUE(KEY_SLASH, 53) \ + GENODE_TAG_VALUE(KEY_RIGHTSHIFT, 54) \ + GENODE_TAG_VALUE(KEY_KPASTERISK, 55) \ + GENODE_TAG_VALUE(KEY_LEFTALT, 56) \ + GENODE_TAG_VALUE(KEY_SPACE, 57) \ + GENODE_TAG_VALUE(KEY_CAPSLOCK, 58) \ + GENODE_TAG_VALUE(KEY_F1, 59) \ + GENODE_TAG_VALUE(KEY_F2, 60) \ + GENODE_TAG_VALUE(KEY_F3, 61) \ + GENODE_TAG_VALUE(KEY_F4, 62) \ + GENODE_TAG_VALUE(KEY_F5, 63) \ + GENODE_TAG_VALUE(KEY_F6, 64) \ + GENODE_TAG_VALUE(KEY_F7, 65) \ + GENODE_TAG_VALUE(KEY_F8, 66) \ + GENODE_TAG_VALUE(KEY_F9, 67) \ + GENODE_TAG_VALUE(KEY_F10, 68) \ + GENODE_TAG_VALUE(KEY_NUMLOCK, 69) \ + GENODE_TAG_VALUE(KEY_SCROLLLOCK, 70) \ + GENODE_TAG_VALUE(KEY_KP7, 71) \ + GENODE_TAG_VALUE(KEY_KP8, 72) \ + GENODE_TAG_VALUE(KEY_KP9, 73) \ + GENODE_TAG_VALUE(KEY_KPMINUS, 74) \ + GENODE_TAG_VALUE(KEY_KP4, 75) \ + GENODE_TAG_VALUE(KEY_KP5, 76) \ + GENODE_TAG_VALUE(KEY_KP6, 77) \ + GENODE_TAG_VALUE(KEY_KPPLUS, 78) \ + GENODE_TAG_VALUE(KEY_KP1, 79) \ + GENODE_TAG_VALUE(KEY_KP2, 80) \ + GENODE_TAG_VALUE(KEY_KP3, 81) \ + GENODE_TAG_VALUE(KEY_KP0, 82) \ + GENODE_TAG_VALUE(KEY_KPDOT, 83) \ + \ + GENODE_TAG_VALUE(KEY_ZENKAKUHANKAKU, 85) \ + GENODE_TAG_VALUE(KEY_102ND, 86) \ + GENODE_TAG_VALUE(KEY_F11, 87) \ + GENODE_TAG_VALUE(KEY_F12, 88) \ + GENODE_TAG_VALUE(KEY_RO, 89) \ + GENODE_TAG_VALUE(KEY_KATAKANA, 90) \ + GENODE_TAG_VALUE(KEY_HIRAGANA, 91) \ + GENODE_TAG_VALUE(KEY_HENKAN, 92) \ + GENODE_TAG_VALUE(KEY_KATAKANAHIRAGANA, 93) \ + GENODE_TAG_VALUE(KEY_MUHENKAN, 94) \ + GENODE_TAG_VALUE(KEY_KPJPCOMMA, 95) \ + GENODE_TAG_VALUE(KEY_KPENTER, 96) \ + GENODE_TAG_VALUE(KEY_RIGHTCTRL, 97) \ + GENODE_TAG_VALUE(KEY_KPSLASH, 98) \ + GENODE_TAG_VALUE(KEY_SYSRQ, 99) \ + GENODE_TAG_VALUE(KEY_RIGHTALT, 100) \ + GENODE_TAG_VALUE(KEY_LINEFEED, 101) \ + GENODE_TAG_VALUE(KEY_HOME, 102) \ + GENODE_TAG_VALUE(KEY_UP, 103) \ + GENODE_TAG_VALUE(KEY_PAGEUP, 104) \ + GENODE_TAG_VALUE(KEY_LEFT, 105) \ + GENODE_TAG_VALUE(KEY_RIGHT, 106) \ + GENODE_TAG_VALUE(KEY_END, 107) \ + GENODE_TAG_VALUE(KEY_DOWN, 108) \ + GENODE_TAG_VALUE(KEY_PAGEDOWN, 109) \ + GENODE_TAG_VALUE(KEY_INSERT, 110) \ + GENODE_TAG_VALUE(KEY_DELETE, 111) \ + GENODE_TAG_VALUE(KEY_MACRO, 112) \ + GENODE_TAG_VALUE(KEY_MUTE, 113) \ + GENODE_TAG_VALUE(KEY_VOLUMEDOWN, 114) \ + GENODE_TAG_VALUE(KEY_VOLUMEUP, 115) \ + GENODE_TAG_VALUE(KEY_POWER, 116) \ + GENODE_TAG_VALUE(KEY_KPEQUAL, 117) \ + GENODE_TAG_VALUE(KEY_KPPLUSMINUS, 118) \ + GENODE_TAG_VALUE(KEY_PAUSE, 119) \ + \ + GENODE_TAG_VALUE(KEY_KPCOMMA, 121) \ + GENODE_TAG_VALUE(KEY_HANGUEL, 122) \ + GENODE_TAG_VALUE(KEY_HANJA, 123) \ + GENODE_TAG_VALUE(KEY_YEN, 124) \ + GENODE_TAG_VALUE(KEY_LEFTMETA, 125) \ + GENODE_TAG_VALUE(KEY_RIGHTMETA, 126) \ + GENODE_TAG_VALUE(KEY_COMPOSE, 127) \ + \ + GENODE_TAG_VALUE(KEY_STOP, 128) \ + GENODE_TAG_VALUE(KEY_AGAIN, 129) \ + GENODE_TAG_VALUE(KEY_PROPS, 130) \ + GENODE_TAG_VALUE(KEY_UNDO, 131) \ + GENODE_TAG_VALUE(KEY_FRONT, 132) \ + GENODE_TAG_VALUE(KEY_COPY, 133) \ + GENODE_TAG_VALUE(KEY_OPEN, 134) \ + GENODE_TAG_VALUE(KEY_PASTE, 135) \ + GENODE_TAG_VALUE(KEY_FIND, 136) \ + GENODE_TAG_VALUE(KEY_CUT, 137) \ + GENODE_TAG_VALUE(KEY_HELP, 138) \ + GENODE_TAG_VALUE(KEY_MENU, 139) \ + GENODE_TAG_VALUE(KEY_CALC, 140) \ + GENODE_TAG_VALUE(KEY_SETUP, 141) \ + GENODE_TAG_VALUE(KEY_SLEEP, 142) \ + GENODE_TAG_VALUE(KEY_WAKEUP, 143) \ + GENODE_TAG_VALUE(KEY_FILE, 144) \ + GENODE_TAG_VALUE(KEY_SENDFILE, 145) \ + GENODE_TAG_VALUE(KEY_DELETEFILE, 146) \ + GENODE_TAG_VALUE(KEY_XFER, 147) \ + GENODE_TAG_VALUE(KEY_PROG1, 148) \ + GENODE_TAG_VALUE(KEY_PROG2, 149) \ + GENODE_TAG_VALUE(KEY_WWW, 150) \ + GENODE_TAG_VALUE(KEY_MSDOS, 151) \ + GENODE_TAG_VALUE(KEY_COFFEE, 152) \ + GENODE_TAG_VALUE(KEY_DIRECTION, 153) \ + GENODE_TAG_VALUE(KEY_CYCLEWINDOWS, 154) \ + GENODE_TAG_VALUE(KEY_MAIL, 155) \ + GENODE_TAG_VALUE(KEY_BOOKMARKS, 156) \ + GENODE_TAG_VALUE(KEY_COMPUTER, 157) \ + GENODE_TAG_VALUE(KEY_BACK, 158) \ + GENODE_TAG_VALUE(KEY_FORWARD, 159) \ + GENODE_TAG_VALUE(KEY_CLOSECD, 160) \ + GENODE_TAG_VALUE(KEY_EJECTCD, 161) \ + GENODE_TAG_VALUE(KEY_EJECTCLOSECD, 162) \ + GENODE_TAG_VALUE(KEY_NEXTSONG, 163) \ + GENODE_TAG_VALUE(KEY_PLAYPAUSE, 164) \ + GENODE_TAG_VALUE(KEY_PREVIOUSSONG, 165) \ + GENODE_TAG_VALUE(KEY_STOPCD, 166) \ + GENODE_TAG_VALUE(KEY_RECORD, 167) \ + GENODE_TAG_VALUE(KEY_REWIND, 168) \ + GENODE_TAG_VALUE(KEY_PHONE, 169) \ + GENODE_TAG_VALUE(KEY_ISO, 170) \ + GENODE_TAG_VALUE(KEY_CONFIG, 171) \ + GENODE_TAG_VALUE(KEY_HOMEPAGE, 172) \ + GENODE_TAG_VALUE(KEY_REFRESH, 173) \ + GENODE_TAG_VALUE(KEY_EXIT, 174) \ + GENODE_TAG_VALUE(KEY_MOVE, 175) \ + GENODE_TAG_VALUE(KEY_EDIT, 176) \ + GENODE_TAG_VALUE(KEY_SCROLLUP, 177) \ + GENODE_TAG_VALUE(KEY_SCROLLDOWN, 178) \ + GENODE_TAG_VALUE(KEY_KPLEFTPAREN, 179) \ + GENODE_TAG_VALUE(KEY_KPRIGHTPAREN, 180) \ + GENODE_TAG_VALUE(KEY_NEW, 181) \ + GENODE_TAG_VALUE(KEY_REDO, 182) \ + \ + GENODE_TAG_VALUE(KEY_F13, 183) \ + GENODE_TAG_VALUE(KEY_F14, 184) \ + GENODE_TAG_VALUE(KEY_F15, 185) \ + GENODE_TAG_VALUE(KEY_F16, 186) \ + GENODE_TAG_VALUE(KEY_F17, 187) \ + GENODE_TAG_VALUE(KEY_F18, 188) \ + GENODE_TAG_VALUE(KEY_F19, 189) \ + GENODE_TAG_VALUE(KEY_F20, 190) \ + GENODE_TAG_VALUE(KEY_F21, 191) \ + GENODE_TAG_VALUE(KEY_F22, 192) \ + GENODE_TAG_VALUE(KEY_F23, 193) \ + GENODE_TAG_VALUE(KEY_F24, 194) \ + \ + GENODE_TAG_VALUE(KEY_PLAYCD, 200) \ + GENODE_TAG_VALUE(KEY_PAUSECD, 201) \ + GENODE_TAG_VALUE(KEY_PROG3, 202) \ + GENODE_TAG_VALUE(KEY_PROG4, 203) \ + GENODE_TAG_VALUE(KEY_DASHBOARD, 204) \ + GENODE_TAG_VALUE(KEY_SUSPEND, 205) \ + GENODE_TAG_VALUE(KEY_CLOSE, 206) \ + GENODE_TAG_VALUE(KEY_PLAY, 207) \ + GENODE_TAG_VALUE(KEY_FASTFORWARD, 208) \ + GENODE_TAG_VALUE(KEY_BASSBOOST, 209) \ + GENODE_TAG_VALUE(KEY_PRINT, 210) \ + GENODE_TAG_VALUE(KEY_HP, 211) \ + GENODE_TAG_VALUE(KEY_CAMERA, 212) \ + GENODE_TAG_VALUE(KEY_SOUND, 213) \ + GENODE_TAG_VALUE(KEY_QUESTION, 214) \ + GENODE_TAG_VALUE(KEY_EMAIL, 215) \ + GENODE_TAG_VALUE(KEY_CHAT, 216) \ + GENODE_TAG_VALUE(KEY_SEARCH, 217) \ + GENODE_TAG_VALUE(KEY_CONNECT, 218) \ + GENODE_TAG_VALUE(KEY_FINANCE, 219) \ + GENODE_TAG_VALUE(KEY_SPORT, 220) \ + GENODE_TAG_VALUE(KEY_SHOP, 221) \ + GENODE_TAG_VALUE(KEY_ALTERASE, 222) \ + GENODE_TAG_VALUE(KEY_CANCEL, 223) \ + GENODE_TAG_VALUE(KEY_BRIGHTNESSDOWN, 224) \ + GENODE_TAG_VALUE(KEY_BRIGHTNESSUP, 225) \ + GENODE_TAG_VALUE(KEY_MEDIA, 226) \ + GENODE_TAG_VALUE(KEY_SWITCHVIDEOMODE, 227) \ + GENODE_TAG_VALUE(KEY_KBDILLUMTOGGLE, 228) \ + GENODE_TAG_VALUE(KEY_KBDILLUMDOWN, 229) \ + GENODE_TAG_VALUE(KEY_KBDILLUMUP, 230) \ + GENODE_TAG_VALUE(KEY_SEND, 231) \ + GENODE_TAG_VALUE(KEY_REPLY, 232) \ + GENODE_TAG_VALUE(KEY_FORWARDMAIL, 233) \ + GENODE_TAG_VALUE(KEY_SAVE, 234) \ + GENODE_TAG_VALUE(KEY_DOCUMENTS, 235) \ + GENODE_TAG_VALUE(KEY_BATTERY, 236) \ + GENODE_TAG_VALUE(KEY_BLUETOOTH, 237) \ + GENODE_TAG_VALUE(KEY_WLAN, 238) \ + \ + GENODE_TAG_VALUE(BTN_0, 0x100) \ + GENODE_TAG_VALUE(BTN_1, 0x101) \ + GENODE_TAG_VALUE(BTN_2, 0x102) \ + GENODE_TAG_VALUE(BTN_3, 0x103) \ + GENODE_TAG_VALUE(BTN_4, 0x104) \ + GENODE_TAG_VALUE(BTN_5, 0x105) \ + GENODE_TAG_VALUE(BTN_6, 0x106) \ + GENODE_TAG_VALUE(BTN_7, 0x107) \ + GENODE_TAG_VALUE(BTN_8, 0x108) \ + GENODE_TAG_VALUE(BTN_9, 0x109) \ + \ + GENODE_TAG_VALUE(BTN_LEFT, 0x110) \ + GENODE_TAG_VALUE(BTN_RIGHT, 0x111) \ + GENODE_TAG_VALUE(BTN_MIDDLE, 0x112) \ + GENODE_TAG_VALUE(BTN_SIDE, 0x113) \ + GENODE_TAG_VALUE(BTN_EXTRA, 0x114) \ + GENODE_TAG_VALUE(BTN_FORWARD, 0x115) \ + GENODE_TAG_VALUE(BTN_BACK, 0x116) \ + GENODE_TAG_VALUE(BTN_TASK, 0x117) \ + \ + GENODE_TAG_VALUE(BTN_TRIGGER, 0x120) \ + GENODE_TAG_VALUE(BTN_THUMB, 0x121) \ + GENODE_TAG_VALUE(BTN_THUMB2, 0x122) \ + GENODE_TAG_VALUE(BTN_TOP, 0x123) \ + GENODE_TAG_VALUE(BTN_TOP2, 0x124) \ + GENODE_TAG_VALUE(BTN_PINKIE, 0x125) \ + GENODE_TAG_VALUE(BTN_BASE, 0x126) \ + GENODE_TAG_VALUE(BTN_BASE2, 0x127) \ + GENODE_TAG_VALUE(BTN_BASE3, 0x128) \ + GENODE_TAG_VALUE(BTN_BASE4, 0x129) \ + GENODE_TAG_VALUE(BTN_BASE5, 0x12a) \ + GENODE_TAG_VALUE(BTN_BASE6, 0x12b) \ + GENODE_TAG_VALUE(BTN_DEAD, 0x12f) \ + \ + GENODE_TAG_VALUE(BTN_A, 0x130) \ + GENODE_TAG_VALUE(BTN_B, 0x131) \ + GENODE_TAG_VALUE(BTN_C, 0x132) \ + GENODE_TAG_VALUE(BTN_X, 0x133) \ + GENODE_TAG_VALUE(BTN_Y, 0x134) \ + GENODE_TAG_VALUE(BTN_Z, 0x135) \ + GENODE_TAG_VALUE(BTN_TL, 0x136) \ + GENODE_TAG_VALUE(BTN_TR, 0x137) \ + GENODE_TAG_VALUE(BTN_TL2, 0x138) \ + GENODE_TAG_VALUE(BTN_TR2, 0x139) \ + GENODE_TAG_VALUE(BTN_SELECT, 0x13a) \ + GENODE_TAG_VALUE(BTN_START, 0x13b) \ + GENODE_TAG_VALUE(BTN_MODE, 0x13c) \ + GENODE_TAG_VALUE(BTN_THUMBL, 0x13d) \ + GENODE_TAG_VALUE(BTN_THUMBR, 0x13e) \ + \ + GENODE_TAG_VALUE(BTN_TOOL_PEN, 0x140) \ + GENODE_TAG_VALUE(BTN_TOOL_RUBBER, 0x141) \ + GENODE_TAG_VALUE(BTN_TOOL_BRUSH, 0x142) \ + GENODE_TAG_VALUE(BTN_TOOL_PENCIL, 0x143) \ + GENODE_TAG_VALUE(BTN_TOOL_AIRBRUSH, 0x144) \ + GENODE_TAG_VALUE(BTN_TOOL_FINGER, 0x145) \ + GENODE_TAG_VALUE(BTN_TOOL_MOUSE, 0x146) \ + GENODE_TAG_VALUE(BTN_TOOL_LENS, 0x147) \ + GENODE_TAG_VALUE(BTN_TOUCH, 0x14a) \ + GENODE_TAG_VALUE(BTN_STYLUS, 0x14b) \ + GENODE_TAG_VALUE(BTN_STYLUS2, 0x14c) \ + GENODE_TAG_VALUE(BTN_TOOL_DOUBLETAP, 0x14d) \ + GENODE_TAG_VALUE(BTN_TOOL_TRIPLETAP, 0x14e) \ + \ + GENODE_TAG_VALUE(BTN_GEAR_DOWN, 0x150) \ + GENODE_TAG_VALUE(BTN_GEAR_UP, 0x151) \ + \ + GENODE_TAG_VALUE(KEY_OK, 0x160) \ + GENODE_TAG_VALUE(KEY_SELECT, 0x161) \ + GENODE_TAG_VALUE(KEY_GOTO, 0x162) \ + GENODE_TAG_VALUE(KEY_CLEAR, 0x163) \ + GENODE_TAG_VALUE(KEY_POWER2, 0x164) \ + GENODE_TAG_VALUE(KEY_OPTION, 0x165) \ + GENODE_TAG_VALUE(KEY_INFO, 0x166) \ + GENODE_TAG_VALUE(KEY_TIME, 0x167) \ + GENODE_TAG_VALUE(KEY_VENDOR, 0x168) \ + GENODE_TAG_VALUE(KEY_ARCHIVE, 0x169) \ + GENODE_TAG_VALUE(KEY_PROGRAM, 0x16a) \ + GENODE_TAG_VALUE(KEY_CHANNEL, 0x16b) \ + GENODE_TAG_VALUE(KEY_FAVORITES, 0x16c) \ + GENODE_TAG_VALUE(KEY_EPG, 0x16d) \ + GENODE_TAG_VALUE(KEY_PVR, 0x16e) \ + GENODE_TAG_VALUE(KEY_MHP, 0x16f) \ + GENODE_TAG_VALUE(KEY_LANGUAGE, 0x170) \ + GENODE_TAG_VALUE(KEY_TITLE, 0x171) \ + GENODE_TAG_VALUE(KEY_SUBTITLE, 0x172) \ + GENODE_TAG_VALUE(KEY_ANGLE, 0x173) \ + GENODE_TAG_VALUE(KEY_ZOOM, 0x174) \ + GENODE_TAG_VALUE(KEY_MODE, 0x175) \ + GENODE_TAG_VALUE(KEY_KEYBOARD, 0x176) \ + GENODE_TAG_VALUE(KEY_SCREEN, 0x177) \ + GENODE_TAG_VALUE(KEY_PC, 0x178) \ + GENODE_TAG_VALUE(KEY_TV, 0x179) \ + GENODE_TAG_VALUE(KEY_TV2, 0x17a) \ + GENODE_TAG_VALUE(KEY_VCR, 0x17b) \ + GENODE_TAG_VALUE(KEY_VCR2, 0x17c) \ + GENODE_TAG_VALUE(KEY_SAT, 0x17d) \ + GENODE_TAG_VALUE(KEY_SAT2, 0x17e) \ + GENODE_TAG_VALUE(KEY_CD, 0x17f) \ + GENODE_TAG_VALUE(KEY_TAPE, 0x180) \ + GENODE_TAG_VALUE(KEY_RADIO, 0x181) \ + GENODE_TAG_VALUE(KEY_TUNER, 0x182) \ + GENODE_TAG_VALUE(KEY_PLAYER, 0x183) \ + GENODE_TAG_VALUE(KEY_TEXT, 0x184) \ + GENODE_TAG_VALUE(KEY_DVD, 0x185) \ + GENODE_TAG_VALUE(KEY_AUX, 0x186) \ + GENODE_TAG_VALUE(KEY_MP3, 0x187) \ + GENODE_TAG_VALUE(KEY_AUDIO, 0x188) \ + GENODE_TAG_VALUE(KEY_VIDEO, 0x189) \ + GENODE_TAG_VALUE(KEY_DIRECTORY, 0x18a) \ + GENODE_TAG_VALUE(KEY_LIST, 0x18b) \ + GENODE_TAG_VALUE(KEY_MEMO, 0x18c) \ + GENODE_TAG_VALUE(KEY_CALENDAR, 0x18d) \ + GENODE_TAG_VALUE(KEY_RED, 0x18e) \ + GENODE_TAG_VALUE(KEY_GREEN, 0x18f) \ + GENODE_TAG_VALUE(KEY_YELLOW, 0x190) \ + GENODE_TAG_VALUE(KEY_BLUE, 0x191) \ + GENODE_TAG_VALUE(KEY_CHANNELUP, 0x192) \ + GENODE_TAG_VALUE(KEY_CHANNELDOWN, 0x193) \ + GENODE_TAG_VALUE(KEY_FIRST, 0x194) \ + GENODE_TAG_VALUE(KEY_LAST, 0x195) \ + GENODE_TAG_VALUE(KEY_AB, 0x196) \ + GENODE_TAG_VALUE(KEY_NEXT, 0x197) \ + GENODE_TAG_VALUE(KEY_RESTART, 0x198) \ + GENODE_TAG_VALUE(KEY_SLOW, 0x199) \ + GENODE_TAG_VALUE(KEY_SHUFFLE, 0x19a) \ + GENODE_TAG_VALUE(KEY_BREAK, 0x19b) \ + GENODE_TAG_VALUE(KEY_PREVIOUS, 0x19c) \ + GENODE_TAG_VALUE(KEY_DIGITS, 0x19d) \ + GENODE_TAG_VALUE(KEY_TEEN, 0x19e) \ + GENODE_TAG_VALUE(KEY_TWEN, 0x19f) \ + GENODE_TAG_VALUE(KEY_VIDEOPHONE, 0x1a0) \ + GENODE_TAG_VALUE(KEY_GAMES, 0x1a1) \ + GENODE_TAG_VALUE(KEY_ZOOMIN, 0x1a2) \ + GENODE_TAG_VALUE(KEY_ZOOMOUT, 0x1a3) \ + GENODE_TAG_VALUE(KEY_ZOOMRESET, 0x1a4) \ + GENODE_TAG_VALUE(KEY_WORDPROCESSOR, 0x1a5) \ + GENODE_TAG_VALUE(KEY_EDITOR, 0x1a6) \ + GENODE_TAG_VALUE(KEY_SPREADSHEET, 0x1a7) \ + GENODE_TAG_VALUE(KEY_GRAPHICSEDITOR, 0x1a8) \ + GENODE_TAG_VALUE(KEY_PRESENTATION, 0x1a9) \ + GENODE_TAG_VALUE(KEY_DATABASE, 0x1aa) \ + GENODE_TAG_VALUE(KEY_NEWS, 0x1ab) \ + GENODE_TAG_VALUE(KEY_VOICEMAIL, 0x1ac) \ + GENODE_TAG_VALUE(KEY_ADDRESSBOOK, 0x1ad) \ + GENODE_TAG_VALUE(KEY_MESSENGER, 0x1ae) \ + \ + GENODE_TAG_VALUE(KEY_DEL_EOL, 0x1c0) \ + GENODE_TAG_VALUE(KEY_DEL_EOS, 0x1c1) \ + GENODE_TAG_VALUE(KEY_INS_LINE, 0x1c2) \ + GENODE_TAG_VALUE(KEY_DEL_LINE, 0x1c3) \ + \ + GENODE_TAG_VALUE(KEY_FN, 0x1d0) \ + GENODE_TAG_VALUE(KEY_FN_ESC, 0x1d1) \ + GENODE_TAG_VALUE(KEY_FN_F1, 0x1d2) \ + GENODE_TAG_VALUE(KEY_FN_F2, 0x1d3) \ + GENODE_TAG_VALUE(KEY_FN_F3, 0x1d4) \ + GENODE_TAG_VALUE(KEY_FN_F4, 0x1d5) \ + GENODE_TAG_VALUE(KEY_FN_F5, 0x1d6) \ + GENODE_TAG_VALUE(KEY_FN_F6, 0x1d7) \ + GENODE_TAG_VALUE(KEY_FN_F7, 0x1d8) \ + GENODE_TAG_VALUE(KEY_FN_F8, 0x1d9) \ + GENODE_TAG_VALUE(KEY_FN_F9, 0x1da) \ + GENODE_TAG_VALUE(KEY_FN_F10, 0x1db) \ + GENODE_TAG_VALUE(KEY_FN_F11, 0x1dc) \ + GENODE_TAG_VALUE(KEY_FN_F12, 0x1dd) \ + GENODE_TAG_VALUE(KEY_FN_1, 0x1de) \ + GENODE_TAG_VALUE(KEY_FN_2, 0x1df) \ + GENODE_TAG_VALUE(KEY_FN_D, 0x1e0) \ + GENODE_TAG_VALUE(KEY_FN_E, 0x1e1) \ + GENODE_TAG_VALUE(KEY_FN_F, 0x1e2) \ + GENODE_TAG_VALUE(KEY_FN_S, 0x1e3) \ + GENODE_TAG_VALUE(KEY_FN_B, 0x1e4) \ + \ + GENODE_TAG_VALUE(KEY_BRL_DOT1, 0x1f1) \ + GENODE_TAG_VALUE(KEY_BRL_DOT2, 0x1f2) \ + GENODE_TAG_VALUE(KEY_BRL_DOT3, 0x1f3) \ + GENODE_TAG_VALUE(KEY_BRL_DOT4, 0x1f4) \ + GENODE_TAG_VALUE(KEY_BRL_DOT5, 0x1f5) \ + GENODE_TAG_VALUE(KEY_BRL_DOT6, 0x1f6) \ + GENODE_TAG_VALUE(KEY_BRL_DOT7, 0x1f7) \ + GENODE_TAG_VALUE(KEY_BRL_DOT8, 0x1f8) \ + \ + GENODE_TAG_VALUE(KEY_UNKNOWN, 0x1fe) \ + GENODE_TAG_VALUE(KEY_MAX, 0x1ff) + + namespace Input { - enum { - KEY_RESERVED = 0, - KEY_ESC = 1, - KEY_1 = 2, - KEY_2 = 3, - KEY_3 = 4, - KEY_4 = 5, - KEY_5 = 6, - KEY_6 = 7, - KEY_7 = 8, - KEY_8 = 9, - KEY_9 = 10, - KEY_0 = 11, - KEY_MINUS = 12, - KEY_EQUAL = 13, - KEY_BACKSPACE = 14, - KEY_TAB = 15, - KEY_Q = 16, - KEY_W = 17, - KEY_E = 18, - KEY_R = 19, - KEY_T = 20, - KEY_Y = 21, - KEY_U = 22, - KEY_I = 23, - KEY_O = 24, - KEY_P = 25, - KEY_LEFTBRACE = 26, - KEY_RIGHTBRACE = 27, - KEY_ENTER = 28, - KEY_LEFTCTRL = 29, - KEY_A = 30, - KEY_S = 31, - KEY_D = 32, - KEY_F = 33, - KEY_G = 34, - KEY_H = 35, - KEY_J = 36, - KEY_K = 37, - KEY_L = 38, - KEY_SEMICOLON = 39, - KEY_APOSTROPHE = 40, - KEY_GRAVE = 41, - KEY_LEFTSHIFT = 42, - KEY_BACKSLASH = 43, - KEY_Z = 44, - KEY_X = 45, - KEY_C = 46, - KEY_V = 47, - KEY_B = 48, - KEY_N = 49, - KEY_M = 50, - KEY_COMMA = 51, - KEY_DOT = 52, - KEY_SLASH = 53, - KEY_RIGHTSHIFT = 54, - KEY_KPASTERISK = 55, - KEY_LEFTALT = 56, - KEY_SPACE = 57, - KEY_CAPSLOCK = 58, - KEY_F1 = 59, - KEY_F2 = 60, - KEY_F3 = 61, - KEY_F4 = 62, - KEY_F5 = 63, - KEY_F6 = 64, - KEY_F7 = 65, - KEY_F8 = 66, - KEY_F9 = 67, - KEY_F10 = 68, - KEY_NUMLOCK = 69, - KEY_SCROLLLOCK = 70, - KEY_KP7 = 71, - KEY_KP8 = 72, - KEY_KP9 = 73, - KEY_KPMINUS = 74, - KEY_KP4 = 75, - KEY_KP5 = 76, - KEY_KP6 = 77, - KEY_KPPLUS = 78, - KEY_KP1 = 79, - KEY_KP2 = 80, - KEY_KP3 = 81, - KEY_KP0 = 82, - KEY_KPDOT = 83, + /** + * Definition of enum values for key codes + */ + enum Keycode { +#define GENODE_TAG_VALUE(tag, value) tag = value, + GENODE_INPUT_KEYCODES +#undef GENODE_TAG_VALUE - KEY_ZENKAKUHANKAKU = 85, - KEY_102ND = 86, - KEY_F11 = 87, - KEY_F12 = 88, - KEY_RO = 89, - KEY_KATAKANA = 90, - KEY_HIRAGANA = 91, - KEY_HENKAN = 92, - KEY_KATAKANAHIRAGANA = 93, - KEY_MUHENKAN = 94, - KEY_KPJPCOMMA = 95, - KEY_KPENTER = 96, - KEY_RIGHTCTRL = 97, - KEY_KPSLASH = 98, - KEY_SYSRQ = 99, - KEY_RIGHTALT = 100, - KEY_LINEFEED = 101, - KEY_HOME = 102, - KEY_UP = 103, - KEY_PAGEUP = 104, - KEY_LEFT = 105, - KEY_RIGHT = 106, - KEY_END = 107, - KEY_DOWN = 108, - KEY_PAGEDOWN = 109, - KEY_INSERT = 110, - KEY_DELETE = 111, - KEY_MACRO = 112, - KEY_MUTE = 113, - KEY_VOLUMEDOWN = 114, - KEY_VOLUMEUP = 115, - KEY_POWER = 116, - KEY_KPEQUAL = 117, - KEY_KPPLUSMINUS = 118, - KEY_PAUSE = 119, - - KEY_KPCOMMA = 121, - KEY_HANGUEL = 122, - KEY_HANJA = 123, - KEY_YEN = 124, - KEY_LEFTMETA = 125, - KEY_RIGHTMETA = 126, - KEY_COMPOSE = 127, - - KEY_STOP = 128, - KEY_AGAIN = 129, - KEY_PROPS = 130, - KEY_UNDO = 131, - KEY_FRONT = 132, - KEY_COPY = 133, - KEY_OPEN = 134, - KEY_PASTE = 135, - KEY_FIND = 136, - KEY_CUT = 137, - KEY_HELP = 138, - KEY_MENU = 139, - KEY_CALC = 140, - KEY_SETUP = 141, - KEY_SLEEP = 142, - KEY_WAKEUP = 143, - KEY_FILE = 144, - KEY_SENDFILE = 145, - KEY_DELETEFILE = 146, - KEY_XFER = 147, - KEY_PROG1 = 148, - KEY_PROG2 = 149, - KEY_WWW = 150, - KEY_MSDOS = 151, - KEY_COFFEE = 152, - KEY_DIRECTION = 153, - KEY_CYCLEWINDOWS = 154, - KEY_MAIL = 155, - KEY_BOOKMARKS = 156, - KEY_COMPUTER = 157, - KEY_BACK = 158, - KEY_FORWARD = 159, - KEY_CLOSECD = 160, - KEY_EJECTCD = 161, - KEY_EJECTCLOSECD = 162, - KEY_NEXTSONG = 163, - KEY_PLAYPAUSE = 164, - KEY_PREVIOUSSONG = 165, - KEY_STOPCD = 166, - KEY_RECORD = 167, - KEY_REWIND = 168, - KEY_PHONE = 169, - KEY_ISO = 170, - KEY_CONFIG = 171, - KEY_HOMEPAGE = 172, - KEY_REFRESH = 173, - KEY_EXIT = 174, - KEY_MOVE = 175, - KEY_EDIT = 176, - KEY_SCROLLUP = 177, - KEY_SCROLLDOWN = 178, - KEY_KPLEFTPAREN = 179, - KEY_KPRIGHTPAREN = 180, - KEY_NEW = 181, - KEY_REDO = 182, - - KEY_F13 = 183, - KEY_F14 = 184, - KEY_F15 = 185, - KEY_F16 = 186, - KEY_F17 = 187, - KEY_F18 = 188, - KEY_F19 = 189, - KEY_F20 = 190, - KEY_F21 = 191, - KEY_F22 = 192, - KEY_F23 = 193, - KEY_F24 = 194, - - KEY_PLAYCD = 200, - KEY_PAUSECD = 201, - KEY_PROG3 = 202, - KEY_PROG4 = 203, - KEY_DASHBOARD = 204, - KEY_SUSPEND = 205, - KEY_CLOSE = 206, - KEY_PLAY = 207, - KEY_FASTFORWARD = 208, - KEY_BASSBOOST = 209, - KEY_PRINT = 210, - KEY_HP = 211, - KEY_CAMERA = 212, - KEY_SOUND = 213, - KEY_QUESTION = 214, - KEY_EMAIL = 215, - KEY_CHAT = 216, - KEY_SEARCH = 217, - KEY_CONNECT = 218, - KEY_FINANCE = 219, - KEY_SPORT = 220, - KEY_SHOP = 221, - KEY_ALTERASE = 222, - KEY_CANCEL = 223, - KEY_BRIGHTNESSDOWN = 224, - KEY_BRIGHTNESSUP = 225, - KEY_MEDIA = 226, - KEY_SWITCHVIDEOMODE = 227, - KEY_KBDILLUMTOGGLE = 228, - KEY_KBDILLUMDOWN = 229, - KEY_KBDILLUMUP = 230, - KEY_SEND = 231, - KEY_REPLY = 232, - KEY_FORWARDMAIL = 233, - KEY_SAVE = 234, - KEY_DOCUMENTS = 235, - KEY_BATTERY = 236, - KEY_BLUETOOTH = 237, - KEY_WLAN = 238, - - BTN_MISC = 0x100, - BTN_0 = 0x100, - BTN_1 = 0x101, - BTN_2 = 0x102, - BTN_3 = 0x103, - BTN_4 = 0x104, - BTN_5 = 0x105, - BTN_6 = 0x106, - BTN_7 = 0x107, - BTN_8 = 0x108, - BTN_9 = 0x109, - - BTN_MOUSE = 0x110, - BTN_LEFT = 0x110, - BTN_RIGHT = 0x111, - BTN_MIDDLE = 0x112, - BTN_SIDE = 0x113, - BTN_EXTRA = 0x114, - BTN_FORWARD = 0x115, - BTN_BACK = 0x116, - BTN_TASK = 0x117, - - BTN_JOYSTICK = 0x120, - BTN_TRIGGER = 0x120, - BTN_THUMB = 0x121, - BTN_THUMB2 = 0x122, - BTN_TOP = 0x123, - BTN_TOP2 = 0x124, - BTN_PINKIE = 0x125, - BTN_BASE = 0x126, - BTN_BASE2 = 0x127, - BTN_BASE3 = 0x128, - BTN_BASE4 = 0x129, - BTN_BASE5 = 0x12a, - BTN_BASE6 = 0x12b, - BTN_DEAD = 0x12f, - - BTN_GAMEPAD = 0x130, - BTN_A = 0x130, - BTN_B = 0x131, - BTN_C = 0x132, - BTN_X = 0x133, - BTN_Y = 0x134, - BTN_Z = 0x135, - BTN_TL = 0x136, - BTN_TR = 0x137, - BTN_TL2 = 0x138, - BTN_TR2 = 0x139, - BTN_SELECT = 0x13a, - BTN_START = 0x13b, - BTN_MODE = 0x13c, - BTN_THUMBL = 0x13d, - BTN_THUMBR = 0x13e, - - BTN_DIGI = 0x140, - BTN_TOOL_PEN = 0x140, - BTN_TOOL_RUBBER = 0x141, - BTN_TOOL_BRUSH = 0x142, - BTN_TOOL_PENCIL = 0x143, - BTN_TOOL_AIRBRUSH = 0x144, - BTN_TOOL_FINGER = 0x145, - BTN_TOOL_MOUSE = 0x146, - BTN_TOOL_LENS = 0x147, - BTN_TOUCH = 0x14a, - BTN_STYLUS = 0x14b, - BTN_STYLUS2 = 0x14c, - BTN_TOOL_DOUBLETAP = 0x14d, - BTN_TOOL_TRIPLETAP = 0x14e, - - BTN_WHEEL = 0x150, - BTN_GEAR_DOWN = 0x150, - BTN_GEAR_UP = 0x151, - - KEY_OK = 0x160, - KEY_SELECT = 0x161, - KEY_GOTO = 0x162, - KEY_CLEAR = 0x163, - KEY_POWER2 = 0x164, - KEY_OPTION = 0x165, - KEY_INFO = 0x166, - KEY_TIME = 0x167, - KEY_VENDOR = 0x168, - KEY_ARCHIVE = 0x169, - KEY_PROGRAM = 0x16a, - KEY_CHANNEL = 0x16b, - KEY_FAVORITES = 0x16c, - KEY_EPG = 0x16d, - KEY_PVR = 0x16e, - KEY_MHP = 0x16f, - KEY_LANGUAGE = 0x170, - KEY_TITLE = 0x171, - KEY_SUBTITLE = 0x172, - KEY_ANGLE = 0x173, - KEY_ZOOM = 0x174, - KEY_MODE = 0x175, - KEY_KEYBOARD = 0x176, - KEY_SCREEN = 0x177, - KEY_PC = 0x178, - KEY_TV = 0x179, - KEY_TV2 = 0x17a, - KEY_VCR = 0x17b, - KEY_VCR2 = 0x17c, - KEY_SAT = 0x17d, - KEY_SAT2 = 0x17e, - KEY_CD = 0x17f, - KEY_TAPE = 0x180, - KEY_RADIO = 0x181, - KEY_TUNER = 0x182, - KEY_PLAYER = 0x183, - KEY_TEXT = 0x184, - KEY_DVD = 0x185, - KEY_AUX = 0x186, - KEY_MP3 = 0x187, - KEY_AUDIO = 0x188, - KEY_VIDEO = 0x189, - KEY_DIRECTORY = 0x18a, - KEY_LIST = 0x18b, - KEY_MEMO = 0x18c, - KEY_CALENDAR = 0x18d, - KEY_RED = 0x18e, - KEY_GREEN = 0x18f, - KEY_YELLOW = 0x190, - KEY_BLUE = 0x191, - KEY_CHANNELUP = 0x192, - KEY_CHANNELDOWN = 0x193, - KEY_FIRST = 0x194, - KEY_LAST = 0x195, - KEY_AB = 0x196, - KEY_NEXT = 0x197, - KEY_RESTART = 0x198, - KEY_SLOW = 0x199, - KEY_SHUFFLE = 0x19a, - KEY_BREAK = 0x19b, - KEY_PREVIOUS = 0x19c, - KEY_DIGITS = 0x19d, - KEY_TEEN = 0x19e, - KEY_TWEN = 0x19f, - KEY_VIDEOPHONE = 0x1a0, - KEY_GAMES = 0x1a1, - KEY_ZOOMIN = 0x1a2, - KEY_ZOOMOUT = 0x1a3, - KEY_ZOOMRESET = 0x1a4, - KEY_WORDPROCESSOR = 0x1a5, - KEY_EDITOR = 0x1a6, - KEY_SPREADSHEET = 0x1a7, - KEY_GRAPHICSEDITOR = 0x1a8, - KEY_PRESENTATION = 0x1a9, - KEY_DATABASE = 0x1aa, - KEY_NEWS = 0x1ab, - KEY_VOICEMAIL = 0x1ac, - KEY_ADDRESSBOOK = 0x1ad, - KEY_MESSENGER = 0x1ae, - - KEY_DEL_EOL = 0x1c0, - KEY_DEL_EOS = 0x1c1, - KEY_INS_LINE = 0x1c2, - KEY_DEL_LINE = 0x1c3, - - KEY_FN = 0x1d0, - KEY_FN_ESC = 0x1d1, - KEY_FN_F1 = 0x1d2, - KEY_FN_F2 = 0x1d3, - KEY_FN_F3 = 0x1d4, - KEY_FN_F4 = 0x1d5, - KEY_FN_F5 = 0x1d6, - KEY_FN_F6 = 0x1d7, - KEY_FN_F7 = 0x1d8, - KEY_FN_F8 = 0x1d9, - KEY_FN_F9 = 0x1da, - KEY_FN_F10 = 0x1db, - KEY_FN_F11 = 0x1dc, - KEY_FN_F12 = 0x1dd, - KEY_FN_1 = 0x1de, - KEY_FN_2 = 0x1df, - KEY_FN_D = 0x1e0, - KEY_FN_E = 0x1e1, - KEY_FN_F = 0x1e2, - KEY_FN_S = 0x1e3, - KEY_FN_B = 0x1e4, - - KEY_BRL_DOT1 = 0x1f1, - KEY_BRL_DOT2 = 0x1f2, - KEY_BRL_DOT3 = 0x1f3, - KEY_BRL_DOT4 = 0x1f4, - KEY_BRL_DOT5 = 0x1f5, - KEY_BRL_DOT6 = 0x1f6, - KEY_BRL_DOT7 = 0x1f7, - KEY_BRL_DOT8 = 0x1f8, - - KEY_UNKNOWN = 0x1fe, - KEY_MAX = 0x1ff, + /* + * Aliases + */ + BTN_WHEEL = BTN_GEAR_DOWN, + BTN_DIGI = BTN_TOOL_PEN, + BTN_GAMEPAD = BTN_A, + BTN_JOYSTICK = BTN_TRIGGER, + BTN_MOUSE = BTN_LEFT, + BTN_MISC = BTN_0, }; + + + /** + * Request name of specified key code + */ + static inline char const *key_name(Keycode key) { + switch (key) { +#define GENODE_TAG_VALUE(tag, value) case tag: return #tag; + GENODE_INPUT_KEYCODES +#undef GENODE_TAG_VALUE + } + return "KEY_UNKNOWN"; + } } + +/* + * Undefine the macro because it is not part of the Genode API + */ +#undef GENODE_INPUT_KEYCODES + + #endif /* _INCLUDE__INPUT__KEYCODES_H_ */