commit ee36daecae67ed42b4320bb8ec832269d8dd94a6 Author: Matthieu Herrb Date: Thu Jul 6 11:00:51 2023 +0200 Initial commit This is a minimal subset of libevdev functions needed on OpenBSD by Wayland applications. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..276b4d2 --- /dev/null +++ b/Makefile @@ -0,0 +1,58 @@ +# $OpenBSD$ + +INSTALL_DATA= /usr/bin/install -c -m 644 + +NOPROFILE= + +LIB= evdev + +PREFIX= /usr/local +INCSDIR= ${PREFIX}/include +LIBDIR= ${PREFIX}/lib + +CPPFLAGS+= -I${.CURDIR} \ + -I${INCSDIR} \ + +INCS= libevdev.h +SRCS= libevdev.c +PKGCONFIG= libevdev.pc + + +includes: _SUBDIRUSE + mkdir -p ${DESTDIR}${INCSDIR}/libevdev + cd ${.CURDIR}; for i in ${INCS}; do \ + j="cmp -s $$i ${DESTDIR}${INCSDIR}/$$i || \ + ${INSTALL_DATA} $$i ${DESTDIR}${INCSDIR}/libevdev"; \ + echo "\tinstalling $$i"; \ + eval "$$j"; \ + done + +# pkgconfig +PACKAGE_VERSION = 1.13.1 +PKGCONFIG = libevdev.pc + +.SUFFIXES: .in .pc + +all: ${PKGCONFIG} + +CLEANFILES += ${PKGCONFIG} + +${PKGCONFIG}: ${PKGCONFIG}.in + @sed -e 's#@prefix@#${PREFIX}#g' \ + -e 's#@datarootdir@#$${prefix}/share#g' \ + -e 's#@datadir@#$${datarootdir}#g' \ + -e 's#@exec_prefix@#$${prefix}#g' \ + -e 's#@libdir@#$${exec_prefix}/lib#g' \ + -e 's#@includedir@#$${prefix}/include#g' \ + -e 's#@PACKAGE_VERSION@#'${PACKAGE_VERSION}'#g' \ + ${EXTRA_PKGCONFIG_SUBST} \ + < $? > $@ + +install-pc: ${PKGCONFIG} + ${INSTALL_DATA} ${PKGCONFIG} ${DESTDIR}${LIBDIR}/pkgconfig + +realinstall: install-pc + +.include +.include + diff --git a/event-names.h b/event-names.h new file mode 100644 index 0000000..05093a1 --- /dev/null +++ b/event-names.h @@ -0,0 +1,1656 @@ +/* THIS FILE IS GENERATED, DO NOT EDIT */ + +#ifndef EVENT_NAMES_H +#define EVENT_NAMES_H + +static const char * const ev_map[EV_MAX + 1] = { + [EV_SYN] = "EV_SYN", + [EV_KEY] = "EV_KEY", + [EV_REL] = "EV_REL", + [EV_ABS] = "EV_ABS", + [EV_MSC] = "EV_MSC", + [EV_SW] = "EV_SW", + [EV_LED] = "EV_LED", + [EV_SND] = "EV_SND", + [EV_REP] = "EV_REP", + [EV_FF] = "EV_FF", + [EV_PWR] = "EV_PWR", + [EV_FF_STATUS] = "EV_FF_STATUS", + [EV_MAX] = "EV_MAX", +}; + +static const char * const rel_map[REL_MAX + 1] = { + [REL_X] = "REL_X", + [REL_Y] = "REL_Y", + [REL_Z] = "REL_Z", + [REL_RX] = "REL_RX", + [REL_RY] = "REL_RY", + [REL_RZ] = "REL_RZ", + [REL_HWHEEL] = "REL_HWHEEL", + [REL_DIAL] = "REL_DIAL", + [REL_WHEEL] = "REL_WHEEL", + [REL_MISC] = "REL_MISC", + [REL_RESERVED] = "REL_RESERVED", + [REL_WHEEL_HI_RES] = "REL_WHEEL_HI_RES", + [REL_HWHEEL_HI_RES] = "REL_HWHEEL_HI_RES", + [REL_MAX] = "REL_MAX", +}; + +static const char * const abs_map[ABS_MAX + 1] = { + [ABS_X] = "ABS_X", + [ABS_Y] = "ABS_Y", + [ABS_Z] = "ABS_Z", + [ABS_RX] = "ABS_RX", + [ABS_RY] = "ABS_RY", + [ABS_RZ] = "ABS_RZ", + [ABS_THROTTLE] = "ABS_THROTTLE", + [ABS_RUDDER] = "ABS_RUDDER", + [ABS_WHEEL] = "ABS_WHEEL", + [ABS_GAS] = "ABS_GAS", + [ABS_BRAKE] = "ABS_BRAKE", + [ABS_HAT0X] = "ABS_HAT0X", + [ABS_HAT0Y] = "ABS_HAT0Y", + [ABS_HAT1X] = "ABS_HAT1X", + [ABS_HAT1Y] = "ABS_HAT1Y", + [ABS_HAT2X] = "ABS_HAT2X", + [ABS_HAT2Y] = "ABS_HAT2Y", + [ABS_HAT3X] = "ABS_HAT3X", + [ABS_HAT3Y] = "ABS_HAT3Y", + [ABS_PRESSURE] = "ABS_PRESSURE", + [ABS_DISTANCE] = "ABS_DISTANCE", + [ABS_TILT_X] = "ABS_TILT_X", + [ABS_TILT_Y] = "ABS_TILT_Y", + [ABS_TOOL_WIDTH] = "ABS_TOOL_WIDTH", + [ABS_VOLUME] = "ABS_VOLUME", + // [ABS_PROFILE] = "ABS_PROFILE", + [ABS_MISC] = "ABS_MISC", + [ABS_RESERVED] = "ABS_RESERVED", + [ABS_MT_SLOT] = "ABS_MT_SLOT", + [ABS_MT_TOUCH_MAJOR] = "ABS_MT_TOUCH_MAJOR", + [ABS_MT_TOUCH_MINOR] = "ABS_MT_TOUCH_MINOR", + [ABS_MT_WIDTH_MAJOR] = "ABS_MT_WIDTH_MAJOR", + [ABS_MT_WIDTH_MINOR] = "ABS_MT_WIDTH_MINOR", + [ABS_MT_ORIENTATION] = "ABS_MT_ORIENTATION", + [ABS_MT_POSITION_X] = "ABS_MT_POSITION_X", + [ABS_MT_POSITION_Y] = "ABS_MT_POSITION_Y", + [ABS_MT_TOOL_TYPE] = "ABS_MT_TOOL_TYPE", + [ABS_MT_BLOB_ID] = "ABS_MT_BLOB_ID", + [ABS_MT_TRACKING_ID] = "ABS_MT_TRACKING_ID", + [ABS_MT_PRESSURE] = "ABS_MT_PRESSURE", + [ABS_MT_DISTANCE] = "ABS_MT_DISTANCE", + [ABS_MT_TOOL_X] = "ABS_MT_TOOL_X", + [ABS_MT_TOOL_Y] = "ABS_MT_TOOL_Y", + [ABS_MAX] = "ABS_MAX", +}; + +static const char * const key_map[KEY_MAX + 1] = { + [KEY_RESERVED] = "KEY_RESERVED", + [KEY_ESC] = "KEY_ESC", + [KEY_1] = "KEY_1", + [KEY_2] = "KEY_2", + [KEY_3] = "KEY_3", + [KEY_4] = "KEY_4", + [KEY_5] = "KEY_5", + [KEY_6] = "KEY_6", + [KEY_7] = "KEY_7", + [KEY_8] = "KEY_8", + [KEY_9] = "KEY_9", + [KEY_0] = "KEY_0", + [KEY_MINUS] = "KEY_MINUS", + [KEY_EQUAL] = "KEY_EQUAL", + [KEY_BACKSPACE] = "KEY_BACKSPACE", + [KEY_TAB] = "KEY_TAB", + [KEY_Q] = "KEY_Q", + [KEY_W] = "KEY_W", + [KEY_E] = "KEY_E", + [KEY_R] = "KEY_R", + [KEY_T] = "KEY_T", + [KEY_Y] = "KEY_Y", + [KEY_U] = "KEY_U", + [KEY_I] = "KEY_I", + [KEY_O] = "KEY_O", + [KEY_P] = "KEY_P", + [KEY_LEFTBRACE] = "KEY_LEFTBRACE", + [KEY_RIGHTBRACE] = "KEY_RIGHTBRACE", + [KEY_ENTER] = "KEY_ENTER", + [KEY_LEFTCTRL] = "KEY_LEFTCTRL", + [KEY_A] = "KEY_A", + [KEY_S] = "KEY_S", + [KEY_D] = "KEY_D", + [KEY_F] = "KEY_F", + [KEY_G] = "KEY_G", + [KEY_H] = "KEY_H", + [KEY_J] = "KEY_J", + [KEY_K] = "KEY_K", + [KEY_L] = "KEY_L", + [KEY_SEMICOLON] = "KEY_SEMICOLON", + [KEY_APOSTROPHE] = "KEY_APOSTROPHE", + [KEY_GRAVE] = "KEY_GRAVE", + [KEY_LEFTSHIFT] = "KEY_LEFTSHIFT", + [KEY_BACKSLASH] = "KEY_BACKSLASH", + [KEY_Z] = "KEY_Z", + [KEY_X] = "KEY_X", + [KEY_C] = "KEY_C", + [KEY_V] = "KEY_V", + [KEY_B] = "KEY_B", + [KEY_N] = "KEY_N", + [KEY_M] = "KEY_M", + [KEY_COMMA] = "KEY_COMMA", + [KEY_DOT] = "KEY_DOT", + [KEY_SLASH] = "KEY_SLASH", + [KEY_RIGHTSHIFT] = "KEY_RIGHTSHIFT", + [KEY_KPASTERISK] = "KEY_KPASTERISK", + [KEY_LEFTALT] = "KEY_LEFTALT", + [KEY_SPACE] = "KEY_SPACE", + [KEY_CAPSLOCK] = "KEY_CAPSLOCK", + [KEY_F1] = "KEY_F1", + [KEY_F2] = "KEY_F2", + [KEY_F3] = "KEY_F3", + [KEY_F4] = "KEY_F4", + [KEY_F5] = "KEY_F5", + [KEY_F6] = "KEY_F6", + [KEY_F7] = "KEY_F7", + [KEY_F8] = "KEY_F8", + [KEY_F9] = "KEY_F9", + [KEY_F10] = "KEY_F10", + [KEY_NUMLOCK] = "KEY_NUMLOCK", + [KEY_SCROLLLOCK] = "KEY_SCROLLLOCK", + [KEY_KP7] = "KEY_KP7", + [KEY_KP8] = "KEY_KP8", + [KEY_KP9] = "KEY_KP9", + [KEY_KPMINUS] = "KEY_KPMINUS", + [KEY_KP4] = "KEY_KP4", + [KEY_KP5] = "KEY_KP5", + [KEY_KP6] = "KEY_KP6", + [KEY_KPPLUS] = "KEY_KPPLUS", + [KEY_KP1] = "KEY_KP1", + [KEY_KP2] = "KEY_KP2", + [KEY_KP3] = "KEY_KP3", + [KEY_KP0] = "KEY_KP0", + [KEY_KPDOT] = "KEY_KPDOT", + [KEY_ZENKAKUHANKAKU] = "KEY_ZENKAKUHANKAKU", + [KEY_102ND] = "KEY_102ND", + [KEY_F11] = "KEY_F11", + [KEY_F12] = "KEY_F12", + [KEY_RO] = "KEY_RO", + [KEY_KATAKANA] = "KEY_KATAKANA", + [KEY_HIRAGANA] = "KEY_HIRAGANA", + [KEY_HENKAN] = "KEY_HENKAN", + [KEY_KATAKANAHIRAGANA] = "KEY_KATAKANAHIRAGANA", + [KEY_MUHENKAN] = "KEY_MUHENKAN", + [KEY_KPJPCOMMA] = "KEY_KPJPCOMMA", + [KEY_KPENTER] = "KEY_KPENTER", + [KEY_RIGHTCTRL] = "KEY_RIGHTCTRL", + [KEY_KPSLASH] = "KEY_KPSLASH", + [KEY_SYSRQ] = "KEY_SYSRQ", + [KEY_RIGHTALT] = "KEY_RIGHTALT", + [KEY_LINEFEED] = "KEY_LINEFEED", + [KEY_HOME] = "KEY_HOME", + [KEY_UP] = "KEY_UP", + [KEY_PAGEUP] = "KEY_PAGEUP", + [KEY_LEFT] = "KEY_LEFT", + [KEY_RIGHT] = "KEY_RIGHT", + [KEY_END] = "KEY_END", + [KEY_DOWN] = "KEY_DOWN", + [KEY_PAGEDOWN] = "KEY_PAGEDOWN", + [KEY_INSERT] = "KEY_INSERT", + [KEY_DELETE] = "KEY_DELETE", + [KEY_MACRO] = "KEY_MACRO", + [KEY_MUTE] = "KEY_MUTE", + [KEY_VOLUMEDOWN] = "KEY_VOLUMEDOWN", + [KEY_VOLUMEUP] = "KEY_VOLUMEUP", + [KEY_POWER] = "KEY_POWER", + [KEY_KPEQUAL] = "KEY_KPEQUAL", + [KEY_KPPLUSMINUS] = "KEY_KPPLUSMINUS", + [KEY_PAUSE] = "KEY_PAUSE", + [KEY_SCALE] = "KEY_SCALE", + [KEY_KPCOMMA] = "KEY_KPCOMMA", + [KEY_HANGEUL] = "KEY_HANGEUL", + [KEY_HANJA] = "KEY_HANJA", + [KEY_YEN] = "KEY_YEN", + [KEY_LEFTMETA] = "KEY_LEFTMETA", + [KEY_RIGHTMETA] = "KEY_RIGHTMETA", + [KEY_COMPOSE] = "KEY_COMPOSE", + [KEY_STOP] = "KEY_STOP", + [KEY_AGAIN] = "KEY_AGAIN", + [KEY_PROPS] = "KEY_PROPS", + [KEY_UNDO] = "KEY_UNDO", + [KEY_FRONT] = "KEY_FRONT", + [KEY_COPY] = "KEY_COPY", + [KEY_OPEN] = "KEY_OPEN", + [KEY_PASTE] = "KEY_PASTE", + [KEY_FIND] = "KEY_FIND", + [KEY_CUT] = "KEY_CUT", + [KEY_HELP] = "KEY_HELP", + [KEY_MENU] = "KEY_MENU", + [KEY_CALC] = "KEY_CALC", + [KEY_SETUP] = "KEY_SETUP", + [KEY_SLEEP] = "KEY_SLEEP", + [KEY_WAKEUP] = "KEY_WAKEUP", + [KEY_FILE] = "KEY_FILE", + [KEY_SENDFILE] = "KEY_SENDFILE", + [KEY_DELETEFILE] = "KEY_DELETEFILE", + [KEY_XFER] = "KEY_XFER", + [KEY_PROG1] = "KEY_PROG1", + [KEY_PROG2] = "KEY_PROG2", + [KEY_WWW] = "KEY_WWW", + [KEY_MSDOS] = "KEY_MSDOS", + [KEY_COFFEE] = "KEY_COFFEE", + [KEY_ROTATE_DISPLAY] = "KEY_ROTATE_DISPLAY", + [KEY_CYCLEWINDOWS] = "KEY_CYCLEWINDOWS", + [KEY_MAIL] = "KEY_MAIL", + [KEY_BOOKMARKS] = "KEY_BOOKMARKS", + [KEY_COMPUTER] = "KEY_COMPUTER", + [KEY_BACK] = "KEY_BACK", + [KEY_FORWARD] = "KEY_FORWARD", + [KEY_CLOSECD] = "KEY_CLOSECD", + [KEY_EJECTCD] = "KEY_EJECTCD", + [KEY_EJECTCLOSECD] = "KEY_EJECTCLOSECD", + [KEY_NEXTSONG] = "KEY_NEXTSONG", + [KEY_PLAYPAUSE] = "KEY_PLAYPAUSE", + [KEY_PREVIOUSSONG] = "KEY_PREVIOUSSONG", + [KEY_STOPCD] = "KEY_STOPCD", + [KEY_RECORD] = "KEY_RECORD", + [KEY_REWIND] = "KEY_REWIND", + [KEY_PHONE] = "KEY_PHONE", + [KEY_ISO] = "KEY_ISO", + [KEY_CONFIG] = "KEY_CONFIG", + [KEY_HOMEPAGE] = "KEY_HOMEPAGE", + [KEY_REFRESH] = "KEY_REFRESH", + [KEY_EXIT] = "KEY_EXIT", + [KEY_MOVE] = "KEY_MOVE", + [KEY_EDIT] = "KEY_EDIT", + [KEY_SCROLLUP] = "KEY_SCROLLUP", + [KEY_SCROLLDOWN] = "KEY_SCROLLDOWN", + [KEY_KPLEFTPAREN] = "KEY_KPLEFTPAREN", + [KEY_KPRIGHTPAREN] = "KEY_KPRIGHTPAREN", + [KEY_NEW] = "KEY_NEW", + [KEY_REDO] = "KEY_REDO", + [KEY_F13] = "KEY_F13", + [KEY_F14] = "KEY_F14", + [KEY_F15] = "KEY_F15", + [KEY_F16] = "KEY_F16", + [KEY_F17] = "KEY_F17", + [KEY_F18] = "KEY_F18", + [KEY_F19] = "KEY_F19", + [KEY_F20] = "KEY_F20", + [KEY_F21] = "KEY_F21", + [KEY_F22] = "KEY_F22", + [KEY_F23] = "KEY_F23", + [KEY_F24] = "KEY_F24", + [KEY_PLAYCD] = "KEY_PLAYCD", + [KEY_PAUSECD] = "KEY_PAUSECD", + [KEY_PROG3] = "KEY_PROG3", + [KEY_PROG4] = "KEY_PROG4", + // [KEY_ALL_APPLICATIONS] = "KEY_ALL_APPLICATIONS", + [KEY_SUSPEND] = "KEY_SUSPEND", + [KEY_CLOSE] = "KEY_CLOSE", + [KEY_PLAY] = "KEY_PLAY", + [KEY_FASTFORWARD] = "KEY_FASTFORWARD", + [KEY_BASSBOOST] = "KEY_BASSBOOST", + [KEY_PRINT] = "KEY_PRINT", + [KEY_HP] = "KEY_HP", + [KEY_CAMERA] = "KEY_CAMERA", + [KEY_SOUND] = "KEY_SOUND", + [KEY_QUESTION] = "KEY_QUESTION", + [KEY_EMAIL] = "KEY_EMAIL", + [KEY_CHAT] = "KEY_CHAT", + [KEY_SEARCH] = "KEY_SEARCH", + [KEY_CONNECT] = "KEY_CONNECT", + [KEY_FINANCE] = "KEY_FINANCE", + [KEY_SPORT] = "KEY_SPORT", + [KEY_SHOP] = "KEY_SHOP", + [KEY_ALTERASE] = "KEY_ALTERASE", + [KEY_CANCEL] = "KEY_CANCEL", + [KEY_BRIGHTNESSDOWN] = "KEY_BRIGHTNESSDOWN", + [KEY_BRIGHTNESSUP] = "KEY_BRIGHTNESSUP", + [KEY_MEDIA] = "KEY_MEDIA", + [KEY_SWITCHVIDEOMODE] = "KEY_SWITCHVIDEOMODE", + [KEY_KBDILLUMTOGGLE] = "KEY_KBDILLUMTOGGLE", + [KEY_KBDILLUMDOWN] = "KEY_KBDILLUMDOWN", + [KEY_KBDILLUMUP] = "KEY_KBDILLUMUP", + [KEY_SEND] = "KEY_SEND", + [KEY_REPLY] = "KEY_REPLY", + [KEY_FORWARDMAIL] = "KEY_FORWARDMAIL", + [KEY_SAVE] = "KEY_SAVE", + [KEY_DOCUMENTS] = "KEY_DOCUMENTS", + [KEY_BATTERY] = "KEY_BATTERY", + [KEY_BLUETOOTH] = "KEY_BLUETOOTH", + [KEY_WLAN] = "KEY_WLAN", + [KEY_UWB] = "KEY_UWB", + [KEY_UNKNOWN] = "KEY_UNKNOWN", + [KEY_VIDEO_NEXT] = "KEY_VIDEO_NEXT", + [KEY_VIDEO_PREV] = "KEY_VIDEO_PREV", + [KEY_BRIGHTNESS_CYCLE] = "KEY_BRIGHTNESS_CYCLE", + [KEY_BRIGHTNESS_AUTO] = "KEY_BRIGHTNESS_AUTO", + [KEY_DISPLAY_OFF] = "KEY_DISPLAY_OFF", + [KEY_WWAN] = "KEY_WWAN", + [KEY_RFKILL] = "KEY_RFKILL", + [KEY_MICMUTE] = "KEY_MICMUTE", + [KEY_OK] = "KEY_OK", + [KEY_SELECT] = "KEY_SELECT", + [KEY_GOTO] = "KEY_GOTO", + [KEY_CLEAR] = "KEY_CLEAR", + [KEY_POWER2] = "KEY_POWER2", + [KEY_OPTION] = "KEY_OPTION", + [KEY_INFO] = "KEY_INFO", + [KEY_TIME] = "KEY_TIME", + [KEY_VENDOR] = "KEY_VENDOR", + [KEY_ARCHIVE] = "KEY_ARCHIVE", + [KEY_PROGRAM] = "KEY_PROGRAM", + [KEY_CHANNEL] = "KEY_CHANNEL", + [KEY_FAVORITES] = "KEY_FAVORITES", + [KEY_EPG] = "KEY_EPG", + [KEY_PVR] = "KEY_PVR", + [KEY_MHP] = "KEY_MHP", + [KEY_LANGUAGE] = "KEY_LANGUAGE", + [KEY_TITLE] = "KEY_TITLE", + [KEY_SUBTITLE] = "KEY_SUBTITLE", + [KEY_ANGLE] = "KEY_ANGLE", + [KEY_FULL_SCREEN] = "KEY_FULL_SCREEN", + [KEY_MODE] = "KEY_MODE", + [KEY_KEYBOARD] = "KEY_KEYBOARD", + [KEY_ASPECT_RATIO] = "KEY_ASPECT_RATIO", + [KEY_PC] = "KEY_PC", + [KEY_TV] = "KEY_TV", + [KEY_TV2] = "KEY_TV2", + [KEY_VCR] = "KEY_VCR", + [KEY_VCR2] = "KEY_VCR2", + [KEY_SAT] = "KEY_SAT", + [KEY_SAT2] = "KEY_SAT2", + [KEY_CD] = "KEY_CD", + [KEY_TAPE] = "KEY_TAPE", + [KEY_RADIO] = "KEY_RADIO", + [KEY_TUNER] = "KEY_TUNER", + [KEY_PLAYER] = "KEY_PLAYER", + [KEY_TEXT] = "KEY_TEXT", + [KEY_DVD] = "KEY_DVD", + [KEY_AUX] = "KEY_AUX", + [KEY_MP3] = "KEY_MP3", + [KEY_AUDIO] = "KEY_AUDIO", + [KEY_VIDEO] = "KEY_VIDEO", + [KEY_DIRECTORY] = "KEY_DIRECTORY", + [KEY_LIST] = "KEY_LIST", + [KEY_MEMO] = "KEY_MEMO", + [KEY_CALENDAR] = "KEY_CALENDAR", + [KEY_RED] = "KEY_RED", + [KEY_GREEN] = "KEY_GREEN", + [KEY_YELLOW] = "KEY_YELLOW", + [KEY_BLUE] = "KEY_BLUE", + [KEY_CHANNELUP] = "KEY_CHANNELUP", + [KEY_CHANNELDOWN] = "KEY_CHANNELDOWN", + [KEY_FIRST] = "KEY_FIRST", + [KEY_LAST] = "KEY_LAST", + [KEY_AB] = "KEY_AB", + [KEY_NEXT] = "KEY_NEXT", + [KEY_RESTART] = "KEY_RESTART", + [KEY_SLOW] = "KEY_SLOW", + [KEY_SHUFFLE] = "KEY_SHUFFLE", + [KEY_BREAK] = "KEY_BREAK", + [KEY_PREVIOUS] = "KEY_PREVIOUS", + [KEY_DIGITS] = "KEY_DIGITS", + [KEY_TEEN] = "KEY_TEEN", + [KEY_TWEN] = "KEY_TWEN", + [KEY_VIDEOPHONE] = "KEY_VIDEOPHONE", + [KEY_GAMES] = "KEY_GAMES", + [KEY_ZOOMIN] = "KEY_ZOOMIN", + [KEY_ZOOMOUT] = "KEY_ZOOMOUT", + [KEY_ZOOMRESET] = "KEY_ZOOMRESET", + [KEY_WORDPROCESSOR] = "KEY_WORDPROCESSOR", + [KEY_EDITOR] = "KEY_EDITOR", + [KEY_SPREADSHEET] = "KEY_SPREADSHEET", + [KEY_GRAPHICSEDITOR] = "KEY_GRAPHICSEDITOR", + [KEY_PRESENTATION] = "KEY_PRESENTATION", + [KEY_DATABASE] = "KEY_DATABASE", + [KEY_NEWS] = "KEY_NEWS", + [KEY_VOICEMAIL] = "KEY_VOICEMAIL", + [KEY_ADDRESSBOOK] = "KEY_ADDRESSBOOK", + [KEY_MESSENGER] = "KEY_MESSENGER", + [KEY_DISPLAYTOGGLE] = "KEY_DISPLAYTOGGLE", + [KEY_SPELLCHECK] = "KEY_SPELLCHECK", + [KEY_LOGOFF] = "KEY_LOGOFF", + [KEY_DOLLAR] = "KEY_DOLLAR", + [KEY_EURO] = "KEY_EURO", + [KEY_FRAMEBACK] = "KEY_FRAMEBACK", + [KEY_FRAMEFORWARD] = "KEY_FRAMEFORWARD", + [KEY_CONTEXT_MENU] = "KEY_CONTEXT_MENU", + [KEY_MEDIA_REPEAT] = "KEY_MEDIA_REPEAT", + [KEY_10CHANNELSUP] = "KEY_10CHANNELSUP", + [KEY_10CHANNELSDOWN] = "KEY_10CHANNELSDOWN", + [KEY_IMAGES] = "KEY_IMAGES", + // [KEY_NOTIFICATION_CENTER] = "KEY_NOTIFICATION_CENTER", + // [KEY_PICKUP_PHONE] = "KEY_PICKUP_PHONE", + // [KEY_HANGUP_PHONE] = "KEY_HANGUP_PHONE", + [KEY_DEL_EOL] = "KEY_DEL_EOL", + [KEY_DEL_EOS] = "KEY_DEL_EOS", + [KEY_INS_LINE] = "KEY_INS_LINE", + [KEY_DEL_LINE] = "KEY_DEL_LINE", + [KEY_FN] = "KEY_FN", + [KEY_FN_ESC] = "KEY_FN_ESC", + [KEY_FN_F1] = "KEY_FN_F1", + [KEY_FN_F2] = "KEY_FN_F2", + [KEY_FN_F3] = "KEY_FN_F3", + [KEY_FN_F4] = "KEY_FN_F4", + [KEY_FN_F5] = "KEY_FN_F5", + [KEY_FN_F6] = "KEY_FN_F6", + [KEY_FN_F7] = "KEY_FN_F7", + [KEY_FN_F8] = "KEY_FN_F8", + [KEY_FN_F9] = "KEY_FN_F9", + [KEY_FN_F10] = "KEY_FN_F10", + [KEY_FN_F11] = "KEY_FN_F11", + [KEY_FN_F12] = "KEY_FN_F12", + [KEY_FN_1] = "KEY_FN_1", + [KEY_FN_2] = "KEY_FN_2", + [KEY_FN_D] = "KEY_FN_D", + [KEY_FN_E] = "KEY_FN_E", + [KEY_FN_F] = "KEY_FN_F", + [KEY_FN_S] = "KEY_FN_S", + [KEY_FN_B] = "KEY_FN_B", + // [KEY_FN_RIGHT_SHIFT] = "KEY_FN_RIGHT_SHIFT", + [KEY_BRL_DOT1] = "KEY_BRL_DOT1", + [KEY_BRL_DOT2] = "KEY_BRL_DOT2", + [KEY_BRL_DOT3] = "KEY_BRL_DOT3", + [KEY_BRL_DOT4] = "KEY_BRL_DOT4", + [KEY_BRL_DOT5] = "KEY_BRL_DOT5", + [KEY_BRL_DOT6] = "KEY_BRL_DOT6", + [KEY_BRL_DOT7] = "KEY_BRL_DOT7", + [KEY_BRL_DOT8] = "KEY_BRL_DOT8", + [KEY_BRL_DOT9] = "KEY_BRL_DOT9", + [KEY_BRL_DOT10] = "KEY_BRL_DOT10", + [KEY_NUMERIC_0] = "KEY_NUMERIC_0", + [KEY_NUMERIC_1] = "KEY_NUMERIC_1", + [KEY_NUMERIC_2] = "KEY_NUMERIC_2", + [KEY_NUMERIC_3] = "KEY_NUMERIC_3", + [KEY_NUMERIC_4] = "KEY_NUMERIC_4", + [KEY_NUMERIC_5] = "KEY_NUMERIC_5", + [KEY_NUMERIC_6] = "KEY_NUMERIC_6", + [KEY_NUMERIC_7] = "KEY_NUMERIC_7", + [KEY_NUMERIC_8] = "KEY_NUMERIC_8", + [KEY_NUMERIC_9] = "KEY_NUMERIC_9", + [KEY_NUMERIC_STAR] = "KEY_NUMERIC_STAR", + [KEY_NUMERIC_POUND] = "KEY_NUMERIC_POUND", + [KEY_NUMERIC_A] = "KEY_NUMERIC_A", + [KEY_NUMERIC_B] = "KEY_NUMERIC_B", + [KEY_NUMERIC_C] = "KEY_NUMERIC_C", + [KEY_NUMERIC_D] = "KEY_NUMERIC_D", + [KEY_CAMERA_FOCUS] = "KEY_CAMERA_FOCUS", + [KEY_WPS_BUTTON] = "KEY_WPS_BUTTON", + [KEY_TOUCHPAD_TOGGLE] = "KEY_TOUCHPAD_TOGGLE", + [KEY_TOUCHPAD_ON] = "KEY_TOUCHPAD_ON", + [KEY_TOUCHPAD_OFF] = "KEY_TOUCHPAD_OFF", + [KEY_CAMERA_ZOOMIN] = "KEY_CAMERA_ZOOMIN", + [KEY_CAMERA_ZOOMOUT] = "KEY_CAMERA_ZOOMOUT", + [KEY_CAMERA_UP] = "KEY_CAMERA_UP", + [KEY_CAMERA_DOWN] = "KEY_CAMERA_DOWN", + [KEY_CAMERA_LEFT] = "KEY_CAMERA_LEFT", + [KEY_CAMERA_RIGHT] = "KEY_CAMERA_RIGHT", + [KEY_ATTENDANT_ON] = "KEY_ATTENDANT_ON", + [KEY_ATTENDANT_OFF] = "KEY_ATTENDANT_OFF", + [KEY_ATTENDANT_TOGGLE] = "KEY_ATTENDANT_TOGGLE", + [KEY_LIGHTS_TOGGLE] = "KEY_LIGHTS_TOGGLE", + [KEY_ALS_TOGGLE] = "KEY_ALS_TOGGLE", + [KEY_ROTATE_LOCK_TOGGLE] = "KEY_ROTATE_LOCK_TOGGLE", + [KEY_BUTTONCONFIG] = "KEY_BUTTONCONFIG", + [KEY_TASKMANAGER] = "KEY_TASKMANAGER", + [KEY_JOURNAL] = "KEY_JOURNAL", + [KEY_CONTROLPANEL] = "KEY_CONTROLPANEL", + [KEY_APPSELECT] = "KEY_APPSELECT", + [KEY_SCREENSAVER] = "KEY_SCREENSAVER", + [KEY_VOICECOMMAND] = "KEY_VOICECOMMAND", + [KEY_ASSISTANT] = "KEY_ASSISTANT", + [KEY_KBD_LAYOUT_NEXT] = "KEY_KBD_LAYOUT_NEXT", + // [KEY_EMOJI_PICKER] = "KEY_EMOJI_PICKER", + //[KEY_DICTATE] = "KEY_DICTATE", + //[KEY_CAMERA_ACCESS_ENABLE] = "KEY_CAMERA_ACCESS_ENABLE", + //[KEY_CAMERA_ACCESS_DISABLE] = "KEY_CAMERA_ACCESS_DISABLE", + //[KEY_CAMERA_ACCESS_TOGGLE] = "KEY_CAMERA_ACCESS_TOGGLE", + [KEY_BRIGHTNESS_MIN] = "KEY_BRIGHTNESS_MIN", + [KEY_BRIGHTNESS_MAX] = "KEY_BRIGHTNESS_MAX", + [KEY_KBDINPUTASSIST_PREV] = "KEY_KBDINPUTASSIST_PREV", + [KEY_KBDINPUTASSIST_NEXT] = "KEY_KBDINPUTASSIST_NEXT", + [KEY_KBDINPUTASSIST_PREVGROUP] = "KEY_KBDINPUTASSIST_PREVGROUP", + [KEY_KBDINPUTASSIST_NEXTGROUP] = "KEY_KBDINPUTASSIST_NEXTGROUP", + [KEY_KBDINPUTASSIST_ACCEPT] = "KEY_KBDINPUTASSIST_ACCEPT", + [KEY_KBDINPUTASSIST_CANCEL] = "KEY_KBDINPUTASSIST_CANCEL", + [KEY_RIGHT_UP] = "KEY_RIGHT_UP", + [KEY_RIGHT_DOWN] = "KEY_RIGHT_DOWN", + [KEY_LEFT_UP] = "KEY_LEFT_UP", + [KEY_LEFT_DOWN] = "KEY_LEFT_DOWN", + [KEY_ROOT_MENU] = "KEY_ROOT_MENU", + [KEY_MEDIA_TOP_MENU] = "KEY_MEDIA_TOP_MENU", + [KEY_NUMERIC_11] = "KEY_NUMERIC_11", + [KEY_NUMERIC_12] = "KEY_NUMERIC_12", + [KEY_AUDIO_DESC] = "KEY_AUDIO_DESC", + [KEY_3D_MODE] = "KEY_3D_MODE", + [KEY_NEXT_FAVORITE] = "KEY_NEXT_FAVORITE", + [KEY_STOP_RECORD] = "KEY_STOP_RECORD", + [KEY_PAUSE_RECORD] = "KEY_PAUSE_RECORD", + [KEY_VOD] = "KEY_VOD", + [KEY_UNMUTE] = "KEY_UNMUTE", + [KEY_FASTREVERSE] = "KEY_FASTREVERSE", + [KEY_SLOWREVERSE] = "KEY_SLOWREVERSE", + [KEY_DATA] = "KEY_DATA", + [KEY_ONSCREEN_KEYBOARD] = "KEY_ONSCREEN_KEYBOARD", + [KEY_PRIVACY_SCREEN_TOGGLE] = "KEY_PRIVACY_SCREEN_TOGGLE", + [KEY_SELECTIVE_SCREENSHOT] = "KEY_SELECTIVE_SCREENSHOT", + // [KEY_NEXT_ELEMENT] = "KEY_NEXT_ELEMENT", + // [KEY_PREVIOUS_ELEMENT] = "KEY_PREVIOUS_ELEMENT", + // [KEY_AUTOPILOT_ENGAGE_TOGGLE] = "KEY_AUTOPILOT_ENGAGE_TOGGLE", + // [KEY_MARK_WAYPOINT] = "KEY_MARK_WAYPOINT", + // [KEY_SOS] = "KEY_SOS", + // [KEY_NAV_CHART] = "KEY_NAV_CHART", + // [KEY_FISHING_CHART] = "KEY_FISHING_CHART", + // [KEY_SINGLE_RANGE_RADAR] = "KEY_SINGLE_RANGE_RADAR", + // [KEY_DUAL_RANGE_RADAR] = "KEY_DUAL_RANGE_RADAR", + // [KEY_RADAR_OVERLAY] = "KEY_RADAR_OVERLAY", + // [KEY_TRADITIONAL_SONAR] = "KEY_TRADITIONAL_SONAR", + // [KEY_CLEARVU_SONAR] = "KEY_CLEARVU_SONAR", + // [KEY_SIDEVU_SONAR] = "KEY_SIDEVU_SONAR", + // [KEY_NAV_INFO] = "KEY_NAV_INFO", + // [KEY_BRIGHTNESS_MENU] = "KEY_BRIGHTNESS_MENU", + [KEY_MACRO1] = "KEY_MACRO1", + [KEY_MACRO2] = "KEY_MACRO2", + [KEY_MACRO3] = "KEY_MACRO3", + [KEY_MACRO4] = "KEY_MACRO4", + [KEY_MACRO5] = "KEY_MACRO5", + [KEY_MACRO6] = "KEY_MACRO6", + [KEY_MACRO7] = "KEY_MACRO7", + [KEY_MACRO8] = "KEY_MACRO8", + [KEY_MACRO9] = "KEY_MACRO9", + [KEY_MACRO10] = "KEY_MACRO10", + [KEY_MACRO11] = "KEY_MACRO11", + [KEY_MACRO12] = "KEY_MACRO12", + [KEY_MACRO13] = "KEY_MACRO13", + [KEY_MACRO14] = "KEY_MACRO14", + [KEY_MACRO15] = "KEY_MACRO15", + [KEY_MACRO16] = "KEY_MACRO16", + [KEY_MACRO17] = "KEY_MACRO17", + [KEY_MACRO18] = "KEY_MACRO18", + [KEY_MACRO19] = "KEY_MACRO19", + [KEY_MACRO20] = "KEY_MACRO20", + [KEY_MACRO21] = "KEY_MACRO21", + [KEY_MACRO22] = "KEY_MACRO22", + [KEY_MACRO23] = "KEY_MACRO23", + [KEY_MACRO24] = "KEY_MACRO24", + [KEY_MACRO25] = "KEY_MACRO25", + [KEY_MACRO26] = "KEY_MACRO26", + [KEY_MACRO27] = "KEY_MACRO27", + [KEY_MACRO28] = "KEY_MACRO28", + [KEY_MACRO29] = "KEY_MACRO29", + [KEY_MACRO30] = "KEY_MACRO30", + [KEY_MACRO_RECORD_START] = "KEY_MACRO_RECORD_START", + [KEY_MACRO_RECORD_STOP] = "KEY_MACRO_RECORD_STOP", + [KEY_MACRO_PRESET_CYCLE] = "KEY_MACRO_PRESET_CYCLE", + [KEY_MACRO_PRESET1] = "KEY_MACRO_PRESET1", + [KEY_MACRO_PRESET2] = "KEY_MACRO_PRESET2", + [KEY_MACRO_PRESET3] = "KEY_MACRO_PRESET3", + [KEY_KBD_LCD_MENU1] = "KEY_KBD_LCD_MENU1", + [KEY_KBD_LCD_MENU2] = "KEY_KBD_LCD_MENU2", + [KEY_KBD_LCD_MENU3] = "KEY_KBD_LCD_MENU3", + [KEY_KBD_LCD_MENU4] = "KEY_KBD_LCD_MENU4", + [KEY_KBD_LCD_MENU5] = "KEY_KBD_LCD_MENU5", + [KEY_MAX] = "KEY_MAX", + [BTN_0] = "BTN_0", + [BTN_1] = "BTN_1", + [BTN_2] = "BTN_2", + [BTN_3] = "BTN_3", + [BTN_4] = "BTN_4", + [BTN_5] = "BTN_5", + [BTN_6] = "BTN_6", + [BTN_7] = "BTN_7", + [BTN_8] = "BTN_8", + [BTN_9] = "BTN_9", + [BTN_LEFT] = "BTN_LEFT", + [BTN_RIGHT] = "BTN_RIGHT", + [BTN_MIDDLE] = "BTN_MIDDLE", + [BTN_SIDE] = "BTN_SIDE", + [BTN_EXTRA] = "BTN_EXTRA", + [BTN_FORWARD] = "BTN_FORWARD", + [BTN_BACK] = "BTN_BACK", + [BTN_TASK] = "BTN_TASK", + [BTN_TRIGGER] = "BTN_TRIGGER", + [BTN_THUMB] = "BTN_THUMB", + [BTN_THUMB2] = "BTN_THUMB2", + [BTN_TOP] = "BTN_TOP", + [BTN_TOP2] = "BTN_TOP2", + [BTN_PINKIE] = "BTN_PINKIE", + [BTN_BASE] = "BTN_BASE", + [BTN_BASE2] = "BTN_BASE2", + [BTN_BASE3] = "BTN_BASE3", + [BTN_BASE4] = "BTN_BASE4", + [BTN_BASE5] = "BTN_BASE5", + [BTN_BASE6] = "BTN_BASE6", + [BTN_DEAD] = "BTN_DEAD", + [BTN_SOUTH] = "BTN_SOUTH", + [BTN_EAST] = "BTN_EAST", + [BTN_C] = "BTN_C", + [BTN_NORTH] = "BTN_NORTH", + [BTN_WEST] = "BTN_WEST", + [BTN_Z] = "BTN_Z", + [BTN_TL] = "BTN_TL", + [BTN_TR] = "BTN_TR", + [BTN_TL2] = "BTN_TL2", + [BTN_TR2] = "BTN_TR2", + [BTN_SELECT] = "BTN_SELECT", + [BTN_START] = "BTN_START", + [BTN_MODE] = "BTN_MODE", + [BTN_THUMBL] = "BTN_THUMBL", + [BTN_THUMBR] = "BTN_THUMBR", + [BTN_TOOL_PEN] = "BTN_TOOL_PEN", + [BTN_TOOL_RUBBER] = "BTN_TOOL_RUBBER", + [BTN_TOOL_BRUSH] = "BTN_TOOL_BRUSH", + [BTN_TOOL_PENCIL] = "BTN_TOOL_PENCIL", + [BTN_TOOL_AIRBRUSH] = "BTN_TOOL_AIRBRUSH", + [BTN_TOOL_FINGER] = "BTN_TOOL_FINGER", + [BTN_TOOL_MOUSE] = "BTN_TOOL_MOUSE", + [BTN_TOOL_LENS] = "BTN_TOOL_LENS", + [BTN_TOOL_QUINTTAP] = "BTN_TOOL_QUINTTAP", + [BTN_STYLUS3] = "BTN_STYLUS3", + [BTN_TOUCH] = "BTN_TOUCH", + [BTN_STYLUS] = "BTN_STYLUS", + [BTN_STYLUS2] = "BTN_STYLUS2", + [BTN_TOOL_DOUBLETAP] = "BTN_TOOL_DOUBLETAP", + [BTN_TOOL_TRIPLETAP] = "BTN_TOOL_TRIPLETAP", + [BTN_TOOL_QUADTAP] = "BTN_TOOL_QUADTAP", + [BTN_GEAR_DOWN] = "BTN_GEAR_DOWN", + [BTN_GEAR_UP] = "BTN_GEAR_UP", + [BTN_DPAD_UP] = "BTN_DPAD_UP", + [BTN_DPAD_DOWN] = "BTN_DPAD_DOWN", + [BTN_DPAD_LEFT] = "BTN_DPAD_LEFT", + [BTN_DPAD_RIGHT] = "BTN_DPAD_RIGHT", + [BTN_TRIGGER_HAPPY1] = "BTN_TRIGGER_HAPPY1", + [BTN_TRIGGER_HAPPY2] = "BTN_TRIGGER_HAPPY2", + [BTN_TRIGGER_HAPPY3] = "BTN_TRIGGER_HAPPY3", + [BTN_TRIGGER_HAPPY4] = "BTN_TRIGGER_HAPPY4", + [BTN_TRIGGER_HAPPY5] = "BTN_TRIGGER_HAPPY5", + [BTN_TRIGGER_HAPPY6] = "BTN_TRIGGER_HAPPY6", + [BTN_TRIGGER_HAPPY7] = "BTN_TRIGGER_HAPPY7", + [BTN_TRIGGER_HAPPY8] = "BTN_TRIGGER_HAPPY8", + [BTN_TRIGGER_HAPPY9] = "BTN_TRIGGER_HAPPY9", + [BTN_TRIGGER_HAPPY10] = "BTN_TRIGGER_HAPPY10", + [BTN_TRIGGER_HAPPY11] = "BTN_TRIGGER_HAPPY11", + [BTN_TRIGGER_HAPPY12] = "BTN_TRIGGER_HAPPY12", + [BTN_TRIGGER_HAPPY13] = "BTN_TRIGGER_HAPPY13", + [BTN_TRIGGER_HAPPY14] = "BTN_TRIGGER_HAPPY14", + [BTN_TRIGGER_HAPPY15] = "BTN_TRIGGER_HAPPY15", + [BTN_TRIGGER_HAPPY16] = "BTN_TRIGGER_HAPPY16", + [BTN_TRIGGER_HAPPY17] = "BTN_TRIGGER_HAPPY17", + [BTN_TRIGGER_HAPPY18] = "BTN_TRIGGER_HAPPY18", + [BTN_TRIGGER_HAPPY19] = "BTN_TRIGGER_HAPPY19", + [BTN_TRIGGER_HAPPY20] = "BTN_TRIGGER_HAPPY20", + [BTN_TRIGGER_HAPPY21] = "BTN_TRIGGER_HAPPY21", + [BTN_TRIGGER_HAPPY22] = "BTN_TRIGGER_HAPPY22", + [BTN_TRIGGER_HAPPY23] = "BTN_TRIGGER_HAPPY23", + [BTN_TRIGGER_HAPPY24] = "BTN_TRIGGER_HAPPY24", + [BTN_TRIGGER_HAPPY25] = "BTN_TRIGGER_HAPPY25", + [BTN_TRIGGER_HAPPY26] = "BTN_TRIGGER_HAPPY26", + [BTN_TRIGGER_HAPPY27] = "BTN_TRIGGER_HAPPY27", + [BTN_TRIGGER_HAPPY28] = "BTN_TRIGGER_HAPPY28", + [BTN_TRIGGER_HAPPY29] = "BTN_TRIGGER_HAPPY29", + [BTN_TRIGGER_HAPPY30] = "BTN_TRIGGER_HAPPY30", + [BTN_TRIGGER_HAPPY31] = "BTN_TRIGGER_HAPPY31", + [BTN_TRIGGER_HAPPY32] = "BTN_TRIGGER_HAPPY32", + [BTN_TRIGGER_HAPPY33] = "BTN_TRIGGER_HAPPY33", + [BTN_TRIGGER_HAPPY34] = "BTN_TRIGGER_HAPPY34", + [BTN_TRIGGER_HAPPY35] = "BTN_TRIGGER_HAPPY35", + [BTN_TRIGGER_HAPPY36] = "BTN_TRIGGER_HAPPY36", + [BTN_TRIGGER_HAPPY37] = "BTN_TRIGGER_HAPPY37", + [BTN_TRIGGER_HAPPY38] = "BTN_TRIGGER_HAPPY38", + [BTN_TRIGGER_HAPPY39] = "BTN_TRIGGER_HAPPY39", + [BTN_TRIGGER_HAPPY40] = "BTN_TRIGGER_HAPPY40", +}; + +static const char * const led_map[LED_MAX + 1] = { + [LED_NUML] = "LED_NUML", + [LED_CAPSL] = "LED_CAPSL", + [LED_SCROLLL] = "LED_SCROLLL", + [LED_COMPOSE] = "LED_COMPOSE", + [LED_KANA] = "LED_KANA", + [LED_SLEEP] = "LED_SLEEP", + [LED_SUSPEND] = "LED_SUSPEND", + [LED_MUTE] = "LED_MUTE", + [LED_MISC] = "LED_MISC", + [LED_MAIL] = "LED_MAIL", + [LED_CHARGING] = "LED_CHARGING", + [LED_MAX] = "LED_MAX", +}; + +static const char * const snd_map[SND_MAX + 1] = { + [SND_CLICK] = "SND_CLICK", + [SND_BELL] = "SND_BELL", + [SND_TONE] = "SND_TONE", + [SND_MAX] = "SND_MAX", +}; + +static const char * const msc_map[MSC_MAX + 1] = { + [MSC_SERIAL] = "MSC_SERIAL", + [MSC_PULSELED] = "MSC_PULSELED", + [MSC_GESTURE] = "MSC_GESTURE", + [MSC_RAW] = "MSC_RAW", + [MSC_SCAN] = "MSC_SCAN", + [MSC_TIMESTAMP] = "MSC_TIMESTAMP", + [MSC_MAX] = "MSC_MAX", +}; + +static const char * const sw_map[SW_MAX + 1] = { + [SW_LID] = "SW_LID", + [SW_TABLET_MODE] = "SW_TABLET_MODE", + [SW_HEADPHONE_INSERT] = "SW_HEADPHONE_INSERT", + [SW_RFKILL_ALL] = "SW_RFKILL_ALL", + [SW_MICROPHONE_INSERT] = "SW_MICROPHONE_INSERT", + [SW_DOCK] = "SW_DOCK", + [SW_LINEOUT_INSERT] = "SW_LINEOUT_INSERT", + [SW_JACK_PHYSICAL_INSERT] = "SW_JACK_PHYSICAL_INSERT", + [SW_VIDEOOUT_INSERT] = "SW_VIDEOOUT_INSERT", + [SW_CAMERA_LENS_COVER] = "SW_CAMERA_LENS_COVER", + [SW_KEYPAD_SLIDE] = "SW_KEYPAD_SLIDE", + [SW_FRONT_PROXIMITY] = "SW_FRONT_PROXIMITY", + [SW_ROTATE_LOCK] = "SW_ROTATE_LOCK", + [SW_LINEIN_INSERT] = "SW_LINEIN_INSERT", + [SW_MUTE_DEVICE] = "SW_MUTE_DEVICE", + [SW_PEN_INSERTED] = "SW_PEN_INSERTED", + [SW_MACHINE_COVER] = "SW_MACHINE_COVER", +}; + +static const char * const ff_map[FF_MAX + 1] = { + [FF_STATUS_STOPPED] = "FF_STATUS_STOPPED", + [FF_STATUS_MAX] = "FF_STATUS_MAX", + [FF_RUMBLE] = "FF_RUMBLE", + [FF_PERIODIC] = "FF_PERIODIC", + [FF_CONSTANT] = "FF_CONSTANT", + [FF_SPRING] = "FF_SPRING", + [FF_FRICTION] = "FF_FRICTION", + [FF_DAMPER] = "FF_DAMPER", + [FF_INERTIA] = "FF_INERTIA", + [FF_RAMP] = "FF_RAMP", + [FF_SQUARE] = "FF_SQUARE", + [FF_TRIANGLE] = "FF_TRIANGLE", + [FF_SINE] = "FF_SINE", + [FF_SAW_UP] = "FF_SAW_UP", + [FF_SAW_DOWN] = "FF_SAW_DOWN", + [FF_CUSTOM] = "FF_CUSTOM", + [FF_GAIN] = "FF_GAIN", + [FF_AUTOCENTER] = "FF_AUTOCENTER", + [FF_MAX] = "FF_MAX", +}; + +static const char * const syn_map[SYN_MAX + 1] = { + [SYN_REPORT] = "SYN_REPORT", + [SYN_CONFIG] = "SYN_CONFIG", + [SYN_MT_REPORT] = "SYN_MT_REPORT", + [SYN_DROPPED] = "SYN_DROPPED", + [SYN_MAX] = "SYN_MAX", +}; + +static const char * const rep_map[REP_MAX + 1] = { + [REP_DELAY] = "REP_DELAY", + [REP_PERIOD] = "REP_PERIOD", +}; + +static const char * const input_prop_map[INPUT_PROP_MAX + 1] = { + [INPUT_PROP_POINTER] = "INPUT_PROP_POINTER", + [INPUT_PROP_DIRECT] = "INPUT_PROP_DIRECT", + [INPUT_PROP_BUTTONPAD] = "INPUT_PROP_BUTTONPAD", + [INPUT_PROP_SEMI_MT] = "INPUT_PROP_SEMI_MT", + [INPUT_PROP_TOPBUTTONPAD] = "INPUT_PROP_TOPBUTTONPAD", + [INPUT_PROP_POINTING_STICK] = "INPUT_PROP_POINTING_STICK", + [INPUT_PROP_ACCELEROMETER] = "INPUT_PROP_ACCELEROMETER", + [INPUT_PROP_MAX] = "INPUT_PROP_MAX", +}; + +static const char * const mt_tool_map[MT_TOOL_MAX + 1] = { + [MT_TOOL_FINGER] = "MT_TOOL_FINGER", + [MT_TOOL_PEN] = "MT_TOOL_PEN", + [MT_TOOL_PALM] = "MT_TOOL_PALM", + [MT_TOOL_DIAL] = "MT_TOOL_DIAL", + [MT_TOOL_MAX] = "MT_TOOL_MAX", +}; + +static const char * const * const event_type_map[EV_MAX + 1] = { + [EV_REL] = rel_map, + [EV_ABS] = abs_map, + [EV_KEY] = key_map, + [EV_LED] = led_map, + [EV_SND] = snd_map, + [EV_MSC] = msc_map, + [EV_SW] = sw_map, + [EV_FF] = ff_map, + [EV_SYN] = syn_map, + [EV_REP] = rep_map, +}; + +#if __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Winitializer-overrides" +#elif __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Woverride-init" +#endif +static const int ev_max[EV_MAX + 1] = { + SYN_MAX, + KEY_MAX, + REL_MAX, + ABS_MAX, + MSC_MAX, + SW_MAX, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + LED_MAX, + SND_MAX, + -1, + REP_MAX, + FF_MAX, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, +}; +#if __clang__ +#pragma clang diagnostic pop /* "-Winitializer-overrides" */ +#elif __GNUC__ +#pragma GCC diagnostic pop /* "-Woverride-init" */ +#endif + +struct name_entry { + const char *name; + unsigned int value; +}; + +static const struct name_entry tool_type_names[] = { + { .name = "MT_TOOL_DIAL", .value = MT_TOOL_DIAL }, + { .name = "MT_TOOL_FINGER", .value = MT_TOOL_FINGER }, + { .name = "MT_TOOL_MAX", .value = MT_TOOL_MAX }, + { .name = "MT_TOOL_PALM", .value = MT_TOOL_PALM }, + { .name = "MT_TOOL_PEN", .value = MT_TOOL_PEN }, +}; + +static const struct name_entry ev_names[] = { + { .name = "EV_ABS", .value = EV_ABS }, + { .name = "EV_FF", .value = EV_FF }, + { .name = "EV_FF_STATUS", .value = EV_FF_STATUS }, + { .name = "EV_KEY", .value = EV_KEY }, + { .name = "EV_LED", .value = EV_LED }, + { .name = "EV_MAX", .value = EV_MAX }, + { .name = "EV_MSC", .value = EV_MSC }, + { .name = "EV_PWR", .value = EV_PWR }, + { .name = "EV_REL", .value = EV_REL }, + { .name = "EV_REP", .value = EV_REP }, + { .name = "EV_SND", .value = EV_SND }, + { .name = "EV_SW", .value = EV_SW }, + { .name = "EV_SYN", .value = EV_SYN }, +}; + +static const struct name_entry code_names[] = { + { .name = "ABS_BRAKE", .value = ABS_BRAKE }, + { .name = "ABS_DISTANCE", .value = ABS_DISTANCE }, + { .name = "ABS_GAS", .value = ABS_GAS }, + { .name = "ABS_HAT0X", .value = ABS_HAT0X }, + { .name = "ABS_HAT0Y", .value = ABS_HAT0Y }, + { .name = "ABS_HAT1X", .value = ABS_HAT1X }, + { .name = "ABS_HAT1Y", .value = ABS_HAT1Y }, + { .name = "ABS_HAT2X", .value = ABS_HAT2X }, + { .name = "ABS_HAT2Y", .value = ABS_HAT2Y }, + { .name = "ABS_HAT3X", .value = ABS_HAT3X }, + { .name = "ABS_HAT3Y", .value = ABS_HAT3Y }, + { .name = "ABS_MAX", .value = ABS_MAX }, + { .name = "ABS_MISC", .value = ABS_MISC }, + { .name = "ABS_MT_BLOB_ID", .value = ABS_MT_BLOB_ID }, + { .name = "ABS_MT_DISTANCE", .value = ABS_MT_DISTANCE }, + { .name = "ABS_MT_ORIENTATION", .value = ABS_MT_ORIENTATION }, + { .name = "ABS_MT_POSITION_X", .value = ABS_MT_POSITION_X }, + { .name = "ABS_MT_POSITION_Y", .value = ABS_MT_POSITION_Y }, + { .name = "ABS_MT_PRESSURE", .value = ABS_MT_PRESSURE }, + { .name = "ABS_MT_SLOT", .value = ABS_MT_SLOT }, + { .name = "ABS_MT_TOOL_TYPE", .value = ABS_MT_TOOL_TYPE }, + { .name = "ABS_MT_TOOL_X", .value = ABS_MT_TOOL_X }, + { .name = "ABS_MT_TOOL_Y", .value = ABS_MT_TOOL_Y }, + { .name = "ABS_MT_TOUCH_MAJOR", .value = ABS_MT_TOUCH_MAJOR }, + { .name = "ABS_MT_TOUCH_MINOR", .value = ABS_MT_TOUCH_MINOR }, + { .name = "ABS_MT_TRACKING_ID", .value = ABS_MT_TRACKING_ID }, + { .name = "ABS_MT_WIDTH_MAJOR", .value = ABS_MT_WIDTH_MAJOR }, + { .name = "ABS_MT_WIDTH_MINOR", .value = ABS_MT_WIDTH_MINOR }, + { .name = "ABS_PRESSURE", .value = ABS_PRESSURE }, + // { .name = "ABS_PROFILE", .value = ABS_PROFILE }, + { .name = "ABS_RESERVED", .value = ABS_RESERVED }, + { .name = "ABS_RUDDER", .value = ABS_RUDDER }, + { .name = "ABS_RX", .value = ABS_RX }, + { .name = "ABS_RY", .value = ABS_RY }, + { .name = "ABS_RZ", .value = ABS_RZ }, + { .name = "ABS_THROTTLE", .value = ABS_THROTTLE }, + { .name = "ABS_TILT_X", .value = ABS_TILT_X }, + { .name = "ABS_TILT_Y", .value = ABS_TILT_Y }, + { .name = "ABS_TOOL_WIDTH", .value = ABS_TOOL_WIDTH }, + { .name = "ABS_VOLUME", .value = ABS_VOLUME }, + { .name = "ABS_WHEEL", .value = ABS_WHEEL }, + { .name = "ABS_X", .value = ABS_X }, + { .name = "ABS_Y", .value = ABS_Y }, + { .name = "ABS_Z", .value = ABS_Z }, + { .name = "BTN_0", .value = BTN_0 }, + { .name = "BTN_1", .value = BTN_1 }, + { .name = "BTN_2", .value = BTN_2 }, + { .name = "BTN_3", .value = BTN_3 }, + { .name = "BTN_4", .value = BTN_4 }, + { .name = "BTN_5", .value = BTN_5 }, + { .name = "BTN_6", .value = BTN_6 }, + { .name = "BTN_7", .value = BTN_7 }, + { .name = "BTN_8", .value = BTN_8 }, + { .name = "BTN_9", .value = BTN_9 }, + { .name = "BTN_A", .value = BTN_A }, + { .name = "BTN_B", .value = BTN_B }, + { .name = "BTN_BACK", .value = BTN_BACK }, + { .name = "BTN_BASE", .value = BTN_BASE }, + { .name = "BTN_BASE2", .value = BTN_BASE2 }, + { .name = "BTN_BASE3", .value = BTN_BASE3 }, + { .name = "BTN_BASE4", .value = BTN_BASE4 }, + { .name = "BTN_BASE5", .value = BTN_BASE5 }, + { .name = "BTN_BASE6", .value = BTN_BASE6 }, + { .name = "BTN_C", .value = BTN_C }, + { .name = "BTN_DEAD", .value = BTN_DEAD }, + { .name = "BTN_DPAD_DOWN", .value = BTN_DPAD_DOWN }, + { .name = "BTN_DPAD_LEFT", .value = BTN_DPAD_LEFT }, + { .name = "BTN_DPAD_RIGHT", .value = BTN_DPAD_RIGHT }, + { .name = "BTN_DPAD_UP", .value = BTN_DPAD_UP }, + { .name = "BTN_EAST", .value = BTN_EAST }, + { .name = "BTN_EXTRA", .value = BTN_EXTRA }, + { .name = "BTN_FORWARD", .value = BTN_FORWARD }, + { .name = "BTN_GEAR_DOWN", .value = BTN_GEAR_DOWN }, + { .name = "BTN_GEAR_UP", .value = BTN_GEAR_UP }, + { .name = "BTN_LEFT", .value = BTN_LEFT }, + { .name = "BTN_MIDDLE", .value = BTN_MIDDLE }, + { .name = "BTN_MODE", .value = BTN_MODE }, + { .name = "BTN_NORTH", .value = BTN_NORTH }, + { .name = "BTN_PINKIE", .value = BTN_PINKIE }, + { .name = "BTN_RIGHT", .value = BTN_RIGHT }, + { .name = "BTN_SELECT", .value = BTN_SELECT }, + { .name = "BTN_SIDE", .value = BTN_SIDE }, + { .name = "BTN_SOUTH", .value = BTN_SOUTH }, + { .name = "BTN_START", .value = BTN_START }, + { .name = "BTN_STYLUS", .value = BTN_STYLUS }, + { .name = "BTN_STYLUS2", .value = BTN_STYLUS2 }, + { .name = "BTN_STYLUS3", .value = BTN_STYLUS3 }, + { .name = "BTN_TASK", .value = BTN_TASK }, + { .name = "BTN_THUMB", .value = BTN_THUMB }, + { .name = "BTN_THUMB2", .value = BTN_THUMB2 }, + { .name = "BTN_THUMBL", .value = BTN_THUMBL }, + { .name = "BTN_THUMBR", .value = BTN_THUMBR }, + { .name = "BTN_TL", .value = BTN_TL }, + { .name = "BTN_TL2", .value = BTN_TL2 }, + { .name = "BTN_TOOL_AIRBRUSH", .value = BTN_TOOL_AIRBRUSH }, + { .name = "BTN_TOOL_BRUSH", .value = BTN_TOOL_BRUSH }, + { .name = "BTN_TOOL_DOUBLETAP", .value = BTN_TOOL_DOUBLETAP }, + { .name = "BTN_TOOL_FINGER", .value = BTN_TOOL_FINGER }, + { .name = "BTN_TOOL_LENS", .value = BTN_TOOL_LENS }, + { .name = "BTN_TOOL_MOUSE", .value = BTN_TOOL_MOUSE }, + { .name = "BTN_TOOL_PEN", .value = BTN_TOOL_PEN }, + { .name = "BTN_TOOL_PENCIL", .value = BTN_TOOL_PENCIL }, + { .name = "BTN_TOOL_QUADTAP", .value = BTN_TOOL_QUADTAP }, + { .name = "BTN_TOOL_QUINTTAP", .value = BTN_TOOL_QUINTTAP }, + { .name = "BTN_TOOL_RUBBER", .value = BTN_TOOL_RUBBER }, + { .name = "BTN_TOOL_TRIPLETAP", .value = BTN_TOOL_TRIPLETAP }, + { .name = "BTN_TOP", .value = BTN_TOP }, + { .name = "BTN_TOP2", .value = BTN_TOP2 }, + { .name = "BTN_TOUCH", .value = BTN_TOUCH }, + { .name = "BTN_TR", .value = BTN_TR }, + { .name = "BTN_TR2", .value = BTN_TR2 }, + { .name = "BTN_TRIGGER", .value = BTN_TRIGGER }, + { .name = "BTN_TRIGGER_HAPPY1", .value = BTN_TRIGGER_HAPPY1 }, + { .name = "BTN_TRIGGER_HAPPY10", .value = BTN_TRIGGER_HAPPY10 }, + { .name = "BTN_TRIGGER_HAPPY11", .value = BTN_TRIGGER_HAPPY11 }, + { .name = "BTN_TRIGGER_HAPPY12", .value = BTN_TRIGGER_HAPPY12 }, + { .name = "BTN_TRIGGER_HAPPY13", .value = BTN_TRIGGER_HAPPY13 }, + { .name = "BTN_TRIGGER_HAPPY14", .value = BTN_TRIGGER_HAPPY14 }, + { .name = "BTN_TRIGGER_HAPPY15", .value = BTN_TRIGGER_HAPPY15 }, + { .name = "BTN_TRIGGER_HAPPY16", .value = BTN_TRIGGER_HAPPY16 }, + { .name = "BTN_TRIGGER_HAPPY17", .value = BTN_TRIGGER_HAPPY17 }, + { .name = "BTN_TRIGGER_HAPPY18", .value = BTN_TRIGGER_HAPPY18 }, + { .name = "BTN_TRIGGER_HAPPY19", .value = BTN_TRIGGER_HAPPY19 }, + { .name = "BTN_TRIGGER_HAPPY2", .value = BTN_TRIGGER_HAPPY2 }, + { .name = "BTN_TRIGGER_HAPPY20", .value = BTN_TRIGGER_HAPPY20 }, + { .name = "BTN_TRIGGER_HAPPY21", .value = BTN_TRIGGER_HAPPY21 }, + { .name = "BTN_TRIGGER_HAPPY22", .value = BTN_TRIGGER_HAPPY22 }, + { .name = "BTN_TRIGGER_HAPPY23", .value = BTN_TRIGGER_HAPPY23 }, + { .name = "BTN_TRIGGER_HAPPY24", .value = BTN_TRIGGER_HAPPY24 }, + { .name = "BTN_TRIGGER_HAPPY25", .value = BTN_TRIGGER_HAPPY25 }, + { .name = "BTN_TRIGGER_HAPPY26", .value = BTN_TRIGGER_HAPPY26 }, + { .name = "BTN_TRIGGER_HAPPY27", .value = BTN_TRIGGER_HAPPY27 }, + { .name = "BTN_TRIGGER_HAPPY28", .value = BTN_TRIGGER_HAPPY28 }, + { .name = "BTN_TRIGGER_HAPPY29", .value = BTN_TRIGGER_HAPPY29 }, + { .name = "BTN_TRIGGER_HAPPY3", .value = BTN_TRIGGER_HAPPY3 }, + { .name = "BTN_TRIGGER_HAPPY30", .value = BTN_TRIGGER_HAPPY30 }, + { .name = "BTN_TRIGGER_HAPPY31", .value = BTN_TRIGGER_HAPPY31 }, + { .name = "BTN_TRIGGER_HAPPY32", .value = BTN_TRIGGER_HAPPY32 }, + { .name = "BTN_TRIGGER_HAPPY33", .value = BTN_TRIGGER_HAPPY33 }, + { .name = "BTN_TRIGGER_HAPPY34", .value = BTN_TRIGGER_HAPPY34 }, + { .name = "BTN_TRIGGER_HAPPY35", .value = BTN_TRIGGER_HAPPY35 }, + { .name = "BTN_TRIGGER_HAPPY36", .value = BTN_TRIGGER_HAPPY36 }, + { .name = "BTN_TRIGGER_HAPPY37", .value = BTN_TRIGGER_HAPPY37 }, + { .name = "BTN_TRIGGER_HAPPY38", .value = BTN_TRIGGER_HAPPY38 }, + { .name = "BTN_TRIGGER_HAPPY39", .value = BTN_TRIGGER_HAPPY39 }, + { .name = "BTN_TRIGGER_HAPPY4", .value = BTN_TRIGGER_HAPPY4 }, + { .name = "BTN_TRIGGER_HAPPY40", .value = BTN_TRIGGER_HAPPY40 }, + { .name = "BTN_TRIGGER_HAPPY5", .value = BTN_TRIGGER_HAPPY5 }, + { .name = "BTN_TRIGGER_HAPPY6", .value = BTN_TRIGGER_HAPPY6 }, + { .name = "BTN_TRIGGER_HAPPY7", .value = BTN_TRIGGER_HAPPY7 }, + { .name = "BTN_TRIGGER_HAPPY8", .value = BTN_TRIGGER_HAPPY8 }, + { .name = "BTN_TRIGGER_HAPPY9", .value = BTN_TRIGGER_HAPPY9 }, + { .name = "BTN_WEST", .value = BTN_WEST }, + { .name = "BTN_X", .value = BTN_X }, + { .name = "BTN_Y", .value = BTN_Y }, + { .name = "BTN_Z", .value = BTN_Z }, + { .name = "FF_AUTOCENTER", .value = FF_AUTOCENTER }, + { .name = "FF_CONSTANT", .value = FF_CONSTANT }, + { .name = "FF_CUSTOM", .value = FF_CUSTOM }, + { .name = "FF_DAMPER", .value = FF_DAMPER }, + { .name = "FF_FRICTION", .value = FF_FRICTION }, + { .name = "FF_GAIN", .value = FF_GAIN }, + { .name = "FF_INERTIA", .value = FF_INERTIA }, + { .name = "FF_MAX", .value = FF_MAX }, + { .name = "FF_PERIODIC", .value = FF_PERIODIC }, + { .name = "FF_RAMP", .value = FF_RAMP }, + { .name = "FF_RUMBLE", .value = FF_RUMBLE }, + { .name = "FF_SAW_DOWN", .value = FF_SAW_DOWN }, + { .name = "FF_SAW_UP", .value = FF_SAW_UP }, + { .name = "FF_SINE", .value = FF_SINE }, + { .name = "FF_SPRING", .value = FF_SPRING }, + { .name = "FF_SQUARE", .value = FF_SQUARE }, + { .name = "FF_STATUS_MAX", .value = FF_STATUS_MAX }, + { .name = "FF_STATUS_STOPPED", .value = FF_STATUS_STOPPED }, + { .name = "FF_TRIANGLE", .value = FF_TRIANGLE }, + { .name = "KEY_0", .value = KEY_0 }, + { .name = "KEY_1", .value = KEY_1 }, + { .name = "KEY_102ND", .value = KEY_102ND }, + { .name = "KEY_10CHANNELSDOWN", .value = KEY_10CHANNELSDOWN }, + { .name = "KEY_10CHANNELSUP", .value = KEY_10CHANNELSUP }, + { .name = "KEY_2", .value = KEY_2 }, + { .name = "KEY_3", .value = KEY_3 }, + { .name = "KEY_3D_MODE", .value = KEY_3D_MODE }, + { .name = "KEY_4", .value = KEY_4 }, + { .name = "KEY_5", .value = KEY_5 }, + { .name = "KEY_6", .value = KEY_6 }, + { .name = "KEY_7", .value = KEY_7 }, + { .name = "KEY_8", .value = KEY_8 }, + { .name = "KEY_9", .value = KEY_9 }, + { .name = "KEY_A", .value = KEY_A }, + { .name = "KEY_AB", .value = KEY_AB }, + { .name = "KEY_ADDRESSBOOK", .value = KEY_ADDRESSBOOK }, + { .name = "KEY_AGAIN", .value = KEY_AGAIN }, + // { .name = "KEY_ALL_APPLICATIONS", .value = KEY_ALL_APPLICATIONS }, + { .name = "KEY_ALS_TOGGLE", .value = KEY_ALS_TOGGLE }, + { .name = "KEY_ALTERASE", .value = KEY_ALTERASE }, + { .name = "KEY_ANGLE", .value = KEY_ANGLE }, + { .name = "KEY_APOSTROPHE", .value = KEY_APOSTROPHE }, + { .name = "KEY_APPSELECT", .value = KEY_APPSELECT }, + { .name = "KEY_ARCHIVE", .value = KEY_ARCHIVE }, + { .name = "KEY_ASPECT_RATIO", .value = KEY_ASPECT_RATIO }, + { .name = "KEY_ASSISTANT", .value = KEY_ASSISTANT }, + { .name = "KEY_ATTENDANT_OFF", .value = KEY_ATTENDANT_OFF }, + { .name = "KEY_ATTENDANT_ON", .value = KEY_ATTENDANT_ON }, + { .name = "KEY_ATTENDANT_TOGGLE", .value = KEY_ATTENDANT_TOGGLE }, + { .name = "KEY_AUDIO", .value = KEY_AUDIO }, + { .name = "KEY_AUDIO_DESC", .value = KEY_AUDIO_DESC }, + // { .name = "KEY_AUTOPILOT_ENGAGE_TOGGLE", .value = KEY_AUTOPILOT_ENGAGE_TOGGLE }, + { .name = "KEY_AUX", .value = KEY_AUX }, + { .name = "KEY_B", .value = KEY_B }, + { .name = "KEY_BACK", .value = KEY_BACK }, + { .name = "KEY_BACKSLASH", .value = KEY_BACKSLASH }, + { .name = "KEY_BACKSPACE", .value = KEY_BACKSPACE }, + { .name = "KEY_BASSBOOST", .value = KEY_BASSBOOST }, + { .name = "KEY_BATTERY", .value = KEY_BATTERY }, + { .name = "KEY_BLUE", .value = KEY_BLUE }, + { .name = "KEY_BLUETOOTH", .value = KEY_BLUETOOTH }, + { .name = "KEY_BOOKMARKS", .value = KEY_BOOKMARKS }, + { .name = "KEY_BREAK", .value = KEY_BREAK }, + { .name = "KEY_BRIGHTNESSDOWN", .value = KEY_BRIGHTNESSDOWN }, + { .name = "KEY_BRIGHTNESSUP", .value = KEY_BRIGHTNESSUP }, + { .name = "KEY_BRIGHTNESS_AUTO", .value = KEY_BRIGHTNESS_AUTO }, + { .name = "KEY_BRIGHTNESS_CYCLE", .value = KEY_BRIGHTNESS_CYCLE }, + { .name = "KEY_BRIGHTNESS_MAX", .value = KEY_BRIGHTNESS_MAX }, + // { .name = "KEY_BRIGHTNESS_MENU", .value = KEY_BRIGHTNESS_MENU }, + { .name = "KEY_BRIGHTNESS_MIN", .value = KEY_BRIGHTNESS_MIN }, + { .name = "KEY_BRL_DOT1", .value = KEY_BRL_DOT1 }, + { .name = "KEY_BRL_DOT10", .value = KEY_BRL_DOT10 }, + { .name = "KEY_BRL_DOT2", .value = KEY_BRL_DOT2 }, + { .name = "KEY_BRL_DOT3", .value = KEY_BRL_DOT3 }, + { .name = "KEY_BRL_DOT4", .value = KEY_BRL_DOT4 }, + { .name = "KEY_BRL_DOT5", .value = KEY_BRL_DOT5 }, + { .name = "KEY_BRL_DOT6", .value = KEY_BRL_DOT6 }, + { .name = "KEY_BRL_DOT7", .value = KEY_BRL_DOT7 }, + { .name = "KEY_BRL_DOT8", .value = KEY_BRL_DOT8 }, + { .name = "KEY_BRL_DOT9", .value = KEY_BRL_DOT9 }, + { .name = "KEY_BUTTONCONFIG", .value = KEY_BUTTONCONFIG }, + { .name = "KEY_C", .value = KEY_C }, + { .name = "KEY_CALC", .value = KEY_CALC }, + { .name = "KEY_CALENDAR", .value = KEY_CALENDAR }, + { .name = "KEY_CAMERA", .value = KEY_CAMERA }, + // { .name = "KEY_CAMERA_ACCESS_DISABLE", .value = KEY_CAMERA_ACCESS_DISABLE }, + // { .name = "KEY_CAMERA_ACCESS_ENABLE", .value = KEY_CAMERA_ACCESS_ENABLE }, + // { .name = "KEY_CAMERA_ACCESS_TOGGLE", .value = KEY_CAMERA_ACCESS_TOGGLE }, + { .name = "KEY_CAMERA_DOWN", .value = KEY_CAMERA_DOWN }, + { .name = "KEY_CAMERA_FOCUS", .value = KEY_CAMERA_FOCUS }, + { .name = "KEY_CAMERA_LEFT", .value = KEY_CAMERA_LEFT }, + { .name = "KEY_CAMERA_RIGHT", .value = KEY_CAMERA_RIGHT }, + { .name = "KEY_CAMERA_UP", .value = KEY_CAMERA_UP }, + { .name = "KEY_CAMERA_ZOOMIN", .value = KEY_CAMERA_ZOOMIN }, + { .name = "KEY_CAMERA_ZOOMOUT", .value = KEY_CAMERA_ZOOMOUT }, + { .name = "KEY_CANCEL", .value = KEY_CANCEL }, + { .name = "KEY_CAPSLOCK", .value = KEY_CAPSLOCK }, + { .name = "KEY_CD", .value = KEY_CD }, + { .name = "KEY_CHANNEL", .value = KEY_CHANNEL }, + { .name = "KEY_CHANNELDOWN", .value = KEY_CHANNELDOWN }, + { .name = "KEY_CHANNELUP", .value = KEY_CHANNELUP }, + { .name = "KEY_CHAT", .value = KEY_CHAT }, + { .name = "KEY_CLEAR", .value = KEY_CLEAR }, + // { .name = "KEY_CLEARVU_SONAR", .value = KEY_CLEARVU_SONAR }, + { .name = "KEY_CLOSE", .value = KEY_CLOSE }, + { .name = "KEY_CLOSECD", .value = KEY_CLOSECD }, + { .name = "KEY_COFFEE", .value = KEY_COFFEE }, + { .name = "KEY_COMMA", .value = KEY_COMMA }, + { .name = "KEY_COMPOSE", .value = KEY_COMPOSE }, + { .name = "KEY_COMPUTER", .value = KEY_COMPUTER }, + { .name = "KEY_CONFIG", .value = KEY_CONFIG }, + { .name = "KEY_CONNECT", .value = KEY_CONNECT }, + { .name = "KEY_CONTEXT_MENU", .value = KEY_CONTEXT_MENU }, + { .name = "KEY_CONTROLPANEL", .value = KEY_CONTROLPANEL }, + { .name = "KEY_COPY", .value = KEY_COPY }, + { .name = "KEY_CUT", .value = KEY_CUT }, + { .name = "KEY_CYCLEWINDOWS", .value = KEY_CYCLEWINDOWS }, + { .name = "KEY_D", .value = KEY_D }, + { .name = "KEY_DATA", .value = KEY_DATA }, + { .name = "KEY_DATABASE", .value = KEY_DATABASE }, + { .name = "KEY_DELETE", .value = KEY_DELETE }, + { .name = "KEY_DELETEFILE", .value = KEY_DELETEFILE }, + { .name = "KEY_DEL_EOL", .value = KEY_DEL_EOL }, + { .name = "KEY_DEL_EOS", .value = KEY_DEL_EOS }, + { .name = "KEY_DEL_LINE", .value = KEY_DEL_LINE }, + // { .name = "KEY_DICTATE", .value = KEY_DICTATE }, + { .name = "KEY_DIGITS", .value = KEY_DIGITS }, + { .name = "KEY_DIRECTORY", .value = KEY_DIRECTORY }, + { .name = "KEY_DISPLAYTOGGLE", .value = KEY_DISPLAYTOGGLE }, + { .name = "KEY_DISPLAY_OFF", .value = KEY_DISPLAY_OFF }, + { .name = "KEY_DOCUMENTS", .value = KEY_DOCUMENTS }, + { .name = "KEY_DOLLAR", .value = KEY_DOLLAR }, + { .name = "KEY_DOT", .value = KEY_DOT }, + { .name = "KEY_DOWN", .value = KEY_DOWN }, + // { .name = "KEY_DUAL_RANGE_RADAR", .value = KEY_DUAL_RANGE_RADAR }, + { .name = "KEY_DVD", .value = KEY_DVD }, + { .name = "KEY_E", .value = KEY_E }, + { .name = "KEY_EDIT", .value = KEY_EDIT }, + { .name = "KEY_EDITOR", .value = KEY_EDITOR }, + { .name = "KEY_EJECTCD", .value = KEY_EJECTCD }, + { .name = "KEY_EJECTCLOSECD", .value = KEY_EJECTCLOSECD }, + { .name = "KEY_EMAIL", .value = KEY_EMAIL }, + // { .name = "KEY_EMOJI_PICKER", .value = KEY_EMOJI_PICKER }, + { .name = "KEY_END", .value = KEY_END }, + { .name = "KEY_ENTER", .value = KEY_ENTER }, + { .name = "KEY_EPG", .value = KEY_EPG }, + { .name = "KEY_EQUAL", .value = KEY_EQUAL }, + { .name = "KEY_ESC", .value = KEY_ESC }, + { .name = "KEY_EURO", .value = KEY_EURO }, + { .name = "KEY_EXIT", .value = KEY_EXIT }, + { .name = "KEY_F", .value = KEY_F }, + { .name = "KEY_F1", .value = KEY_F1 }, + { .name = "KEY_F10", .value = KEY_F10 }, + { .name = "KEY_F11", .value = KEY_F11 }, + { .name = "KEY_F12", .value = KEY_F12 }, + { .name = "KEY_F13", .value = KEY_F13 }, + { .name = "KEY_F14", .value = KEY_F14 }, + { .name = "KEY_F15", .value = KEY_F15 }, + { .name = "KEY_F16", .value = KEY_F16 }, + { .name = "KEY_F17", .value = KEY_F17 }, + { .name = "KEY_F18", .value = KEY_F18 }, + { .name = "KEY_F19", .value = KEY_F19 }, + { .name = "KEY_F2", .value = KEY_F2 }, + { .name = "KEY_F20", .value = KEY_F20 }, + { .name = "KEY_F21", .value = KEY_F21 }, + { .name = "KEY_F22", .value = KEY_F22 }, + { .name = "KEY_F23", .value = KEY_F23 }, + { .name = "KEY_F24", .value = KEY_F24 }, + { .name = "KEY_F3", .value = KEY_F3 }, + { .name = "KEY_F4", .value = KEY_F4 }, + { .name = "KEY_F5", .value = KEY_F5 }, + { .name = "KEY_F6", .value = KEY_F6 }, + { .name = "KEY_F7", .value = KEY_F7 }, + { .name = "KEY_F8", .value = KEY_F8 }, + { .name = "KEY_F9", .value = KEY_F9 }, + { .name = "KEY_FASTFORWARD", .value = KEY_FASTFORWARD }, + { .name = "KEY_FASTREVERSE", .value = KEY_FASTREVERSE }, + { .name = "KEY_FAVORITES", .value = KEY_FAVORITES }, + { .name = "KEY_FILE", .value = KEY_FILE }, + { .name = "KEY_FINANCE", .value = KEY_FINANCE }, + { .name = "KEY_FIND", .value = KEY_FIND }, + { .name = "KEY_FIRST", .value = KEY_FIRST }, + // { .name = "KEY_FISHING_CHART", .value = KEY_FISHING_CHART }, + { .name = "KEY_FN", .value = KEY_FN }, + { .name = "KEY_FN_1", .value = KEY_FN_1 }, + { .name = "KEY_FN_2", .value = KEY_FN_2 }, + { .name = "KEY_FN_B", .value = KEY_FN_B }, + { .name = "KEY_FN_D", .value = KEY_FN_D }, + { .name = "KEY_FN_E", .value = KEY_FN_E }, + { .name = "KEY_FN_ESC", .value = KEY_FN_ESC }, + { .name = "KEY_FN_F", .value = KEY_FN_F }, + { .name = "KEY_FN_F1", .value = KEY_FN_F1 }, + { .name = "KEY_FN_F10", .value = KEY_FN_F10 }, + { .name = "KEY_FN_F11", .value = KEY_FN_F11 }, + { .name = "KEY_FN_F12", .value = KEY_FN_F12 }, + { .name = "KEY_FN_F2", .value = KEY_FN_F2 }, + { .name = "KEY_FN_F3", .value = KEY_FN_F3 }, + { .name = "KEY_FN_F4", .value = KEY_FN_F4 }, + { .name = "KEY_FN_F5", .value = KEY_FN_F5 }, + { .name = "KEY_FN_F6", .value = KEY_FN_F6 }, + { .name = "KEY_FN_F7", .value = KEY_FN_F7 }, + { .name = "KEY_FN_F8", .value = KEY_FN_F8 }, + { .name = "KEY_FN_F9", .value = KEY_FN_F9 }, + // { .name = "KEY_FN_RIGHT_SHIFT", .value = KEY_FN_RIGHT_SHIFT }, + { .name = "KEY_FN_S", .value = KEY_FN_S }, + { .name = "KEY_FORWARD", .value = KEY_FORWARD }, + { .name = "KEY_FORWARDMAIL", .value = KEY_FORWARDMAIL }, + { .name = "KEY_FRAMEBACK", .value = KEY_FRAMEBACK }, + { .name = "KEY_FRAMEFORWARD", .value = KEY_FRAMEFORWARD }, + { .name = "KEY_FRONT", .value = KEY_FRONT }, + { .name = "KEY_FULL_SCREEN", .value = KEY_FULL_SCREEN }, + { .name = "KEY_G", .value = KEY_G }, + { .name = "KEY_GAMES", .value = KEY_GAMES }, + { .name = "KEY_GOTO", .value = KEY_GOTO }, + { .name = "KEY_GRAPHICSEDITOR", .value = KEY_GRAPHICSEDITOR }, + { .name = "KEY_GRAVE", .value = KEY_GRAVE }, + { .name = "KEY_GREEN", .value = KEY_GREEN }, + { .name = "KEY_H", .value = KEY_H }, + { .name = "KEY_HANGEUL", .value = KEY_HANGEUL }, + // { .name = "KEY_HANGUP_PHONE", .value = KEY_HANGUP_PHONE }, + { .name = "KEY_HANJA", .value = KEY_HANJA }, + { .name = "KEY_HELP", .value = KEY_HELP }, + { .name = "KEY_HENKAN", .value = KEY_HENKAN }, + { .name = "KEY_HIRAGANA", .value = KEY_HIRAGANA }, + { .name = "KEY_HOME", .value = KEY_HOME }, + { .name = "KEY_HOMEPAGE", .value = KEY_HOMEPAGE }, + { .name = "KEY_HP", .value = KEY_HP }, + { .name = "KEY_I", .value = KEY_I }, + { .name = "KEY_IMAGES", .value = KEY_IMAGES }, + { .name = "KEY_INFO", .value = KEY_INFO }, + { .name = "KEY_INSERT", .value = KEY_INSERT }, + { .name = "KEY_INS_LINE", .value = KEY_INS_LINE }, + { .name = "KEY_ISO", .value = KEY_ISO }, + { .name = "KEY_J", .value = KEY_J }, + { .name = "KEY_JOURNAL", .value = KEY_JOURNAL }, + { .name = "KEY_K", .value = KEY_K }, + { .name = "KEY_KATAKANA", .value = KEY_KATAKANA }, + { .name = "KEY_KATAKANAHIRAGANA", .value = KEY_KATAKANAHIRAGANA }, + { .name = "KEY_KBDILLUMDOWN", .value = KEY_KBDILLUMDOWN }, + { .name = "KEY_KBDILLUMTOGGLE", .value = KEY_KBDILLUMTOGGLE }, + { .name = "KEY_KBDILLUMUP", .value = KEY_KBDILLUMUP }, + { .name = "KEY_KBDINPUTASSIST_ACCEPT", .value = KEY_KBDINPUTASSIST_ACCEPT }, + { .name = "KEY_KBDINPUTASSIST_CANCEL", .value = KEY_KBDINPUTASSIST_CANCEL }, + { .name = "KEY_KBDINPUTASSIST_NEXT", .value = KEY_KBDINPUTASSIST_NEXT }, + { .name = "KEY_KBDINPUTASSIST_NEXTGROUP", .value = KEY_KBDINPUTASSIST_NEXTGROUP }, + { .name = "KEY_KBDINPUTASSIST_PREV", .value = KEY_KBDINPUTASSIST_PREV }, + { .name = "KEY_KBDINPUTASSIST_PREVGROUP", .value = KEY_KBDINPUTASSIST_PREVGROUP }, + { .name = "KEY_KBD_LAYOUT_NEXT", .value = KEY_KBD_LAYOUT_NEXT }, + { .name = "KEY_KBD_LCD_MENU1", .value = KEY_KBD_LCD_MENU1 }, + { .name = "KEY_KBD_LCD_MENU2", .value = KEY_KBD_LCD_MENU2 }, + { .name = "KEY_KBD_LCD_MENU3", .value = KEY_KBD_LCD_MENU3 }, + { .name = "KEY_KBD_LCD_MENU4", .value = KEY_KBD_LCD_MENU4 }, + { .name = "KEY_KBD_LCD_MENU5", .value = KEY_KBD_LCD_MENU5 }, + { .name = "KEY_KEYBOARD", .value = KEY_KEYBOARD }, + { .name = "KEY_KP0", .value = KEY_KP0 }, + { .name = "KEY_KP1", .value = KEY_KP1 }, + { .name = "KEY_KP2", .value = KEY_KP2 }, + { .name = "KEY_KP3", .value = KEY_KP3 }, + { .name = "KEY_KP4", .value = KEY_KP4 }, + { .name = "KEY_KP5", .value = KEY_KP5 }, + { .name = "KEY_KP6", .value = KEY_KP6 }, + { .name = "KEY_KP7", .value = KEY_KP7 }, + { .name = "KEY_KP8", .value = KEY_KP8 }, + { .name = "KEY_KP9", .value = KEY_KP9 }, + { .name = "KEY_KPASTERISK", .value = KEY_KPASTERISK }, + { .name = "KEY_KPCOMMA", .value = KEY_KPCOMMA }, + { .name = "KEY_KPDOT", .value = KEY_KPDOT }, + { .name = "KEY_KPENTER", .value = KEY_KPENTER }, + { .name = "KEY_KPEQUAL", .value = KEY_KPEQUAL }, + { .name = "KEY_KPJPCOMMA", .value = KEY_KPJPCOMMA }, + { .name = "KEY_KPLEFTPAREN", .value = KEY_KPLEFTPAREN }, + { .name = "KEY_KPMINUS", .value = KEY_KPMINUS }, + { .name = "KEY_KPPLUS", .value = KEY_KPPLUS }, + { .name = "KEY_KPPLUSMINUS", .value = KEY_KPPLUSMINUS }, + { .name = "KEY_KPRIGHTPAREN", .value = KEY_KPRIGHTPAREN }, + { .name = "KEY_KPSLASH", .value = KEY_KPSLASH }, + { .name = "KEY_L", .value = KEY_L }, + { .name = "KEY_LANGUAGE", .value = KEY_LANGUAGE }, + { .name = "KEY_LAST", .value = KEY_LAST }, + { .name = "KEY_LEFT", .value = KEY_LEFT }, + { .name = "KEY_LEFTALT", .value = KEY_LEFTALT }, + { .name = "KEY_LEFTBRACE", .value = KEY_LEFTBRACE }, + { .name = "KEY_LEFTCTRL", .value = KEY_LEFTCTRL }, + { .name = "KEY_LEFTMETA", .value = KEY_LEFTMETA }, + { .name = "KEY_LEFTSHIFT", .value = KEY_LEFTSHIFT }, + { .name = "KEY_LEFT_DOWN", .value = KEY_LEFT_DOWN }, + { .name = "KEY_LEFT_UP", .value = KEY_LEFT_UP }, + { .name = "KEY_LIGHTS_TOGGLE", .value = KEY_LIGHTS_TOGGLE }, + { .name = "KEY_LINEFEED", .value = KEY_LINEFEED }, + { .name = "KEY_LIST", .value = KEY_LIST }, + { .name = "KEY_LOGOFF", .value = KEY_LOGOFF }, + { .name = "KEY_M", .value = KEY_M }, + { .name = "KEY_MACRO", .value = KEY_MACRO }, + { .name = "KEY_MACRO1", .value = KEY_MACRO1 }, + { .name = "KEY_MACRO10", .value = KEY_MACRO10 }, + { .name = "KEY_MACRO11", .value = KEY_MACRO11 }, + { .name = "KEY_MACRO12", .value = KEY_MACRO12 }, + { .name = "KEY_MACRO13", .value = KEY_MACRO13 }, + { .name = "KEY_MACRO14", .value = KEY_MACRO14 }, + { .name = "KEY_MACRO15", .value = KEY_MACRO15 }, + { .name = "KEY_MACRO16", .value = KEY_MACRO16 }, + { .name = "KEY_MACRO17", .value = KEY_MACRO17 }, + { .name = "KEY_MACRO18", .value = KEY_MACRO18 }, + { .name = "KEY_MACRO19", .value = KEY_MACRO19 }, + { .name = "KEY_MACRO2", .value = KEY_MACRO2 }, + { .name = "KEY_MACRO20", .value = KEY_MACRO20 }, + { .name = "KEY_MACRO21", .value = KEY_MACRO21 }, + { .name = "KEY_MACRO22", .value = KEY_MACRO22 }, + { .name = "KEY_MACRO23", .value = KEY_MACRO23 }, + { .name = "KEY_MACRO24", .value = KEY_MACRO24 }, + { .name = "KEY_MACRO25", .value = KEY_MACRO25 }, + { .name = "KEY_MACRO26", .value = KEY_MACRO26 }, + { .name = "KEY_MACRO27", .value = KEY_MACRO27 }, + { .name = "KEY_MACRO28", .value = KEY_MACRO28 }, + { .name = "KEY_MACRO29", .value = KEY_MACRO29 }, + { .name = "KEY_MACRO3", .value = KEY_MACRO3 }, + { .name = "KEY_MACRO30", .value = KEY_MACRO30 }, + { .name = "KEY_MACRO4", .value = KEY_MACRO4 }, + { .name = "KEY_MACRO5", .value = KEY_MACRO5 }, + { .name = "KEY_MACRO6", .value = KEY_MACRO6 }, + { .name = "KEY_MACRO7", .value = KEY_MACRO7 }, + { .name = "KEY_MACRO8", .value = KEY_MACRO8 }, + { .name = "KEY_MACRO9", .value = KEY_MACRO9 }, + { .name = "KEY_MACRO_PRESET1", .value = KEY_MACRO_PRESET1 }, + { .name = "KEY_MACRO_PRESET2", .value = KEY_MACRO_PRESET2 }, + { .name = "KEY_MACRO_PRESET3", .value = KEY_MACRO_PRESET3 }, + { .name = "KEY_MACRO_PRESET_CYCLE", .value = KEY_MACRO_PRESET_CYCLE }, + { .name = "KEY_MACRO_RECORD_START", .value = KEY_MACRO_RECORD_START }, + { .name = "KEY_MACRO_RECORD_STOP", .value = KEY_MACRO_RECORD_STOP }, + { .name = "KEY_MAIL", .value = KEY_MAIL }, + // { .name = "KEY_MARK_WAYPOINT", .value = KEY_MARK_WAYPOINT }, + { .name = "KEY_MAX", .value = KEY_MAX }, + { .name = "KEY_MEDIA", .value = KEY_MEDIA }, + { .name = "KEY_MEDIA_REPEAT", .value = KEY_MEDIA_REPEAT }, + { .name = "KEY_MEDIA_TOP_MENU", .value = KEY_MEDIA_TOP_MENU }, + { .name = "KEY_MEMO", .value = KEY_MEMO }, + { .name = "KEY_MENU", .value = KEY_MENU }, + { .name = "KEY_MESSENGER", .value = KEY_MESSENGER }, + { .name = "KEY_MHP", .value = KEY_MHP }, + { .name = "KEY_MICMUTE", .value = KEY_MICMUTE }, + { .name = "KEY_MINUS", .value = KEY_MINUS }, + { .name = "KEY_MODE", .value = KEY_MODE }, + { .name = "KEY_MOVE", .value = KEY_MOVE }, + { .name = "KEY_MP3", .value = KEY_MP3 }, + { .name = "KEY_MSDOS", .value = KEY_MSDOS }, + { .name = "KEY_MUHENKAN", .value = KEY_MUHENKAN }, + { .name = "KEY_MUTE", .value = KEY_MUTE }, + { .name = "KEY_N", .value = KEY_N }, + // { .name = "KEY_NAV_CHART", .value = KEY_NAV_CHART }, + // { .name = "KEY_NAV_INFO", .value = KEY_NAV_INFO }, + { .name = "KEY_NEW", .value = KEY_NEW }, + { .name = "KEY_NEWS", .value = KEY_NEWS }, + { .name = "KEY_NEXT", .value = KEY_NEXT }, + { .name = "KEY_NEXTSONG", .value = KEY_NEXTSONG }, + // { .name = "KEY_NEXT_ELEMENT", .value = KEY_NEXT_ELEMENT }, + { .name = "KEY_NEXT_FAVORITE", .value = KEY_NEXT_FAVORITE }, + // { .name = "KEY_NOTIFICATION_CENTER", .value = KEY_NOTIFICATION_CENTER }, + { .name = "KEY_NUMERIC_0", .value = KEY_NUMERIC_0 }, + { .name = "KEY_NUMERIC_1", .value = KEY_NUMERIC_1 }, + { .name = "KEY_NUMERIC_11", .value = KEY_NUMERIC_11 }, + { .name = "KEY_NUMERIC_12", .value = KEY_NUMERIC_12 }, + { .name = "KEY_NUMERIC_2", .value = KEY_NUMERIC_2 }, + { .name = "KEY_NUMERIC_3", .value = KEY_NUMERIC_3 }, + { .name = "KEY_NUMERIC_4", .value = KEY_NUMERIC_4 }, + { .name = "KEY_NUMERIC_5", .value = KEY_NUMERIC_5 }, + { .name = "KEY_NUMERIC_6", .value = KEY_NUMERIC_6 }, + { .name = "KEY_NUMERIC_7", .value = KEY_NUMERIC_7 }, + { .name = "KEY_NUMERIC_8", .value = KEY_NUMERIC_8 }, + { .name = "KEY_NUMERIC_9", .value = KEY_NUMERIC_9 }, + { .name = "KEY_NUMERIC_A", .value = KEY_NUMERIC_A }, + { .name = "KEY_NUMERIC_B", .value = KEY_NUMERIC_B }, + { .name = "KEY_NUMERIC_C", .value = KEY_NUMERIC_C }, + { .name = "KEY_NUMERIC_D", .value = KEY_NUMERIC_D }, + { .name = "KEY_NUMERIC_POUND", .value = KEY_NUMERIC_POUND }, + { .name = "KEY_NUMERIC_STAR", .value = KEY_NUMERIC_STAR }, + { .name = "KEY_NUMLOCK", .value = KEY_NUMLOCK }, + { .name = "KEY_O", .value = KEY_O }, + { .name = "KEY_OK", .value = KEY_OK }, + { .name = "KEY_ONSCREEN_KEYBOARD", .value = KEY_ONSCREEN_KEYBOARD }, + { .name = "KEY_OPEN", .value = KEY_OPEN }, + { .name = "KEY_OPTION", .value = KEY_OPTION }, + { .name = "KEY_P", .value = KEY_P }, + { .name = "KEY_PAGEDOWN", .value = KEY_PAGEDOWN }, + { .name = "KEY_PAGEUP", .value = KEY_PAGEUP }, + { .name = "KEY_PASTE", .value = KEY_PASTE }, + { .name = "KEY_PAUSE", .value = KEY_PAUSE }, + { .name = "KEY_PAUSECD", .value = KEY_PAUSECD }, + { .name = "KEY_PAUSE_RECORD", .value = KEY_PAUSE_RECORD }, + { .name = "KEY_PC", .value = KEY_PC }, + { .name = "KEY_PHONE", .value = KEY_PHONE }, + // { .name = "KEY_PICKUP_PHONE", .value = KEY_PICKUP_PHONE }, + { .name = "KEY_PLAY", .value = KEY_PLAY }, + { .name = "KEY_PLAYCD", .value = KEY_PLAYCD }, + { .name = "KEY_PLAYER", .value = KEY_PLAYER }, + { .name = "KEY_PLAYPAUSE", .value = KEY_PLAYPAUSE }, + { .name = "KEY_POWER", .value = KEY_POWER }, + { .name = "KEY_POWER2", .value = KEY_POWER2 }, + { .name = "KEY_PRESENTATION", .value = KEY_PRESENTATION }, + { .name = "KEY_PREVIOUS", .value = KEY_PREVIOUS }, + { .name = "KEY_PREVIOUSSONG", .value = KEY_PREVIOUSSONG }, + // { .name = "KEY_PREVIOUS_ELEMENT", .value = KEY_PREVIOUS_ELEMENT }, + { .name = "KEY_PRINT", .value = KEY_PRINT }, + { .name = "KEY_PRIVACY_SCREEN_TOGGLE", .value = KEY_PRIVACY_SCREEN_TOGGLE }, + { .name = "KEY_PROG1", .value = KEY_PROG1 }, + { .name = "KEY_PROG2", .value = KEY_PROG2 }, + { .name = "KEY_PROG3", .value = KEY_PROG3 }, + { .name = "KEY_PROG4", .value = KEY_PROG4 }, + { .name = "KEY_PROGRAM", .value = KEY_PROGRAM }, + { .name = "KEY_PROPS", .value = KEY_PROPS }, + { .name = "KEY_PVR", .value = KEY_PVR }, + { .name = "KEY_Q", .value = KEY_Q }, + { .name = "KEY_QUESTION", .value = KEY_QUESTION }, + { .name = "KEY_R", .value = KEY_R }, + // { .name = "KEY_RADAR_OVERLAY", .value = KEY_RADAR_OVERLAY }, + { .name = "KEY_RADIO", .value = KEY_RADIO }, + { .name = "KEY_RECORD", .value = KEY_RECORD }, + { .name = "KEY_RED", .value = KEY_RED }, + { .name = "KEY_REDO", .value = KEY_REDO }, + { .name = "KEY_REFRESH", .value = KEY_REFRESH }, + { .name = "KEY_REPLY", .value = KEY_REPLY }, + { .name = "KEY_RESERVED", .value = KEY_RESERVED }, + { .name = "KEY_RESTART", .value = KEY_RESTART }, + { .name = "KEY_REWIND", .value = KEY_REWIND }, + { .name = "KEY_RFKILL", .value = KEY_RFKILL }, + { .name = "KEY_RIGHT", .value = KEY_RIGHT }, + { .name = "KEY_RIGHTALT", .value = KEY_RIGHTALT }, + { .name = "KEY_RIGHTBRACE", .value = KEY_RIGHTBRACE }, + { .name = "KEY_RIGHTCTRL", .value = KEY_RIGHTCTRL }, + { .name = "KEY_RIGHTMETA", .value = KEY_RIGHTMETA }, + { .name = "KEY_RIGHTSHIFT", .value = KEY_RIGHTSHIFT }, + { .name = "KEY_RIGHT_DOWN", .value = KEY_RIGHT_DOWN }, + { .name = "KEY_RIGHT_UP", .value = KEY_RIGHT_UP }, + { .name = "KEY_RO", .value = KEY_RO }, + { .name = "KEY_ROOT_MENU", .value = KEY_ROOT_MENU }, + { .name = "KEY_ROTATE_DISPLAY", .value = KEY_ROTATE_DISPLAY }, + { .name = "KEY_ROTATE_LOCK_TOGGLE", .value = KEY_ROTATE_LOCK_TOGGLE }, + { .name = "KEY_S", .value = KEY_S }, + { .name = "KEY_SAT", .value = KEY_SAT }, + { .name = "KEY_SAT2", .value = KEY_SAT2 }, + { .name = "KEY_SAVE", .value = KEY_SAVE }, + { .name = "KEY_SCALE", .value = KEY_SCALE }, + { .name = "KEY_SCREENSAVER", .value = KEY_SCREENSAVER }, + { .name = "KEY_SCROLLDOWN", .value = KEY_SCROLLDOWN }, + { .name = "KEY_SCROLLLOCK", .value = KEY_SCROLLLOCK }, + { .name = "KEY_SCROLLUP", .value = KEY_SCROLLUP }, + { .name = "KEY_SEARCH", .value = KEY_SEARCH }, + { .name = "KEY_SELECT", .value = KEY_SELECT }, + { .name = "KEY_SELECTIVE_SCREENSHOT", .value = KEY_SELECTIVE_SCREENSHOT }, + { .name = "KEY_SEMICOLON", .value = KEY_SEMICOLON }, + { .name = "KEY_SEND", .value = KEY_SEND }, + { .name = "KEY_SENDFILE", .value = KEY_SENDFILE }, + { .name = "KEY_SETUP", .value = KEY_SETUP }, + { .name = "KEY_SHOP", .value = KEY_SHOP }, + { .name = "KEY_SHUFFLE", .value = KEY_SHUFFLE }, + // { .name = "KEY_SIDEVU_SONAR", .value = KEY_SIDEVU_SONAR }, + // { .name = "KEY_SINGLE_RANGE_RADAR", .value = KEY_SINGLE_RANGE_RADAR }, + { .name = "KEY_SLASH", .value = KEY_SLASH }, + { .name = "KEY_SLEEP", .value = KEY_SLEEP }, + { .name = "KEY_SLOW", .value = KEY_SLOW }, + { .name = "KEY_SLOWREVERSE", .value = KEY_SLOWREVERSE }, + // { .name = "KEY_SOS", .value = KEY_SOS }, + { .name = "KEY_SOUND", .value = KEY_SOUND }, + { .name = "KEY_SPACE", .value = KEY_SPACE }, + { .name = "KEY_SPELLCHECK", .value = KEY_SPELLCHECK }, + { .name = "KEY_SPORT", .value = KEY_SPORT }, + { .name = "KEY_SPREADSHEET", .value = KEY_SPREADSHEET }, + { .name = "KEY_STOP", .value = KEY_STOP }, + { .name = "KEY_STOPCD", .value = KEY_STOPCD }, + { .name = "KEY_STOP_RECORD", .value = KEY_STOP_RECORD }, + { .name = "KEY_SUBTITLE", .value = KEY_SUBTITLE }, + { .name = "KEY_SUSPEND", .value = KEY_SUSPEND }, + { .name = "KEY_SWITCHVIDEOMODE", .value = KEY_SWITCHVIDEOMODE }, + { .name = "KEY_SYSRQ", .value = KEY_SYSRQ }, + { .name = "KEY_T", .value = KEY_T }, + { .name = "KEY_TAB", .value = KEY_TAB }, + { .name = "KEY_TAPE", .value = KEY_TAPE }, + { .name = "KEY_TASKMANAGER", .value = KEY_TASKMANAGER }, + { .name = "KEY_TEEN", .value = KEY_TEEN }, + { .name = "KEY_TEXT", .value = KEY_TEXT }, + { .name = "KEY_TIME", .value = KEY_TIME }, + { .name = "KEY_TITLE", .value = KEY_TITLE }, + { .name = "KEY_TOUCHPAD_OFF", .value = KEY_TOUCHPAD_OFF }, + { .name = "KEY_TOUCHPAD_ON", .value = KEY_TOUCHPAD_ON }, + { .name = "KEY_TOUCHPAD_TOGGLE", .value = KEY_TOUCHPAD_TOGGLE }, + // { .name = "KEY_TRADITIONAL_SONAR", .value = KEY_TRADITIONAL_SONAR }, + { .name = "KEY_TUNER", .value = KEY_TUNER }, + { .name = "KEY_TV", .value = KEY_TV }, + { .name = "KEY_TV2", .value = KEY_TV2 }, + { .name = "KEY_TWEN", .value = KEY_TWEN }, + { .name = "KEY_U", .value = KEY_U }, + { .name = "KEY_UNDO", .value = KEY_UNDO }, + { .name = "KEY_UNKNOWN", .value = KEY_UNKNOWN }, + { .name = "KEY_UNMUTE", .value = KEY_UNMUTE }, + { .name = "KEY_UP", .value = KEY_UP }, + { .name = "KEY_UWB", .value = KEY_UWB }, + { .name = "KEY_V", .value = KEY_V }, + { .name = "KEY_VCR", .value = KEY_VCR }, + { .name = "KEY_VCR2", .value = KEY_VCR2 }, + { .name = "KEY_VENDOR", .value = KEY_VENDOR }, + { .name = "KEY_VIDEO", .value = KEY_VIDEO }, + { .name = "KEY_VIDEOPHONE", .value = KEY_VIDEOPHONE }, + { .name = "KEY_VIDEO_NEXT", .value = KEY_VIDEO_NEXT }, + { .name = "KEY_VIDEO_PREV", .value = KEY_VIDEO_PREV }, + { .name = "KEY_VOD", .value = KEY_VOD }, + { .name = "KEY_VOICECOMMAND", .value = KEY_VOICECOMMAND }, + { .name = "KEY_VOICEMAIL", .value = KEY_VOICEMAIL }, + { .name = "KEY_VOLUMEDOWN", .value = KEY_VOLUMEDOWN }, + { .name = "KEY_VOLUMEUP", .value = KEY_VOLUMEUP }, + { .name = "KEY_W", .value = KEY_W }, + { .name = "KEY_WAKEUP", .value = KEY_WAKEUP }, + { .name = "KEY_WLAN", .value = KEY_WLAN }, + { .name = "KEY_WORDPROCESSOR", .value = KEY_WORDPROCESSOR }, + { .name = "KEY_WPS_BUTTON", .value = KEY_WPS_BUTTON }, + { .name = "KEY_WWAN", .value = KEY_WWAN }, + { .name = "KEY_WWW", .value = KEY_WWW }, + { .name = "KEY_X", .value = KEY_X }, + { .name = "KEY_XFER", .value = KEY_XFER }, + { .name = "KEY_Y", .value = KEY_Y }, + { .name = "KEY_YELLOW", .value = KEY_YELLOW }, + { .name = "KEY_YEN", .value = KEY_YEN }, + { .name = "KEY_Z", .value = KEY_Z }, + { .name = "KEY_ZENKAKUHANKAKU", .value = KEY_ZENKAKUHANKAKU }, + { .name = "KEY_ZOOMIN", .value = KEY_ZOOMIN }, + { .name = "KEY_ZOOMOUT", .value = KEY_ZOOMOUT }, + { .name = "KEY_ZOOMRESET", .value = KEY_ZOOMRESET }, + { .name = "LED_CAPSL", .value = LED_CAPSL }, + { .name = "LED_CHARGING", .value = LED_CHARGING }, + { .name = "LED_COMPOSE", .value = LED_COMPOSE }, + { .name = "LED_KANA", .value = LED_KANA }, + { .name = "LED_MAIL", .value = LED_MAIL }, + { .name = "LED_MAX", .value = LED_MAX }, + { .name = "LED_MISC", .value = LED_MISC }, + { .name = "LED_MUTE", .value = LED_MUTE }, + { .name = "LED_NUML", .value = LED_NUML }, + { .name = "LED_SCROLLL", .value = LED_SCROLLL }, + { .name = "LED_SLEEP", .value = LED_SLEEP }, + { .name = "LED_SUSPEND", .value = LED_SUSPEND }, + { .name = "MSC_GESTURE", .value = MSC_GESTURE }, + { .name = "MSC_MAX", .value = MSC_MAX }, + { .name = "MSC_PULSELED", .value = MSC_PULSELED }, + { .name = "MSC_RAW", .value = MSC_RAW }, + { .name = "MSC_SCAN", .value = MSC_SCAN }, + { .name = "MSC_SERIAL", .value = MSC_SERIAL }, + { .name = "MSC_TIMESTAMP", .value = MSC_TIMESTAMP }, + { .name = "REL_DIAL", .value = REL_DIAL }, + { .name = "REL_HWHEEL", .value = REL_HWHEEL }, + { .name = "REL_HWHEEL_HI_RES", .value = REL_HWHEEL_HI_RES }, + { .name = "REL_MAX", .value = REL_MAX }, + { .name = "REL_MISC", .value = REL_MISC }, + { .name = "REL_RESERVED", .value = REL_RESERVED }, + { .name = "REL_RX", .value = REL_RX }, + { .name = "REL_RY", .value = REL_RY }, + { .name = "REL_RZ", .value = REL_RZ }, + { .name = "REL_WHEEL", .value = REL_WHEEL }, + { .name = "REL_WHEEL_HI_RES", .value = REL_WHEEL_HI_RES }, + { .name = "REL_X", .value = REL_X }, + { .name = "REL_Y", .value = REL_Y }, + { .name = "REL_Z", .value = REL_Z }, + { .name = "REP_DELAY", .value = REP_DELAY }, + { .name = "REP_MAX", .value = REP_MAX }, + { .name = "REP_PERIOD", .value = REP_PERIOD }, + { .name = "SND_BELL", .value = SND_BELL }, + { .name = "SND_CLICK", .value = SND_CLICK }, + { .name = "SND_MAX", .value = SND_MAX }, + { .name = "SND_TONE", .value = SND_TONE }, + { .name = "SW_CAMERA_LENS_COVER", .value = SW_CAMERA_LENS_COVER }, + { .name = "SW_DOCK", .value = SW_DOCK }, + { .name = "SW_FRONT_PROXIMITY", .value = SW_FRONT_PROXIMITY }, + { .name = "SW_HEADPHONE_INSERT", .value = SW_HEADPHONE_INSERT }, + { .name = "SW_JACK_PHYSICAL_INSERT", .value = SW_JACK_PHYSICAL_INSERT }, + { .name = "SW_KEYPAD_SLIDE", .value = SW_KEYPAD_SLIDE }, + { .name = "SW_LID", .value = SW_LID }, + { .name = "SW_LINEIN_INSERT", .value = SW_LINEIN_INSERT }, + { .name = "SW_LINEOUT_INSERT", .value = SW_LINEOUT_INSERT }, + { .name = "SW_MACHINE_COVER", .value = SW_MACHINE_COVER }, + { .name = "SW_MAX", .value = SW_MAX }, + { .name = "SW_MICROPHONE_INSERT", .value = SW_MICROPHONE_INSERT }, + { .name = "SW_MUTE_DEVICE", .value = SW_MUTE_DEVICE }, + { .name = "SW_PEN_INSERTED", .value = SW_PEN_INSERTED }, + { .name = "SW_RFKILL_ALL", .value = SW_RFKILL_ALL }, + { .name = "SW_ROTATE_LOCK", .value = SW_ROTATE_LOCK }, + { .name = "SW_TABLET_MODE", .value = SW_TABLET_MODE }, + { .name = "SW_VIDEOOUT_INSERT", .value = SW_VIDEOOUT_INSERT }, + { .name = "SYN_CONFIG", .value = SYN_CONFIG }, + { .name = "SYN_DROPPED", .value = SYN_DROPPED }, + { .name = "SYN_MAX", .value = SYN_MAX }, + { .name = "SYN_MT_REPORT", .value = SYN_MT_REPORT }, + { .name = "SYN_REPORT", .value = SYN_REPORT }, +}; + +static const struct name_entry prop_names[] = { + { .name = "INPUT_PROP_ACCELEROMETER", .value = INPUT_PROP_ACCELEROMETER }, + { .name = "INPUT_PROP_BUTTONPAD", .value = INPUT_PROP_BUTTONPAD }, + { .name = "INPUT_PROP_DIRECT", .value = INPUT_PROP_DIRECT }, + { .name = "INPUT_PROP_MAX", .value = INPUT_PROP_MAX }, + { .name = "INPUT_PROP_POINTER", .value = INPUT_PROP_POINTER }, + { .name = "INPUT_PROP_POINTING_STICK", .value = INPUT_PROP_POINTING_STICK }, + { .name = "INPUT_PROP_SEMI_MT", .value = INPUT_PROP_SEMI_MT }, + { .name = "INPUT_PROP_TOPBUTTONPAD", .value = INPUT_PROP_TOPBUTTONPAD }, +}; + +#endif /* EVENT_NAMES_H */ diff --git a/libevdev.c b/libevdev.c new file mode 100644 index 0000000..8fafdf2 --- /dev/null +++ b/libevdev.c @@ -0,0 +1,142 @@ +/* + * Copyright © 2013 David Herrmann + * Copyright © 2013 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include +#include +#include + +#include +#include +#include "event-names.h" + +#define ARRAY_LENGTH(a) (sizeof(a) / (sizeof((a)[0]))) + +struct name_lookup { + const char *name; + size_t len; +}; + +int +libevdev_event_type_get_max(unsigned int type) +{ + if (type > EV_MAX) + return -1; + + return ev_max[type]; +} + +const char * +libevdev_event_code_get_name(unsigned int type, unsigned int code) +{ + int max = libevdev_event_type_get_max(type); + + if (max == -1 || code > (unsigned int)max) + return NULL; + return event_type_map[type][code]; +} + +static inline bool +startswith(const char *str, size_t len, const char *prefix, size_t plen) +{ + return len >= plen && !strncmp(str, prefix, plen); +} + +static int type_from_prefix(const char *name, ssize_t len) +{ + const char *e; + size_t i; + ssize_t l; + + /* MAX_ is not allowed, even though EV_MAX exists */ + if (startswith(name, len, "MAX_", 4)) + return -1; + /* BTN_ is special as there is no EV_BTN type */ + if (startswith(name, len, "BTN_", 4)) + return EV_KEY; + /* FF_STATUS_ is special as FF_ is a prefix of it, so test it first */ + if (startswith(name, len, "FF_STATUS_", 10)) + return EV_FF_STATUS; + + for (i = 0; i < ARRAY_LENGTH(ev_names); ++i) { + /* skip EV_ prefix so @e is suffix of [EV_]XYZ */ + e = &ev_names[i].name[3]; + l = strlen(e); + + /* compare prefix and test for trailing _ */ + if (len > l && startswith(name, len, e, l) && name[l] == '_') + return ev_names[i].value; + } + + return -1; +} + +static int cmp_entry(const void *vlookup, const void *ventry) +{ + const struct name_lookup *lookup = vlookup; + const struct name_entry *entry = ventry; + int r; + + r = strncmp(lookup->name, entry->name, lookup->len); + if (!r) { + if (entry->name[lookup->len]) + r = -1; + else + r = 0; + } + + return r; +} + +static const struct name_entry* +lookup_name(const struct name_entry *array, size_t asize, + struct name_lookup *lookup) +{ + const struct name_entry *entry; + + entry = bsearch(lookup, array, asize, sizeof(*array), cmp_entry); + if (!entry) + return NULL; + + return entry; +} + +int +libevdev_event_code_from_name(unsigned int type, const char *name) +{ + struct name_lookup lookup; + const struct name_entry *entry; + int real_type; + size_t len = strlen(name); + + real_type = type_from_prefix(name, len); + if (real_type < 0 || (unsigned int)real_type != type) + return -1; + + lookup.name = name; + lookup.len = len; + + entry = lookup_name(code_names, ARRAY_LENGTH(code_names), &lookup); + + return entry ? (int)entry->value : -1; +} diff --git a/libevdev.pc.in b/libevdev.pc.in new file mode 100644 index 0000000..48f1e83 --- /dev/null +++ b/libevdev.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +datarootdir=@datarootdir@ +libdir=@libdir@ +includedir=@includedir@ + +Name: Libevdev +Description: Event device library +Version: @PACKAGE_VERSION@ +Cflags: -I${includedir} +Libs: -L${libdir} -levdev diff --git a/libevdev/libevdev.h b/libevdev/libevdev.h new file mode 100644 index 0000000..cd62972 --- /dev/null +++ b/libevdev/libevdev.h @@ -0,0 +1,29 @@ +/* + * Copyright © 2013 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +#ifndef LIBEVDEV_H +#define LIBEVDEV_H +extern int libevdev_event_code_from_name(unsigned int type, const char *name); +extern const char * libevdev_event_code_get_name(unsigned int type, unsigned int code); +#endif diff --git a/shlib_version b/shlib_version new file mode 100644 index 0000000..97c9f92 --- /dev/null +++ b/shlib_version @@ -0,0 +1,2 @@ +major=0 +minor=0