# HG changeset patch # User Richard Westhaver # Date 1727584284 14400 # Node ID 29fe829a7ac3a41735353155360f6c0f8ec7ff48 # Parent c5fe76568de0d1ee6a94d79a70d08e89dc6af1c0 evdev and io/kbd diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/evdev/constants.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/ffi/evdev/constants.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -0,0 +1,860 @@ +;;; constants.lisp --- evdev constants +("sys/time.h" "sys/ioctl.h" "sys/types.h" "linux/types.h" "linux/input-event-codes.h" "linux/input.h") + +(;; linux/input-event-codes.h + (:integer ~input-prop-pointer~ "INPUT_PROP_POINTER") + (:integer +input-prop-direct+ "INPUT_PROP_DIRECT") + (:integer +input-prop-buttonpad+ "INPUT_PROP_BUTTONPAD") + (:integer +input-prop-semi-mt+ "INPUT_PROP_SEMI_MT") + (:integer +input-prop-topbuttonpad+ "INPUT_PROP_TOPBUTTONPAD") + (:integer +input-prop-pointing-stick+ "INPUT_PROP_POINTING_STICK") + (:integer +input-prop-accelerometer+ "INPUT_PROP_ACCELEROMETER") + (:integer +input-prop-max+ "INPUT_PROP_MAX") + (:integer +input-prop-cnt+ "INPUT_PROP_CNT") + (:integer +ev-syn+ "EV_SYN") + (:integer +ev-key+ "EV_KEY") + (:integer +ev-rel+ "EV_REL") + (:integer +ev-abs+ "EV_ABS") + (:integer +ev-msc+ "EV_MSC") + (:integer +ev-sw+ "EV_SW") + (:integer +ev-led+ "EV_LED") + (:integer +ev-snd+ "EV_SND") + (:integer +ev-rep+ "EV_REP") + (:integer +ev-ff+ "EV_FF") + (:integer +ev-pwr+ "EV_PWR") + (:integer +ev-ff-status+ "EV_FF_STATUS") + (:integer +ev-max+ "EV_MAX") + (:integer +ev-cnt+ "EV_CNT") + (:integer +syn-report+ "SYN_REPORT") + (:integer +syn-config+ "SYN_CONFIG") + (:integer +syn-mt-report+ "SYN_MT_REPORT") + (:integer +syn-dropped+ "SYN_DROPPED") + (:integer +syn-max+ "SYN_MAX") + (:integer +syn-cnt+ "SYN_CNT") + (:integer +key-reserved+ "KEY_RESERVED") + (:integer +key-esc+ "KEY_ESC") + (:integer +key-1+ "KEY_1") + (:integer +key-2+ "KEY_2") + (:integer +key-3+ "KEY_3") + (:integer +key-4+ "KEY_4") + (:integer +key-5+ "KEY_5") + (:integer +key-6+ "KEY_6") + (:integer +key-7+ "KEY_7") + (:integer +key-8+ "KEY_8") + (:integer +key-9+ "KEY_9") + (:integer +key-0+ "KEY_0") + (:integer +key-minus+ "KEY_MINUS") + (:integer +key-equal+ "KEY_EQUAL") + (:integer +key-backspace+ "KEY_BACKSPACE") + (:integer +key-tab+ "KEY_TAB") + (:integer +key-q+ "KEY_Q") + (:integer +key-w+ "KEY_W") + (:integer +key-e+ "KEY_E") + (:integer +key-r+ "KEY_R") + (:integer +key-t+ "KEY_T") + (:integer +key-y+ "KEY_Y") + (:integer +key-u+ "KEY_U") + (:integer +key-i+ "KEY_I") + (:integer +key-o+ "KEY_O") + (:integer +key-p+ "KEY_P") + (:integer +key-leftbrace+ "KEY_LEFTBRACE") + (:integer +key-rightbrace+ "KEY_RIGHTBRACE") + (:integer +key-enter+ "KEY_ENTER") + (:integer +key-leftctrl+ "KEY_LEFTCTRL") + (:integer +key-a+ "KEY_A") + (:integer +key-s+ "KEY_S") + (:integer +key-d+ "KEY_D") + (:integer +key-f+ "KEY_F") + (:integer +key-g+ "KEY_G") + (:integer +key-h+ "KEY_H") + (:integer +key-j+ "KEY_J") + (:integer +key-k+ "KEY_K") + (:integer +key-l+ "KEY_L") + (:integer +key-semicolon+ "KEY_SEMICOLON") + (:integer +key-apostrophe+ "KEY_APOSTROPHE") + (:integer +key-grave+ "KEY_GRAVE") + (:integer +key-leftshift+ "KEY_LEFTSHIFT") + (:integer +key-backslash+ "KEY_BACKSLASH") + (:integer +key-z+ "KEY_Z") + (:integer +key-x+ "KEY_X") + (:integer +key-c+ "KEY_C") + (:integer +key-v+ "KEY_V") + (:integer +key-b+ "KEY_B") + (:integer +key-n+ "KEY_N") + (:integer +key-m+ "KEY_M") + (:integer +key-comma+ "KEY_COMMA") + (:integer +key-dot+ "KEY_DOT") + (:integer +key-slash+ "KEY_SLASH") + (:integer +key-rightshift+ "KEY_RIGHTSHIFT") + (:integer +key-kpasterisk+ "KEY_KPASTERISK") + (:integer +key-leftalt+ "KEY_LEFTALT") + (:integer +key-space+ "KEY_SPACE") + (:integer +key-capslock+ "KEY_CAPSLOCK") + (:integer +key-f1+ "KEY_F1") + (:integer +key-f2+ "KEY_F2") + (:integer +key-f3+ "KEY_F3") + (:integer +key-f4+ "KEY_F4") + (:integer +key-f5+ "KEY_F5") + (:integer +key-f6+ "KEY_F6") + (:integer +key-f7+ "KEY_F7") + (:integer +key-f8+ "KEY_F8") + (:integer +key-f9+ "KEY_F9") + (:integer +key-f10+ "KEY_F10") + (:integer +key-numlock+ "KEY_NUMLOCK") + (:integer +key-scrolllock+ "KEY_SCROLLLOCK") + (:integer +key-kp7+ "KEY_KP7") + (:integer +key-kp8+ "KEY_KP8") + (:integer +key-kp9+ "KEY_KP9") + (:integer +key-kpminus+ "KEY_KPMINUS") + (:integer +key-kp4+ "KEY_KP4") + (:integer +key-kp5+ "KEY_KP5") + (:integer +key-kp6+ "KEY_KP6") + (:integer +key-kpplus+ "KEY_KPPLUS") + (:integer +key-kp1+ "KEY_KP1") + (:integer +key-kp2+ "KEY_KP2") + (:integer +key-kp3+ "KEY_KP3") + (:integer +key-kp0+ "KEY_KP0") + (:integer +key-kpdot+ "KEY_KPDOT") + (:integer +key-zenkakuhankaku+ "KEY_ZENKAKUHANKAKU") + (:integer +key-102nd+ "KEY_102ND") + (:integer +key-f11+ "KEY_F11") + (:integer +key-f12+ "KEY_F12") + (:integer +key-ro+ "KEY_RO") + (:integer +key-katakana+ "KEY_KATAKANA") + (:integer +key-hiragana+ "KEY_HIRAGANA") + (:integer +key-henkan+ "KEY_HENKAN") + (:integer +key-katakanahiragana+ "KEY_KATAKANAHIRAGANA") + (:integer +key-muhenkan+ "KEY_MUHENKAN") + (:integer +key-kpjpcomma+ "KEY_KPJPCOMMA") + (:integer +key-kpenter+ "KEY_KPENTER") + (:integer +key-rightctrl+ "KEY_RIGHTCTRL") + (:integer +key-kpslash+ "KEY_KPSLASH") + (:integer +key-sysrq+ "KEY_SYSRQ") + (:integer +key-rightalt+ "KEY_RIGHTALT") + (:integer +key-linefeed+ "KEY_LINEFEED") + (:integer +key-home+ "KEY_HOME") + (:integer +key-up+ "KEY_UP") + (:integer +key-pageup+ "KEY_PAGEUP") + (:integer +key-left+ "KEY_LEFT") + (:integer +key-right+ "KEY_RIGHT") + (:integer +key-end+ "KEY_END") + (:integer +key-down+ "KEY_DOWN") + (:integer +key-pagedown+ "KEY_PAGEDOWN") + (:integer +key-insert+ "KEY_INSERT") + (:integer +key-delete+ "KEY_DELETE") + (:integer +key-macro+ "KEY_MACRO") + (:integer +key-mute+ "KEY_MUTE") + (:integer +key-volumedown+ "KEY_VOLUMEDOWN") + (:integer +key-volumeup+ "KEY_VOLUMEUP") + (:integer +key-power+ "KEY_POWER") + (:integer +key-kpequal+ "KEY_KPEQUAL") + (:integer +key-kpplusminus+ "KEY_KPPLUSMINUS") + (:integer +key-pause+ "KEY_PAUSE") + (:integer +key-scale+ "KEY_SCALE") + (:integer +key-kpcomma+ "KEY_KPCOMMA") + (:integer +key-hangeul+ "KEY_HANGEUL") + (:integer +key-hanguel+ "KEY_HANGUEL") + (:integer +key-hanja+ "KEY_HANJA") + (:integer +key-yen+ "KEY_YEN") + (:integer +key-leftmeta+ "KEY_LEFTMETA") + (:integer +key-rightmeta+ "KEY_RIGHTMETA") + (:integer +key-compose+ "KEY_COMPOSE") + (:integer +key-stop+ "KEY_STOP") + (:integer +key-again+ "KEY_AGAIN") + (:integer +key-props+ "KEY_PROPS") + (:integer +key-undo+ "KEY_UNDO") + (:integer +key-front+ "KEY_FRONT") + (:integer +key-copy+ "KEY_COPY") + (:integer +key-open+ "KEY_OPEN") + (:integer +key-paste+ "KEY_PASTE") + (:integer +key-find+ "KEY_FIND") + (:integer +key-cut+ "KEY_CUT") + (:integer +key-help+ "KEY_HELP") + (:integer +key-menu+ "KEY_MENU") + (:integer +key-calc+ "KEY_CALC") + (:integer +key-setup+ "KEY_SETUP") + (:integer +key-sleep+ "KEY_SLEEP") + (:integer +key-wakeup+ "KEY_WAKEUP") + (:integer +key-file+ "KEY_FILE") + (:integer +key-sendfile+ "KEY_SENDFILE") + (:integer +key-deletefile+ "KEY_DELETEFILE") + (:integer +key-xfer+ "KEY_XFER") + (:integer +key-prog1+ "KEY_PROG1") + (:integer +key-prog2+ "KEY_PROG2") + (:integer +key-www+ "KEY_WWW") + (:integer +key-msdos+ "KEY_MSDOS") + (:integer +key-coffee+ "KEY_COFFEE") + (:integer +key-screenlock+ "KEY_SCREENLOCK") + (:integer +key-rotate-display+ "KEY_ROTATE_DISPLAY") + (:integer +key-direction+ "KEY_DIRECTION") + (:integer +key-cyclewindows+ "KEY_CYCLEWINDOWS") + (:integer +key-mail+ "KEY_MAIL") + (:integer +key-bookmarks+ "KEY_BOOKMARKS") + (:integer +key-computer+ "KEY_COMPUTER") + (:integer +key-back+ "KEY_BACK") + (:integer +key-forward+ "KEY_FORWARD") + (:integer +key-closecd+ "KEY_CLOSECD") + (:integer +key-ejectcd+ "KEY_EJECTCD") + (:integer +key-ejectclosecd+ "KEY_EJECTCLOSECD") + (:integer +key-nextsong+ "KEY_NEXTSONG") + (:integer +key-playpause+ "KEY_PLAYPAUSE") + (:integer +key-previoussong+ "KEY_PREVIOUSSONG") + (:integer +key-stopcd+ "KEY_STOPCD") + (:integer +key-record+ "KEY_RECORD") + (:integer +key-rewind+ "KEY_REWIND") + (:integer +key-phone+ "KEY_PHONE") + (:integer +key-iso+ "KEY_ISO") + (:integer +key-config+ "KEY_CONFIG") + (:integer +key-homepage+ "KEY_HOMEPAGE") + (:integer +key-refresh+ "KEY_REFRESH") + (:integer +key-exit+ "KEY_EXIT") + (:integer +key-move+ "KEY_MOVE") + (:integer +key-edit+ "KEY_EDIT") + (:integer +key-scrollup+ "KEY_SCROLLUP") + (:integer +key-scrolldown+ "KEY_SCROLLDOWN") + (:integer +key-kpleftparen+ "KEY_KPLEFTPAREN") + (:integer +key-kprightparen+ "KEY_KPRIGHTPAREN") + (:integer +key-new+ "KEY_NEW") + (:integer +key-redo+ "KEY_REDO") + (:integer +key-f13+ "KEY_F13") + (:integer +key-f14+ "KEY_F14") + (:integer +key-f15+ "KEY_F15") + (:integer +key-f16+ "KEY_F16") + (:integer +key-f17+ "KEY_F17") + (:integer +key-f18+ "KEY_F18") + (:integer +key-f19+ "KEY_F19") + (:integer +key-f20+ "KEY_F20") + (:integer +key-f21+ "KEY_F21") + (:integer +key-f22+ "KEY_F22") + (:integer +key-f23+ "KEY_F23") + (:integer +key-f24+ "KEY_F24") + (:integer +key-playcd+ "KEY_PLAYCD") + (:integer +key-pausecd+ "KEY_PAUSECD") + (:integer +key-prog3+ "KEY_PROG3") + (:integer +key-prog4+ "KEY_PROG4") + (:integer +key-all-applications+ "KEY_ALL_APPLICATIONS") + (:integer +key-dashboard+ "KEY_DASHBOARD") + (:integer +key-suspend+ "KEY_SUSPEND") + (:integer +key-close+ "KEY_CLOSE") + (:integer +key-play+ "KEY_PLAY") + (:integer +key-fastforward+ "KEY_FASTFORWARD") + (:integer +key-bassboost+ "KEY_BASSBOOST") + (:integer +key-print+ "KEY_PRINT") + (:integer +key-hp+ "KEY_HP") + (:integer +key-camera+ "KEY_CAMERA") + (:integer +key-sound+ "KEY_SOUND") + (:integer +key-question+ "KEY_QUESTION") + (:integer +key-email+ "KEY_EMAIL") + (:integer +key-chat+ "KEY_CHAT") + (:integer +key-search+ "KEY_SEARCH") + (:integer +key-connect+ "KEY_CONNECT") + (:integer +key-finance+ "KEY_FINANCE") + (:integer +key-sport+ "KEY_SPORT") + (:integer +key-shop+ "KEY_SHOP") + (:integer +key-alterase+ "KEY_ALTERASE") + (:integer +key-cancel+ "KEY_CANCEL") + (:integer +key-brightnessdown+ "KEY_BRIGHTNESSDOWN") + (:integer +key-brightnessup+ "KEY_BRIGHTNESSUP") + (:integer +key-media+ "KEY_MEDIA") + (:integer +key-switchvideomode+ "KEY_SWITCHVIDEOMODE") + (:integer +key-kbdillumtoggle+ "KEY_KBDILLUMTOGGLE") + (:integer +key-kbdillumdown+ "KEY_KBDILLUMDOWN") + (:integer +key-kbdillumup+ "KEY_KBDILLUMUP") + (:integer +key-send+ "KEY_SEND") + (:integer +key-reply+ "KEY_REPLY") + (:integer +key-forwardmail+ "KEY_FORWARDMAIL") + (:integer +key-save+ "KEY_SAVE") + (:integer +key-documents+ "KEY_DOCUMENTS") + (:integer +key-battery+ "KEY_BATTERY") + (:integer +key-bluetooth+ "KEY_BLUETOOTH") + (:integer +key-wlan+ "KEY_WLAN") + (:integer +key-uwb+ "KEY_UWB") + (:integer +key-unknown+ "KEY_UNKNOWN") + (:integer +key-video-next+ "KEY_VIDEO_NEXT") + (:integer +key-video-prev+ "KEY_VIDEO_PREV") + (:integer +key-brightness-cycle+ "KEY_BRIGHTNESS_CYCLE") + (:integer +key-brightness-auto+ "KEY_BRIGHTNESS_AUTO") + (:integer +key-brightness-zero+ "KEY_BRIGHTNESS_ZERO") + (:integer +key-display-off+ "KEY_DISPLAY_OFF") + (:integer +key-wwan+ "KEY_WWAN") + (:integer +key-wimax+ "KEY_WIMAX") + (:integer +key-rfkill+ "KEY_RFKILL") + (:integer +key-micmute+ "KEY_MICMUTE") + (:integer +btn-misc+ "BTN_MISC") + (:integer +btn-0+ "BTN_0") + (:integer +btn-1+ "BTN_1") + (:integer +btn-2+ "BTN_2") + (:integer +btn-3+ "BTN_3") + (:integer +btn-4+ "BTN_4") + (:integer +btn-5+ "BTN_5") + (:integer +btn-6+ "BTN_6") + (:integer +btn-7+ "BTN_7") + (:integer +btn-8+ "BTN_8") + (:integer +btn-9+ "BTN_9") + (:integer +btn-mouse+ "BTN_MOUSE") + (:integer +btn-left+ "BTN_LEFT") + (:integer +btn-right+ "BTN_RIGHT") + (:integer +btn-middle+ "BTN_MIDDLE") + (:integer +btn-side+ "BTN_SIDE") + (:integer +btn-extra+ "BTN_EXTRA") + (:integer +btn-forward+ "BTN_FORWARD") + (:integer +btn-back+ "BTN_BACK") + (:integer +btn-task+ "BTN_TASK") + (:integer +btn-joystick+ "BTN_JOYSTICK") + (:integer +btn-trigger+ "BTN_TRIGGER") + (:integer +btn-thumb+ "BTN_THUMB") + (:integer +btn-thumb2+ "BTN_THUMB2") + (:integer +btn-top+ "BTN_TOP") + (:integer +btn-top2+ "BTN_TOP2") + (:integer +btn-pinkie+ "BTN_PINKIE") + (:integer +btn-base+ "BTN_BASE") + (:integer +btn-base2+ "BTN_BASE2") + (:integer +btn-base3+ "BTN_BASE3") + (:integer +btn-base4+ "BTN_BASE4") + (:integer +btn-base5+ "BTN_BASE5") + (:integer +btn-base6+ "BTN_BASE6") + (:integer +btn-dead+ "BTN_DEAD") + (:integer +btn-gamepad+ "BTN_GAMEPAD") + (:integer +btn-south+ "BTN_SOUTH") + (:integer +btn-a+ "BTN_A") + (:integer +btn-east+ "BTN_EAST") + (:integer +btn-b+ "BTN_B") + (:integer +btn-c+ "BTN_C") + (:integer +btn-north+ "BTN_NORTH") + (:integer +btn-x+ "BTN_X") + (:integer +btn-west+ "BTN_WEST") + (:integer +btn-y+ "BTN_Y") + (:integer +btn-z+ "BTN_Z") + (:integer +btn-tl+ "BTN_TL") + (:integer +btn-tr+ "BTN_TR") + (:integer +btn-tl2+ "BTN_TL2") + (:integer +btn-tr2+ "BTN_TR2") + (:integer +btn-select+ "BTN_SELECT") + (:integer +btn-start+ "BTN_START") + (:integer +btn-mode+ "BTN_MODE") + (:integer +btn-thumbl+ "BTN_THUMBL") + (:integer +btn-thumbr+ "BTN_THUMBR") + (:integer +btn-digi+ "BTN_DIGI") + (:integer +btn-tool-pen+ "BTN_TOOL_PEN") + (:integer +btn-tool-rubber+ "BTN_TOOL_RUBBER") + (:integer +btn-tool-brush+ "BTN_TOOL_BRUSH") + (:integer +btn-tool-pencil+ "BTN_TOOL_PENCIL") + (:integer +btn-tool-airbrush+ "BTN_TOOL_AIRBRUSH") + (:integer +btn-tool-finger+ "BTN_TOOL_FINGER") + (:integer +btn-tool-mouse+ "BTN_TOOL_MOUSE") + (:integer +btn-tool-lens+ "BTN_TOOL_LENS") + (:integer +btn-tool-quinttap+ "BTN_TOOL_QUINTTAP") + (:integer +btn-stylus3+ "BTN_STYLUS3") + (:integer +btn-touch+ "BTN_TOUCH") + (:integer +btn-stylus+ "BTN_STYLUS") + (:integer +btn-stylus2+ "BTN_STYLUS2") + (:integer +btn-tool-doubletap+ "BTN_TOOL_DOUBLETAP") + (:integer +btn-tool-tripletap+ "BTN_TOOL_TRIPLETAP") + (:integer +btn-tool-quadtap+ "BTN_TOOL_QUADTAP") + (:integer +btn-wheel+ "BTN_WHEEL") + (:integer +btn-gear-down+ "BTN_GEAR_DOWN") + (:integer +btn-gear-up+ "BTN_GEAR_UP") + (:integer +key-ok+ "KEY_OK") + (:integer +key-select+ "KEY_SELECT") + (:integer +key-goto+ "KEY_GOTO") + (:integer +key-clear+ "KEY_CLEAR") + (:integer +key-power2+ "KEY_POWER2") + (:integer +key-option+ "KEY_OPTION") + (:integer +key-info+ "KEY_INFO") + (:integer +key-time+ "KEY_TIME") + (:integer +key-vendor+ "KEY_VENDOR") + (:integer +key-archive+ "KEY_ARCHIVE") + (:integer +key-program+ "KEY_PROGRAM") + (:integer +key-channel+ "KEY_CHANNEL") + (:integer +key-favorites+ "KEY_FAVORITES") + (:integer +key-epg+ "KEY_EPG") + (:integer +key-pvr+ "KEY_PVR") + (:integer +key-mhp+ "KEY_MHP") + (:integer +key-language+ "KEY_LANGUAGE") + (:integer +key-title+ "KEY_TITLE") + (:integer +key-subtitle+ "KEY_SUBTITLE") + (:integer +key-angle+ "KEY_ANGLE") + (:integer +key-full-screen+ "KEY_FULL_SCREEN") + (:integer +key-zoom+ "KEY_ZOOM") + (:integer +key-mode+ "KEY_MODE") + (:integer +key-keyboard+ "KEY_KEYBOARD") + (:integer +key-aspect-ratio+ "KEY_ASPECT_RATIO") + (:integer +key-screen+ "KEY_SCREEN") + (:integer +key-pc+ "KEY_PC") + (:integer +key-tv+ "KEY_TV") + (:integer +key-tv2+ "KEY_TV2") + (:integer +key-vcr+ "KEY_VCR") + (:integer +key-vcr2+ "KEY_VCR2") + (:integer +key-sat+ "KEY_SAT") + (:integer +key-sat2+ "KEY_SAT2") + (:integer +key-cd+ "KEY_CD") + (:integer +key-tape+ "KEY_TAPE") + (:integer +key-radio+ "KEY_RADIO") + (:integer +key-tuner+ "KEY_TUNER") + (:integer +key-player+ "KEY_PLAYER") + (:integer +key-text+ "KEY_TEXT") + (:integer +key-dvd+ "KEY_DVD") + (:integer +key-aux+ "KEY_AUX") + (:integer +key-mp3+ "KEY_MP3") + (:integer +key-audio+ "KEY_AUDIO") + (:integer +key-video+ "KEY_VIDEO") + (:integer +key-directory+ "KEY_DIRECTORY") + (:integer +key-list+ "KEY_LIST") + (:integer +key-memo+ "KEY_MEMO") + (:integer +key-calendar+ "KEY_CALENDAR") + (:integer +key-red+ "KEY_RED") + (:integer +key-green+ "KEY_GREEN") + (:integer +key-yellow+ "KEY_YELLOW") + (:integer +key-blue+ "KEY_BLUE") + (:integer +key-channelup+ "KEY_CHANNELUP") + (:integer +key-channeldown+ "KEY_CHANNELDOWN") + (:integer +key-first+ "KEY_FIRST") + (:integer +key-last+ "KEY_LAST") + (:integer +key-ab+ "KEY_AB") + (:integer +key-next+ "KEY_NEXT") + (:integer +key-restart+ "KEY_RESTART") + (:integer +key-slow+ "KEY_SLOW") + (:integer +key-shuffle+ "KEY_SHUFFLE") + (:integer +key-break+ "KEY_BREAK") + (:integer +key-previous+ "KEY_PREVIOUS") + (:integer +key-digits+ "KEY_DIGITS") + (:integer +key-teen+ "KEY_TEEN") + (:integer +key-twen+ "KEY_TWEN") + (:integer +key-videophone+ "KEY_VIDEOPHONE") + (:integer +key-games+ "KEY_GAMES") + (:integer +key-zoomin+ "KEY_ZOOMIN") + (:integer +key-zoomout+ "KEY_ZOOMOUT") + (:integer +key-zoomreset+ "KEY_ZOOMRESET") + (:integer +key-wordprocessor+ "KEY_WORDPROCESSOR") + (:integer +key-editor+ "KEY_EDITOR") + (:integer +key-spreadsheet+ "KEY_SPREADSHEET") + (:integer +key-graphicseditor+ "KEY_GRAPHICSEDITOR") + (:integer +key-presentation+ "KEY_PRESENTATION") + (:integer +key-database+ "KEY_DATABASE") + (:integer +key-news+ "KEY_NEWS") + (:integer +key-voicemail+ "KEY_VOICEMAIL") + (:integer +key-addressbook+ "KEY_ADDRESSBOOK") + (:integer +key-messenger+ "KEY_MESSENGER") + (:integer +key-displaytoggle+ "KEY_DISPLAYTOGGLE") + (:integer +key-brightness-toggle+ "KEY_BRIGHTNESS_TOGGLE") + (:integer +key-spellcheck+ "KEY_SPELLCHECK") + (:integer +key-logoff+ "KEY_LOGOFF") + (:integer +key-dollar+ "KEY_DOLLAR") + (:integer +key-euro+ "KEY_EURO") + (:integer +key-frameback+ "KEY_FRAMEBACK") + (:integer +key-frameforward+ "KEY_FRAMEFORWARD") + (:integer +key-context-menu+ "KEY_CONTEXT_MENU") + (:integer +key-media-repeat+ "KEY_MEDIA_REPEAT") + (:integer +key-10channelsup+ "KEY_10CHANNELSUP") + (:integer +key-10channelsdown+ "KEY_10CHANNELSDOWN") + (:integer +key-images+ "KEY_IMAGES") + (:integer +key-notification-center+ "KEY_NOTIFICATION_CENTER") + (:integer +key-pickup-phone+ "KEY_PICKUP_PHONE") + (:integer +key-hangup-phone+ "KEY_HANGUP_PHONE") + (:integer +key-del-eol+ "KEY_DEL_EOL") + (:integer +key-del-eos+ "KEY_DEL_EOS") + (:integer +key-ins-line+ "KEY_INS_LINE") + (:integer +key-del-line+ "KEY_DEL_LINE") + (:integer +key-fn+ "KEY_FN") + (:integer +key-fn-esc+ "KEY_FN_ESC") + (:integer +key-fn-f1+ "KEY_FN_F1") + (:integer +key-fn-f2+ "KEY_FN_F2") + (:integer +key-fn-f3+ "KEY_FN_F3") + (:integer +key-fn-f4+ "KEY_FN_F4") + (:integer +key-fn-f5+ "KEY_FN_F5") + (:integer +key-fn-f6+ "KEY_FN_F6") + (:integer +key-fn-f7+ "KEY_FN_F7") + (:integer +key-fn-f8+ "KEY_FN_F8") + (:integer +key-fn-f9+ "KEY_FN_F9") + (:integer +key-fn-f10+ "KEY_FN_F10") + (:integer +key-fn-f11+ "KEY_FN_F11") + (:integer +key-fn-f12+ "KEY_FN_F12") + (:integer +key-fn-1+ "KEY_FN_1") + (:integer +key-fn-2+ "KEY_FN_2") + (:integer +key-fn-d+ "KEY_FN_D") + (:integer +key-fn-e+ "KEY_FN_E") + (:integer +key-fn-f+ "KEY_FN_F") + (:integer +key-fn-s+ "KEY_FN_S") + (:integer +key-fn-b+ "KEY_FN_B") + (:integer +key-fn-right-shift+ "KEY_FN_RIGHT_SHIFT") + (:integer +key-brl-dot1+ "KEY_BRL_DOT1") + (:integer +key-brl-dot2+ "KEY_BRL_DOT2") + (:integer +key-brl-dot3+ "KEY_BRL_DOT3") + (:integer +key-brl-dot4+ "KEY_BRL_DOT4") + (:integer +key-brl-dot5+ "KEY_BRL_DOT5") + (:integer +key-brl-dot6+ "KEY_BRL_DOT6") + (:integer +key-brl-dot7+ "KEY_BRL_DOT7") + (:integer +key-brl-dot8+ "KEY_BRL_DOT8") + (:integer +key-brl-dot9+ "KEY_BRL_DOT9") + (:integer +key-brl-dot10+ "KEY_BRL_DOT10") + (:integer +key-numeric-0+ "KEY_NUMERIC_0") + (:integer +key-numeric-1+ "KEY_NUMERIC_1") + (:integer +key-numeric-2+ "KEY_NUMERIC_2") + (:integer +key-numeric-3+ "KEY_NUMERIC_3") + (:integer +key-numeric-4+ "KEY_NUMERIC_4") + (:integer +key-numeric-5+ "KEY_NUMERIC_5") + (:integer +key-numeric-6+ "KEY_NUMERIC_6") + (:integer +key-numeric-7+ "KEY_NUMERIC_7") + (:integer +key-numeric-8+ "KEY_NUMERIC_8") + (:integer +key-numeric-9+ "KEY_NUMERIC_9") + (:integer +key-numeric-star+ "KEY_NUMERIC_STAR") + (:integer +key-numeric-pound+ "KEY_NUMERIC_POUND") + (:integer +key-numeric-a+ "KEY_NUMERIC_A") + (:integer +key-numeric-b+ "KEY_NUMERIC_B") + (:integer +key-numeric-c+ "KEY_NUMERIC_C") + (:integer +key-numeric-d+ "KEY_NUMERIC_D") + (:integer +key-camera-focus+ "KEY_CAMERA_FOCUS") + (:integer +key-wps-button+ "KEY_WPS_BUTTON") + (:integer +key-touchpad-toggle+ "KEY_TOUCHPAD_TOGGLE") + (:integer +key-touchpad-on+ "KEY_TOUCHPAD_ON") + (:integer +key-touchpad-off+ "KEY_TOUCHPAD_OFF") + (:integer +key-camera-zoomin+ "KEY_CAMERA_ZOOMIN") + (:integer +key-camera-zoomout+ "KEY_CAMERA_ZOOMOUT") + (:integer +key-camera-up+ "KEY_CAMERA_UP") + (:integer +key-camera-down+ "KEY_CAMERA_DOWN") + (:integer +key-camera-left+ "KEY_CAMERA_LEFT") + (:integer +key-camera-right+ "KEY_CAMERA_RIGHT") + (:integer +key-attendant-on+ "KEY_ATTENDANT_ON") + (:integer +key-attendant-off+ "KEY_ATTENDANT_OFF") + (:integer +key-attendant-toggle+ "KEY_ATTENDANT_TOGGLE") + (:integer +key-lights-toggle+ "KEY_LIGHTS_TOGGLE") + (:integer +btn-dpad-up+ "BTN_DPAD_UP") + (:integer +btn-dpad-down+ "BTN_DPAD_DOWN") + (:integer +btn-dpad-left+ "BTN_DPAD_LEFT") + (:integer +btn-dpad-right+ "BTN_DPAD_RIGHT") + (:integer +key-als-toggle+ "KEY_ALS_TOGGLE") + (:integer +key-rotate-lock-toggle+ "KEY_ROTATE_LOCK_TOGGLE") + (:integer +key-refresh-rate-toggle+ "KEY_REFRESH_RATE_TOGGLE") + (:integer +key-buttonconfig+ "KEY_BUTTONCONFIG") + (:integer +key-taskmanager+ "KEY_TASKMANAGER") + (:integer +key-journal+ "KEY_JOURNAL") + (:integer +key-controlpanel+ "KEY_CONTROLPANEL") + (:integer +key-appselect+ "KEY_APPSELECT") + (:integer +key-screensaver+ "KEY_SCREENSAVER") + (:integer +key-voicecommand+ "KEY_VOICECOMMAND") + (:integer +key-assistant+ "KEY_ASSISTANT") + (:integer +key-kbd-layout-next+ "KEY_KBD_LAYOUT_NEXT") + (:integer +key-emoji-picker+ "KEY_EMOJI_PICKER") + (:integer +key-dictate+ "KEY_DICTATE") + (:integer +key-camera-access-enable+ "KEY_CAMERA_ACCESS_ENABLE") + (:integer +key-camera-access-disable+ "KEY_CAMERA_ACCESS_DISABLE") + (:integer +key-camera-access-toggle+ "KEY_CAMERA_ACCESS_TOGGLE") + (:integer +key-accessibility+ "KEY_ACCESSIBILITY") + (:integer +key-do-not-disturb+ "KEY_DO_NOT_DISTURB") + (:integer +key-brightness-min+ "KEY_BRIGHTNESS_MIN") + (:integer +key-brightness-max+ "KEY_BRIGHTNESS_MAX") + (:integer +key-kbdinputassist-prev+ "KEY_KBDINPUTASSIST_PREV") + (:integer +key-kbdinputassist-next+ "KEY_KBDINPUTASSIST_NEXT") + (:integer +key-kbdinputassist-prevgroup+ "KEY_KBDINPUTASSIST_PREVGROUP") + (:integer +key-kbdinputassist-nextgroup+ "KEY_KBDINPUTASSIST_NEXTGROUP") + (:integer +key-kbdinputassist-accept+ "KEY_KBDINPUTASSIST_ACCEPT") + (:integer +key-kbdinputassist-cancel+ "KEY_KBDINPUTASSIST_CANCEL") + (:integer +key-right-up+ "KEY_RIGHT_UP") + (:integer +key-right-down+ "KEY_RIGHT_DOWN") + (:integer +key-left-up+ "KEY_LEFT_UP") + (:integer +key-left-down+ "KEY_LEFT_DOWN") + (:integer +key-root-menu+ "KEY_ROOT_MENU") + (:integer +key-media-top-menu+ "KEY_MEDIA_TOP_MENU") + (:integer +key-numeric-11+ "KEY_NUMERIC_11") + (:integer +key-numeric-12+ "KEY_NUMERIC_12") + (:integer +key-audio-desc+ "KEY_AUDIO_DESC") + (:integer +key-3d-mode+ "KEY_3D_MODE") + (:integer +key-next-favorite+ "KEY_NEXT_FAVORITE") + (:integer +key-stop-record+ "KEY_STOP_RECORD") + (:integer +key-pause-record+ "KEY_PAUSE_RECORD") + (:integer +key-vod+ "KEY_VOD") + (:integer +key-unmute+ "KEY_UNMUTE") + (:integer +key-fastreverse+ "KEY_FASTREVERSE") + (:integer +key-slowreverse+ "KEY_SLOWREVERSE") + (:integer +key-data+ "KEY_DATA") + (:integer +key-onscreen-keyboard+ "KEY_ONSCREEN_KEYBOARD") + (:integer +key-privacy-screen-toggle+ "KEY_PRIVACY_SCREEN_TOGGLE") + (:integer +key-selective-screenshot+ "KEY_SELECTIVE_SCREENSHOT") + (:integer +key-next-element+ "KEY_NEXT_ELEMENT") + (:integer +key-previous-element+ "KEY_PREVIOUS_ELEMENT") + (:integer +key-autopilot-engage-toggle+ "KEY_AUTOPILOT_ENGAGE_TOGGLE") + (:integer +key-mark-waypoint+ "KEY_MARK_WAYPOINT") + (:integer +key-sos+ "KEY_SOS") + (:integer +key-nav-chart+ "KEY_NAV_CHART") + (:integer +key-fishing-chart+ "KEY_FISHING_CHART") + (:integer +key-single-range-radar+ "KEY_SINGLE_RANGE_RADAR") + (:integer +key-dual-range-radar+ "KEY_DUAL_RANGE_RADAR") + (:integer +key-radar-overlay+ "KEY_RADAR_OVERLAY") + (:integer +key-traditional-sonar+ "KEY_TRADITIONAL_SONAR") + (:integer +key-clearvu-sonar+ "KEY_CLEARVU_SONAR") + (:integer +key-sidevu-sonar+ "KEY_SIDEVU_SONAR") + (:integer +key-nav-info+ "KEY_NAV_INFO") + (:integer +key-brightness-menu+ "KEY_BRIGHTNESS_MENU") + (:integer +key-macro1+ "KEY_MACRO1") + (:integer +key-macro2+ "KEY_MACRO2") + (:integer +key-macro3+ "KEY_MACRO3") + (:integer +key-macro4+ "KEY_MACRO4") + (:integer +key-macro5+ "KEY_MACRO5") + (:integer +key-macro6+ "KEY_MACRO6") + (:integer +key-macro7+ "KEY_MACRO7") + (:integer +key-macro8+ "KEY_MACRO8") + (:integer +key-macro9+ "KEY_MACRO9") + (:integer +key-macro10+ "KEY_MACRO10") + (:integer +key-macro11+ "KEY_MACRO11") + (:integer +key-macro12+ "KEY_MACRO12") + (:integer +key-macro13+ "KEY_MACRO13") + (:integer +key-macro14+ "KEY_MACRO14") + (:integer +key-macro15+ "KEY_MACRO15") + (:integer +key-macro16+ "KEY_MACRO16") + (:integer +key-macro17+ "KEY_MACRO17") + (:integer +key-macro18+ "KEY_MACRO18") + (:integer +key-macro19+ "KEY_MACRO19") + (:integer +key-macro20+ "KEY_MACRO20") + (:integer +key-macro21+ "KEY_MACRO21") + (:integer +key-macro22+ "KEY_MACRO22") + (:integer +key-macro23+ "KEY_MACRO23") + (:integer +key-macro24+ "KEY_MACRO24") + (:integer +key-macro25+ "KEY_MACRO25") + (:integer +key-macro26+ "KEY_MACRO26") + (:integer +key-macro27+ "KEY_MACRO27") + (:integer +key-macro28+ "KEY_MACRO28") + (:integer +key-macro29+ "KEY_MACRO29") + (:integer +key-macro30+ "KEY_MACRO30") + (:integer +key-macro-record-start+ "KEY_MACRO_RECORD_START") + (:integer +key-macro-record-stop+ "KEY_MACRO_RECORD_STOP") + (:integer +key-macro-preset-cycle+ "KEY_MACRO_PRESET_CYCLE") + (:integer +key-macro-preset1+ "KEY_MACRO_PRESET1") + (:integer +key-macro-preset2+ "KEY_MACRO_PRESET2") + (:integer +key-macro-preset3+ "KEY_MACRO_PRESET3") + (:integer +key-kbd-lcd-menu1+ "KEY_KBD_LCD_MENU1") + (:integer +key-kbd-lcd-menu2+ "KEY_KBD_LCD_MENU2") + (:integer +key-kbd-lcd-menu3+ "KEY_KBD_LCD_MENU3") + (:integer +key-kbd-lcd-menu4+ "KEY_KBD_LCD_MENU4") + (:integer +key-kbd-lcd-menu5+ "KEY_KBD_LCD_MENU5") + (:integer +btn-trigger-happy+ "BTN_TRIGGER_HAPPY") + (:integer +btn-trigger-happy1+ "BTN_TRIGGER_HAPPY1") + (:integer +btn-trigger-happy2+ "BTN_TRIGGER_HAPPY2") + (:integer +btn-trigger-happy3+ "BTN_TRIGGER_HAPPY3") + (:integer +btn-trigger-happy4+ "BTN_TRIGGER_HAPPY4") + (:integer +btn-trigger-happy5+ "BTN_TRIGGER_HAPPY5") + (:integer +btn-trigger-happy6+ "BTN_TRIGGER_HAPPY6") + (:integer +btn-trigger-happy7+ "BTN_TRIGGER_HAPPY7") + (:integer +btn-trigger-happy8+ "BTN_TRIGGER_HAPPY8") + (:integer +btn-trigger-happy9+ "BTN_TRIGGER_HAPPY9") + (:integer +btn-trigger-happy10+ "BTN_TRIGGER_HAPPY10") + (:integer +btn-trigger-happy11+ "BTN_TRIGGER_HAPPY11") + (:integer +btn-trigger-happy12+ "BTN_TRIGGER_HAPPY12") + (:integer +btn-trigger-happy13+ "BTN_TRIGGER_HAPPY13") + (:integer +btn-trigger-happy14+ "BTN_TRIGGER_HAPPY14") + (:integer +btn-trigger-happy15+ "BTN_TRIGGER_HAPPY15") + (:integer +btn-trigger-happy16+ "BTN_TRIGGER_HAPPY16") + (:integer +btn-trigger-happy17+ "BTN_TRIGGER_HAPPY17") + (:integer +btn-trigger-happy18+ "BTN_TRIGGER_HAPPY18") + (:integer +btn-trigger-happy19+ "BTN_TRIGGER_HAPPY19") + (:integer +btn-trigger-happy20+ "BTN_TRIGGER_HAPPY20") + (:integer +btn-trigger-happy21+ "BTN_TRIGGER_HAPPY21") + (:integer +btn-trigger-happy22+ "BTN_TRIGGER_HAPPY22") + (:integer +btn-trigger-happy23+ "BTN_TRIGGER_HAPPY23") + (:integer +btn-trigger-happy24+ "BTN_TRIGGER_HAPPY24") + (:integer +btn-trigger-happy25+ "BTN_TRIGGER_HAPPY25") + (:integer +btn-trigger-happy26+ "BTN_TRIGGER_HAPPY26") + (:integer +btn-trigger-happy27+ "BTN_TRIGGER_HAPPY27") + (:integer +btn-trigger-happy28+ "BTN_TRIGGER_HAPPY28") + (:integer +btn-trigger-happy29+ "BTN_TRIGGER_HAPPY29") + (:integer +btn-trigger-happy30+ "BTN_TRIGGER_HAPPY30") + (:integer +btn-trigger-happy31+ "BTN_TRIGGER_HAPPY31") + (:integer +btn-trigger-happy32+ "BTN_TRIGGER_HAPPY32") + (:integer +btn-trigger-happy33+ "BTN_TRIGGER_HAPPY33") + (:integer +btn-trigger-happy34+ "BTN_TRIGGER_HAPPY34") + (:integer +btn-trigger-happy35+ "BTN_TRIGGER_HAPPY35") + (:integer +btn-trigger-happy36+ "BTN_TRIGGER_HAPPY36") + (:integer +btn-trigger-happy37+ "BTN_TRIGGER_HAPPY37") + (:integer +btn-trigger-happy38+ "BTN_TRIGGER_HAPPY38") + (:integer +btn-trigger-happy39+ "BTN_TRIGGER_HAPPY39") + (:integer +btn-trigger-happy40+ "BTN_TRIGGER_HAPPY40") + (:integer +key-min-interesting+ "KEY_MIN_INTERESTING") + (:integer +key-max+ "KEY_MAX") + (:integer +key-cnt+ "KEY_CNT") + (:integer +rel-x+ "REL_X") + (:integer +rel-y+ "REL_Y") + (:integer +rel-z+ "REL_Z") + (:integer +rel-rx+ "REL_RX") + (:integer +rel-ry+ "REL_RY") + (:integer +rel-rz+ "REL_RZ") + (:integer +rel-hwheel+ "REL_HWHEEL") + (:integer +rel-dial+ "REL_DIAL") + (:integer +rel-wheel+ "REL_WHEEL") + (:integer +rel-misc+ "REL_MISC") + (:integer +rel-reserved+ "REL_RESERVED") + (:integer +rel-wheel-hi-res+ "REL_WHEEL_HI_RES") + (:integer +rel-hwheel-hi-res+ "REL_HWHEEL_HI_RES") + (:integer +rel-max+ "REL_MAX") + (:integer +rel-cnt+ "REL_CNT") + (:integer +abs-x+ "ABS_X") + (:integer +abs-y+ "ABS_Y") + (:integer +abs-z+ "ABS_Z") + (:integer +abs-rx+ "ABS_RX") + (:integer +abs-ry+ "ABS_RY") + (:integer +abs-rz+ "ABS_RZ") + (:integer +abs-throttle+ "ABS_THROTTLE") + (:integer +abs-rudder+ "ABS_RUDDER") + (:integer +abs-wheel+ "ABS_WHEEL") + (:integer +abs-gas+ "ABS_GAS") + (:integer +abs-brake+ "ABS_BRAKE") + (:integer +abs-hat0x+ "ABS_HAT0X") + (:integer +abs-hat0y+ "ABS_HAT0Y") + (:integer +abs-hat1x+ "ABS_HAT1X") + (:integer +abs-hat1y+ "ABS_HAT1Y") + (:integer +abs-hat2x+ "ABS_HAT2X") + (:integer +abs-hat2y+ "ABS_HAT2Y") + (:integer +abs-hat3x+ "ABS_HAT3X") + (:integer +abs-hat3y+ "ABS_HAT3Y") + (:integer +abs-pressure+ "ABS_PRESSURE") + (:integer +abs-distance+ "ABS_DISTANCE") + (:integer +abs-tilt-x+ "ABS_TILT_X") + (:integer +abs-tilt-y+ "ABS_TILT_Y") + (:integer +abs-tool-width+ "ABS_TOOL_WIDTH") + (:integer +abs-volume+ "ABS_VOLUME") + (:integer +abs-profile+ "ABS_PROFILE") + (:integer +abs-misc+ "ABS_MISC") + (:integer +abs-reserved+ "ABS_RESERVED") + (:integer +abs-mt-slot+ "ABS_MT_SLOT") + (:integer +abs-mt-touch-major+ "ABS_MT_TOUCH_MAJOR") + (:integer +abs-mt-touch-minor+ "ABS_MT_TOUCH_MINOR") + (:integer +abs-mt-width-major+ "ABS_MT_WIDTH_MAJOR") + (:integer +abs-mt-width-minor+ "ABS_MT_WIDTH_MINOR") + (:integer +abs-mt-orientation+ "ABS_MT_ORIENTATION") + (:integer +abs-mt-position-x+ "ABS_MT_POSITION_X") + (:integer +abs-mt-position-y+ "ABS_MT_POSITION_Y") + (:integer +abs-mt-tool-type+ "ABS_MT_TOOL_TYPE") + (:integer +abs-mt-blob-id+ "ABS_MT_BLOB_ID") + (:integer +abs-mt-tracking-id+ "ABS_MT_TRACKING_ID") + (:integer +abs-mt-pressure+ "ABS_MT_PRESSURE") + (:integer +abs-mt-distance+ "ABS_MT_DISTANCE") + (:integer +abs-mt-tool-x+ "ABS_MT_TOOL_X") + (:integer +abs-mt-tool-y+ "ABS_MT_TOOL_Y") + (:integer +abs-max+ "ABS_MAX") + (:integer +abs-cnt+ "ABS_CNT") + (:integer +sw-lid+ "SW_LID") + (:integer +sw-tablet-mode+ "SW_TABLET_MODE") + (:integer +sw-headphone-insert+ "SW_HEADPHONE_INSERT") + (:integer +sw-rfkill-all+ "SW_RFKILL_ALL") + (:integer +sw-radio+ "SW_RADIO") + (:integer +sw-microphone-insert+ "SW_MICROPHONE_INSERT") + (:integer +sw-dock+ "SW_DOCK") + (:integer +sw-lineout-insert+ "SW_LINEOUT_INSERT") + (:integer +sw-jack-physical-insert+ "SW_JACK_PHYSICAL_INSERT") + (:integer +sw-videoout-insert+ "SW_VIDEOOUT_INSERT") + (:integer +sw-camera-lens-cover+ "SW_CAMERA_LENS_COVER") + (:integer +sw-keypad-slide+ "SW_KEYPAD_SLIDE") + (:integer +sw-front-proximity+ "SW_FRONT_PROXIMITY") + (:integer +sw-rotate-lock+ "SW_ROTATE_LOCK") + (:integer +sw-linein-insert+ "SW_LINEIN_INSERT") + (:integer +sw-mute-device+ "SW_MUTE_DEVICE") + (:integer +sw-pen-inserted+ "SW_PEN_INSERTED") + (:integer +sw-machine-cover+ "SW_MACHINE_COVER") + (:integer +sw-max+ "SW_MAX") + (:integer +sw-cnt+ "SW_CNT") + (:integer +msc-serial+ "MSC_SERIAL") + (:integer +msc-pulseled+ "MSC_PULSELED") + (:integer +msc-gesture+ "MSC_GESTURE") + (:integer +msc-raw+ "MSC_RAW") + (:integer +msc-scan+ "MSC_SCAN") + (:integer +msc-timestamp+ "MSC_TIMESTAMP") + (:integer +msc-max+ "MSC_MAX") + (:integer +msc-cnt+ "MSC_CNT") + (:integer +led-numl+ "LED_NUML") + (:integer +led-capsl+ "LED_CAPSL") + (:integer +led-scrolll+ "LED_SCROLLL") + (:integer +led-compose+ "LED_COMPOSE") + (:integer +led-kana+ "LED_KANA") + (:integer +led-sleep+ "LED_SLEEP") + (:integer +led-suspend+ "LED_SUSPEND") + (:integer +led-mute+ "LED_MUTE") + (:integer +led-misc+ "LED_MISC") + (:integer +led-mail+ "LED_MAIL") + (:integer +led-charging+ "LED_CHARGING") + (:integer +led-max+ "LED_MAX") + (:integer +led-cnt+ "LED_CNT") + (:integer +rep-delay+ "REP_DELAY") + (:integer +rep-period+ "REP_PERIOD") + (:integer +rep-max+ "REP_MAX") + (:integer +rep-cnt+ "REP_CNT") + (:integer +snd-click+ "SND_CLICK") + (:integer +snd-bell+ "SND_BELL") + (:integer +snd-tone+ "SND_TONE") + (:integer +snd-max+ "SND_MAX") + (:integer +snd-cnt+ "SND_CNT") + ;; linux/event.h + (:integer +ev-version+ "EV_VERSION") + (:integer +eviocgversion+ "EVIOCGVERSION") + (:integer +eviocgid+ "EVIOCGID") + (:integer +eviocgrep+ "EVIOCGREP") + (:integer +eviocsrep+ "EVIOCSREP") + (:integer +eviocgkeycode+ "EVIOCGKEYCODE") + (:integer +eviocgkeycode-v2+ "EVIOCGKEYCODE_V2") + (:integer +eviocskeycode+ "EVIOCSKEYCODE") + (:integer +eviocskeycode-v2+ "EVIOCSKEYCODE_V2") + (:integer +eviocsff+ "EVIOCSFF") + (:integer +eviocrmff "EVIOCRMFF") + (:integer +eviocgeffects+ "EVIOCGEFFECTS") + (:integer +eviocgrab+ "EVIOCGRAB") + (:integer +eviocrevoke+ "EVIOCREVOKE") + (:integer +eviocgmask+ "EVIOCGMASK") + (:integer +eviocsmask+ "EVIOCSMASK") + (:integer +eviocsclockid+ "EVIOCSCLOCKID") + (:integer +id-bus+ "ID_BUS") + (:integer +id-vendor+ "ID_VENDOR") + (:integer +id-product+ "ID_PRODUCT") + (:integer +id-version+ "ID_VERSION") + (:integer +bus-pci+ "BUS_PCI") + (:integer +bus-isapnp+ "BUS_ISAPNP") + (:integer +bus-usb+ "BUS_USB") + (:integer +bus-hil+ "BUS_HIL") + (:integer +bus-bluetooth+ "BUS_BLUETOOTH") + (:integer +bus-virtual+ "BUS_VIRTUAL") + (:integer +bus-isa+ "BUS_ISA") + (:integer +bus-i8042+ "BUS_I8042") + (:integer +bus-xtkbd+ "BUS_XTKBD") + (:integer +bus-rs232+ "BUS_RS232") + (:integer +bus-gameport+ "BUS_GAMEPORT") + (:integer +bus-parport+ "BUS_PARPORT") + (:integer +bus-amiga+ "BUS_AMIGA") + (:integer +bus-adb+ "BUS_ADB") + (:integer +bus-i2c+ "BUS_I2C") + (:integer +bus-host+ "BUS_HOST") + (:integer +bus-gsc+ "BUS_GSC") + (:integer +bus-atari+ "BUS_ATARI") + (:integer +bus-spi+ "BUS_SPI") + (:integer +bus-rmi+ "BUS_RMI") + (:integer +bus-cec+ "BUS_CEC") + (:integer +bus-intel-ishtp+ "BUS_INTEL_ISHTP") + (:integer +bus-amd-sfh+ "BUS_AMD_SFH") + (:integer +mt-tool-finger+ "MT_TOOL_FINGER") + (:integer +mt-tool-pen+ "MT_TOOL_PEN") + (:integer +mt-tool-palm+ "MT_TOOL_PALM") + (:integer +mt-tool-dial+ "MT_TOOL_DIAL") + (:integer +mt-tool-max+ "MT_TOOL_MAX") + (:integer +ff-status-stopped+ "FF_STATUS_STOPPED") + (:integer +ff-status-playing+ "FF_STATUS_PLAYING") + (:integer +ff-status-max+ "FF_STATUS_MAX") + (:integer +ff-rumble+ "FF_RUMBLE") + (:integer +ff-periodic+ "FF_PERIODIC") + (:integer +ff-constant+ "FF_CONSTANT") + (:integer +ff-spring+ "FF_SPRING") + (:integer +ff-friction+ "FF_FRICTION") + (:integer +ff-damper+ "FF_DAMPER") + (:integer +ff-inertia+ "FF_INERTIA") + (:integer +ff-ramp+ "FF_RAMP") + (:integer +ff-effect-min+ "FF_EFFECT_MIN") + (:integer +ff-effect-max+ "FF_EFFECT_MAX") + (:integer +ff-square+ "FF_SQUARE") + (:integer +ff-triangle+ "FF_TRIANGLE") + (:integer +ff-sine+ "FF_SINE") + (:integer +ff-saw-up+ "FF_SAW_UP") + (:integer +ff-saw-down+ "FF_SAW_DOWN") + (:integer +ff-custom+ "FF_CUSTOM") + (:integer +ff-waveform-min+ "FF_WAVEFORM_MIN") + (:integer +ff-waveform-max+ "FF_WAVEFORM_MAX") + (:integer +ff-gain+ "FF_GAIN") + (:integer +ff-autocenter+ "FF_AUTOCENTER") + (:integer +ff-max-effects+ "FF_MAX_EFFECTS") + (:integer +ff-max+ "FF_MAX") + (:integer +ff-cnt+ "FF_CNT")) + + diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/evdev/dev.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/ffi/evdev/dev.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -0,0 +1,301 @@ +;;; dev.lisp --- Event Device FFI + +;; + +;;; Code: +(in-package :evdev) + +(define-alien-enum (libevdev-read-status unsigned-char) + :success 0 + :sync 1) + +(define-alien-routine libevdev-next-event int + (dev (* libevdev)) + (flags unsigned-int) + (ev (* input-event))) + +(define-alien-routine libevdev-has-event-pending int + (dev (* libevdev))) + +(define-alien-routine libevdev-get-name c-string + (dev (* libevdev))) + +(define-alien-routine libevdev-set-name void + (dev (* libevdev)) + (name c-string)) + +(define-alien-routine libevdev-get-phys c-string + (dev (* libevdev))) + +(define-alien-routine libevdev-set-phys void + (dev (* libevdev)) + (phys c-string)) + +(define-alien-routine libevdev-get-uniq c-string + (dev (* libevdev))) + +(define-alien-routine libevdev-set-uniq void + (dev (* libevdev)) + (uniq c-string)) + +(define-alien-routine libevdev-get-id-product int + (dev (* libevdev))) + +(define-alien-routine libevdev-set-id-product void + (dev (* libevdev)) + (product-id int)) + +(define-alien-routine libevdev-get-id-vendor int + (dev (* libevdev))) + +(define-alien-routine libevdev-set-id-vendor void + (dev (* libevdev)) + (vendor-id int)) + +(define-alien-routine libevdev-get-id-bustype int + (dev (* libevdev))) + +(define-alien-routine libevdev-set-id-bustype void + (dev (* libevdev)) + (bustype int)) + +(define-alien-routine libevdev-get-id-version int + (dev (* libevdev))) + +(define-alien-routine libevdev-set-id-version void + (dev (* libevdev)) + (version int)) + +(define-alien-routine libevdev-get-driver-version int + (dev (* libevdev))) + +(define-alien-routine libevdev-has-property int + (dev (* libevdev)) + (prop unsigned-int)) + +(define-alien-routine libevdev-enable-property int + (dev (* libevdev)) + (prop unsigned-int)) + +(define-alien-routine libevdev-disable-property int + (dev (* libevdev)) + (prop unsigned-int)) + +(define-alien-routine libevdev-has-event-type int + (dev (* libevdev)) + (type unsigned-int)) + +(define-alien-routine libevdev-has-event-code int + (dev (* libevdev)) + (type unsigned-int) + (code unsigned-int)) + +(define-alien-routine libevdev-get-abs-minimum int + (dev (* libevdev)) + (code unsigned-int)) + +(define-alien-routine libevdev-get-abs-maximum int + (dev (* libevdev)) + (code unsigned-int)) + +(define-alien-routine libevdev-get-abs-fuzz int + (dev (* libevdev)) + (code unsigned-int)) + +(define-alien-routine libevdev-get-abs-resolution int + (dev (* libevdev)) + (code unsigned-int)) + +(define-alien-routine libevdev-get-abs-info (* input-absinfo) + (dev (* libevdev)) + (code unsigned-int)) + +(define-alien-routine libevdev-get-event-value int + (dev (* libevdev)) + (type unsigned-int) + (code unsigned-int)) + +(define-alien-routine libevdev-set-event-value int + (dev (* libevdev)) + (type unsigned-int) + (code unsigned-int) + (value int)) + +(define-alien-routine libevdev-fetch-event-value int + (dev (* libevdev)) + (type unsigned-int) + (code unsigned-int) + (value (* int))) + +(define-alien-routine libevdev-get-slot-value int + (dev (* libevdev)) + (slot unsigned-int) + (code unsigned-int)) + +(define-alien-routine libevdev-set-slot-value int + (dev (* libevdev)) + (slot unsigned-int) + (code unsigned-int) + (value int)) + +(define-alien-routine libevdev-fetch-slot-value int + (dev (* libevdev)) + (slot unsigned-int) + (code unsigned-int) + (value (* int))) + +(define-alien-routine libevdev-get-num-slots int + (dev (* libevdev))) + +(define-alien-routine libevdev-get-current-slot int + (dev (* libevdev))) + +(define-alien-routine libevdev-set-abs-minimum void + (dev (* libevdev)) + (code unsigned-int) + (val int)) + +(define-alien-routine libevdev-set-abs-maximum void + (dev (* libevdev)) + (code unsigned-int) + (val int)) + +(define-alien-routine libevdev-set-abs-fuzz void + (dev (* libevdev)) + (code unsigned-int) + (val int)) + +(define-alien-routine libevdev-set-abs-flat void + (dev (* libevdev)) + (code unsigned-int) + (val int)) + +(define-alien-routine libevdev-set-abs-resolution void + (dev (* libevdev)) + (code unsigned-int) + (val int)) + +(define-alien-routine libevdev-set-abs-info void + (dev (* libevdev)) + (code unsigned-int) + (abs (* input-absinfo))) + +(define-alien-routine libevdev-enable-event-type int + (dev (* libevdev)) + (type unsigned-int)) + +(define-alien-routine libevdev-disable-event-type int + (dev (* libevdev)) + (type unsigned-int)) + +(define-alien-routine libevdev-enable-event-code int + (dev (* libevdev)) + (type unsigned-int) + (code unsigned-int) + (data (* t))) + +(define-alien-routine libevdev-disable-event-code int + (dev (* libevdev)) + (type unsigned-int) + (code unsigned-int)) + +(define-alien-routine libevdev-kernel-set-abs-info int + (dev (* libevdev)) + (code unsigned-int) + (abs (* input-absinfo))) + +(define-alien-enum (libevdev-led-value unsigned-char) + :on 3 + :off 4) + +(define-alien-routine libevdev-kernel-set-led-value int + (dev (* libevdev)) + (code unsigned-int) + (value libevdev-led-value)) + +;; (define-alien-routine libevdev-kernel-set-led-values int +;; (dev (* libevdev))) + +(define-alien-routine libevdev-set-clock-id int + (dev (* libevdev)) + (clockid int)) + +(define-alien-routine libevdev-event-is-type int + (ev (* input-event)) + (type unsigned-int)) + +(define-alien-routine libevdev-event-is-code int + (ev (* input-event)) + (type unsigned-int) + (code unsigned-int)) + +(define-alien-routine libevdev-event-type-get-name c-string + (type unsigned-int)) + +(define-alien-routine libevdev-event-code-get-name c-string + (type unsigned-int) + (code unsigned-int)) + +(define-alien-routine libevdev-event-value-get-name c-string + (type unsigned-int) + (code unsigned-int) + (value int)) + +(define-alien-routine libevdev-property-get-name c-string + (prop unsigned-int)) + +(define-alien-routine libevdev-event-type-get-max int + (type unsigned-int)) + +(define-alien-routine libevdev-event-type-from-name int + (name c-string)) + +(define-alien-routine libevdev-event-type-from-name-n int + (name c-string) + (len size-t)) + +(define-alien-routine libevdev-event-code-from-name int + (type unsigned-int) + (name c-string)) + +(define-alien-routine libevdev-event-code-from-name-n int + (type unsigned-int) + (name c-string) + (len size-t)) + +(define-alien-routine libevdev-event-value-from-name int + (type unsigned-int) + (code unsigned-int) + (name c-string)) + +(define-alien-routine libevdev-event-type-from-code-name int + (name c-string)) + +(define-alien-routine libevdev-event-type-from-code-name-n int + (name c-string) + (len size-t)) + +(define-alien-routine libevdev-event-code-from-code-name int + (name c-string)) + +(define-alien-routine libevdev-event-code-from-code-name-n int + (name c-string) + (len size-t)) + +(define-alien-routine libevdev-event-value-from-name-n int + (type unsigned-int) + (code unsigned-int) + (name c-string) + (len size-t)) + +(define-alien-routine libevdev-property-from-name int + (name c-string)) + +(define-alien-routine libevdev-property-from-name-n int + (name c-string) + (len size-t)) + +(define-alien-routine libevdev-get-repeat int + (dev (* libevdev)) + (delay (* int)) + (period (* int))) diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/evdev/evdev.asd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/ffi/evdev/evdev.asd Sun Sep 29 00:31:24 2024 -0400 @@ -0,0 +1,29 @@ +;;; evdev.asd --- Evdev Sytem Definitions + +;; libevdev for lisp. + +;;; Commentary: + +;; https://gitlab.freedesktop.org/libevdev/libevdev + +;;; Code: +(eval-when (:compile-toplevel :load-toplevel :execute) + (require :sb-grovel)) + +(defpackage :evdev.sys + (:use :cl :asdf :sb-grovel :sb-alien)) + +(in-package :evdev.sys) + +(defsystem :evdev + :depends-on (:std :sb-grovel) + :components ((:file "pkg") + (grovel-constants-file "constants" :package :evdev) + (:file "input") + (:file "dev")) + :in-order-to ((test-op (test-op "evdev/tests")))) + +(defsystem :evdev/tests + :depends-on (:rt :evdev :xkb) + :components ((:file "tests")) + :perform (test-op (op c) (uiop:symbol-call :rt :do-tests :btrfs))) diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/evdev/input.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/ffi/evdev/input.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -0,0 +1,116 @@ +;;; input.lisp --- Linux Input Subsystem Wrappers + +;; + +;;; Code: +(in-package :evdev/input) + +;; from linux/time.h +(define-alien-type timeval + (struct timeval + (tv-sec sb-unix:time-t) + (tv-nsec long))) + +(define-alien-type input-event + (struct input-event + (time timeval) + (type (unsigned 16)) + (code (unsigned 16)) + (value (signed 32)))) + +(define-alien-type input-id + (struct input-id + (bustype (unsigned 16)) + (vendor (unsigned 16)) + (product (unsigned 16)) + (version (unsigned 16)))) + +(define-alien-type input-absinfo + (struct input-absinfo + (value signed) + (minimum signed) + (maximum signed) + (fuzz signed) + (flat signed) + (resolution signed))) + +(define-alien-type input-keymap-entry + (struct input-keymap-entry + (flags unsigned-char) + (len unsigned-char) + (index unsigned-short) + (keycode unsigned) + (scancode (array (unsigned 8) 32)))) + +(define-alien-type input-mask + (struct input-mask + (type unsigned) + (codes-size unsigned) + (codes-ptr (unsigned 64)))) + +(define-alien-type ff-replay + (struct ff-replay + (length unsigned-short) + (delay unsigned-short))) + +(define-alien-type ff-trigger + (struct ff-trigger + (button unsigned-short) + (interval unsigned-short))) + +(define-alien-type ff-envelope + (struct ff-envelope + (attack-length unsigned-short) + (attack-level unsigned-short) + (fade-length unsigned-short) + (fade-level unsigned-short))) + +(define-alien-type ff-constant-effect + (struct ff-constant-effect + (level short) + (envelop ff-envelope))) + +(define-alien-type ff-ramp-effect + (struct ff-ramp-effect + (start-level short) + (end-level short) + (envelope ff-envelope))) + +(define-alien-type ff-condition-effect + (struct ff-condition-effect + (right-saturation unsigned-short) + (left-saturation unsigned-short) + (right-coeff short) + (left-coeff short) + (deadband unsigned-short) + (center short))) + +(define-alien-type ff-periodic-effect + (struct ff-periodic-effect + (waveform unsigned-short) + (period unsigned-short) + (magnitutde short) + (offset short) + (phase unsigned-short) + (envelope ff-envelope) + (custom-len unsigned) + (custom-data (* short)))) + +(define-alien-type ff-rumble-effect + (struct ff-rumble-effect + (strong-magnitutde unsigned-short) + (weak-magnitude unsigned-short))) + +(define-alien-type ff-effect + (struct ff-effect + (type unsigned-short) + (id short) + (direction unsigned-short) + (trigger ff-trigger) + (replay ff-replay) + (u (sb-alien:union u + (constant ff-constant-effect) + (ramp ff-ramp-effect) + (periodic ff-periodic-effect) + (condition (array ff-condition-effect 2)) + (rumble ff-rumble-effect))))) diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/evdev/pkg.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/ffi/evdev/pkg.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -0,0 +1,103 @@ +;;; pkg.lisp --- libevdev FFI + +;; + +;;; Commentary: + +;; note that we also wrap the linux input subsystem linux/input.h which does +;; not require loading of the libevdev shared library. See input.lisp. + +;;; Code: +(defpackage :evdev/input + (:use :cl :std :sb-alien) + (:export + #:input-event + #:input-absinfo)) + +(defpackage :evdev + (:use :cl :std :sb-alien :evdev/input) + (:export)) + +(in-package :evdev) +(define-alien-loader "evdev" t "/usr/lib/") + +(define-alien-type libevdev (struct libevdev)) + +(define-alien-enum (libevdev-read-flag unsigned-char) + :sync 1 + :normal 2 + :force-sync 4 + :blocking 8) + +(define-alien-routine libevdev-new (* libevdev)) + +(define-alien-routine libevdev-new-from-fd int + (fd int) + (dev (* (* libevdev)))) + +(define-alien-routine libevdev-free void + (dev (* libevdev))) + +(define-alien-enum (libevdev-log-priority unsigned-char) + :error 10 + :info 20 + :debug 30) + + +;; close enough +(define-alien-type va-list (struct va-list + (gp-offset unsigned-int) + (fp-offset unsigned-int) + (overflow-arg-area (* t)) + (reg-save-area (* t)))) + +(define-alien-type libevdev-log-function + (function void + libevdev-log-priority + (* t) + c-string + int + c-string + c-string + va-list)) + +(define-alien-routine libevdev-set-log-function void + (logfunc libevdev-log-function) + (data (* t))) + +(define-alien-routine libevdev-set-log-priority void + (priority libevdev-log-priority)) + +(define-alien-routine libevdev-get-log-priority libevdev-log-priority) + +(define-alien-type libevdev-device-log-function + (function void + (* libevdev) + libevdev-log-priority + (* t) + c-string + int + c-string + c-string + va-list)) + +(define-alien-routine libevdev-set-device-log-function void + (dev (* libevdev)) + (logfunc libevdev-device-log-function) + (priority libevdev-log-priority) + (data (* t))) + +(define-alien-enum (libevdev-grab-mode unsigned-char) + :grab 3 + :ungrab 4) + +(define-alien-routine libevdev-grab int + (dev (* libevdev)) + (grab libevdev-grab-mode)) + +(define-alien-routine libevdev-set-fd int + (dev (* libevdev)) + (fd int)) + +(define-alien-routine libevdev-get-fd int + (dev (* libevdev))) diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/evdev/tests.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/ffi/evdev/tests.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -0,0 +1,28 @@ +;;; tests.lisp --- evdev FFI tests + +;; + +;;; Code: +(defpackage :evdev/tests + (:use :cl :std :log :rt :sb-alien :evdev)) +(in-package :evdev/tests) +(defsuite :evdev) +(in-suite :evdev) +(load-evdev nil) +(deftest sanity ()) + +#| +struct libevdev *dev; +int err; + +dev = libevdev_new(); +if (!dev) + return ENOMEM; + +err = libevdev_set_fd(dev, fd); +if (err < 0) + printf("Failed (errno %d): %s\n", -err, strerror(-err)); + +libevdev_free(dev); +|# +(deftest basic ()) diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/xkb/constants.lisp --- a/lisp/ffi/xkb/constants.lisp Sat Sep 28 17:48:06 2024 -0400 +++ b/lisp/ffi/xkb/constants.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -1,12 +1,12 @@ ("stdint.h" "stdio.h" "stdarg.h" "xkbcommon/xkbcommon-names.h" "xkbcommon/xkbcommon-keysyms.h" "xkbcommon/xkbcommon.h" "xkbcommon/xkbregistry.h" "xkbcommon/xkbcommon-compose.h") -((:integer xkb-keycode-invalid "XKB_KEYCODE_INVALID" nil t) - (:integer xkb-layout-invalid "XKB_LAYOUT_INVALID" nil t) - (:integer xkb-level-invalid "XKB_LEVEL_INVALID" nil t) - (:integer xkb-mod-invalid "XKB_MOD_INVALID" nil t) - (:integer xkb-led-invalid "XKB_LED_INVALID" nil t) - (:integer xkb-keycode-max "XKB_KEYCODE_MAX" nil t) - (:integer xkb-keysym-max "XKB_KEYSYM_MAX" nil t) +((:integer +xkb-keycode-invalid+ "XKB_KEYCODE_INVALID") + (:integer +xkb-layout-invalid+ "XKB_LAYOUT_INVALID") + (:integer +xkb-level-invalid+ "XKB_LEVEL_INVALID") + (:integer +xkb-mod-invalid+ "XKB_MOD_INVALID") + (:integer +xkb-led-invalid+ "XKB_LED_INVALID") + (:integer +xkb-keycode-max+ "XKB_KEYCODE_MAX") + (:integer +xkb-keysym-max+ "XKB_KEYSYM_MAX") ;; (:enum xkb-keymap-format ((xkb-keymap-format-text-v1 "XKB_KEYMAP_FORMAT_TEXT_V1"))) ;; (:enum xkb-log-level ((xkb-log-level-critical "XKB_LOG_LEVEL_CRITICAL") ;; (xkb-log-level-error "XKB_LOG_LEVEL_ERROR") @@ -14,7 +14,7 @@ ;; (xkb-log-level-info "XKB_LOG_LEVEL_INFO") ;; (xkb-log-level-debug "XKB_LOG_LEVEL_DEBUG")) nil t) ;; (:enum xkb-keymap-compile-flags ((xkb-keymap-compile-no-flags "XKB_KEYMAP_COMPILE_NO_FLAGS")) nil t) - (:integer xkb-keymap-use-original-format "XKB_KEYMAP_USE_ORIGINAL_FORMAT" nil t) + (:integer +xkb-keymap-use-original-format+ "XKB_KEYMAP_USE_ORIGINAL_FORMAT") ;; (:enum xkb-key-direction ((xkb-key-up "XKB_KEY_UP") ;; (xkb-key-down "XKB_KEY_DOWN"))) ;; (:enum xkb-state-component ((xkb-state-mods-depressed "XKB_STATE_MODS_DEPRESSED") diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/xkb/pkg.lisp --- a/lisp/ffi/xkb/pkg.lisp Sat Sep 28 17:48:06 2024 -0400 +++ b/lisp/ffi/xkb/pkg.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -41,10 +41,18 @@ (define-alien-type xkb-mod-mask unsigned-int) (define-alien-type xkb-led-index unsigned-int) (define-alien-type xkb-led-mask unsigned-int) -;; TODO 2024-05-09: -;; (define-alien-type xkb-keysym-flags boolean) -;; (define-alien-type xkb-context-flags unsigned-char) -;; (define-alien-type xkb-keymap-compile-flags boolean) + +(define-alien-enum (xkb-keysym-flags unsigned-char) + :no-flags 0 + :case-insensitive (ash 1 0)) +(define-alien-enum (xkb-context-flags unsigned-char) + :no-flags 0 + :no-default-includes (ash 1 0) + :no-environment-names (ash 1 1) + :no-secure-getenv (ash 1 2)) + +(define-alien-enum (xkb-keymap-compile-flags unsigned-char) + :no-flags 0) (define-alien-type xkb-keymap-format boolean) (define-alien-type xkb-rule-names @@ -55,15 +63,14 @@ (variant c-string) (options c-string))) -;; TODO 2024-05-09: -;; (define-alien-routine xkb-keysym-get-name int -;; (keysym xkb-keysym-flags) -;; (buffer c-string) -;; (size size-t)) +(define-alien-routine xkb-keysym-get-name int + (keysym xkb-keysym) + (buffer (* char)) + (size size-t)) -;; (define-alien-routine xkb-keysym-from-name xkb-keysym -;; (name c-string) -;; (flags xkb-keysym-flags)) +(define-alien-routine xkb-keysym-from-name xkb-keysym + (name c-string) + (flags xkb-keysym-flags)) (define-alien-routine xkb-keysym-to-utf8 int (keysym xkb-keysym) @@ -82,8 +89,8 @@ (define-alien-routine xkb-keysym-to-lower xkb-keysym (ks xkb-keysym)) -;; (define-alien-routine xkb-context-new (* xkb-context) -;; (flags xkb-context-flags)) +(define-alien-routine xkb-context-new (* xkb-context) + (flags xkb-context-flags)) (define-alien-routine xkb-context-set-user-data void (context (* xkb-context)) @@ -117,30 +124,29 @@ ;;; Keymap Init -;; TODO 2024-05-09: -;; (define-alien-routine xkb-keymap-new-from-names (* xkb-keymap) -;; (context (* xkb-context)) -;; (names (* xkb-rule-names)) -;; (flags xkb-keymap-compile-flags)) +(define-alien-routine xkb-keymap-new-from-names (* xkb-keymap) + (context (* xkb-context)) + (names (* xkb-rule-names)) + (flags xkb-keymap-compile-flags)) -;; (define-alien-routine xkb-keymap-new-from-file (* xkb-keymap) -;; (context (* xkb-context)) -;; (file (* t)) -;; (fmt xkb-keymap-format) -;; (flags xkb-keymap-compile-flags)) +(define-alien-routine xkb-keymap-new-from-file (* xkb-keymap) + (context (* xkb-context)) + (file (* t)) + (fmt xkb-keymap-format) + (flags xkb-keymap-compile-flags)) -;; (define-alien-routine xkb-keymap-new-from-string (* xkb-keymap) -;; (context (* xkb-context)) -;; (str c-string) -;; (fmt xkb-keymap-format) -;; (flags xkb-keymap-compile-flags)) +(define-alien-routine xkb-keymap-new-from-string (* xkb-keymap) + (context (* xkb-context)) + (str c-string) + (fmt xkb-keymap-format) + (flags xkb-keymap-compile-flags)) -;; (define-alien-routine xkb-keymap-new-from-buffer (* xkb-keymap) -;; (context (* xkb-context)) -;; (buffer c-string) -;; (length size-t) -;; (fmt xkb-keymap-format) -;; (flags xkb-keymap-compile-flags)) +(define-alien-routine xkb-keymap-new-from-buffer (* xkb-keymap) + (context (* xkb-context)) + (buffer c-string) + (length size-t) + (fmt xkb-keymap-format) + (flags xkb-keymap-compile-flags)) ;;; Keymap Components @@ -217,5 +223,249 @@ (key xkb-keycode)) ;;; TODO Keyboard State +(define-alien-routine xkb-state-new (* xkb-state) (keymap (* xkb-keymap))) +(define-alien-routine xkb-state-ref (* xkb-state) (state (* xkb-state))) +(define-alien-routine xkb-state-unref void (state (* xkb-state))) +(define-alien-routine xkb-state-get-keymap (* xkb-keymap) (state (* xkb-state))) -;;; TODO Compose/Dead-keys support +(define-alien-enum (xkb-key-direction unsigned-char) + :up 0 + :down 1) + +(define-alien-enum (xkb-state-component int) + :mods-depressed (ash 1 0) + :mods-latched (ash 1 1) + :mods-locked (ash 1 2) + :mods-effective (ash 1 3) + :layout-depressed (ash 1 4) + :layout-latched (ash 1 5) + :layout-locked (ash 1 6) + :layout-effective (ash 1 7) + :leds (ash 1 8)) + +(define-alien-routine xkb-state-update-key xkb-state-component + (state (* xkb-state)) + (key xkb-keycode) + (direction xkb-key-direction)) + +(define-alien-routine xkb-state-update-mask xkb-state-component + (state (* xkb-state)) + (depressed-mods xkb-mod-mask) + (latched-mods xkb-mod-mask) + (locked-mods xkb-mod-mask) + (depressed-layout xkb-mod-mask) + (latched-layout xkb-mod-mask) + (locked-layout xkb-mod-mask)) + +(define-alien-routine xkb-state-key-get-syms int + (state (* xkb-state)) + (key xkb-keycode) + (syms-out (* (* xkb-keysym)))) + +(define-alien-routine xkb-state-key-get-utf8 int + (state (* xkb-state)) + (key xkb-keycode) + (buffer (* char)) + (size size-t)) + +(define-alien-routine xkb-state-key-get-utf32 int + (state (* xkb-state)) + (key xkb-keycode)) + +(define-alien-routine xkb-state-key-get-one-sym xkb-keysym + (state (* xkb-state)) + (key xkb-keycode)) + +(define-alien-routine xkb-state-key-get-layout xkb-layout-index + (state (* xkb-state)) + (key xkb-keycode)) + +(define-alien-routine xkb-state-key-get-level xkb-level-index + (state (* xkb-state)) + (key xkb-keycode) + (layout xkb-layout-index)) + +(define-alien-enum (xkb-state-match int) + :any (ash 1 0) + :all (ash 1 1) + :non-exclusive (ash 1 16)) + +(define-alien-routine xkb-state-serialize-mods xkb-mod-mask + (state (* xkb-state)) + (components xkb-state-component)) + +(define-alien-routine xkb-state-serialize-layout xkb-layout-index + (state (* xkb-state)) + (components xkb-state-component)) + +(define-alien-routine xkb-state-mod-name-is-active int + (state (* xkb-state)) + (name (* char)) + (type xkb-state-component)) + +(define-alien-routine xkb-state-mod-names-are-active int + (state (* xkb-state)) + (type xkb-state-component) + (match xkb-state-match) + #+nil ...) + +(define-alien-routine xkb-state-mod-index-is-active int + (state (* xkb-state)) + (idx xkb-mod-index) + (type xkb-state-component)) + +(define-alien-routine xkb-state-mod-indices-are-active int + (state (* xkb-state)) + (type xkb-state-component) + (match xkb-state-match) + #+nil ...) + +(define-alien-enum (xkb-consumed-mode int) + :xkb 0 + :gtk 1) + +(define-alien-routine xkb-state-key-get-consumed-mods2 xkb-mod-mask + (state (* xkb-state)) + (key xkb-keycode) + (mode xkb-consumed-mode)) + +(define-alien-routine xkb-state-key-get-consumed-mods xkb-mod-mask + (state (* xkb-state)) + (key xkb-keycode)) + +(define-alien-routine xkb-state-mod-index-is-consumed2 int + (state (* xkb-state)) + (key xkb-keycode) + (idx xkb-mod-index) + (mode xkb-consumed-mode)) + +(define-alien-routine xkb-state-mod-index-is-consumed int + (state (* xkb-state)) + (key xkb-keycode) + (idx xkb-mod-index)) + +(define-alien-routine xkb-state-mode-mask-remove-consumed xkb-mod-mask + (state (* xkb-state)) + (key xkb-keycode) + (mask xkb-mod-mask)) + +(define-alien-routine xkb-state-layout-name-is-active int + (state (* xkb-state)) + (name (* char)) + (type xkb-state-component)) + +(define-alien-routine xkb-state-layout-index-is-active int + (state (* xkb-state)) + (idx xkb-layout-index) + (type xkb-state-component)) + +(define-alien-routine xkb-state-led-name-is-active int + (state (* xkb-state)) + (name (* char))) + +(define-alien-routine xkb-state-led-index-is-active int + (state (* xkb-state)) + (idx xkb-led-index)) + +;;; xkbcommon-compose.h +(define-alien-type xkb-compose-table (struct xkb-compose-table)) + +(define-alien-type xkb-compose-state (struct xkb-compose-state)) + +(define-alien-enum (xkb-compose-compile-flags unsigned-char) + :no-flags 0) + +(define-alien-enum (xkb-compose-format unsigned-char) + :text-v1 1) + +(define-alien-routine xkb-compose-table-new-from-locale (* xkb-compose-table) + (context (* xkb-context)) + (locale (* char)) + (flags xkb-compose-compile-flags)) + +(define-alien-routine xkb-compose-table-new-from-file (* xkb-compose-table) + (file (* t)) ;;FILE + (locale (* char)) + (format xkb-compose-format) + (flags xkb-compose-compile-flags)) + +(define-alien-routine xkb-compose-table-new-from-buffer (* xkb-compose-table) + (context (* xkb-context)) + (buffer (* char)) + (length size-t) + (locale (* char)) + (format xkb-compose-format) + (flags xkb-compose-compile-flags)) + +(define-alien-routine xkb-compose-table-ref (* xkb-compose-table) + (table (* xkb-compose-table))) + +(define-alien-routine xkb-compose-table-unref void + (table (* xkb-compose-table))) + +(define-alien-type xkb-compose-table-entry (struct xkb-compose-table-entry)) + +(define-alien-routine xkb-compose-table-entry-sequence (* xkb-keysym) + (entry (* xkb-compose-table-entry)) + (sequence-length (* size-t))) + +(define-alien-routine xkb-compose-table-entry-keysym xkb-keysym + (entry (* xkb-compose-table-entry))) + +(define-alien-routine xkb-compose-table-entry-utf8 (* char) + (entry (* xkb-compose-table-entry))) + +(define-alien-type xkb-compose-table-iterator (struct xkb-compose-table-iterator)) + +(define-alien-routine xkb-compose-table-iterator-new (* xkb-compose-table-iterator) + (table (* xkb-compose-table))) + +(define-alien-routine xkb-compose-table-iterator-free void + (iter (* xkb-compose-table-iterator))) + +(define-alien-routine xkb-compose-table-iterator-next (* xkb-compose-table-entry) + (iter (* xkb-compose-table-iterator))) + +(define-alien-enum (xkb-compose-state-flags int) + :no-flags 0) + +(define-alien-routine xkb-compose-state-new (* xkb-compose-state) + (table (* xkb-compose-table)) + (flags xkb-compose-state-flags)) + +(define-alien-routine xkb-compose-state-ref (* xkb-compose-state) + (state (* xkb-compose-state))) + +(define-alien-routine xkb-compose-state-unref void + (state (* xkb-compose-state))) + +(define-alien-routine xkb-compose-state-get-compose-table (* xkb-compose-table) + (state (* xkb-compose-state))) + +(define-alien-enum (xkb-compose-status unsigned-char) + :nothing 0 + :composing 1 + :composed 2 + :cancelled 3) + +(define-alien-enum (xkb-compose-feed-result unsigned-char) + :ignored 0 + :accepted 1) + +(define-alien-routine xkb-compose-state-feed xkb-compose-feed-result + (state (* xkb-compose-state)) + (keysym xkb-keysym)) + +(define-alien-routine xkb-compose-state-reset void + (state (* xkb-compose-state))) + +(define-alien-routine xkb-compose-state-get-status xkb-compose-status + (state (* xkb-compose-state))) + +(define-alien-routine xkb-compose-state-get-utf8 int + (state (* xkb-compose-state)) + (buffer (* char)) + (size size-t)) + +(define-alien-routine xkb-compose-state-get-one-sym xkb-keysym + (state (* xkb-compose-state))) diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/xkb/tests.lisp --- a/lisp/ffi/xkb/tests.lisp Sat Sep 28 17:48:06 2024 -0400 +++ b/lisp/ffi/xkb/tests.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -7,4 +7,14 @@ (load-xkbcommon) (deftest xkb-basic () - (is (= xkb:xkb-keysym-max 536870911))) + (is (= xkb:xkb-keysym-max 536870911)) + (let* ((ctx (xkb:xkb-context-new (xkb-context-flags :no-flags))) + (map (xkb::xkb-keymap-new-from-names ctx nil (xkb::xkb-keymap-compile-flags :no-flags))) + (state (xkb::xkb-state-new map))) + (sb-alien:with-alien ((buf (* sb-alien:char) (sb-alien:make-alien char 64))) + (xkb::xkb-keysym-get-name (xkb::xkb-state-key-get-one-sym state 10) buf 64) + (is (string= "1" (sb-alien:cast buf sb-alien:c-string)))) + (sb-alien:with-alien ((syms (* (* xkb-keysym)) (sb-alien:make-alien (* xkb-keysym) 20))) + (is (= 1 (xkb::xkb-state-key-get-syms state 10 syms))) + (is (= 49 (sb-alien:deref (sb-alien:deref syms 0))))))) + diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/xkb/x11.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/ffi/xkb/x11.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -0,0 +1,6 @@ +;;; x11.lisp --- XKB X11-exclusive FFI + +;; + +;;; Code: +(in-package :xkb) diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/ffi/xkb/xkb.asd --- a/lisp/ffi/xkb/xkb.asd Sat Sep 28 17:48:06 2024 -0400 +++ b/lisp/ffi/xkb/xkb.asd Sun Sep 29 00:31:24 2024 -0400 @@ -11,7 +11,8 @@ :depends-on (:std) :components ((:file "pkg") (grovel-constants-file "constants" - :package :xkb)) + :package :xkb) + (:file "x11")) :in-order-to ((test-op (test-op :xkb/tests)))) (defsystem :xkb/tests diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/lib/cli/ed.lisp --- a/lisp/lib/cli/ed.lisp Sat Sep 28 17:48:06 2024 -0400 +++ b/lisp/lib/cli/ed.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -6,8 +6,8 @@ (in-package :cli/ed) (defun run-emacs (&optional file args) - (sb-ext:run-program (find-exe "emacs") `(,@(when file (list file)) ,@args :wait nil :output nil))) - + (sb-ext:run-program (find-exe "emacs") `(,@(when file (list file)) ,@args))) + (defun run-emacsclient (&optional (file ".") (create-frame t)) (sb-ext:run-program (find-exe "emacsclient") `(,file ,@(when create-frame (list "-c")) "-a=") diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/lib/io/io.asd --- a/lisp/lib/io/io.asd Sat Sep 28 17:48:06 2024 -0400 +++ b/lisp/lib/io/io.asd Sun Sep 29 00:31:24 2024 -0400 @@ -1,6 +1,11 @@ (defsystem :io :description "Lisp IO Interface" - :depends-on (:cl-ppcre :std :obj (:feature :linux :uring) :sb-bsd-sockets :zstd :flexi-streams) + :depends-on (:cl-ppcre + :std :obj + (:feature :linux :uring) + (:feature :linux :xkb) + (:feature :linux :evdev) + :sb-bsd-sockets :zstd :flexi-streams) :version "0.1.0" :serial t :components ((:file "pkg") @@ -11,6 +16,7 @@ (:file "flate") (:file "port") (:file "zstd") + (:file "kbd") (:file "xsubseq") (:file "smart-buffer")) :in-order-to ((test-op (test-op "io/tests")))) diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/lib/io/kbd.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/lib/io/kbd.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -0,0 +1,37 @@ +;;; kbd.lisp --- Keyboard-based IO + +;; Keyboard-like devices and input + +;;; Commentary: + +;; refs: + +;; - https://www.kernel.org/doc/Documentation/input/event-codes.txt + +;;; Code: +(in-package :io/kbd) +(load-xkbcommon) + +(deferror kbd-error () ()) + +(defstruct keyboard path state compose-state) + +(defconstant +evdev-offset+ 8) + +(defun evdev-bit-is-set (array bit)) + +(defun keyboard-device-p (path)) + ;; (sb-posix:ioctl (fd path) +(defun make-keyboard-from-dev (dev keymap compose-table)) + +(defun get-keyboards (keymap compose-table &optional (dir "/dev/input")) + (let ((devices (directory dir))) + (dolist (dev devices) + (let ((ret (make-keyboard-from-dev dev keymap compose-table))) + ret)))) + +;; (with-open-file (file "/dev/input/event4") +;; (let ((fd (sb-sys:fd-stream-fd file)) +;; (evbits)))) + + diff -r c5fe76568de0 -r 29fe829a7ac3 lisp/lib/io/pkg.lisp --- a/lisp/lib/io/pkg.lisp Sat Sep 28 17:48:06 2024 -0400 +++ b/lisp/lib/io/pkg.lisp Sun Sep 29 00:31:24 2024 -0400 @@ -41,10 +41,14 @@ :compressor :compressing-stream :decompressor :decompressing-stream)) (defpackage :io/zstd - (:use :cl :io/proto :io/flate) + (:use :cl :std :io/proto :io/flate) (:import-from :std :deferror :eval-always) (:export :zstd-error :zstd-compressor :zstd-decompressor)) +(defpackage :io/kbd + (:use :cl :std :io/proto :xkb) + (:export :kbd-error)) + (pkg:defpkg :io (:use :cl) (:use-reexport :io/proto :io/ring :io/flate :io/zstd :io/stream :io/socket))