From 5655eb321535c288325f6fff47b60f680d08ce21 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Tue, 21 Jul 2015 23:40:10 +0200 Subject: Add input reading capabilities to server --- Makefile | 9 +- linux-input-keycodes.c | 428 ++++++++++++++ linux-input-keycodes.h | 432 +------------- linux-input.h | 1199 ++++++++++++++++++++++++++++++++++++++ rcm-server-main.c | 135 ++++- rcm-server-main.h | 4 +- tools/generate-input-keycodes.sh | 60 +- 7 files changed, 1802 insertions(+), 465 deletions(-) create mode 100644 linux-input-keycodes.c create mode 100644 linux-input.h diff --git a/Makefile b/Makefile index e0783f4..b24c909 100644 --- a/Makefile +++ b/Makefile @@ -12,14 +12,14 @@ EXTRA_CFLAGS = GENERIC_LDFLAGS = EXTRA_LDFLAGS = -COMMON_HEADERS = linux-input-keycodes.h linux-input-enum.h shared.h +COMMON_HEADERS = linux-input-keycodes.h linux-input.h shared.h RCM_PACKAGES = libudev libsystemd RCM_CFLAGS = ${GENERIC_CFLAGS} ${EXTRA_CFLAGS} $(shell pkg-config --cflags ${RCM_PACKAGES}) RCM_LDFLAGS = ${GENERIC_LDFLAGS} ${EXTRA_LDFLAGS} $(shell pkg-config --libs ${RCM_PACKAGES}) RCM_COMPILE = $(CC) $(RCM_CFLAGS) RCM_LINK = $(CC) $(RCM_CFLAGS) $(RCM_LDFLAGS) -RCM_OBJECTS = rcm-server-main.o rcm-server-keymap.o +RCM_OBJECTS = rcm-server-main.o rcm-server-keymap.o linux-input-keycodes.o RCM_HEADERS = rcm-server-main.h rcm-server-keymap.h utils.h $(COMMON_HEADERS) RCC_PACKAGES = gtk+-3.0 @@ -27,7 +27,7 @@ RCC_CFLAGS = ${GENERIC_CFLAGS} ${EXTRA_CFLAGS} $(shell pkg-config --cflags ${RCC RCC_LDFLAGS = ${GENERIC_LDFLAGS} ${EXTRA_LDFLAGS} $(shell pkg-config --libs ${RCC_PACKAGES}) RCC_COMPILE = $(CC) $(RCC_CFLAGS) RCC_LINK = $(CC) $(RCC_CFLAGS) $(RCC_LDFLAGS) -RCC_OBJECTS = rcm-client-main.o rcm-client-hardware-list.o rcm-client-hardware-info.o rcm-client-receive.o rcm-client-transmit.o generated.o +RCC_OBJECTS = rcm-client-main.o rcm-client-hardware-list.o rcm-client-hardware-info.o rcm-client-receive.o rcm-client-transmit.o generated.o linux-input-keycodes.o RCC_HEADERS = rcm-client-main.h rcm-client-hardware-list.h rcm-client-hardware-info.h rcm-client-receive.h rcm-client-transmit.h generated.h $(COMMON_HEADERS) INSTALL = install -c @@ -48,6 +48,9 @@ mandir = ${prefix}/share/man all: rcm-server rcm-client .DEFAULT: all +linux-input-keycodes.o: linux-input-keycodes.c $(COMMON_HEADERS) + $(CC) $(GENERIC_CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $< + rcm-client-%.o: rcm-client-%.c $(RCC_HEADERS) $(RCC_COMPILE) -o $@ -c $< diff --git a/linux-input-keycodes.c b/linux-input-keycodes.c new file mode 100644 index 0000000..b9d2499 --- /dev/null +++ b/linux-input-keycodes.c @@ -0,0 +1,428 @@ +/* AUTOGENERATED: DO NOT EDIT */ + +#include "linux-input.h" +#include "linux-input-keycodes.h" + +struct linux_input_keycode linux_input_keycodes[] = { + { "KEY_RESERVED", KEY_RESERVED, false, NULL }, + { "KEY_ESC", KEY_ESC, false, NULL }, + { "KEY_1", KEY_1, false, NULL }, + { "KEY_2", KEY_2, false, NULL }, + { "KEY_3", KEY_3, false, NULL }, + { "KEY_4", KEY_4, false, NULL }, + { "KEY_5", KEY_5, false, NULL }, + { "KEY_6", KEY_6, false, NULL }, + { "KEY_7", KEY_7, false, NULL }, + { "KEY_8", KEY_8, false, NULL }, + { "KEY_9", KEY_9, false, NULL }, + { "KEY_0", KEY_0, false, NULL }, + { "KEY_MINUS", KEY_MINUS, false, NULL }, + { "KEY_EQUAL", KEY_EQUAL, false, NULL }, + { "KEY_BACKSPACE", KEY_BACKSPACE, false, NULL }, + { "KEY_TAB", KEY_TAB, false, NULL }, + { "KEY_Q", KEY_Q, false, NULL }, + { "KEY_W", KEY_W, false, NULL }, + { "KEY_E", KEY_E, false, NULL }, + { "KEY_R", KEY_R, false, NULL }, + { "KEY_T", KEY_T, false, NULL }, + { "KEY_Y", KEY_Y, false, NULL }, + { "KEY_U", KEY_U, false, NULL }, + { "KEY_I", KEY_I, false, NULL }, + { "KEY_O", KEY_O, false, NULL }, + { "KEY_P", KEY_P, false, NULL }, + { "KEY_LEFTBRACE", KEY_LEFTBRACE, false, NULL }, + { "KEY_RIGHTBRACE", KEY_RIGHTBRACE, false, NULL }, + { "KEY_ENTER", KEY_ENTER, false, NULL }, + { "KEY_LEFTCTRL", KEY_LEFTCTRL, false, NULL }, + { "KEY_A", KEY_A, false, NULL }, + { "KEY_S", KEY_S, false, NULL }, + { "KEY_D", KEY_D, false, NULL }, + { "KEY_F", KEY_F, false, NULL }, + { "KEY_G", KEY_G, false, NULL }, + { "KEY_H", KEY_H, false, NULL }, + { "KEY_J", KEY_J, false, NULL }, + { "KEY_K", KEY_K, false, NULL }, + { "KEY_L", KEY_L, false, NULL }, + { "KEY_SEMICOLON", KEY_SEMICOLON, false, NULL }, + { "KEY_APOSTROPHE", KEY_APOSTROPHE, false, NULL }, + { "KEY_GRAVE", KEY_GRAVE, false, NULL }, + { "KEY_LEFTSHIFT", KEY_LEFTSHIFT, false, NULL }, + { "KEY_BACKSLASH", KEY_BACKSLASH, false, NULL }, + { "KEY_Z", KEY_Z, false, NULL }, + { "KEY_X", KEY_X, false, NULL }, + { "KEY_C", KEY_C, false, NULL }, + { "KEY_V", KEY_V, false, NULL }, + { "KEY_B", KEY_B, false, NULL }, + { "KEY_N", KEY_N, false, NULL }, + { "KEY_M", KEY_M, false, NULL }, + { "KEY_COMMA", KEY_COMMA, false, NULL }, + { "KEY_DOT", KEY_DOT, false, NULL }, + { "KEY_SLASH", KEY_SLASH, false, NULL }, + { "KEY_RIGHTSHIFT", KEY_RIGHTSHIFT, false, NULL }, + { "KEY_KPASTERISK", KEY_KPASTERISK, false, NULL }, + { "KEY_LEFTALT", KEY_LEFTALT, false, NULL }, + { "KEY_SPACE", KEY_SPACE, false, NULL }, + { "KEY_CAPSLOCK", KEY_CAPSLOCK, false, NULL }, + { "KEY_F1", KEY_F1, false, NULL }, + { "KEY_F2", KEY_F2, false, NULL }, + { "KEY_F3", KEY_F3, false, NULL }, + { "KEY_F4", KEY_F4, false, NULL }, + { "KEY_F5", KEY_F5, false, NULL }, + { "KEY_F6", KEY_F6, false, NULL }, + { "KEY_F7", KEY_F7, false, NULL }, + { "KEY_F8", KEY_F8, false, NULL }, + { "KEY_F9", KEY_F9, false, NULL }, + { "KEY_F10", KEY_F10, false, NULL }, + { "KEY_NUMLOCK", KEY_NUMLOCK, false, NULL }, + { "KEY_SCROLLLOCK", KEY_SCROLLLOCK, false, NULL }, + { "KEY_KP7", KEY_KP7, false, NULL }, + { "KEY_KP8", KEY_KP8, false, NULL }, + { "KEY_KP9", KEY_KP9, false, NULL }, + { "KEY_KPMINUS", KEY_KPMINUS, false, NULL }, + { "KEY_KP4", KEY_KP4, false, NULL }, + { "KEY_KP5", KEY_KP5, false, NULL }, + { "KEY_KP6", KEY_KP6, false, NULL }, + { "KEY_KPPLUS", KEY_KPPLUS, false, NULL }, + { "KEY_KP1", KEY_KP1, false, NULL }, + { "KEY_KP2", KEY_KP2, false, NULL }, + { "KEY_KP3", KEY_KP3, false, NULL }, + { "KEY_KP0", KEY_KP0, false, NULL }, + { "KEY_KPDOT", KEY_KPDOT, false, NULL }, + { "KEY_ZENKAKUHANKAKU", KEY_ZENKAKUHANKAKU, false, NULL }, + { "KEY_102ND", KEY_102ND, false, NULL }, + { "KEY_F11", KEY_F11, false, NULL }, + { "KEY_F12", KEY_F12, false, NULL }, + { "KEY_RO", KEY_RO, false, NULL }, + { "KEY_KATAKANA", KEY_KATAKANA, false, NULL }, + { "KEY_HIRAGANA", KEY_HIRAGANA, false, NULL }, + { "KEY_HENKAN", KEY_HENKAN, false, NULL }, + { "KEY_KATAKANAHIRAGANA", KEY_KATAKANAHIRAGANA, false, NULL }, + { "KEY_MUHENKAN", KEY_MUHENKAN, false, NULL }, + { "KEY_KPJPCOMMA", KEY_KPJPCOMMA, false, NULL }, + { "KEY_KPENTER", KEY_KPENTER, false, NULL }, + { "KEY_RIGHTCTRL", KEY_RIGHTCTRL, false, NULL }, + { "KEY_KPSLASH", KEY_KPSLASH, false, NULL }, + { "KEY_SYSRQ", KEY_SYSRQ, false, NULL }, + { "KEY_RIGHTALT", KEY_RIGHTALT, false, NULL }, + { "KEY_LINEFEED", KEY_LINEFEED, false, NULL }, + { "KEY_HOME", KEY_HOME, false, NULL }, + { "KEY_UP", KEY_UP, false, NULL }, + { "KEY_PAGEUP", KEY_PAGEUP, false, NULL }, + { "KEY_LEFT", KEY_LEFT, false, NULL }, + { "KEY_RIGHT", KEY_RIGHT, false, NULL }, + { "KEY_END", KEY_END, false, NULL }, + { "KEY_DOWN", KEY_DOWN, false, NULL }, + { "KEY_PAGEDOWN", KEY_PAGEDOWN, false, NULL }, + { "KEY_INSERT", KEY_INSERT, false, NULL }, + { "KEY_DELETE", KEY_DELETE, false, NULL }, + { "KEY_MACRO", KEY_MACRO, false, NULL }, + { "KEY_MUTE", KEY_MUTE, false, NULL }, + { "KEY_VOLUMEDOWN", KEY_VOLUMEDOWN, false, NULL }, + { "KEY_VOLUMEUP", KEY_VOLUMEUP, false, NULL }, + { "KEY_POWER", KEY_POWER, false, NULL }, + { "KEY_KPEQUAL", KEY_KPEQUAL, false, NULL }, + { "KEY_KPPLUSMINUS", KEY_KPPLUSMINUS, false, NULL }, + { "KEY_PAUSE", KEY_PAUSE, false, NULL }, + { "KEY_SCALE", KEY_SCALE, false, NULL }, + { "KEY_KPCOMMA", KEY_KPCOMMA, false, NULL }, + { "KEY_HANGEUL", KEY_HANGEUL, false, NULL }, + { "KEY_HANGUEL", KEY_HANGUEL, true, NULL }, + { "KEY_HANJA", KEY_HANJA, false, NULL }, + { "KEY_YEN", KEY_YEN, false, NULL }, + { "KEY_LEFTMETA", KEY_LEFTMETA, false, NULL }, + { "KEY_RIGHTMETA", KEY_RIGHTMETA, false, NULL }, + { "KEY_COMPOSE", KEY_COMPOSE, false, NULL }, + { "KEY_STOP", KEY_STOP, false, NULL }, + { "KEY_AGAIN", KEY_AGAIN, false, NULL }, + { "KEY_PROPS", KEY_PROPS, false, NULL }, + { "KEY_UNDO", KEY_UNDO, false, NULL }, + { "KEY_FRONT", KEY_FRONT, false, NULL }, + { "KEY_COPY", KEY_COPY, false, NULL }, + { "KEY_OPEN", KEY_OPEN, false, NULL }, + { "KEY_PASTE", KEY_PASTE, false, NULL }, + { "KEY_FIND", KEY_FIND, false, NULL }, + { "KEY_CUT", KEY_CUT, false, NULL }, + { "KEY_HELP", KEY_HELP, false, NULL }, + { "KEY_MENU", KEY_MENU, false, NULL }, + { "KEY_CALC", KEY_CALC, false, NULL }, + { "KEY_SETUP", KEY_SETUP, false, NULL }, + { "KEY_SLEEP", KEY_SLEEP, false, NULL }, + { "KEY_WAKEUP", KEY_WAKEUP, false, NULL }, + { "KEY_FILE", KEY_FILE, false, NULL }, + { "KEY_SENDFILE", KEY_SENDFILE, false, NULL }, + { "KEY_DELETEFILE", KEY_DELETEFILE, false, NULL }, + { "KEY_XFER", KEY_XFER, false, NULL }, + { "KEY_PROG1", KEY_PROG1, false, NULL }, + { "KEY_PROG2", KEY_PROG2, false, NULL }, + { "KEY_WWW", KEY_WWW, false, NULL }, + { "KEY_MSDOS", KEY_MSDOS, false, NULL }, + { "KEY_COFFEE", KEY_COFFEE, false, NULL }, + { "KEY_SCREENLOCK", KEY_SCREENLOCK, true, NULL }, + { "KEY_DIRECTION", KEY_DIRECTION, false, NULL }, + { "KEY_CYCLEWINDOWS", KEY_CYCLEWINDOWS, false, NULL }, + { "KEY_MAIL", KEY_MAIL, false, NULL }, + { "KEY_BOOKMARKS", KEY_BOOKMARKS, false, NULL }, + { "KEY_COMPUTER", KEY_COMPUTER, false, NULL }, + { "KEY_BACK", KEY_BACK, false, NULL }, + { "KEY_FORWARD", KEY_FORWARD, false, NULL }, + { "KEY_CLOSECD", KEY_CLOSECD, false, NULL }, + { "KEY_EJECTCD", KEY_EJECTCD, false, NULL }, + { "KEY_EJECTCLOSECD", KEY_EJECTCLOSECD, false, NULL }, + { "KEY_NEXTSONG", KEY_NEXTSONG, false, NULL }, + { "KEY_PLAYPAUSE", KEY_PLAYPAUSE, false, NULL }, + { "KEY_PREVIOUSSONG", KEY_PREVIOUSSONG, false, NULL }, + { "KEY_STOPCD", KEY_STOPCD, false, NULL }, + { "KEY_RECORD", KEY_RECORD, false, NULL }, + { "KEY_REWIND", KEY_REWIND, false, NULL }, + { "KEY_PHONE", KEY_PHONE, false, NULL }, + { "KEY_ISO", KEY_ISO, false, NULL }, + { "KEY_CONFIG", KEY_CONFIG, false, NULL }, + { "KEY_HOMEPAGE", KEY_HOMEPAGE, false, NULL }, + { "KEY_REFRESH", KEY_REFRESH, false, NULL }, + { "KEY_EXIT", KEY_EXIT, false, NULL }, + { "KEY_MOVE", KEY_MOVE, false, NULL }, + { "KEY_EDIT", KEY_EDIT, false, NULL }, + { "KEY_SCROLLUP", KEY_SCROLLUP, false, NULL }, + { "KEY_SCROLLDOWN", KEY_SCROLLDOWN, false, NULL }, + { "KEY_KPLEFTPAREN", KEY_KPLEFTPAREN, false, NULL }, + { "KEY_KPRIGHTPAREN", KEY_KPRIGHTPAREN, false, NULL }, + { "KEY_NEW", KEY_NEW, false, NULL }, + { "KEY_REDO", KEY_REDO, false, NULL }, + { "KEY_F13", KEY_F13, false, NULL }, + { "KEY_F14", KEY_F14, false, NULL }, + { "KEY_F15", KEY_F15, false, NULL }, + { "KEY_F16", KEY_F16, false, NULL }, + { "KEY_F17", KEY_F17, false, NULL }, + { "KEY_F18", KEY_F18, false, NULL }, + { "KEY_F19", KEY_F19, false, NULL }, + { "KEY_F20", KEY_F20, false, NULL }, + { "KEY_F21", KEY_F21, false, NULL }, + { "KEY_F22", KEY_F22, false, NULL }, + { "KEY_F23", KEY_F23, false, NULL }, + { "KEY_F24", KEY_F24, false, NULL }, + { "KEY_PLAYCD", KEY_PLAYCD, false, NULL }, + { "KEY_PAUSECD", KEY_PAUSECD, false, NULL }, + { "KEY_PROG3", KEY_PROG3, false, NULL }, + { "KEY_PROG4", KEY_PROG4, false, NULL }, + { "KEY_DASHBOARD", KEY_DASHBOARD, false, NULL }, + { "KEY_SUSPEND", KEY_SUSPEND, false, NULL }, + { "KEY_CLOSE", KEY_CLOSE, false, NULL }, + { "KEY_PLAY", KEY_PLAY, false, NULL }, + { "KEY_FASTFORWARD", KEY_FASTFORWARD, false, NULL }, + { "KEY_BASSBOOST", KEY_BASSBOOST, false, NULL }, + { "KEY_PRINT", KEY_PRINT, false, NULL }, + { "KEY_HP", KEY_HP, false, NULL }, + { "KEY_CAMERA", KEY_CAMERA, false, NULL }, + { "KEY_SOUND", KEY_SOUND, false, NULL }, + { "KEY_QUESTION", KEY_QUESTION, false, NULL }, + { "KEY_EMAIL", KEY_EMAIL, false, NULL }, + { "KEY_CHAT", KEY_CHAT, false, NULL }, + { "KEY_SEARCH", KEY_SEARCH, false, NULL }, + { "KEY_CONNECT", KEY_CONNECT, false, NULL }, + { "KEY_FINANCE", KEY_FINANCE, false, NULL }, + { "KEY_SPORT", KEY_SPORT, false, NULL }, + { "KEY_SHOP", KEY_SHOP, false, NULL }, + { "KEY_ALTERASE", KEY_ALTERASE, false, NULL }, + { "KEY_CANCEL", KEY_CANCEL, false, NULL }, + { "KEY_BRIGHTNESSDOWN", KEY_BRIGHTNESSDOWN, false, NULL }, + { "KEY_BRIGHTNESSUP", KEY_BRIGHTNESSUP, false, NULL }, + { "KEY_MEDIA", KEY_MEDIA, false, NULL }, + { "KEY_SWITCHVIDEOMODE", KEY_SWITCHVIDEOMODE, false, NULL }, + { "KEY_KBDILLUMTOGGLE", KEY_KBDILLUMTOGGLE, false, NULL }, + { "KEY_KBDILLUMDOWN", KEY_KBDILLUMDOWN, false, NULL }, + { "KEY_KBDILLUMUP", KEY_KBDILLUMUP, false, NULL }, + { "KEY_SEND", KEY_SEND, false, NULL }, + { "KEY_REPLY", KEY_REPLY, false, NULL }, + { "KEY_FORWARDMAIL", KEY_FORWARDMAIL, false, NULL }, + { "KEY_SAVE", KEY_SAVE, false, NULL }, + { "KEY_DOCUMENTS", KEY_DOCUMENTS, false, NULL }, + { "KEY_BATTERY", KEY_BATTERY, false, NULL }, + { "KEY_BLUETOOTH", KEY_BLUETOOTH, false, NULL }, + { "KEY_WLAN", KEY_WLAN, false, NULL }, + { "KEY_UWB", KEY_UWB, false, NULL }, + { "KEY_UNKNOWN", KEY_UNKNOWN, false, NULL }, + { "KEY_VIDEO_NEXT", KEY_VIDEO_NEXT, false, NULL }, + { "KEY_VIDEO_PREV", KEY_VIDEO_PREV, false, NULL }, + { "KEY_BRIGHTNESS_CYCLE", KEY_BRIGHTNESS_CYCLE, false, NULL }, + { "KEY_BRIGHTNESS_AUTO", KEY_BRIGHTNESS_AUTO, false, NULL }, + { "KEY_BRIGHTNESS_ZERO", KEY_BRIGHTNESS_ZERO, true, NULL }, + { "KEY_DISPLAY_OFF", KEY_DISPLAY_OFF, false, NULL }, + { "KEY_WWAN", KEY_WWAN, false, NULL }, + { "KEY_WIMAX", KEY_WIMAX, true, NULL }, + { "KEY_RFKILL", KEY_RFKILL, false, NULL }, + { "KEY_MICMUTE", KEY_MICMUTE, false, NULL }, + { "KEY_OK", KEY_OK, false, NULL }, + { "KEY_SELECT", KEY_SELECT, false, NULL }, + { "KEY_GOTO", KEY_GOTO, false, NULL }, + { "KEY_CLEAR", KEY_CLEAR, false, NULL }, + { "KEY_POWER2", KEY_POWER2, false, NULL }, + { "KEY_OPTION", KEY_OPTION, false, NULL }, + { "KEY_INFO", KEY_INFO, false, NULL }, + { "KEY_TIME", KEY_TIME, false, NULL }, + { "KEY_VENDOR", KEY_VENDOR, false, NULL }, + { "KEY_ARCHIVE", KEY_ARCHIVE, false, NULL }, + { "KEY_PROGRAM", KEY_PROGRAM, false, NULL }, + { "KEY_CHANNEL", KEY_CHANNEL, false, NULL }, + { "KEY_FAVORITES", KEY_FAVORITES, false, NULL }, + { "KEY_EPG", KEY_EPG, false, NULL }, + { "KEY_PVR", KEY_PVR, false, NULL }, + { "KEY_MHP", KEY_MHP, false, NULL }, + { "KEY_LANGUAGE", KEY_LANGUAGE, false, NULL }, + { "KEY_TITLE", KEY_TITLE, false, NULL }, + { "KEY_SUBTITLE", KEY_SUBTITLE, false, NULL }, + { "KEY_ANGLE", KEY_ANGLE, false, NULL }, + { "KEY_ZOOM", KEY_ZOOM, false, NULL }, + { "KEY_MODE", KEY_MODE, false, NULL }, + { "KEY_KEYBOARD", KEY_KEYBOARD, false, NULL }, + { "KEY_SCREEN", KEY_SCREEN, false, NULL }, + { "KEY_PC", KEY_PC, false, NULL }, + { "KEY_TV", KEY_TV, false, NULL }, + { "KEY_TV2", KEY_TV2, false, NULL }, + { "KEY_VCR", KEY_VCR, false, NULL }, + { "KEY_VCR2", KEY_VCR2, false, NULL }, + { "KEY_SAT", KEY_SAT, false, NULL }, + { "KEY_SAT2", KEY_SAT2, false, NULL }, + { "KEY_CD", KEY_CD, false, NULL }, + { "KEY_TAPE", KEY_TAPE, false, NULL }, + { "KEY_RADIO", KEY_RADIO, false, NULL }, + { "KEY_TUNER", KEY_TUNER, false, NULL }, + { "KEY_PLAYER", KEY_PLAYER, false, NULL }, + { "KEY_TEXT", KEY_TEXT, false, NULL }, + { "KEY_DVD", KEY_DVD, false, NULL }, + { "KEY_AUX", KEY_AUX, false, NULL }, + { "KEY_MP3", KEY_MP3, false, NULL }, + { "KEY_AUDIO", KEY_AUDIO, false, NULL }, + { "KEY_VIDEO", KEY_VIDEO, false, NULL }, + { "KEY_DIRECTORY", KEY_DIRECTORY, false, NULL }, + { "KEY_LIST", KEY_LIST, false, NULL }, + { "KEY_MEMO", KEY_MEMO, false, NULL }, + { "KEY_CALENDAR", KEY_CALENDAR, false, NULL }, + { "KEY_RED", KEY_RED, false, NULL }, + { "KEY_GREEN", KEY_GREEN, false, NULL }, + { "KEY_YELLOW", KEY_YELLOW, false, NULL }, + { "KEY_BLUE", KEY_BLUE, false, NULL }, + { "KEY_CHANNELUP", KEY_CHANNELUP, false, NULL }, + { "KEY_CHANNELDOWN", KEY_CHANNELDOWN, false, NULL }, + { "KEY_FIRST", KEY_FIRST, false, NULL }, + { "KEY_LAST", KEY_LAST, false, NULL }, + { "KEY_AB", KEY_AB, false, NULL }, + { "KEY_NEXT", KEY_NEXT, false, NULL }, + { "KEY_RESTART", KEY_RESTART, false, NULL }, + { "KEY_SLOW", KEY_SLOW, false, NULL }, + { "KEY_SHUFFLE", KEY_SHUFFLE, false, NULL }, + { "KEY_BREAK", KEY_BREAK, false, NULL }, + { "KEY_PREVIOUS", KEY_PREVIOUS, false, NULL }, + { "KEY_DIGITS", KEY_DIGITS, false, NULL }, + { "KEY_TEEN", KEY_TEEN, false, NULL }, + { "KEY_TWEN", KEY_TWEN, false, NULL }, + { "KEY_VIDEOPHONE", KEY_VIDEOPHONE, false, NULL }, + { "KEY_GAMES", KEY_GAMES, false, NULL }, + { "KEY_ZOOMIN", KEY_ZOOMIN, false, NULL }, + { "KEY_ZOOMOUT", KEY_ZOOMOUT, false, NULL }, + { "KEY_ZOOMRESET", KEY_ZOOMRESET, false, NULL }, + { "KEY_WORDPROCESSOR", KEY_WORDPROCESSOR, false, NULL }, + { "KEY_EDITOR", KEY_EDITOR, false, NULL }, + { "KEY_SPREADSHEET", KEY_SPREADSHEET, false, NULL }, + { "KEY_GRAPHICSEDITOR", KEY_GRAPHICSEDITOR, false, NULL }, + { "KEY_PRESENTATION", KEY_PRESENTATION, false, NULL }, + { "KEY_DATABASE", KEY_DATABASE, false, NULL }, + { "KEY_NEWS", KEY_NEWS, false, NULL }, + { "KEY_VOICEMAIL", KEY_VOICEMAIL, false, NULL }, + { "KEY_ADDRESSBOOK", KEY_ADDRESSBOOK, false, NULL }, + { "KEY_MESSENGER", KEY_MESSENGER, false, NULL }, + { "KEY_DISPLAYTOGGLE", KEY_DISPLAYTOGGLE, false, NULL }, + { "KEY_BRIGHTNESS_TOGGLE", KEY_BRIGHTNESS_TOGGLE, true, NULL }, + { "KEY_SPELLCHECK", KEY_SPELLCHECK, false, NULL }, + { "KEY_LOGOFF", KEY_LOGOFF, false, NULL }, + { "KEY_DOLLAR", KEY_DOLLAR, false, NULL }, + { "KEY_EURO", KEY_EURO, false, NULL }, + { "KEY_FRAMEBACK", KEY_FRAMEBACK, false, NULL }, + { "KEY_FRAMEFORWARD", KEY_FRAMEFORWARD, false, NULL }, + { "KEY_CONTEXT_MENU", KEY_CONTEXT_MENU, false, NULL }, + { "KEY_MEDIA_REPEAT", KEY_MEDIA_REPEAT, false, NULL }, + { "KEY_10CHANNELSUP", KEY_10CHANNELSUP, false, NULL }, + { "KEY_10CHANNELSDOWN", KEY_10CHANNELSDOWN, false, NULL }, + { "KEY_IMAGES", KEY_IMAGES, false, NULL }, + { "KEY_DEL_EOL", KEY_DEL_EOL, false, NULL }, + { "KEY_DEL_EOS", KEY_DEL_EOS, false, NULL }, + { "KEY_INS_LINE", KEY_INS_LINE, false, NULL }, + { "KEY_DEL_LINE", KEY_DEL_LINE, false, NULL }, + { "KEY_FN", KEY_FN, false, NULL }, + { "KEY_FN_ESC", KEY_FN_ESC, false, NULL }, + { "KEY_FN_F1", KEY_FN_F1, false, NULL }, + { "KEY_FN_F2", KEY_FN_F2, false, NULL }, + { "KEY_FN_F3", KEY_FN_F3, false, NULL }, + { "KEY_FN_F4", KEY_FN_F4, false, NULL }, + { "KEY_FN_F5", KEY_FN_F5, false, NULL }, + { "KEY_FN_F6", KEY_FN_F6, false, NULL }, + { "KEY_FN_F7", KEY_FN_F7, false, NULL }, + { "KEY_FN_F8", KEY_FN_F8, false, NULL }, + { "KEY_FN_F9", KEY_FN_F9, false, NULL }, + { "KEY_FN_F10", KEY_FN_F10, false, NULL }, + { "KEY_FN_F11", KEY_FN_F11, false, NULL }, + { "KEY_FN_F12", KEY_FN_F12, false, NULL }, + { "KEY_FN_1", KEY_FN_1, false, NULL }, + { "KEY_FN_2", KEY_FN_2, false, NULL }, + { "KEY_FN_D", KEY_FN_D, false, NULL }, + { "KEY_FN_E", KEY_FN_E, false, NULL }, + { "KEY_FN_F", KEY_FN_F, false, NULL }, + { "KEY_FN_S", KEY_FN_S, false, NULL }, + { "KEY_FN_B", KEY_FN_B, false, NULL }, + { "KEY_BRL_DOT1", KEY_BRL_DOT1, false, NULL }, + { "KEY_BRL_DOT2", KEY_BRL_DOT2, false, NULL }, + { "KEY_BRL_DOT3", KEY_BRL_DOT3, false, NULL }, + { "KEY_BRL_DOT4", KEY_BRL_DOT4, false, NULL }, + { "KEY_BRL_DOT5", KEY_BRL_DOT5, false, NULL }, + { "KEY_BRL_DOT6", KEY_BRL_DOT6, false, NULL }, + { "KEY_BRL_DOT7", KEY_BRL_DOT7, false, NULL }, + { "KEY_BRL_DOT8", KEY_BRL_DOT8, false, NULL }, + { "KEY_BRL_DOT9", KEY_BRL_DOT9, false, NULL }, + { "KEY_BRL_DOT10", KEY_BRL_DOT10, false, NULL }, + { "KEY_NUMERIC_0", KEY_NUMERIC_0, false, NULL }, + { "KEY_NUMERIC_1", KEY_NUMERIC_1, false, NULL }, + { "KEY_NUMERIC_2", KEY_NUMERIC_2, false, NULL }, + { "KEY_NUMERIC_3", KEY_NUMERIC_3, false, NULL }, + { "KEY_NUMERIC_4", KEY_NUMERIC_4, false, NULL }, + { "KEY_NUMERIC_5", KEY_NUMERIC_5, false, NULL }, + { "KEY_NUMERIC_6", KEY_NUMERIC_6, false, NULL }, + { "KEY_NUMERIC_7", KEY_NUMERIC_7, false, NULL }, + { "KEY_NUMERIC_8", KEY_NUMERIC_8, false, NULL }, + { "KEY_NUMERIC_9", KEY_NUMERIC_9, false, NULL }, + { "KEY_NUMERIC_STAR", KEY_NUMERIC_STAR, false, NULL }, + { "KEY_NUMERIC_POUND", KEY_NUMERIC_POUND, false, NULL }, + { "KEY_CAMERA_FOCUS", KEY_CAMERA_FOCUS, false, NULL }, + { "KEY_WPS_BUTTON", KEY_WPS_BUTTON, false, NULL }, + { "KEY_TOUCHPAD_TOGGLE", KEY_TOUCHPAD_TOGGLE, false, NULL }, + { "KEY_TOUCHPAD_ON", KEY_TOUCHPAD_ON, false, NULL }, + { "KEY_TOUCHPAD_OFF", KEY_TOUCHPAD_OFF, false, NULL }, + { "KEY_CAMERA_ZOOMIN", KEY_CAMERA_ZOOMIN, false, NULL }, + { "KEY_CAMERA_ZOOMOUT", KEY_CAMERA_ZOOMOUT, false, NULL }, + { "KEY_CAMERA_UP", KEY_CAMERA_UP, false, NULL }, + { "KEY_CAMERA_DOWN", KEY_CAMERA_DOWN, false, NULL }, + { "KEY_CAMERA_LEFT", KEY_CAMERA_LEFT, false, NULL }, + { "KEY_CAMERA_RIGHT", KEY_CAMERA_RIGHT, false, NULL }, + { "KEY_ATTENDANT_ON", KEY_ATTENDANT_ON, false, NULL }, + { "KEY_ATTENDANT_OFF", KEY_ATTENDANT_OFF, false, NULL }, + { "KEY_ATTENDANT_TOGGLE", KEY_ATTENDANT_TOGGLE, false, NULL }, + { "KEY_LIGHTS_TOGGLE", KEY_LIGHTS_TOGGLE, false, NULL }, + { "KEY_ALS_TOGGLE", KEY_ALS_TOGGLE, false, NULL }, + { "KEY_BUTTONCONFIG", KEY_BUTTONCONFIG, false, NULL }, + { "KEY_TASKMANAGER", KEY_TASKMANAGER, false, NULL }, + { "KEY_JOURNAL", KEY_JOURNAL, false, NULL }, + { "KEY_CONTROLPANEL", KEY_CONTROLPANEL, false, NULL }, + { "KEY_APPSELECT", KEY_APPSELECT, false, NULL }, + { "KEY_SCREENSAVER", KEY_SCREENSAVER, false, NULL }, + { "KEY_VOICECOMMAND", KEY_VOICECOMMAND, false, NULL }, + { "KEY_BRIGHTNESS_MIN", KEY_BRIGHTNESS_MIN, false, NULL }, + { "KEY_BRIGHTNESS_MAX", KEY_BRIGHTNESS_MAX, false, NULL }, + { "KEY_KBDINPUTASSIST_PREV", KEY_KBDINPUTASSIST_PREV, false, NULL }, + { "KEY_KBDINPUTASSIST_NEXT", KEY_KBDINPUTASSIST_NEXT, false, NULL }, + { "KEY_KBDINPUTASSIST_PREVGROUP", KEY_KBDINPUTASSIST_PREVGROUP, false, NULL }, + { "KEY_KBDINPUTASSIST_NEXTGROUP", KEY_KBDINPUTASSIST_NEXTGROUP, false, NULL }, + { "KEY_KBDINPUTASSIST_ACCEPT", KEY_KBDINPUTASSIST_ACCEPT, false, NULL }, + { "KEY_KBDINPUTASSIST_CANCEL", KEY_KBDINPUTASSIST_CANCEL, false, NULL }, + { "KEY_MIN_INTERESTING", KEY_MIN_INTERESTING, true, NULL }, + { "KEY_MAX", KEY_MAX, false, NULL }, + { "KEY_CNT", KEY_CNT, false, NULL }, + { NULL, 0, false, NULL } +}; diff --git a/linux-input-keycodes.h b/linux-input-keycodes.h index 37021a5..d0b6f8c 100644 --- a/linux-input-keycodes.h +++ b/linux-input-keycodes.h @@ -3,436 +3,18 @@ /* AUTOGENERATED: DO NOT EDIT */ -#include "linux-input-enum.h" +#include +#include +#include +#include "linux-input.h" struct linux_input_keycode { const char *name; - enum linux_input_keyval value; + uint32_t value; bool alias; void *cairo_surface; }; -struct linux_input_keycode linux_input_keycodes[] = { - { "KEY_RESERVED", KEY_RESERVED, false, NULL }, - { "KEY_ESC", KEY_ESC, false, NULL }, - { "KEY_1", KEY_1, false, NULL }, - { "KEY_2", KEY_2, false, NULL }, - { "KEY_3", KEY_3, false, NULL }, - { "KEY_4", KEY_4, false, NULL }, - { "KEY_5", KEY_5, false, NULL }, - { "KEY_6", KEY_6, false, NULL }, - { "KEY_7", KEY_7, false, NULL }, - { "KEY_8", KEY_8, false, NULL }, - { "KEY_9", KEY_9, false, NULL }, - { "KEY_0", KEY_0, false, NULL }, - { "KEY_MINUS", KEY_MINUS, false, NULL }, - { "KEY_EQUAL", KEY_EQUAL, false, NULL }, - { "KEY_BACKSPACE", KEY_BACKSPACE, false, NULL }, - { "KEY_TAB", KEY_TAB, false, NULL }, - { "KEY_Q", KEY_Q, false, NULL }, - { "KEY_W", KEY_W, false, NULL }, - { "KEY_E", KEY_E, false, NULL }, - { "KEY_R", KEY_R, false, NULL }, - { "KEY_T", KEY_T, false, NULL }, - { "KEY_Y", KEY_Y, false, NULL }, - { "KEY_U", KEY_U, false, NULL }, - { "KEY_I", KEY_I, false, NULL }, - { "KEY_O", KEY_O, false, NULL }, - { "KEY_P", KEY_P, false, NULL }, - { "KEY_LEFTBRACE", KEY_LEFTBRACE, false, NULL }, - { "KEY_RIGHTBRACE", KEY_RIGHTBRACE, false, NULL }, - { "KEY_ENTER", KEY_ENTER, false, NULL }, - { "KEY_LEFTCTRL", KEY_LEFTCTRL, false, NULL }, - { "KEY_A", KEY_A, false, NULL }, - { "KEY_S", KEY_S, false, NULL }, - { "KEY_D", KEY_D, false, NULL }, - { "KEY_F", KEY_F, false, NULL }, - { "KEY_G", KEY_G, false, NULL }, - { "KEY_H", KEY_H, false, NULL }, - { "KEY_J", KEY_J, false, NULL }, - { "KEY_K", KEY_K, false, NULL }, - { "KEY_L", KEY_L, false, NULL }, - { "KEY_SEMICOLON", KEY_SEMICOLON, false, NULL }, - { "KEY_APOSTROPHE", KEY_APOSTROPHE, false, NULL }, - { "KEY_GRAVE", KEY_GRAVE, false, NULL }, - { "KEY_LEFTSHIFT", KEY_LEFTSHIFT, false, NULL }, - { "KEY_BACKSLASH", KEY_BACKSLASH, false, NULL }, - { "KEY_Z", KEY_Z, false, NULL }, - { "KEY_X", KEY_X, false, NULL }, - { "KEY_C", KEY_C, false, NULL }, - { "KEY_V", KEY_V, false, NULL }, - { "KEY_B", KEY_B, false, NULL }, - { "KEY_N", KEY_N, false, NULL }, - { "KEY_M", KEY_M, false, NULL }, - { "KEY_COMMA", KEY_COMMA, false, NULL }, - { "KEY_DOT", KEY_DOT, false, NULL }, - { "KEY_SLASH", KEY_SLASH, false, NULL }, - { "KEY_RIGHTSHIFT", KEY_RIGHTSHIFT, false, NULL }, - { "KEY_KPASTERISK", KEY_KPASTERISK, false, NULL }, - { "KEY_LEFTALT", KEY_LEFTALT, false, NULL }, - { "KEY_SPACE", KEY_SPACE, false, NULL }, - { "KEY_CAPSLOCK", KEY_CAPSLOCK, false, NULL }, - { "KEY_F1", KEY_F1, false, NULL }, - { "KEY_F2", KEY_F2, false, NULL }, - { "KEY_F3", KEY_F3, false, NULL }, - { "KEY_F4", KEY_F4, false, NULL }, - { "KEY_F5", KEY_F5, false, NULL }, - { "KEY_F6", KEY_F6, false, NULL }, - { "KEY_F7", KEY_F7, false, NULL }, - { "KEY_F8", KEY_F8, false, NULL }, - { "KEY_F9", KEY_F9, false, NULL }, - { "KEY_F10", KEY_F10, false, NULL }, - { "KEY_NUMLOCK", KEY_NUMLOCK, false, NULL }, - { "KEY_SCROLLLOCK", KEY_SCROLLLOCK, false, NULL }, - { "KEY_KP7", KEY_KP7, false, NULL }, - { "KEY_KP8", KEY_KP8, false, NULL }, - { "KEY_KP9", KEY_KP9, false, NULL }, - { "KEY_KPMINUS", KEY_KPMINUS, false, NULL }, - { "KEY_KP4", KEY_KP4, false, NULL }, - { "KEY_KP5", KEY_KP5, false, NULL }, - { "KEY_KP6", KEY_KP6, false, NULL }, - { "KEY_KPPLUS", KEY_KPPLUS, false, NULL }, - { "KEY_KP1", KEY_KP1, false, NULL }, - { "KEY_KP2", KEY_KP2, false, NULL }, - { "KEY_KP3", KEY_KP3, false, NULL }, - { "KEY_KP0", KEY_KP0, false, NULL }, - { "KEY_KPDOT", KEY_KPDOT, false, NULL }, - { "KEY_ZENKAKUHANKAKU", KEY_ZENKAKUHANKAKU, false, NULL }, - { "KEY_102ND", KEY_102ND, false, NULL }, - { "KEY_F11", KEY_F11, false, NULL }, - { "KEY_F12", KEY_F12, false, NULL }, - { "KEY_RO", KEY_RO, false, NULL }, - { "KEY_KATAKANA", KEY_KATAKANA, false, NULL }, - { "KEY_HIRAGANA", KEY_HIRAGANA, false, NULL }, - { "KEY_HENKAN", KEY_HENKAN, false, NULL }, - { "KEY_KATAKANAHIRAGANA", KEY_KATAKANAHIRAGANA, false, NULL }, - { "KEY_MUHENKAN", KEY_MUHENKAN, false, NULL }, - { "KEY_KPJPCOMMA", KEY_KPJPCOMMA, false, NULL }, - { "KEY_KPENTER", KEY_KPENTER, false, NULL }, - { "KEY_RIGHTCTRL", KEY_RIGHTCTRL, false, NULL }, - { "KEY_KPSLASH", KEY_KPSLASH, false, NULL }, - { "KEY_SYSRQ", KEY_SYSRQ, false, NULL }, - { "KEY_RIGHTALT", KEY_RIGHTALT, false, NULL }, - { "KEY_LINEFEED", KEY_LINEFEED, false, NULL }, - { "KEY_HOME", KEY_HOME, false, NULL }, - { "KEY_UP", KEY_UP, false, NULL }, - { "KEY_PAGEUP", KEY_PAGEUP, false, NULL }, - { "KEY_LEFT", KEY_LEFT, false, NULL }, - { "KEY_RIGHT", KEY_RIGHT, false, NULL }, - { "KEY_END", KEY_END, false, NULL }, - { "KEY_DOWN", KEY_DOWN, false, NULL }, - { "KEY_PAGEDOWN", KEY_PAGEDOWN, false, NULL }, - { "KEY_INSERT", KEY_INSERT, false, NULL }, - { "KEY_DELETE", KEY_DELETE, false, NULL }, - { "KEY_MACRO", KEY_MACRO, false, NULL }, - { "KEY_MUTE", KEY_MUTE, false, NULL }, - { "KEY_VOLUMEDOWN", KEY_VOLUMEDOWN, false, NULL }, - { "KEY_VOLUMEUP", KEY_VOLUMEUP, false, NULL }, - { "KEY_POWER", KEY_POWER, false, NULL }, - { "KEY_KPEQUAL", KEY_KPEQUAL, false, NULL }, - { "KEY_KPPLUSMINUS", KEY_KPPLUSMINUS, false, NULL }, - { "KEY_PAUSE", KEY_PAUSE, false, NULL }, - { "KEY_SCALE", KEY_SCALE, false, NULL }, - { "KEY_KPCOMMA", KEY_KPCOMMA, false, NULL }, - { "KEY_HANGEUL", KEY_HANGEUL, false, NULL }, - { "KEY_HANGUEL", KEY_HANGUEL, true, NULL }, - { "KEY_HANJA", KEY_HANJA, false, NULL }, - { "KEY_YEN", KEY_YEN, false, NULL }, - { "KEY_LEFTMETA", KEY_LEFTMETA, false, NULL }, - { "KEY_RIGHTMETA", KEY_RIGHTMETA, false, NULL }, - { "KEY_COMPOSE", KEY_COMPOSE, false, NULL }, - { "KEY_STOP", KEY_STOP, false, NULL }, - { "KEY_AGAIN", KEY_AGAIN, false, NULL }, - { "KEY_PROPS", KEY_PROPS, false, NULL }, - { "KEY_UNDO", KEY_UNDO, false, NULL }, - { "KEY_FRONT", KEY_FRONT, false, NULL }, - { "KEY_COPY", KEY_COPY, false, NULL }, - { "KEY_OPEN", KEY_OPEN, false, NULL }, - { "KEY_PASTE", KEY_PASTE, false, NULL }, - { "KEY_FIND", KEY_FIND, false, NULL }, - { "KEY_CUT", KEY_CUT, false, NULL }, - { "KEY_HELP", KEY_HELP, false, NULL }, - { "KEY_MENU", KEY_MENU, false, NULL }, - { "KEY_CALC", KEY_CALC, false, NULL }, - { "KEY_SETUP", KEY_SETUP, false, NULL }, - { "KEY_SLEEP", KEY_SLEEP, false, NULL }, - { "KEY_WAKEUP", KEY_WAKEUP, false, NULL }, - { "KEY_FILE", KEY_FILE, false, NULL }, - { "KEY_SENDFILE", KEY_SENDFILE, false, NULL }, - { "KEY_DELETEFILE", KEY_DELETEFILE, false, NULL }, - { "KEY_XFER", KEY_XFER, false, NULL }, - { "KEY_PROG1", KEY_PROG1, false, NULL }, - { "KEY_PROG2", KEY_PROG2, false, NULL }, - { "KEY_WWW", KEY_WWW, false, NULL }, - { "KEY_MSDOS", KEY_MSDOS, false, NULL }, - { "KEY_COFFEE", KEY_COFFEE, false, NULL }, - { "KEY_SCREENLOCK", KEY_SCREENLOCK, true, NULL }, - { "KEY_DIRECTION", KEY_DIRECTION, false, NULL }, - { "KEY_CYCLEWINDOWS", KEY_CYCLEWINDOWS, false, NULL }, - { "KEY_MAIL", KEY_MAIL, false, NULL }, - { "KEY_BOOKMARKS", KEY_BOOKMARKS, false, NULL }, - { "KEY_COMPUTER", KEY_COMPUTER, false, NULL }, - { "KEY_BACK", KEY_BACK, false, NULL }, - { "KEY_FORWARD", KEY_FORWARD, false, NULL }, - { "KEY_CLOSECD", KEY_CLOSECD, false, NULL }, - { "KEY_EJECTCD", KEY_EJECTCD, false, NULL }, - { "KEY_EJECTCLOSECD", KEY_EJECTCLOSECD, false, NULL }, - { "KEY_NEXTSONG", KEY_NEXTSONG, false, NULL }, - { "KEY_PLAYPAUSE", KEY_PLAYPAUSE, false, NULL }, - { "KEY_PREVIOUSSONG", KEY_PREVIOUSSONG, false, NULL }, - { "KEY_STOPCD", KEY_STOPCD, false, NULL }, - { "KEY_RECORD", KEY_RECORD, false, NULL }, - { "KEY_REWIND", KEY_REWIND, false, NULL }, - { "KEY_PHONE", KEY_PHONE, false, NULL }, - { "KEY_ISO", KEY_ISO, false, NULL }, - { "KEY_CONFIG", KEY_CONFIG, false, NULL }, - { "KEY_HOMEPAGE", KEY_HOMEPAGE, false, NULL }, - { "KEY_REFRESH", KEY_REFRESH, false, NULL }, - { "KEY_EXIT", KEY_EXIT, false, NULL }, - { "KEY_MOVE", KEY_MOVE, false, NULL }, - { "KEY_EDIT", KEY_EDIT, false, NULL }, - { "KEY_SCROLLUP", KEY_SCROLLUP, false, NULL }, - { "KEY_SCROLLDOWN", KEY_SCROLLDOWN, false, NULL }, - { "KEY_KPLEFTPAREN", KEY_KPLEFTPAREN, false, NULL }, - { "KEY_KPRIGHTPAREN", KEY_KPRIGHTPAREN, false, NULL }, - { "KEY_NEW", KEY_NEW, false, NULL }, - { "KEY_REDO", KEY_REDO, false, NULL }, - { "KEY_F13", KEY_F13, false, NULL }, - { "KEY_F14", KEY_F14, false, NULL }, - { "KEY_F15", KEY_F15, false, NULL }, - { "KEY_F16", KEY_F16, false, NULL }, - { "KEY_F17", KEY_F17, false, NULL }, - { "KEY_F18", KEY_F18, false, NULL }, - { "KEY_F19", KEY_F19, false, NULL }, - { "KEY_F20", KEY_F20, false, NULL }, - { "KEY_F21", KEY_F21, false, NULL }, - { "KEY_F22", KEY_F22, false, NULL }, - { "KEY_F23", KEY_F23, false, NULL }, - { "KEY_F24", KEY_F24, false, NULL }, - { "KEY_PLAYCD", KEY_PLAYCD, false, NULL }, - { "KEY_PAUSECD", KEY_PAUSECD, false, NULL }, - { "KEY_PROG3", KEY_PROG3, false, NULL }, - { "KEY_PROG4", KEY_PROG4, false, NULL }, - { "KEY_DASHBOARD", KEY_DASHBOARD, false, NULL }, - { "KEY_SUSPEND", KEY_SUSPEND, false, NULL }, - { "KEY_CLOSE", KEY_CLOSE, false, NULL }, - { "KEY_PLAY", KEY_PLAY, false, NULL }, - { "KEY_FASTFORWARD", KEY_FASTFORWARD, false, NULL }, - { "KEY_BASSBOOST", KEY_BASSBOOST, false, NULL }, - { "KEY_PRINT", KEY_PRINT, false, NULL }, - { "KEY_HP", KEY_HP, false, NULL }, - { "KEY_CAMERA", KEY_CAMERA, false, NULL }, - { "KEY_SOUND", KEY_SOUND, false, NULL }, - { "KEY_QUESTION", KEY_QUESTION, false, NULL }, - { "KEY_EMAIL", KEY_EMAIL, false, NULL }, - { "KEY_CHAT", KEY_CHAT, false, NULL }, - { "KEY_SEARCH", KEY_SEARCH, false, NULL }, - { "KEY_CONNECT", KEY_CONNECT, false, NULL }, - { "KEY_FINANCE", KEY_FINANCE, false, NULL }, - { "KEY_SPORT", KEY_SPORT, false, NULL }, - { "KEY_SHOP", KEY_SHOP, false, NULL }, - { "KEY_ALTERASE", KEY_ALTERASE, false, NULL }, - { "KEY_CANCEL", KEY_CANCEL, false, NULL }, - { "KEY_BRIGHTNESSDOWN", KEY_BRIGHTNESSDOWN, false, NULL }, - { "KEY_BRIGHTNESSUP", KEY_BRIGHTNESSUP, false, NULL }, - { "KEY_MEDIA", KEY_MEDIA, false, NULL }, - { "KEY_SWITCHVIDEOMODE", KEY_SWITCHVIDEOMODE, false, NULL }, - { "KEY_KBDILLUMTOGGLE", KEY_KBDILLUMTOGGLE, false, NULL }, - { "KEY_KBDILLUMDOWN", KEY_KBDILLUMDOWN, false, NULL }, - { "KEY_KBDILLUMUP", KEY_KBDILLUMUP, false, NULL }, - { "KEY_SEND", KEY_SEND, false, NULL }, - { "KEY_REPLY", KEY_REPLY, false, NULL }, - { "KEY_FORWARDMAIL", KEY_FORWARDMAIL, false, NULL }, - { "KEY_SAVE", KEY_SAVE, false, NULL }, - { "KEY_DOCUMENTS", KEY_DOCUMENTS, false, NULL }, - { "KEY_BATTERY", KEY_BATTERY, false, NULL }, - { "KEY_BLUETOOTH", KEY_BLUETOOTH, false, NULL }, - { "KEY_WLAN", KEY_WLAN, false, NULL }, - { "KEY_UWB", KEY_UWB, false, NULL }, - { "KEY_UNKNOWN", KEY_UNKNOWN, false, NULL }, - { "KEY_VIDEO_NEXT", KEY_VIDEO_NEXT, false, NULL }, - { "KEY_VIDEO_PREV", KEY_VIDEO_PREV, false, NULL }, - { "KEY_BRIGHTNESS_CYCLE", KEY_BRIGHTNESS_CYCLE, false, NULL }, - { "KEY_BRIGHTNESS_AUTO", KEY_BRIGHTNESS_AUTO, false, NULL }, - { "KEY_BRIGHTNESS_ZERO", KEY_BRIGHTNESS_ZERO, true, NULL }, - { "KEY_DISPLAY_OFF", KEY_DISPLAY_OFF, false, NULL }, - { "KEY_WWAN", KEY_WWAN, false, NULL }, - { "KEY_WIMAX", KEY_WIMAX, true, NULL }, - { "KEY_RFKILL", KEY_RFKILL, false, NULL }, - { "KEY_MICMUTE", KEY_MICMUTE, false, NULL }, - { "KEY_OK", KEY_OK, false, NULL }, - { "KEY_SELECT", KEY_SELECT, false, NULL }, - { "KEY_GOTO", KEY_GOTO, false, NULL }, - { "KEY_CLEAR", KEY_CLEAR, false, NULL }, - { "KEY_POWER2", KEY_POWER2, false, NULL }, - { "KEY_OPTION", KEY_OPTION, false, NULL }, - { "KEY_INFO", KEY_INFO, false, NULL }, - { "KEY_TIME", KEY_TIME, false, NULL }, - { "KEY_VENDOR", KEY_VENDOR, false, NULL }, - { "KEY_ARCHIVE", KEY_ARCHIVE, false, NULL }, - { "KEY_PROGRAM", KEY_PROGRAM, false, NULL }, - { "KEY_CHANNEL", KEY_CHANNEL, false, NULL }, - { "KEY_FAVORITES", KEY_FAVORITES, false, NULL }, - { "KEY_EPG", KEY_EPG, false, NULL }, - { "KEY_PVR", KEY_PVR, false, NULL }, - { "KEY_MHP", KEY_MHP, false, NULL }, - { "KEY_LANGUAGE", KEY_LANGUAGE, false, NULL }, - { "KEY_TITLE", KEY_TITLE, false, NULL }, - { "KEY_SUBTITLE", KEY_SUBTITLE, false, NULL }, - { "KEY_ANGLE", KEY_ANGLE, false, NULL }, - { "KEY_ZOOM", KEY_ZOOM, false, NULL }, - { "KEY_MODE", KEY_MODE, false, NULL }, - { "KEY_KEYBOARD", KEY_KEYBOARD, false, NULL }, - { "KEY_SCREEN", KEY_SCREEN, false, NULL }, - { "KEY_PC", KEY_PC, false, NULL }, - { "KEY_TV", KEY_TV, false, NULL }, - { "KEY_TV2", KEY_TV2, false, NULL }, - { "KEY_VCR", KEY_VCR, false, NULL }, - { "KEY_VCR2", KEY_VCR2, false, NULL }, - { "KEY_SAT", KEY_SAT, false, NULL }, - { "KEY_SAT2", KEY_SAT2, false, NULL }, - { "KEY_CD", KEY_CD, false, NULL }, - { "KEY_TAPE", KEY_TAPE, false, NULL }, - { "KEY_RADIO", KEY_RADIO, false, NULL }, - { "KEY_TUNER", KEY_TUNER, false, NULL }, - { "KEY_PLAYER", KEY_PLAYER, false, NULL }, - { "KEY_TEXT", KEY_TEXT, false, NULL }, - { "KEY_DVD", KEY_DVD, false, NULL }, - { "KEY_AUX", KEY_AUX, false, NULL }, - { "KEY_MP3", KEY_MP3, false, NULL }, - { "KEY_AUDIO", KEY_AUDIO, false, NULL }, - { "KEY_VIDEO", KEY_VIDEO, false, NULL }, - { "KEY_DIRECTORY", KEY_DIRECTORY, false, NULL }, - { "KEY_LIST", KEY_LIST, false, NULL }, - { "KEY_MEMO", KEY_MEMO, false, NULL }, - { "KEY_CALENDAR", KEY_CALENDAR, false, NULL }, - { "KEY_RED", KEY_RED, false, NULL }, - { "KEY_GREEN", KEY_GREEN, false, NULL }, - { "KEY_YELLOW", KEY_YELLOW, false, NULL }, - { "KEY_BLUE", KEY_BLUE, false, NULL }, - { "KEY_CHANNELUP", KEY_CHANNELUP, false, NULL }, - { "KEY_CHANNELDOWN", KEY_CHANNELDOWN, false, NULL }, - { "KEY_FIRST", KEY_FIRST, false, NULL }, - { "KEY_LAST", KEY_LAST, false, NULL }, - { "KEY_AB", KEY_AB, false, NULL }, - { "KEY_NEXT", KEY_NEXT, false, NULL }, - { "KEY_RESTART", KEY_RESTART, false, NULL }, - { "KEY_SLOW", KEY_SLOW, false, NULL }, - { "KEY_SHUFFLE", KEY_SHUFFLE, false, NULL }, - { "KEY_BREAK", KEY_BREAK, false, NULL }, - { "KEY_PREVIOUS", KEY_PREVIOUS, false, NULL }, - { "KEY_DIGITS", KEY_DIGITS, false, NULL }, - { "KEY_TEEN", KEY_TEEN, false, NULL }, - { "KEY_TWEN", KEY_TWEN, false, NULL }, - { "KEY_VIDEOPHONE", KEY_VIDEOPHONE, false, NULL }, - { "KEY_GAMES", KEY_GAMES, false, NULL }, - { "KEY_ZOOMIN", KEY_ZOOMIN, false, NULL }, - { "KEY_ZOOMOUT", KEY_ZOOMOUT, false, NULL }, - { "KEY_ZOOMRESET", KEY_ZOOMRESET, false, NULL }, - { "KEY_WORDPROCESSOR", KEY_WORDPROCESSOR, false, NULL }, - { "KEY_EDITOR", KEY_EDITOR, false, NULL }, - { "KEY_SPREADSHEET", KEY_SPREADSHEET, false, NULL }, - { "KEY_GRAPHICSEDITOR", KEY_GRAPHICSEDITOR, false, NULL }, - { "KEY_PRESENTATION", KEY_PRESENTATION, false, NULL }, - { "KEY_DATABASE", KEY_DATABASE, false, NULL }, - { "KEY_NEWS", KEY_NEWS, false, NULL }, - { "KEY_VOICEMAIL", KEY_VOICEMAIL, false, NULL }, - { "KEY_ADDRESSBOOK", KEY_ADDRESSBOOK, false, NULL }, - { "KEY_MESSENGER", KEY_MESSENGER, false, NULL }, - { "KEY_DISPLAYTOGGLE", KEY_DISPLAYTOGGLE, false, NULL }, - { "KEY_BRIGHTNESS_TOGGLE", KEY_BRIGHTNESS_TOGGLE, true, NULL }, - { "KEY_SPELLCHECK", KEY_SPELLCHECK, false, NULL }, - { "KEY_LOGOFF", KEY_LOGOFF, false, NULL }, - { "KEY_DOLLAR", KEY_DOLLAR, false, NULL }, - { "KEY_EURO", KEY_EURO, false, NULL }, - { "KEY_FRAMEBACK", KEY_FRAMEBACK, false, NULL }, - { "KEY_FRAMEFORWARD", KEY_FRAMEFORWARD, false, NULL }, - { "KEY_CONTEXT_MENU", KEY_CONTEXT_MENU, false, NULL }, - { "KEY_MEDIA_REPEAT", KEY_MEDIA_REPEAT, false, NULL }, - { "KEY_10CHANNELSUP", KEY_10CHANNELSUP, false, NULL }, - { "KEY_10CHANNELSDOWN", KEY_10CHANNELSDOWN, false, NULL }, - { "KEY_IMAGES", KEY_IMAGES, false, NULL }, - { "KEY_DEL_EOL", KEY_DEL_EOL, false, NULL }, - { "KEY_DEL_EOS", KEY_DEL_EOS, false, NULL }, - { "KEY_INS_LINE", KEY_INS_LINE, false, NULL }, - { "KEY_DEL_LINE", KEY_DEL_LINE, false, NULL }, - { "KEY_FN", KEY_FN, false, NULL }, - { "KEY_FN_ESC", KEY_FN_ESC, false, NULL }, - { "KEY_FN_F1", KEY_FN_F1, false, NULL }, - { "KEY_FN_F2", KEY_FN_F2, false, NULL }, - { "KEY_FN_F3", KEY_FN_F3, false, NULL }, - { "KEY_FN_F4", KEY_FN_F4, false, NULL }, - { "KEY_FN_F5", KEY_FN_F5, false, NULL }, - { "KEY_FN_F6", KEY_FN_F6, false, NULL }, - { "KEY_FN_F7", KEY_FN_F7, false, NULL }, - { "KEY_FN_F8", KEY_FN_F8, false, NULL }, - { "KEY_FN_F9", KEY_FN_F9, false, NULL }, - { "KEY_FN_F10", KEY_FN_F10, false, NULL }, - { "KEY_FN_F11", KEY_FN_F11, false, NULL }, - { "KEY_FN_F12", KEY_FN_F12, false, NULL }, - { "KEY_FN_1", KEY_FN_1, false, NULL }, - { "KEY_FN_2", KEY_FN_2, false, NULL }, - { "KEY_FN_D", KEY_FN_D, false, NULL }, - { "KEY_FN_E", KEY_FN_E, false, NULL }, - { "KEY_FN_F", KEY_FN_F, false, NULL }, - { "KEY_FN_S", KEY_FN_S, false, NULL }, - { "KEY_FN_B", KEY_FN_B, false, NULL }, - { "KEY_BRL_DOT1", KEY_BRL_DOT1, false, NULL }, - { "KEY_BRL_DOT2", KEY_BRL_DOT2, false, NULL }, - { "KEY_BRL_DOT3", KEY_BRL_DOT3, false, NULL }, - { "KEY_BRL_DOT4", KEY_BRL_DOT4, false, NULL }, - { "KEY_BRL_DOT5", KEY_BRL_DOT5, false, NULL }, - { "KEY_BRL_DOT6", KEY_BRL_DOT6, false, NULL }, - { "KEY_BRL_DOT7", KEY_BRL_DOT7, false, NULL }, - { "KEY_BRL_DOT8", KEY_BRL_DOT8, false, NULL }, - { "KEY_BRL_DOT9", KEY_BRL_DOT9, false, NULL }, - { "KEY_BRL_DOT10", KEY_BRL_DOT10, false, NULL }, - { "KEY_NUMERIC_0", KEY_NUMERIC_0, false, NULL }, - { "KEY_NUMERIC_1", KEY_NUMERIC_1, false, NULL }, - { "KEY_NUMERIC_2", KEY_NUMERIC_2, false, NULL }, - { "KEY_NUMERIC_3", KEY_NUMERIC_3, false, NULL }, - { "KEY_NUMERIC_4", KEY_NUMERIC_4, false, NULL }, - { "KEY_NUMERIC_5", KEY_NUMERIC_5, false, NULL }, - { "KEY_NUMERIC_6", KEY_NUMERIC_6, false, NULL }, - { "KEY_NUMERIC_7", KEY_NUMERIC_7, false, NULL }, - { "KEY_NUMERIC_8", KEY_NUMERIC_8, false, NULL }, - { "KEY_NUMERIC_9", KEY_NUMERIC_9, false, NULL }, - { "KEY_NUMERIC_STAR", KEY_NUMERIC_STAR, false, NULL }, - { "KEY_NUMERIC_POUND", KEY_NUMERIC_POUND, false, NULL }, - { "KEY_CAMERA_FOCUS", KEY_CAMERA_FOCUS, false, NULL }, - { "KEY_WPS_BUTTON", KEY_WPS_BUTTON, false, NULL }, - { "KEY_TOUCHPAD_TOGGLE", KEY_TOUCHPAD_TOGGLE, false, NULL }, - { "KEY_TOUCHPAD_ON", KEY_TOUCHPAD_ON, false, NULL }, - { "KEY_TOUCHPAD_OFF", KEY_TOUCHPAD_OFF, false, NULL }, - { "KEY_CAMERA_ZOOMIN", KEY_CAMERA_ZOOMIN, false, NULL }, - { "KEY_CAMERA_ZOOMOUT", KEY_CAMERA_ZOOMOUT, false, NULL }, - { "KEY_CAMERA_UP", KEY_CAMERA_UP, false, NULL }, - { "KEY_CAMERA_DOWN", KEY_CAMERA_DOWN, false, NULL }, - { "KEY_CAMERA_LEFT", KEY_CAMERA_LEFT, false, NULL }, - { "KEY_CAMERA_RIGHT", KEY_CAMERA_RIGHT, false, NULL }, - { "KEY_ATTENDANT_ON", KEY_ATTENDANT_ON, false, NULL }, - { "KEY_ATTENDANT_OFF", KEY_ATTENDANT_OFF, false, NULL }, - { "KEY_ATTENDANT_TOGGLE", KEY_ATTENDANT_TOGGLE, false, NULL }, - { "KEY_LIGHTS_TOGGLE", KEY_LIGHTS_TOGGLE, false, NULL }, - { "KEY_ALS_TOGGLE", KEY_ALS_TOGGLE, false, NULL }, - { "KEY_BUTTONCONFIG", KEY_BUTTONCONFIG, false, NULL }, - { "KEY_TASKMANAGER", KEY_TASKMANAGER, false, NULL }, - { "KEY_JOURNAL", KEY_JOURNAL, false, NULL }, - { "KEY_CONTROLPANEL", KEY_CONTROLPANEL, false, NULL }, - { "KEY_APPSELECT", KEY_APPSELECT, false, NULL }, - { "KEY_SCREENSAVER", KEY_SCREENSAVER, false, NULL }, - { "KEY_VOICECOMMAND", KEY_VOICECOMMAND, false, NULL }, - { "KEY_BRIGHTNESS_MIN", KEY_BRIGHTNESS_MIN, false, NULL }, - { "KEY_BRIGHTNESS_MAX", KEY_BRIGHTNESS_MAX, false, NULL }, - { "KEY_KBDINPUTASSIST_PREV", KEY_KBDINPUTASSIST_PREV, false, NULL }, - { "KEY_KBDINPUTASSIST_NEXT", KEY_KBDINPUTASSIST_NEXT, false, NULL }, - { "KEY_KBDINPUTASSIST_PREVGROUP", KEY_KBDINPUTASSIST_PREVGROUP, false, NULL }, - { "KEY_KBDINPUTASSIST_NEXTGROUP", KEY_KBDINPUTASSIST_NEXTGROUP, false, NULL }, - { "KEY_KBDINPUTASSIST_ACCEPT", KEY_KBDINPUTASSIST_ACCEPT, false, NULL }, - { "KEY_KBDINPUTASSIST_CANCEL", KEY_KBDINPUTASSIST_CANCEL, false, NULL }, - { "KEY_MIN_INTERESTING", KEY_MIN_INTERESTING, true, NULL }, - { "KEY_MAX", KEY_MAX, false, NULL }, - { "KEY_CNT", KEY_CNT, false, NULL }, - { NULL, 0, false, NULL } -}; +extern struct linux_input_keycode linux_input_keycodes[]; + #endif diff --git a/linux-input.h b/linux-input.h new file mode 100644 index 0000000..722eee6 --- /dev/null +++ b/linux-input.h @@ -0,0 +1,1199 @@ +/* + * Copyright (c) 1999-2002 Vojtech Pavlik + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ +#ifndef _INPUT_H +#define _INPUT_H + + +#include +#include +#include +#include + + +/* + * The event structure itself + */ + +struct input_event { + struct timeval time; + __u16 type; + __u16 code; + __s32 value; +}; + +/* + * Protocol version. + */ + +#define EV_VERSION 0x010001 + +/* + * IOCTLs (0x00 - 0x7f) + */ + +struct input_id { + __u16 bustype; + __u16 vendor; + __u16 product; + __u16 version; +}; + +/** + * struct input_absinfo - used by EVIOCGABS/EVIOCSABS ioctls + * @value: latest reported value for the axis. + * @minimum: specifies minimum value for the axis. + * @maximum: specifies maximum value for the axis. + * @fuzz: specifies fuzz value that is used to filter noise from + * the event stream. + * @flat: values that are within this value will be discarded by + * joydev interface and reported as 0 instead. + * @resolution: specifies resolution for the values reported for + * the axis. + * + * Note that input core does not clamp reported values to the + * [minimum, maximum] limits, such task is left to userspace. + * + * Resolution for main axes (ABS_X, ABS_Y, ABS_Z) is reported in + * units per millimeter (units/mm), resolution for rotational axes + * (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian. + */ +struct input_absinfo { + __s32 value; + __s32 minimum; + __s32 maximum; + __s32 fuzz; + __s32 flat; + __s32 resolution; +}; + +/** + * struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls + * @scancode: scancode represented in machine-endian form. + * @len: length of the scancode that resides in @scancode buffer. + * @index: index in the keymap, may be used instead of scancode + * @flags: allows to specify how kernel should handle the request. For + * example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel + * should perform lookup in keymap by @index instead of @scancode + * @keycode: key code assigned to this scancode + * + * The structure is used to retrieve and modify keymap data. Users have + * option of performing lookup either by @scancode itself or by @index + * in keymap entry. EVIOCGKEYCODE will also return scancode or index + * (depending on which element was used to perform lookup). + */ +struct input_keymap_entry { +#define INPUT_KEYMAP_BY_INDEX (1 << 0) + __u8 flags; + __u8 len; + __u16 index; + __u32 keycode; + __u8 scancode[32]; +}; + +#define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */ +#define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */ +#define EVIOCGREP _IOR('E', 0x03, unsigned int[2]) /* get repeat settings */ +#define EVIOCSREP _IOW('E', 0x03, unsigned int[2]) /* set repeat settings */ + +#define EVIOCGKEYCODE _IOR('E', 0x04, unsigned int[2]) /* get keycode */ +#define EVIOCGKEYCODE_V2 _IOR('E', 0x04, struct input_keymap_entry) +#define EVIOCSKEYCODE _IOW('E', 0x04, unsigned int[2]) /* set keycode */ +#define EVIOCSKEYCODE_V2 _IOW('E', 0x04, struct input_keymap_entry) + +#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */ +#define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E', 0x07, len) /* get physical location */ +#define EVIOCGUNIQ(len) _IOC(_IOC_READ, 'E', 0x08, len) /* get unique identifier */ +#define EVIOCGPROP(len) _IOC(_IOC_READ, 'E', 0x09, len) /* get device properties */ + +/** + * EVIOCGMTSLOTS(len) - get MT slot values + * @len: size of the data buffer in bytes + * + * The ioctl buffer argument should be binary equivalent to + * + * struct input_mt_request_layout { + * __u32 code; + * __s32 values[num_slots]; + * }; + * + * where num_slots is the (arbitrary) number of MT slots to extract. + * + * The ioctl size argument (len) is the size of the buffer, which + * should satisfy len = (num_slots + 1) * sizeof(__s32). If len is + * too small to fit all available slots, the first num_slots are + * returned. + * + * Before the call, code is set to the wanted ABS_MT event type. On + * return, values[] is filled with the slot values for the specified + * ABS_MT code. + * + * If the request code is not an ABS_MT value, -EINVAL is returned. + */ +#define EVIOCGMTSLOTS(len) _IOC(_IOC_READ, 'E', 0x0a, len) + +#define EVIOCGKEY(len) _IOC(_IOC_READ, 'E', 0x18, len) /* get global key state */ +#define EVIOCGLED(len) _IOC(_IOC_READ, 'E', 0x19, len) /* get all LEDs */ +#define EVIOCGSND(len) _IOC(_IOC_READ, 'E', 0x1a, len) /* get all sounds status */ +#define EVIOCGSW(len) _IOC(_IOC_READ, 'E', 0x1b, len) /* get all switch states */ + +#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + (ev), len) /* get event bits */ +#define EVIOCGABS(abs) _IOR('E', 0x40 + (abs), struct input_absinfo) /* get abs value/limits */ +#define EVIOCSABS(abs) _IOW('E', 0xc0 + (abs), struct input_absinfo) /* set abs value/limits */ + +#define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect)) /* send a force effect to a force feedback device */ +#define EVIOCRMFF _IOW('E', 0x81, int) /* Erase a force effect */ +#define EVIOCGEFFECTS _IOR('E', 0x84, int) /* Report number of effects playable at the same time */ + +#define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */ +#define EVIOCREVOKE _IOW('E', 0x91, int) /* Revoke device access */ + +#define EVIOCSCLOCKID _IOW('E', 0xa0, int) /* Set clockid to be used for timestamps */ + +/* + * Device properties and quirks + */ + +#define INPUT_PROP_POINTER 0x00 /* needs a pointer */ +#define INPUT_PROP_DIRECT 0x01 /* direct input devices */ +#define INPUT_PROP_BUTTONPAD 0x02 /* has button(s) under pad */ +#define INPUT_PROP_SEMI_MT 0x03 /* touch rectangle only */ +#define INPUT_PROP_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */ +#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */ +#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */ + +#define INPUT_PROP_MAX 0x1f +#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1) + +/* + * Event types + */ + +#define EV_SYN 0x00 +#define EV_KEY 0x01 +#define EV_REL 0x02 +#define EV_ABS 0x03 +#define EV_MSC 0x04 +#define EV_SW 0x05 +#define EV_LED 0x11 +#define EV_SND 0x12 +#define EV_REP 0x14 +#define EV_FF 0x15 +#define EV_PWR 0x16 +#define EV_FF_STATUS 0x17 +#define EV_MAX 0x1f +#define EV_CNT (EV_MAX+1) + +/* + * Synchronization events. + */ + +#define SYN_REPORT 0 +#define SYN_CONFIG 1 +#define SYN_MT_REPORT 2 +#define SYN_DROPPED 3 +#define SYN_MAX 0xf +#define SYN_CNT (SYN_MAX+1) + +/* + * Keys and buttons + * + * Most of the keys/buttons are modeled after USB HUT 1.12 + * (see http://www.usb.org/developers/hidpage). + * Abbreviations in the comments: + * AC - Application Control + * AL - Application Launch Button + * SC - System Control + */ + +#define KEY_RESERVED 0 +#define KEY_ESC 1 +#define KEY_1 2 +#define KEY_2 3 +#define KEY_3 4 +#define KEY_4 5 +#define KEY_5 6 +#define KEY_6 7 +#define KEY_7 8 +#define KEY_8 9 +#define KEY_9 10 +#define KEY_0 11 +#define KEY_MINUS 12 +#define KEY_EQUAL 13 +#define KEY_BACKSPACE 14 +#define KEY_TAB 15 +#define KEY_Q 16 +#define KEY_W 17 +#define KEY_E 18 +#define KEY_R 19 +#define KEY_T 20 +#define KEY_Y 21 +#define KEY_U 22 +#define KEY_I 23 +#define KEY_O 24 +#define KEY_P 25 +#define KEY_LEFTBRACE 26 +#define KEY_RIGHTBRACE 27 +#define KEY_ENTER 28 +#define KEY_LEFTCTRL 29 +#define KEY_A 30 +#define KEY_S 31 +#define KEY_D 32 +#define KEY_F 33 +#define KEY_G 34 +#define KEY_H 35 +#define KEY_J 36 +#define KEY_K 37 +#define KEY_L 38 +#define KEY_SEMICOLON 39 +#define KEY_APOSTROPHE 40 +#define KEY_GRAVE 41 +#define KEY_LEFTSHIFT 42 +#define KEY_BACKSLASH 43 +#define KEY_Z 44 +#define KEY_X 45 +#define KEY_C 46 +#define KEY_V 47 +#define KEY_B 48 +#define KEY_N 49 +#define KEY_M 50 +#define KEY_COMMA 51 +#define KEY_DOT 52 +#define KEY_SLASH 53 +#define KEY_RIGHTSHIFT 54 +#define KEY_KPASTERISK 55 +#define KEY_LEFTALT 56 +#define KEY_SPACE 57 +#define KEY_CAPSLOCK 58 +#define KEY_F1 59 +#define KEY_F2 60 +#define KEY_F3 61 +#define KEY_F4 62 +#define KEY_F5 63 +#define KEY_F6 64 +#define KEY_F7 65 +#define KEY_F8 66 +#define KEY_F9 67 +#define KEY_F10 68 +#define KEY_NUMLOCK 69 +#define KEY_SCROLLLOCK 70 +#define KEY_KP7 71 +#define KEY_KP8 72 +#define KEY_KP9 73 +#define KEY_KPMINUS 74 +#define KEY_KP4 75 +#define KEY_KP5 76 +#define KEY_KP6 77 +#define KEY_KPPLUS 78 +#define KEY_KP1 79 +#define KEY_KP2 80 +#define KEY_KP3 81 +#define KEY_KP0 82 +#define KEY_KPDOT 83 + +#define KEY_ZENKAKUHANKAKU 85 +#define KEY_102ND 86 +#define KEY_F11 87 +#define KEY_F12 88 +#define KEY_RO 89 +#define KEY_KATAKANA 90 +#define KEY_HIRAGANA 91 +#define KEY_HENKAN 92 +#define KEY_KATAKANAHIRAGANA 93 +#define KEY_MUHENKAN 94 +#define KEY_KPJPCOMMA 95 +#define KEY_KPENTER 96 +#define KEY_RIGHTCTRL 97 +#define KEY_KPSLASH 98 +#define KEY_SYSRQ 99 +#define KEY_RIGHTALT 100 +#define KEY_LINEFEED 101 +#define KEY_HOME 102 +#define KEY_UP 103 +#define KEY_PAGEUP 104 +#define KEY_LEFT 105 +#define KEY_RIGHT 106 +#define KEY_END 107 +#define KEY_DOWN 108 +#define KEY_PAGEDOWN 109 +#define KEY_INSERT 110 +#define KEY_DELETE 111 +#define KEY_MACRO 112 +#define KEY_MUTE 113 +#define KEY_VOLUMEDOWN 114 +#define KEY_VOLUMEUP 115 +#define KEY_POWER 116 /* SC System Power Down */ +#define KEY_KPEQUAL 117 +#define KEY_KPPLUSMINUS 118 +#define KEY_PAUSE 119 +#define KEY_SCALE 120 /* AL Compiz Scale (Expose) */ + +#define KEY_KPCOMMA 121 +#define KEY_HANGEUL 122 +#define KEY_HANGUEL KEY_HANGEUL +#define KEY_HANJA 123 +#define KEY_YEN 124 +#define KEY_LEFTMETA 125 +#define KEY_RIGHTMETA 126 +#define KEY_COMPOSE 127 + +#define KEY_STOP 128 /* AC Stop */ +#define KEY_AGAIN 129 +#define KEY_PROPS 130 /* AC Properties */ +#define KEY_UNDO 131 /* AC Undo */ +#define KEY_FRONT 132 +#define KEY_COPY 133 /* AC Copy */ +#define KEY_OPEN 134 /* AC Open */ +#define KEY_PASTE 135 /* AC Paste */ +#define KEY_FIND 136 /* AC Search */ +#define KEY_CUT 137 /* AC Cut */ +#define KEY_HELP 138 /* AL Integrated Help Center */ +#define KEY_MENU 139 /* Menu (show menu) */ +#define KEY_CALC 140 /* AL Calculator */ +#define KEY_SETUP 141 +#define KEY_SLEEP 142 /* SC System Sleep */ +#define KEY_WAKEUP 143 /* System Wake Up */ +#define KEY_FILE 144 /* AL Local Machine Browser */ +#define KEY_SENDFILE 145 +#define KEY_DELETEFILE 146 +#define KEY_XFER 147 +#define KEY_PROG1 148 +#define KEY_PROG2 149 +#define KEY_WWW 150 /* AL Internet Browser */ +#define KEY_MSDOS 151 +#define KEY_COFFEE 152 /* AL Terminal Lock/Screensaver */ +#define KEY_SCREENLOCK KEY_COFFEE +#define KEY_DIRECTION 153 +#define KEY_CYCLEWINDOWS 154 +#define KEY_MAIL 155 +#define KEY_BOOKMARKS 156 /* AC Bookmarks */ +#define KEY_COMPUTER 157 +#define KEY_BACK 158 /* AC Back */ +#define KEY_FORWARD 159 /* AC Forward */ +#define KEY_CLOSECD 160 +#define KEY_EJECTCD 161 +#define KEY_EJECTCLOSECD 162 +#define KEY_NEXTSONG 163 +#define KEY_PLAYPAUSE 164 +#define KEY_PREVIOUSSONG 165 +#define KEY_STOPCD 166 +#define KEY_RECORD 167 +#define KEY_REWIND 168 +#define KEY_PHONE 169 /* Media Select Telephone */ +#define KEY_ISO 170 +#define KEY_CONFIG 171 /* AL Consumer Control Configuration */ +#define KEY_HOMEPAGE 172 /* AC Home */ +#define KEY_REFRESH 173 /* AC Refresh */ +#define KEY_EXIT 174 /* AC Exit */ +#define KEY_MOVE 175 +#define KEY_EDIT 176 +#define KEY_SCROLLUP 177 +#define KEY_SCROLLDOWN 178 +#define KEY_KPLEFTPAREN 179 +#define KEY_KPRIGHTPAREN 180 +#define KEY_NEW 181 /* AC New */ +#define KEY_REDO 182 /* AC Redo/Repeat */ + +#define KEY_F13 183 +#define KEY_F14 184 +#define KEY_F15 185 +#define KEY_F16 186 +#define KEY_F17 187 +#define KEY_F18 188 +#define KEY_F19 189 +#define KEY_F20 190 +#define KEY_F21 191 +#define KEY_F22 192 +#define KEY_F23 193 +#define KEY_F24 194 + +#define KEY_PLAYCD 200 +#define KEY_PAUSECD 201 +#define KEY_PROG3 202 +#define KEY_PROG4 203 +#define KEY_DASHBOARD 204 /* AL Dashboard */ +#define KEY_SUSPEND 205 +#define KEY_CLOSE 206 /* AC Close */ +#define KEY_PLAY 207 +#define KEY_FASTFORWARD 208 +#define KEY_BASSBOOST 209 +#define KEY_PRINT 210 /* AC Print */ +#define KEY_HP 211 +#define KEY_CAMERA 212 +#define KEY_SOUND 213 +#define KEY_QUESTION 214 +#define KEY_EMAIL 215 +#define KEY_CHAT 216 +#define KEY_SEARCH 217 +#define KEY_CONNECT 218 +#define KEY_FINANCE 219 /* AL Checkbook/Finance */ +#define KEY_SPORT 220 +#define KEY_SHOP 221 +#define KEY_ALTERASE 222 +#define KEY_CANCEL 223 /* AC Cancel */ +#define KEY_BRIGHTNESSDOWN 224 +#define KEY_BRIGHTNESSUP 225 +#define KEY_MEDIA 226 + +#define KEY_SWITCHVIDEOMODE 227 /* Cycle between available video + outputs (Monitor/LCD/TV-out/etc) */ +#define KEY_KBDILLUMTOGGLE 228 +#define KEY_KBDILLUMDOWN 229 +#define KEY_KBDILLUMUP 230 + +#define KEY_SEND 231 /* AC Send */ +#define KEY_REPLY 232 /* AC Reply */ +#define KEY_FORWARDMAIL 233 /* AC Forward Msg */ +#define KEY_SAVE 234 /* AC Save */ +#define KEY_DOCUMENTS 235 + +#define KEY_BATTERY 236 + +#define KEY_BLUETOOTH 237 +#define KEY_WLAN 238 +#define KEY_UWB 239 + +#define KEY_UNKNOWN 240 + +#define KEY_VIDEO_NEXT 241 /* drive next video source */ +#define KEY_VIDEO_PREV 242 /* drive previous video source */ +#define KEY_BRIGHTNESS_CYCLE 243 /* brightness up, after max is min */ +#define KEY_BRIGHTNESS_AUTO 244 /* Set Auto Brightness: manual + brightness control is off, + rely on ambient */ +#define KEY_BRIGHTNESS_ZERO KEY_BRIGHTNESS_AUTO +#define KEY_DISPLAY_OFF 245 /* display device to off state */ + +#define KEY_WWAN 246 /* Wireless WAN (LTE, UMTS, GSM, etc.) */ +#define KEY_WIMAX KEY_WWAN +#define KEY_RFKILL 247 /* Key that controls all radios */ + +#define KEY_MICMUTE 248 /* Mute / unmute the microphone */ + +/* Code 255 is reserved for special needs of AT keyboard driver */ + +#define BTN_MISC 0x100 +#define BTN_0 0x100 +#define BTN_1 0x101 +#define BTN_2 0x102 +#define BTN_3 0x103 +#define BTN_4 0x104 +#define BTN_5 0x105 +#define BTN_6 0x106 +#define BTN_7 0x107 +#define BTN_8 0x108 +#define BTN_9 0x109 + +#define BTN_MOUSE 0x110 +#define BTN_LEFT 0x110 +#define BTN_RIGHT 0x111 +#define BTN_MIDDLE 0x112 +#define BTN_SIDE 0x113 +#define BTN_EXTRA 0x114 +#define BTN_FORWARD 0x115 +#define BTN_BACK 0x116 +#define BTN_TASK 0x117 + +#define BTN_JOYSTICK 0x120 +#define BTN_TRIGGER 0x120 +#define BTN_THUMB 0x121 +#define BTN_THUMB2 0x122 +#define BTN_TOP 0x123 +#define BTN_TOP2 0x124 +#define BTN_PINKIE 0x125 +#define BTN_BASE 0x126 +#define BTN_BASE2 0x127 +#define BTN_BASE3 0x128 +#define BTN_BASE4 0x129 +#define BTN_BASE5 0x12a +#define BTN_BASE6 0x12b +#define BTN_DEAD 0x12f + +#define BTN_GAMEPAD 0x130 +#define BTN_SOUTH 0x130 +#define BTN_A BTN_SOUTH +#define BTN_EAST 0x131 +#define BTN_B BTN_EAST +#define BTN_C 0x132 +#define BTN_NORTH 0x133 +#define BTN_X BTN_NORTH +#define BTN_WEST 0x134 +#define BTN_Y BTN_WEST +#define BTN_Z 0x135 +#define BTN_TL 0x136 +#define BTN_TR 0x137 +#define BTN_TL2 0x138 +#define BTN_TR2 0x139 +#define BTN_SELECT 0x13a +#define BTN_START 0x13b +#define BTN_MODE 0x13c +#define BTN_THUMBL 0x13d +#define BTN_THUMBR 0x13e + +#define BTN_DIGI 0x140 +#define BTN_TOOL_PEN 0x140 +#define BTN_TOOL_RUBBER 0x141 +#define BTN_TOOL_BRUSH 0x142 +#define BTN_TOOL_PENCIL 0x143 +#define BTN_TOOL_AIRBRUSH 0x144 +#define BTN_TOOL_FINGER 0x145 +#define BTN_TOOL_MOUSE 0x146 +#define BTN_TOOL_LENS 0x147 +#define BTN_TOOL_QUINTTAP 0x148 /* Five fingers on trackpad */ +#define BTN_TOUCH 0x14a +#define BTN_STYLUS 0x14b +#define BTN_STYLUS2 0x14c +#define BTN_TOOL_DOUBLETAP 0x14d +#define BTN_TOOL_TRIPLETAP 0x14e +#define BTN_TOOL_QUADTAP 0x14f /* Four fingers on trackpad */ + +#define BTN_WHEEL 0x150 +#define BTN_GEAR_DOWN 0x150 +#define BTN_GEAR_UP 0x151 + +#define KEY_OK 0x160 +#define KEY_SELECT 0x161 +#define KEY_GOTO 0x162 +#define KEY_CLEAR 0x163 +#define KEY_POWER2 0x164 +#define KEY_OPTION 0x165 +#define KEY_INFO 0x166 /* AL OEM Features/Tips/Tutorial */ +#define KEY_TIME 0x167 +#define KEY_VENDOR 0x168 +#define KEY_ARCHIVE 0x169 +#define KEY_PROGRAM 0x16a /* Media Select Program Guide */ +#define KEY_CHANNEL 0x16b +#define KEY_FAVORITES 0x16c +#define KEY_EPG 0x16d +#define KEY_PVR 0x16e /* Media Select Home */ +#define KEY_MHP 0x16f +#define KEY_LANGUAGE 0x170 +#define KEY_TITLE 0x171 +#define KEY_SUBTITLE 0x172 +#define KEY_ANGLE 0x173 +#define KEY_ZOOM 0x174 +#define KEY_MODE 0x175 +#define KEY_KEYBOARD 0x176 +#define KEY_SCREEN 0x177 +#define KEY_PC 0x178 /* Media Select Computer */ +#define KEY_TV 0x179 /* Media Select TV */ +#define KEY_TV2 0x17a /* Media Select Cable */ +#define KEY_VCR 0x17b /* Media Select VCR */ +#define KEY_VCR2 0x17c /* VCR Plus */ +#define KEY_SAT 0x17d /* Media Select Satellite */ +#define KEY_SAT2 0x17e +#define KEY_CD 0x17f /* Media Select CD */ +#define KEY_TAPE 0x180 /* Media Select Tape */ +#define KEY_RADIO 0x181 +#define KEY_TUNER 0x182 /* Media Select Tuner */ +#define KEY_PLAYER 0x183 +#define KEY_TEXT 0x184 +#define KEY_DVD 0x185 /* Media Select DVD */ +#define KEY_AUX 0x186 +#define KEY_MP3 0x187 +#define KEY_AUDIO 0x188 /* AL Audio Browser */ +#define KEY_VIDEO 0x189 /* AL Movie Browser */ +#define KEY_DIRECTORY 0x18a +#define KEY_LIST 0x18b +#define KEY_MEMO 0x18c /* Media Select Messages */ +#define KEY_CALENDAR 0x18d +#define KEY_RED 0x18e +#define KEY_GREEN 0x18f +#define KEY_YELLOW 0x190 +#define KEY_BLUE 0x191 +#define KEY_CHANNELUP 0x192 /* Channel Increment */ +#define KEY_CHANNELDOWN 0x193 /* Channel Decrement */ +#define KEY_FIRST 0x194 +#define KEY_LAST 0x195 /* Recall Last */ +#define KEY_AB 0x196 +#define KEY_NEXT 0x197 +#define KEY_RESTART 0x198 +#define KEY_SLOW 0x199 +#define KEY_SHUFFLE 0x19a +#define KEY_BREAK 0x19b +#define KEY_PREVIOUS 0x19c +#define KEY_DIGITS 0x19d +#define KEY_TEEN 0x19e +#define KEY_TWEN 0x19f +#define KEY_VIDEOPHONE 0x1a0 /* Media Select Video Phone */ +#define KEY_GAMES 0x1a1 /* Media Select Games */ +#define KEY_ZOOMIN 0x1a2 /* AC Zoom In */ +#define KEY_ZOOMOUT 0x1a3 /* AC Zoom Out */ +#define KEY_ZOOMRESET 0x1a4 /* AC Zoom */ +#define KEY_WORDPROCESSOR 0x1a5 /* AL Word Processor */ +#define KEY_EDITOR 0x1a6 /* AL Text Editor */ +#define KEY_SPREADSHEET 0x1a7 /* AL Spreadsheet */ +#define KEY_GRAPHICSEDITOR 0x1a8 /* AL Graphics Editor */ +#define KEY_PRESENTATION 0x1a9 /* AL Presentation App */ +#define KEY_DATABASE 0x1aa /* AL Database App */ +#define KEY_NEWS 0x1ab /* AL Newsreader */ +#define KEY_VOICEMAIL 0x1ac /* AL Voicemail */ +#define KEY_ADDRESSBOOK 0x1ad /* AL Contacts/Address Book */ +#define KEY_MESSENGER 0x1ae /* AL Instant Messaging */ +#define KEY_DISPLAYTOGGLE 0x1af /* Turn display (LCD) on and off */ +#define KEY_BRIGHTNESS_TOGGLE KEY_DISPLAYTOGGLE +#define KEY_SPELLCHECK 0x1b0 /* AL Spell Check */ +#define KEY_LOGOFF 0x1b1 /* AL Logoff */ + +#define KEY_DOLLAR 0x1b2 +#define KEY_EURO 0x1b3 + +#define KEY_FRAMEBACK 0x1b4 /* Consumer - transport controls */ +#define KEY_FRAMEFORWARD 0x1b5 +#define KEY_CONTEXT_MENU 0x1b6 /* GenDesc - system context menu */ +#define KEY_MEDIA_REPEAT 0x1b7 /* Consumer - transport control */ +#define KEY_10CHANNELSUP 0x1b8 /* 10 channels up (10+) */ +#define KEY_10CHANNELSDOWN 0x1b9 /* 10 channels down (10-) */ +#define KEY_IMAGES 0x1ba /* AL Image Browser */ + +#define KEY_DEL_EOL 0x1c0 +#define KEY_DEL_EOS 0x1c1 +#define KEY_INS_LINE 0x1c2 +#define KEY_DEL_LINE 0x1c3 + +#define KEY_FN 0x1d0 +#define KEY_FN_ESC 0x1d1 +#define KEY_FN_F1 0x1d2 +#define KEY_FN_F2 0x1d3 +#define KEY_FN_F3 0x1d4 +#define KEY_FN_F4 0x1d5 +#define KEY_FN_F5 0x1d6 +#define KEY_FN_F6 0x1d7 +#define KEY_FN_F7 0x1d8 +#define KEY_FN_F8 0x1d9 +#define KEY_FN_F9 0x1da +#define KEY_FN_F10 0x1db +#define KEY_FN_F11 0x1dc +#define KEY_FN_F12 0x1dd +#define KEY_FN_1 0x1de +#define KEY_FN_2 0x1df +#define KEY_FN_D 0x1e0 +#define KEY_FN_E 0x1e1 +#define KEY_FN_F 0x1e2 +#define KEY_FN_S 0x1e3 +#define KEY_FN_B 0x1e4 + +#define KEY_BRL_DOT1 0x1f1 +#define KEY_BRL_DOT2 0x1f2 +#define KEY_BRL_DOT3 0x1f3 +#define KEY_BRL_DOT4 0x1f4 +#define KEY_BRL_DOT5 0x1f5 +#define KEY_BRL_DOT6 0x1f6 +#define KEY_BRL_DOT7 0x1f7 +#define KEY_BRL_DOT8 0x1f8 +#define KEY_BRL_DOT9 0x1f9 +#define KEY_BRL_DOT10 0x1fa + +#define KEY_NUMERIC_0 0x200 /* used by phones, remote controls, */ +#define KEY_NUMERIC_1 0x201 /* and other keypads */ +#define KEY_NUMERIC_2 0x202 +#define KEY_NUMERIC_3 0x203 +#define KEY_NUMERIC_4 0x204 +#define KEY_NUMERIC_5 0x205 +#define KEY_NUMERIC_6 0x206 +#define KEY_NUMERIC_7 0x207 +#define KEY_NUMERIC_8 0x208 +#define KEY_NUMERIC_9 0x209 +#define KEY_NUMERIC_STAR 0x20a +#define KEY_NUMERIC_POUND 0x20b + +#define KEY_CAMERA_FOCUS 0x210 +#define KEY_WPS_BUTTON 0x211 /* WiFi Protected Setup key */ + +#define KEY_TOUCHPAD_TOGGLE 0x212 /* Request switch touchpad on or off */ +#define KEY_TOUCHPAD_ON 0x213 +#define KEY_TOUCHPAD_OFF 0x214 + +#define KEY_CAMERA_ZOOMIN 0x215 +#define KEY_CAMERA_ZOOMOUT 0x216 +#define KEY_CAMERA_UP 0x217 +#define KEY_CAMERA_DOWN 0x218 +#define KEY_CAMERA_LEFT 0x219 +#define KEY_CAMERA_RIGHT 0x21a + +#define KEY_ATTENDANT_ON 0x21b +#define KEY_ATTENDANT_OFF 0x21c +#define KEY_ATTENDANT_TOGGLE 0x21d /* Attendant call on or off */ +#define KEY_LIGHTS_TOGGLE 0x21e /* Reading light on or off */ + +#define BTN_DPAD_UP 0x220 +#define BTN_DPAD_DOWN 0x221 +#define BTN_DPAD_LEFT 0x222 +#define BTN_DPAD_RIGHT 0x223 + +#define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */ + +#define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */ +#define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */ +#define KEY_JOURNAL 0x242 /* AL Log/Journal/Timecard */ +#define KEY_CONTROLPANEL 0x243 /* AL Control Panel */ +#define KEY_APPSELECT 0x244 /* AL Select Task/Application */ +#define KEY_SCREENSAVER 0x245 /* AL Screen Saver */ +#define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */ + +#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */ +#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */ + +#define KEY_KBDINPUTASSIST_PREV 0x260 +#define KEY_KBDINPUTASSIST_NEXT 0x261 +#define KEY_KBDINPUTASSIST_PREVGROUP 0x262 +#define KEY_KBDINPUTASSIST_NEXTGROUP 0x263 +#define KEY_KBDINPUTASSIST_ACCEPT 0x264 +#define KEY_KBDINPUTASSIST_CANCEL 0x265 + +#define BTN_TRIGGER_HAPPY 0x2c0 +#define BTN_TRIGGER_HAPPY1 0x2c0 +#define BTN_TRIGGER_HAPPY2 0x2c1 +#define BTN_TRIGGER_HAPPY3 0x2c2 +#define BTN_TRIGGER_HAPPY4 0x2c3 +#define BTN_TRIGGER_HAPPY5 0x2c4 +#define BTN_TRIGGER_HAPPY6 0x2c5 +#define BTN_TRIGGER_HAPPY7 0x2c6 +#define BTN_TRIGGER_HAPPY8 0x2c7 +#define BTN_TRIGGER_HAPPY9 0x2c8 +#define BTN_TRIGGER_HAPPY10 0x2c9 +#define BTN_TRIGGER_HAPPY11 0x2ca +#define BTN_TRIGGER_HAPPY12 0x2cb +#define BTN_TRIGGER_HAPPY13 0x2cc +#define BTN_TRIGGER_HAPPY14 0x2cd +#define BTN_TRIGGER_HAPPY15 0x2ce +#define BTN_TRIGGER_HAPPY16 0x2cf +#define BTN_TRIGGER_HAPPY17 0x2d0 +#define BTN_TRIGGER_HAPPY18 0x2d1 +#define BTN_TRIGGER_HAPPY19 0x2d2 +#define BTN_TRIGGER_HAPPY20 0x2d3 +#define BTN_TRIGGER_HAPPY21 0x2d4 +#define BTN_TRIGGER_HAPPY22 0x2d5 +#define BTN_TRIGGER_HAPPY23 0x2d6 +#define BTN_TRIGGER_HAPPY24 0x2d7 +#define BTN_TRIGGER_HAPPY25 0x2d8 +#define BTN_TRIGGER_HAPPY26 0x2d9 +#define BTN_TRIGGER_HAPPY27 0x2da +#define BTN_TRIGGER_HAPPY28 0x2db +#define BTN_TRIGGER_HAPPY29 0x2dc +#define BTN_TRIGGER_HAPPY30 0x2dd +#define BTN_TRIGGER_HAPPY31 0x2de +#define BTN_TRIGGER_HAPPY32 0x2df +#define BTN_TRIGGER_HAPPY33 0x2e0 +#define BTN_TRIGGER_HAPPY34 0x2e1 +#define BTN_TRIGGER_HAPPY35 0x2e2 +#define BTN_TRIGGER_HAPPY36 0x2e3 +#define BTN_TRIGGER_HAPPY37 0x2e4 +#define BTN_TRIGGER_HAPPY38 0x2e5 +#define BTN_TRIGGER_HAPPY39 0x2e6 +#define BTN_TRIGGER_HAPPY40 0x2e7 + +/* We avoid low common keys in module aliases so they don't get huge. */ +#define KEY_MIN_INTERESTING KEY_MUTE +#define KEY_MAX 0x2ff +#define KEY_CNT (KEY_MAX+1) + +/* + * Relative axes + */ + +#define REL_X 0x00 +#define REL_Y 0x01 +#define REL_Z 0x02 +#define REL_RX 0x03 +#define REL_RY 0x04 +#define REL_RZ 0x05 +#define REL_HWHEEL 0x06 +#define REL_DIAL 0x07 +#define REL_WHEEL 0x08 +#define REL_MISC 0x09 +#define REL_MAX 0x0f +#define REL_CNT (REL_MAX+1) + +/* + * Absolute axes + */ + +#define ABS_X 0x00 +#define ABS_Y 0x01 +#define ABS_Z 0x02 +#define ABS_RX 0x03 +#define ABS_RY 0x04 +#define ABS_RZ 0x05 +#define ABS_THROTTLE 0x06 +#define ABS_RUDDER 0x07 +#define ABS_WHEEL 0x08 +#define ABS_GAS 0x09 +#define ABS_BRAKE 0x0a +#define ABS_HAT0X 0x10 +#define ABS_HAT0Y 0x11 +#define ABS_HAT1X 0x12 +#define ABS_HAT1Y 0x13 +#define ABS_HAT2X 0x14 +#define ABS_HAT2Y 0x15 +#define ABS_HAT3X 0x16 +#define ABS_HAT3Y 0x17 +#define ABS_PRESSURE 0x18 +#define ABS_DISTANCE 0x19 +#define ABS_TILT_X 0x1a +#define ABS_TILT_Y 0x1b +#define ABS_TOOL_WIDTH 0x1c + +#define ABS_VOLUME 0x20 + +#define ABS_MISC 0x28 + +#define ABS_MT_SLOT 0x2f /* MT slot being modified */ +#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */ +#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */ +#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */ +#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */ +#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */ +#define ABS_MT_POSITION_X 0x35 /* Center X touch position */ +#define ABS_MT_POSITION_Y 0x36 /* Center Y touch position */ +#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */ +#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */ +#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */ +#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */ +#define ABS_MT_DISTANCE 0x3b /* Contact hover distance */ +#define ABS_MT_TOOL_X 0x3c /* Center X tool position */ +#define ABS_MT_TOOL_Y 0x3d /* Center Y tool position */ + + +#define ABS_MAX 0x3f +#define ABS_CNT (ABS_MAX+1) + +/* + * Switch events + */ + +#define SW_LID 0x00 /* set = lid shut */ +#define SW_TABLET_MODE 0x01 /* set = tablet mode */ +#define SW_HEADPHONE_INSERT 0x02 /* set = inserted */ +#define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any" + set = radio enabled */ +#define SW_RADIO SW_RFKILL_ALL /* deprecated */ +#define SW_MICROPHONE_INSERT 0x04 /* set = inserted */ +#define SW_DOCK 0x05 /* set = plugged into dock */ +#define SW_LINEOUT_INSERT 0x06 /* set = inserted */ +#define SW_JACK_PHYSICAL_INSERT 0x07 /* set = mechanical switch set */ +#define SW_VIDEOOUT_INSERT 0x08 /* set = inserted */ +#define SW_CAMERA_LENS_COVER 0x09 /* set = lens covered */ +#define SW_KEYPAD_SLIDE 0x0a /* set = keypad slide out */ +#define SW_FRONT_PROXIMITY 0x0b /* set = front proximity sensor active */ +#define SW_ROTATE_LOCK 0x0c /* set = rotate locked/disabled */ +#define SW_LINEIN_INSERT 0x0d /* set = inserted */ +#define SW_MUTE_DEVICE 0x0e /* set = device disabled */ +#define SW_MAX 0x0f +#define SW_CNT (SW_MAX+1) + +/* + * Misc events + */ + +#define MSC_SERIAL 0x00 +#define MSC_PULSELED 0x01 +#define MSC_GESTURE 0x02 +#define MSC_RAW 0x03 +#define MSC_SCAN 0x04 +#define MSC_TIMESTAMP 0x05 +#define MSC_MAX 0x07 +#define MSC_CNT (MSC_MAX+1) + +/* + * LEDs + */ + +#define LED_NUML 0x00 +#define LED_CAPSL 0x01 +#define LED_SCROLLL 0x02 +#define LED_COMPOSE 0x03 +#define LED_KANA 0x04 +#define LED_SLEEP 0x05 +#define LED_SUSPEND 0x06 +#define LED_MUTE 0x07 +#define LED_MISC 0x08 +#define LED_MAIL 0x09 +#define LED_CHARGING 0x0a +#define LED_MAX 0x0f +#define LED_CNT (LED_MAX+1) + +/* + * Autorepeat values + */ + +#define REP_DELAY 0x00 +#define REP_PERIOD 0x01 +#define REP_MAX 0x01 +#define REP_CNT (REP_MAX+1) + +/* + * Sounds + */ + +#define SND_CLICK 0x00 +#define SND_BELL 0x01 +#define SND_TONE 0x02 +#define SND_MAX 0x07 +#define SND_CNT (SND_MAX+1) + +/* + * IDs. + */ + +#define ID_BUS 0 +#define ID_VENDOR 1 +#define ID_PRODUCT 2 +#define ID_VERSION 3 + +#define BUS_PCI 0x01 +#define BUS_ISAPNP 0x02 +#define BUS_USB 0x03 +#define BUS_HIL 0x04 +#define BUS_BLUETOOTH 0x05 +#define BUS_VIRTUAL 0x06 + +#define BUS_ISA 0x10 +#define BUS_I8042 0x11 +#define BUS_XTKBD 0x12 +#define BUS_RS232 0x13 +#define BUS_GAMEPORT 0x14 +#define BUS_PARPORT 0x15 +#define BUS_AMIGA 0x16 +#define BUS_ADB 0x17 +#define BUS_I2C 0x18 +#define BUS_HOST 0x19 +#define BUS_GSC 0x1A +#define BUS_ATARI 0x1B +#define BUS_SPI 0x1C + +/* + * MT_TOOL types + */ +#define MT_TOOL_FINGER 0 +#define MT_TOOL_PEN 1 +#define MT_TOOL_PALM 2 +#define MT_TOOL_MAX 2 + +/* + * Values describing the status of a force-feedback effect + */ +#define FF_STATUS_STOPPED 0x00 +#define FF_STATUS_PLAYING 0x01 +#define FF_STATUS_MAX 0x01 + +/* + * Structures used in ioctls to upload effects to a device + * They are pieces of a bigger structure (called ff_effect) + */ + +/* + * All duration values are expressed in ms. Values above 32767 ms (0x7fff) + * should not be used and have unspecified results. + */ + +/** + * struct ff_replay - defines scheduling of the force-feedback effect + * @length: duration of the effect + * @delay: delay before effect should start playing + */ +struct ff_replay { + __u16 length; + __u16 delay; +}; + +/** + * struct ff_trigger - defines what triggers the force-feedback effect + * @button: number of the button triggering the effect + * @interval: controls how soon the effect can be re-triggered + */ +struct ff_trigger { + __u16 button; + __u16 interval; +}; + +/** + * struct ff_envelope - generic force-feedback effect envelope + * @attack_length: duration of the attack (ms) + * @attack_level: level at the beginning of the attack + * @fade_length: duration of fade (ms) + * @fade_level: level at the end of fade + * + * The @attack_level and @fade_level are absolute values; when applying + * envelope force-feedback core will convert to positive/negative + * value based on polarity of the default level of the effect. + * Valid range for the attack and fade levels is 0x0000 - 0x7fff + */ +struct ff_envelope { + __u16 attack_length; + __u16 attack_level; + __u16 fade_length; + __u16 fade_level; +}; + +/** + * struct ff_constant_effect - defines parameters of a constant force-feedback effect + * @level: strength of the effect; may be negative + * @envelope: envelope data + */ +struct ff_constant_effect { + __s16 level; + struct ff_envelope envelope; +}; + +/** + * struct ff_ramp_effect - defines parameters of a ramp force-feedback effect + * @start_level: beginning strength of the effect; may be negative + * @end_level: final strength of the effect; may be negative + * @envelope: envelope data + */ +struct ff_ramp_effect { + __s16 start_level; + __s16 end_level; + struct ff_envelope envelope; +}; + +/** + * struct ff_condition_effect - defines a spring or friction force-feedback effect + * @right_saturation: maximum level when joystick moved all way to the right + * @left_saturation: same for the left side + * @right_coeff: controls how fast the force grows when the joystick moves + * to the right + * @left_coeff: same for the left side + * @deadband: size of the dead zone, where no force is produced + * @center: position of the dead zone + */ +struct ff_condition_effect { + __u16 right_saturation; + __u16 left_saturation; + + __s16 right_coeff; + __s16 left_coeff; + + __u16 deadband; + __s16 center; +}; + +/** + * struct ff_periodic_effect - defines parameters of a periodic force-feedback effect + * @waveform: kind of the effect (wave) + * @period: period of the wave (ms) + * @magnitude: peak value + * @offset: mean value of the wave (roughly) + * @phase: 'horizontal' shift + * @envelope: envelope data + * @custom_len: number of samples (FF_CUSTOM only) + * @custom_data: buffer of samples (FF_CUSTOM only) + * + * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP, + * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined + * for the time being as no driver supports it yet. + * + * Note: the data pointed by custom_data is copied by the driver. + * You can therefore dispose of the memory after the upload/update. + */ +struct ff_periodic_effect { + __u16 waveform; + __u16 period; + __s16 magnitude; + __s16 offset; + __u16 phase; + + struct ff_envelope envelope; + + __u32 custom_len; + __s16 *custom_data; +}; + +/** + * struct ff_rumble_effect - defines parameters of a periodic force-feedback effect + * @strong_magnitude: magnitude of the heavy motor + * @weak_magnitude: magnitude of the light one + * + * Some rumble pads have two motors of different weight. Strong_magnitude + * represents the magnitude of the vibration generated by the heavy one. + */ +struct ff_rumble_effect { + __u16 strong_magnitude; + __u16 weak_magnitude; +}; + +/** + * struct ff_effect - defines force feedback effect + * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING, + * FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM) + * @id: an unique id assigned to an effect + * @direction: direction of the effect + * @trigger: trigger conditions (struct ff_trigger) + * @replay: scheduling of the effect (struct ff_replay) + * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect, + * ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further + * defining effect parameters + * + * This structure is sent through ioctl from the application to the driver. + * To create a new effect application should set its @id to -1; the kernel + * will return assigned @id which can later be used to update or delete + * this effect. + * + * Direction of the effect is encoded as follows: + * 0 deg -> 0x0000 (down) + * 90 deg -> 0x4000 (left) + * 180 deg -> 0x8000 (up) + * 270 deg -> 0xC000 (right) + */ +struct ff_effect { + __u16 type; + __s16 id; + __u16 direction; + struct ff_trigger trigger; + struct ff_replay replay; + + union { + struct ff_constant_effect constant; + struct ff_ramp_effect ramp; + struct ff_periodic_effect periodic; + struct ff_condition_effect condition[2]; /* One for each axis */ + struct ff_rumble_effect rumble; + } u; +}; + +/* + * Force feedback effect types + */ + +#define FF_RUMBLE 0x50 +#define FF_PERIODIC 0x51 +#define FF_CONSTANT 0x52 +#define FF_SPRING 0x53 +#define FF_FRICTION 0x54 +#define FF_DAMPER 0x55 +#define FF_INERTIA 0x56 +#define FF_RAMP 0x57 + +#define FF_EFFECT_MIN FF_RUMBLE +#define FF_EFFECT_MAX FF_RAMP + +/* + * Force feedback periodic effect types + */ + +#define FF_SQUARE 0x58 +#define FF_TRIANGLE 0x59 +#define FF_SINE 0x5a +#define FF_SAW_UP 0x5b +#define FF_SAW_DOWN 0x5c +#define FF_CUSTOM 0x5d + +#define FF_WAVEFORM_MIN FF_SQUARE +#define FF_WAVEFORM_MAX FF_CUSTOM + +/* + * Set ff device properties + */ + +#define FF_GAIN 0x60 +#define FF_AUTOCENTER 0x61 + +#define FF_MAX 0x7f +#define FF_CNT (FF_MAX+1) + +#endif /* _INPUT_H */ diff --git a/rcm-server-main.c b/rcm-server-main.c index 5d9cb20..294510c 100644 --- a/rcm-server-main.c +++ b/rcm-server-main.c @@ -7,9 +7,14 @@ #include #include #include +#include +#include +#include +#include #include "utils.h" #include "shared.h" +#include "linux-input-keycodes.h" #include "rcm-server-main.h" #include "rcm-server-keymap.h" @@ -692,6 +697,96 @@ remove_device(struct manager *mgr, struct udev_device *udev) } } +static int +evdev_read(sd_event_source *s, int fd, uint32_t revents, void *userdata) +{ + struct device *device = userdata; + struct input_event ev; + static const char *keycode_str = NULL; + static uint32_t keycode = KEY_RESERVED; + static uint32_t scancode; + static bool scancode_recv = false; + static bool pressed = false; + unsigned i; + + if (fd != device->evdev_fd) + fprintf(stderr, "evdev fd mismatch: %i != %i\n", device->evdev_fd, fd); + + if (revents & EPOLLHUP) { + fprintf(stderr, "evdev connection closed!\n"); + close(fd); + device->evdev_fd = -1; + return 0; + } + + if (!(revents & EPOLLIN)) { + fprintf(stderr, "unexpected evdev event: %" PRIu32 "\n", revents); + return 0; + } + + while (read(fd, &ev, sizeof(ev)) == sizeof(ev)) { + switch (ev.type) { + case EV_KEY: + if (keycode != KEY_RESERVED) + printf("Reading from evdev - multiple keycodes?\n"); + + for (i = 0; linux_input_keycodes[i].name; i++) { + if (linux_input_keycodes[i].value == ev.code) + break; + } + + if (!linux_input_keycodes[i].name) { + printf("evdev - unknown keycode (%u)\n", ev.code); + break; + } + + keycode_str = linux_input_keycodes[i].name; + keycode = ev.code; + pressed = ev.value ? true : false; + break; + + case EV_MSC: + if (ev.code == MSC_SCAN) { + if (scancode_recv) + printf("Reading from evdev - multiple scancodes?\n"); + scancode_recv = true; + scancode = ev.value; + } + break; + + case EV_SYN: + if (keycode != KEY_RESERVED || scancode_recv) { + printf("evdev event -"); + if (keycode != KEY_RESERVED) + printf(" keycode %s (%u) %s", + keycode_str, keycode, + pressed ? "pressed" : "released"); + if (scancode_recv) + printf(" scancode 0x%08x", scancode); + printf("\n"); + + if (keycode != KEY_RESERVED) + sd_bus_emit_signal(device->mgr->bus, + device->path, + "org.gnome.RemoteControlManager.Device", + pressed ? "KeyPressed" : "KeyReleased", + "s", keycode_str); + } + + keycode = KEY_RESERVED; + keycode_str = NULL; + scancode_recv = false; + pressed = false; + break; + + default: + break; + } + } + + return 0; +} + static void add_device(struct manager *mgr, struct udev_device *udev) { @@ -717,9 +812,10 @@ add_device(struct manager *mgr, struct udev_device *udev) } list_init(&device->keymaps); + device->mgr = mgr; device->path = path; device->name = device->path + strlen("/org/gnome/RemoteControlManager/"); - device->devnode = NULL; + device->evdev_fd = -1; if (keymaps_load(device) < 0) { fprintf(stderr, "failed to load keymaps: %m\n"); @@ -751,12 +847,34 @@ add_device(struct manager *mgr, struct udev_device *udev) } devnode = udev_device_get_devnode(evdev); - if (devnode && !device->devnode) { - device->devnode = strdup(devnode); - if (!device->devnode) - printf("Failed to strdup devnode\n"); - else - printf("Devnode is %s\n", device->devnode); + if (!devnode) { + printf("Failed to determine evdev devnode\n"); + udev_device_unref(evdev); + continue; + } + + if (device->evdev_fd >= 0) { + printf("Multiple evdev devices!?\n"); + udev_device_unref(evdev); + continue; + } + + device->evdev_fd = open(devnode, O_RDONLY | O_NONBLOCK); + if (device->evdev_fd < 0) { + printf("Failed to open evdev device %s: %s\n", + devnode, strerror(errno)); + udev_device_unref(evdev); + continue; + } + + if (sd_event_add_io(mgr->event, &device->evdev_ev, + device->evdev_fd, EPOLLIN, evdev_read, device) < 0) { + printf("Failed to add event source for evdev device %s: %s\n", + devnode, strerror(errno)); + close(device->evdev_fd); + device->evdev_fd = -1; + udev_device_unref(evdev); + continue; } udev_device_unref(evdev); @@ -788,7 +906,8 @@ add_device(struct manager *mgr, struct udev_device *udev) printf("\tAction : %s\n", udev_device_get_action(udev)); printf("\tDriver : %s\n", device->driver_name); printf("\tKernel map: %s\n", device->keymap_name); - printf("\tDevnode : %s\n", device->devnode); + printf("\tDevnode fd: %i\n", device->evdev_fd); + printf("\tDBUS path : %s\n", device->path); printf("\tProtocols : %s\n", udev_device_get_sysattr_value(udev, "protocols")); diff --git a/rcm-server-main.h b/rcm-server-main.h index 60b2968..4455ad8 100644 --- a/rcm-server-main.h +++ b/rcm-server-main.h @@ -6,7 +6,9 @@ struct device { char *path; char *driver_name; char *keymap_name; - char *devnode; + int evdev_fd; + sd_event_source *evdev_ev; + struct manager *mgr; struct list_head list; struct list_head keymaps; }; diff --git a/tools/generate-input-keycodes.sh b/tools/generate-input-keycodes.sh index 51d09e8..988940d 100755 --- a/tools/generate-input-keycodes.sh +++ b/tools/generate-input-keycodes.sh @@ -1,43 +1,55 @@ #!/bin/bash +set -e + INPUT_HEADER="/usr/include/linux/input.h" -OUTPUT_ENUM="linux-input-enum.h" -OUTPUT_MAP="linux-input-keycodes.h" +LOCAL_INPUT_HEADER="linux-input.h" +OUTPUT_MAPH="linux-input-keycodes.h" +OUTPUT_MAPC="linux-input-keycodes.c" SKIP="KEY_MIN_INTERESTING KEY_MAX KEY_CNT" -if [ ! -e "$INPUT_HEADER" ]; then - echo "Can't find input header: $INPUT_HEADER" >&2 - exit 1 -fi - -cat > "$OUTPUT_ENUM" <&2 + exit 1 + fi -enum linux_input_keyval { -EOF + cp "$INPUT_HEADER" "$LOCAL_INPUT_HEADER" +fi -cat > "$OUTPUT_MAP" < "$OUTPUT_MAPH" < +#include +#include +#include "$LOCAL_INPUT_HEADER" struct linux_input_keycode { const char *name; - enum linux_input_keyval value; + uint32_t value; bool alias; void *cairo_surface; }; +extern struct linux_input_keycode linux_input_keycodes[]; + +#endif +EOF + +cat > "$OUTPUT_MAPC" << EOF +/* AUTOGENERATED: DO NOT EDIT */ + +#include "$LOCAL_INPUT_HEADER" +#include "$OUTPUT_MAPH" + struct linux_input_keycode linux_input_keycodes[] = { EOF -cat "$INPUT_HEADER" | grep "^#define[[:space:]]*KEY_" | while read DEF NAME VALUE COMMENTS; do +cat "$LOCAL_INPUT_HEADER" | grep "^#define[[:space:]]*KEY_" | while read DEF NAME VALUE COMMENTS; do for WORD in $SKIP; do if [ "$NAME" = "$WORD" ]; then continue @@ -50,22 +62,14 @@ cat "$INPUT_HEADER" | grep "^#define[[:space:]]*KEY_" | while read DEF NAME VALU ALIAS="false" fi - echo " $NAME = $VALUE," >> "$OUTPUT_ENUM" - echo " { \"$NAME\", $NAME, $ALIAS, NULL }," >> "$OUTPUT_MAP" + echo " { \"$NAME\", $NAME, $ALIAS, NULL }," >> "$OUTPUT_MAPC" done -cat >> "$OUTPUT_ENUM" << EOF -}; -#endif -EOF - -cat >> "$OUTPUT_MAP" << EOF +cat >> "$OUTPUT_MAPC" << EOF { NULL, 0, false, NULL } }; -#endif EOF - exit 0 -- cgit v1.2.3