inputor

Evdev remapping utility in lua
git clone https://git.neptards.moe/u3shit/inputor.git
Log | Files | Refs

decls.lua (34931B)


      1 -- Auto generated file by gen_events.rb, do not edit!
      2 
      3 local base = string.match(..., "(.-)[^%.]+%.[^%.]+$")
      4 local bit = require("bit")
      5 local eh = require(base.."helper.enum")
      6 local ffi = require("ffi")
      7 local ioctl_mod = require(base.."helper.ioctl")
      8 
      9 local ioctl, nrshift, sizeshift = ioctl_mod.ioctl, ioctl_mod.nrshift, ioctl_mod.sizeshift
     10 local lshift = bit.lshift
     11 local ffi_cast, ffi_sizeof = ffi.cast, ffi.sizeof
     12 local tostring = tostring
     13 
     14 ffi.cdef[[
     15 typedef unsigned long __kernel_ulong_t;
     16 typedef int8_t __s8; typedef uint8_t __u8;
     17 typedef int16_t __s16; typedef uint16_t __u16;
     18 typedef int32_t __s32; typedef uint32_t __u32;
     19 typedef int64_t __s64; typedef uint64_t __u64;
     20 struct input_event {
     21 	__kernel_ulong_t __sec;
     22 	__kernel_ulong_t __usec;
     23 	__u16 type;
     24 	__u16 code;
     25 	__s32 value;
     26 };
     27 struct input_id {
     28 	__u16 bustype;
     29 	__u16 vendor;
     30 	__u16 product;
     31 	__u16 version;
     32 };
     33 struct input_absinfo {
     34 	__s32 value;
     35 	__s32 minimum;
     36 	__s32 maximum;
     37 	__s32 fuzz;
     38 	__s32 flat;
     39 	__s32 resolution;
     40 };
     41 struct input_keymap_entry {
     42 	__u8  flags;
     43 	__u8  len;
     44 	__u16 index;
     45 	__u32 keycode;
     46 	__u8  scancode[32];
     47 };
     48 struct input_mask {
     49 	__u32 type;
     50 	__u32 codes_size;
     51 	__u64 codes_ptr;
     52 };
     53 struct ff_replay {
     54 	__u16 length;
     55 	__u16 delay;
     56 };
     57 struct ff_trigger {
     58 	__u16 button;
     59 	__u16 interval;
     60 };
     61 struct ff_envelope {
     62 	__u16 attack_length;
     63 	__u16 attack_level;
     64 	__u16 fade_length;
     65 	__u16 fade_level;
     66 };
     67 struct ff_constant_effect {
     68 	__s16 level;
     69 	struct ff_envelope envelope;
     70 };
     71 struct ff_ramp_effect {
     72 	__s16 start_level;
     73 	__s16 end_level;
     74 	struct ff_envelope envelope;
     75 };
     76 struct ff_condition_effect {
     77 	__u16 right_saturation;
     78 	__u16 left_saturation;
     79 	__s16 right_coeff;
     80 	__s16 left_coeff;
     81 	__u16 deadband;
     82 	__s16 center;
     83 };
     84 struct ff_periodic_effect {
     85 	__u16 waveform;
     86 	__u16 period;
     87 	__s16 magnitude;
     88 	__s16 offset;
     89 	__u16 phase;
     90 	struct ff_envelope envelope;
     91 	__u32 custom_len;
     92 	__s16 *custom_data;
     93 };
     94 struct ff_rumble_effect {
     95 	__u16 strong_magnitude;
     96 	__u16 weak_magnitude;
     97 };
     98 struct ff_effect {
     99 	__u16 type;
    100 	__s16 id;
    101 	__u16 direction;
    102 	struct ff_trigger trigger;
    103 	struct ff_replay replay;
    104 	union {
    105 		struct ff_constant_effect constant;
    106 		struct ff_ramp_effect ramp;
    107 		struct ff_periodic_effect periodic;
    108 		struct ff_condition_effect condition[2];
    109 		struct ff_rumble_effect rumble;
    110 	} u;
    111 };
    112 struct uinput_ff_upload {
    113 	__u32			request_id;
    114 	__s32			retval;
    115 	struct ff_effect	effect;
    116 	struct ff_effect	old;
    117 };
    118 struct uinput_ff_erase {
    119 	__u32			request_id;
    120 	__s32			retval;
    121 	__u32			effect_id;
    122 };
    123 struct uinput_setup {
    124 	struct input_id id;
    125 	char name[80];
    126 	__u32 ff_effects_max;
    127 };
    128 struct uinput_abs_setup {
    129 	__u16  code;
    130 	struct input_absinfo absinfo;
    131 };
    132 struct uinput_user_dev {
    133 	char name[80];
    134 	struct input_id id;
    135 	__u32 ff_effects_max;
    136 	__s32 absmax[(0x3f+1)];
    137 	__s32 absmin[(0x3f+1)];
    138 	__s32 absfuzz[(0x3f+1)];
    139 	__s32 absflat[(0x3f+1)];
    140 };
    141 ]]
    142 local enums = {}
    143 enums.KEY = eh.make_enum{
    144   {"KEY_RESERVED", 0},
    145   {"KEY_ESC", 1},
    146   {"KEY_1", 2},
    147   {"KEY_2", 3},
    148   {"KEY_3", 4},
    149   {"KEY_4", 5},
    150   {"KEY_5", 6},
    151   {"KEY_6", 7},
    152   {"KEY_7", 8},
    153   {"KEY_8", 9},
    154   {"KEY_9", 10},
    155   {"KEY_0", 11},
    156   {"KEY_MINUS", 12},
    157   {"KEY_EQUAL", 13},
    158   {"KEY_BACKSPACE", 14},
    159   {"KEY_TAB", 15},
    160   {"KEY_Q", 16},
    161   {"KEY_W", 17},
    162   {"KEY_E", 18},
    163   {"KEY_R", 19},
    164   {"KEY_T", 20},
    165   {"KEY_Y", 21},
    166   {"KEY_U", 22},
    167   {"KEY_I", 23},
    168   {"KEY_O", 24},
    169   {"KEY_P", 25},
    170   {"KEY_LEFTBRACE", 26},
    171   {"KEY_RIGHTBRACE", 27},
    172   {"KEY_ENTER", 28},
    173   {"KEY_LEFTCTRL", 29},
    174   {"KEY_A", 30},
    175   {"KEY_S", 31},
    176   {"KEY_D", 32},
    177   {"KEY_F", 33},
    178   {"KEY_G", 34},
    179   {"KEY_H", 35},
    180   {"KEY_J", 36},
    181   {"KEY_K", 37},
    182   {"KEY_L", 38},
    183   {"KEY_SEMICOLON", 39},
    184   {"KEY_APOSTROPHE", 40},
    185   {"KEY_GRAVE", 41},
    186   {"KEY_LEFTSHIFT", 42},
    187   {"KEY_BACKSLASH", 43},
    188   {"KEY_Z", 44},
    189   {"KEY_X", 45},
    190   {"KEY_C", 46},
    191   {"KEY_V", 47},
    192   {"KEY_B", 48},
    193   {"KEY_N", 49},
    194   {"KEY_M", 50},
    195   {"KEY_COMMA", 51},
    196   {"KEY_DOT", 52},
    197   {"KEY_SLASH", 53},
    198   {"KEY_RIGHTSHIFT", 54},
    199   {"KEY_KPASTERISK", 55},
    200   {"KEY_LEFTALT", 56},
    201   {"KEY_SPACE", 57},
    202   {"KEY_CAPSLOCK", 58},
    203   {"KEY_F1", 59},
    204   {"KEY_F2", 60},
    205   {"KEY_F3", 61},
    206   {"KEY_F4", 62},
    207   {"KEY_F5", 63},
    208   {"KEY_F6", 64},
    209   {"KEY_F7", 65},
    210   {"KEY_F8", 66},
    211   {"KEY_F9", 67},
    212   {"KEY_F10", 68},
    213   {"KEY_NUMLOCK", 69},
    214   {"KEY_SCROLLLOCK", 70},
    215   {"KEY_KP7", 71},
    216   {"KEY_KP8", 72},
    217   {"KEY_KP9", 73},
    218   {"KEY_KPMINUS", 74},
    219   {"KEY_KP4", 75},
    220   {"KEY_KP5", 76},
    221   {"KEY_KP6", 77},
    222   {"KEY_KPPLUS", 78},
    223   {"KEY_KP1", 79},
    224   {"KEY_KP2", 80},
    225   {"KEY_KP3", 81},
    226   {"KEY_KP0", 82},
    227   {"KEY_KPDOT", 83},
    228   {"KEY_ZENKAKUHANKAKU", 85},
    229   {"KEY_102ND", 86},
    230   {"KEY_F11", 87},
    231   {"KEY_F12", 88},
    232   {"KEY_RO", 89},
    233   {"KEY_KATAKANA", 90},
    234   {"KEY_HIRAGANA", 91},
    235   {"KEY_HENKAN", 92},
    236   {"KEY_KATAKANAHIRAGANA", 93},
    237   {"KEY_MUHENKAN", 94},
    238   {"KEY_KPJPCOMMA", 95},
    239   {"KEY_KPENTER", 96},
    240   {"KEY_RIGHTCTRL", 97},
    241   {"KEY_KPSLASH", 98},
    242   {"KEY_SYSRQ", 99},
    243   {"KEY_RIGHTALT", 100},
    244   {"KEY_LINEFEED", 101},
    245   {"KEY_HOME", 102},
    246   {"KEY_UP", 103},
    247   {"KEY_PAGEUP", 104},
    248   {"KEY_LEFT", 105},
    249   {"KEY_RIGHT", 106},
    250   {"KEY_END", 107},
    251   {"KEY_DOWN", 108},
    252   {"KEY_PAGEDOWN", 109},
    253   {"KEY_INSERT", 110},
    254   {"KEY_DELETE", 111},
    255   {"KEY_MACRO", 112},
    256   {"KEY_MUTE", 113},
    257   {"KEY_VOLUMEDOWN", 114},
    258   {"KEY_VOLUMEUP", 115},
    259   {"KEY_POWER", 116},
    260   {"KEY_KPEQUAL", 117},
    261   {"KEY_KPPLUSMINUS", 118},
    262   {"KEY_PAUSE", 119},
    263   {"KEY_SCALE", 120},
    264   {"KEY_KPCOMMA", 121},
    265   {"KEY_HANGEUL", 122},
    266   {"KEY_HANGUEL", 122},
    267   {"KEY_HANJA", 123},
    268   {"KEY_YEN", 124},
    269   {"KEY_LEFTMETA", 125},
    270   {"KEY_RIGHTMETA", 126},
    271   {"KEY_COMPOSE", 127},
    272   {"KEY_STOP", 128},
    273   {"KEY_AGAIN", 129},
    274   {"KEY_PROPS", 130},
    275   {"KEY_UNDO", 131},
    276   {"KEY_FRONT", 132},
    277   {"KEY_COPY", 133},
    278   {"KEY_OPEN", 134},
    279   {"KEY_PASTE", 135},
    280   {"KEY_FIND", 136},
    281   {"KEY_CUT", 137},
    282   {"KEY_HELP", 138},
    283   {"KEY_MENU", 139},
    284   {"KEY_CALC", 140},
    285   {"KEY_SETUP", 141},
    286   {"KEY_SLEEP", 142},
    287   {"KEY_WAKEUP", 143},
    288   {"KEY_FILE", 144},
    289   {"KEY_SENDFILE", 145},
    290   {"KEY_DELETEFILE", 146},
    291   {"KEY_XFER", 147},
    292   {"KEY_PROG1", 148},
    293   {"KEY_PROG2", 149},
    294   {"KEY_WWW", 150},
    295   {"KEY_MSDOS", 151},
    296   {"KEY_COFFEE", 152},
    297   {"KEY_SCREENLOCK", 152},
    298   {"KEY_ROTATE_DISPLAY", 153},
    299   {"KEY_DIRECTION", 153},
    300   {"KEY_CYCLEWINDOWS", 154},
    301   {"KEY_MAIL", 155},
    302   {"KEY_BOOKMARKS", 156},
    303   {"KEY_COMPUTER", 157},
    304   {"KEY_BACK", 158},
    305   {"KEY_FORWARD", 159},
    306   {"KEY_CLOSECD", 160},
    307   {"KEY_EJECTCD", 161},
    308   {"KEY_EJECTCLOSECD", 162},
    309   {"KEY_NEXTSONG", 163},
    310   {"KEY_PLAYPAUSE", 164},
    311   {"KEY_PREVIOUSSONG", 165},
    312   {"KEY_STOPCD", 166},
    313   {"KEY_RECORD", 167},
    314   {"KEY_REWIND", 168},
    315   {"KEY_PHONE", 169},
    316   {"KEY_ISO", 170},
    317   {"KEY_CONFIG", 171},
    318   {"KEY_HOMEPAGE", 172},
    319   {"KEY_REFRESH", 173},
    320   {"KEY_EXIT", 174},
    321   {"KEY_MOVE", 175},
    322   {"KEY_EDIT", 176},
    323   {"KEY_SCROLLUP", 177},
    324   {"KEY_SCROLLDOWN", 178},
    325   {"KEY_KPLEFTPAREN", 179},
    326   {"KEY_KPRIGHTPAREN", 180},
    327   {"KEY_NEW", 181},
    328   {"KEY_REDO", 182},
    329   {"KEY_F13", 183},
    330   {"KEY_F14", 184},
    331   {"KEY_F15", 185},
    332   {"KEY_F16", 186},
    333   {"KEY_F17", 187},
    334   {"KEY_F18", 188},
    335   {"KEY_F19", 189},
    336   {"KEY_F20", 190},
    337   {"KEY_F21", 191},
    338   {"KEY_F22", 192},
    339   {"KEY_F23", 193},
    340   {"KEY_F24", 194},
    341   {"KEY_PLAYCD", 200},
    342   {"KEY_PAUSECD", 201},
    343   {"KEY_PROG3", 202},
    344   {"KEY_PROG4", 203},
    345   {"KEY_ALL_APPLICATIONS", 204},
    346   {"KEY_DASHBOARD", 204},
    347   {"KEY_SUSPEND", 205},
    348   {"KEY_CLOSE", 206},
    349   {"KEY_PLAY", 207},
    350   {"KEY_FASTFORWARD", 208},
    351   {"KEY_BASSBOOST", 209},
    352   {"KEY_PRINT", 210},
    353   {"KEY_HP", 211},
    354   {"KEY_CAMERA", 212},
    355   {"KEY_SOUND", 213},
    356   {"KEY_QUESTION", 214},
    357   {"KEY_EMAIL", 215},
    358   {"KEY_CHAT", 216},
    359   {"KEY_SEARCH", 217},
    360   {"KEY_CONNECT", 218},
    361   {"KEY_FINANCE", 219},
    362   {"KEY_SPORT", 220},
    363   {"KEY_SHOP", 221},
    364   {"KEY_ALTERASE", 222},
    365   {"KEY_CANCEL", 223},
    366   {"KEY_BRIGHTNESSDOWN", 224},
    367   {"KEY_BRIGHTNESSUP", 225},
    368   {"KEY_MEDIA", 226},
    369   {"KEY_SWITCHVIDEOMODE", 227},
    370   {"KEY_KBDILLUMTOGGLE", 228},
    371   {"KEY_KBDILLUMDOWN", 229},
    372   {"KEY_KBDILLUMUP", 230},
    373   {"KEY_SEND", 231},
    374   {"KEY_REPLY", 232},
    375   {"KEY_FORWARDMAIL", 233},
    376   {"KEY_SAVE", 234},
    377   {"KEY_DOCUMENTS", 235},
    378   {"KEY_BATTERY", 236},
    379   {"KEY_BLUETOOTH", 237},
    380   {"KEY_WLAN", 238},
    381   {"KEY_UWB", 239},
    382   {"KEY_UNKNOWN", 240},
    383   {"KEY_VIDEO_NEXT", 241},
    384   {"KEY_VIDEO_PREV", 242},
    385   {"KEY_BRIGHTNESS_CYCLE", 243},
    386   {"KEY_BRIGHTNESS_AUTO", 244},
    387   {"KEY_BRIGHTNESS_ZERO", 244},
    388   {"KEY_DISPLAY_OFF", 245},
    389   {"KEY_WWAN", 246},
    390   {"KEY_WIMAX", 246},
    391   {"KEY_RFKILL", 247},
    392   {"KEY_MICMUTE", 248},
    393   {"BTN_MISC", 256},
    394   {"BTN_0", 256},
    395   {"BTN_1", 257},
    396   {"BTN_2", 258},
    397   {"BTN_3", 259},
    398   {"BTN_4", 260},
    399   {"BTN_5", 261},
    400   {"BTN_6", 262},
    401   {"BTN_7", 263},
    402   {"BTN_8", 264},
    403   {"BTN_9", 265},
    404   {"BTN_MOUSE", 272},
    405   {"BTN_LEFT", 272},
    406   {"BTN_RIGHT", 273},
    407   {"BTN_MIDDLE", 274},
    408   {"BTN_SIDE", 275},
    409   {"BTN_EXTRA", 276},
    410   {"BTN_FORWARD", 277},
    411   {"BTN_BACK", 278},
    412   {"BTN_TASK", 279},
    413   {"BTN_JOYSTICK", 288},
    414   {"BTN_TRIGGER", 288},
    415   {"BTN_THUMB", 289},
    416   {"BTN_THUMB2", 290},
    417   {"BTN_TOP", 291},
    418   {"BTN_TOP2", 292},
    419   {"BTN_PINKIE", 293},
    420   {"BTN_BASE", 294},
    421   {"BTN_BASE2", 295},
    422   {"BTN_BASE3", 296},
    423   {"BTN_BASE4", 297},
    424   {"BTN_BASE5", 298},
    425   {"BTN_BASE6", 299},
    426   {"BTN_DEAD", 303},
    427   {"BTN_GAMEPAD", 304},
    428   {"BTN_SOUTH", 304},
    429   {"BTN_A", 304},
    430   {"BTN_EAST", 305},
    431   {"BTN_B", 305},
    432   {"BTN_C", 306},
    433   {"BTN_NORTH", 307},
    434   {"BTN_X", 307},
    435   {"BTN_WEST", 308},
    436   {"BTN_Y", 308},
    437   {"BTN_Z", 309},
    438   {"BTN_TL", 310},
    439   {"BTN_TR", 311},
    440   {"BTN_TL2", 312},
    441   {"BTN_TR2", 313},
    442   {"BTN_SELECT", 314},
    443   {"BTN_START", 315},
    444   {"BTN_MODE", 316},
    445   {"BTN_THUMBL", 317},
    446   {"BTN_THUMBR", 318},
    447   {"BTN_DIGI", 320},
    448   {"BTN_TOOL_PEN", 320},
    449   {"BTN_TOOL_RUBBER", 321},
    450   {"BTN_TOOL_BRUSH", 322},
    451   {"BTN_TOOL_PENCIL", 323},
    452   {"BTN_TOOL_AIRBRUSH", 324},
    453   {"BTN_TOOL_FINGER", 325},
    454   {"BTN_TOOL_MOUSE", 326},
    455   {"BTN_TOOL_LENS", 327},
    456   {"BTN_TOOL_QUINTTAP", 328},
    457   {"BTN_STYLUS3", 329},
    458   {"BTN_TOUCH", 330},
    459   {"BTN_STYLUS", 331},
    460   {"BTN_STYLUS2", 332},
    461   {"BTN_TOOL_DOUBLETAP", 333},
    462   {"BTN_TOOL_TRIPLETAP", 334},
    463   {"BTN_TOOL_QUADTAP", 335},
    464   {"BTN_WHEEL", 336},
    465   {"BTN_GEAR_DOWN", 336},
    466   {"BTN_GEAR_UP", 337},
    467   {"KEY_OK", 352},
    468   {"KEY_SELECT", 353},
    469   {"KEY_GOTO", 354},
    470   {"KEY_CLEAR", 355},
    471   {"KEY_POWER2", 356},
    472   {"KEY_OPTION", 357},
    473   {"KEY_INFO", 358},
    474   {"KEY_TIME", 359},
    475   {"KEY_VENDOR", 360},
    476   {"KEY_ARCHIVE", 361},
    477   {"KEY_PROGRAM", 362},
    478   {"KEY_CHANNEL", 363},
    479   {"KEY_FAVORITES", 364},
    480   {"KEY_EPG", 365},
    481   {"KEY_PVR", 366},
    482   {"KEY_MHP", 367},
    483   {"KEY_LANGUAGE", 368},
    484   {"KEY_TITLE", 369},
    485   {"KEY_SUBTITLE", 370},
    486   {"KEY_ANGLE", 371},
    487   {"KEY_FULL_SCREEN", 372},
    488   {"KEY_ZOOM", 372},
    489   {"KEY_MODE", 373},
    490   {"KEY_KEYBOARD", 374},
    491   {"KEY_ASPECT_RATIO", 375},
    492   {"KEY_SCREEN", 375},
    493   {"KEY_PC", 376},
    494   {"KEY_TV", 377},
    495   {"KEY_TV2", 378},
    496   {"KEY_VCR", 379},
    497   {"KEY_VCR2", 380},
    498   {"KEY_SAT", 381},
    499   {"KEY_SAT2", 382},
    500   {"KEY_CD", 383},
    501   {"KEY_TAPE", 384},
    502   {"KEY_RADIO", 385},
    503   {"KEY_TUNER", 386},
    504   {"KEY_PLAYER", 387},
    505   {"KEY_TEXT", 388},
    506   {"KEY_DVD", 389},
    507   {"KEY_AUX", 390},
    508   {"KEY_MP3", 391},
    509   {"KEY_AUDIO", 392},
    510   {"KEY_VIDEO", 393},
    511   {"KEY_DIRECTORY", 394},
    512   {"KEY_LIST", 395},
    513   {"KEY_MEMO", 396},
    514   {"KEY_CALENDAR", 397},
    515   {"KEY_RED", 398},
    516   {"KEY_GREEN", 399},
    517   {"KEY_YELLOW", 400},
    518   {"KEY_BLUE", 401},
    519   {"KEY_CHANNELUP", 402},
    520   {"KEY_CHANNELDOWN", 403},
    521   {"KEY_FIRST", 404},
    522   {"KEY_LAST", 405},
    523   {"KEY_AB", 406},
    524   {"KEY_NEXT", 407},
    525   {"KEY_RESTART", 408},
    526   {"KEY_SLOW", 409},
    527   {"KEY_SHUFFLE", 410},
    528   {"KEY_BREAK", 411},
    529   {"KEY_PREVIOUS", 412},
    530   {"KEY_DIGITS", 413},
    531   {"KEY_TEEN", 414},
    532   {"KEY_TWEN", 415},
    533   {"KEY_VIDEOPHONE", 416},
    534   {"KEY_GAMES", 417},
    535   {"KEY_ZOOMIN", 418},
    536   {"KEY_ZOOMOUT", 419},
    537   {"KEY_ZOOMRESET", 420},
    538   {"KEY_WORDPROCESSOR", 421},
    539   {"KEY_EDITOR", 422},
    540   {"KEY_SPREADSHEET", 423},
    541   {"KEY_GRAPHICSEDITOR", 424},
    542   {"KEY_PRESENTATION", 425},
    543   {"KEY_DATABASE", 426},
    544   {"KEY_NEWS", 427},
    545   {"KEY_VOICEMAIL", 428},
    546   {"KEY_ADDRESSBOOK", 429},
    547   {"KEY_MESSENGER", 430},
    548   {"KEY_DISPLAYTOGGLE", 431},
    549   {"KEY_BRIGHTNESS_TOGGLE", 431},
    550   {"KEY_SPELLCHECK", 432},
    551   {"KEY_LOGOFF", 433},
    552   {"KEY_DOLLAR", 434},
    553   {"KEY_EURO", 435},
    554   {"KEY_FRAMEBACK", 436},
    555   {"KEY_FRAMEFORWARD", 437},
    556   {"KEY_CONTEXT_MENU", 438},
    557   {"KEY_MEDIA_REPEAT", 439},
    558   {"KEY_10CHANNELSUP", 440},
    559   {"KEY_10CHANNELSDOWN", 441},
    560   {"KEY_IMAGES", 442},
    561   {"KEY_NOTIFICATION_CENTER", 444},
    562   {"KEY_PICKUP_PHONE", 445},
    563   {"KEY_HANGUP_PHONE", 446},
    564   {"KEY_DEL_EOL", 448},
    565   {"KEY_DEL_EOS", 449},
    566   {"KEY_INS_LINE", 450},
    567   {"KEY_DEL_LINE", 451},
    568   {"KEY_FN", 464},
    569   {"KEY_FN_ESC", 465},
    570   {"KEY_FN_F1", 466},
    571   {"KEY_FN_F2", 467},
    572   {"KEY_FN_F3", 468},
    573   {"KEY_FN_F4", 469},
    574   {"KEY_FN_F5", 470},
    575   {"KEY_FN_F6", 471},
    576   {"KEY_FN_F7", 472},
    577   {"KEY_FN_F8", 473},
    578   {"KEY_FN_F9", 474},
    579   {"KEY_FN_F10", 475},
    580   {"KEY_FN_F11", 476},
    581   {"KEY_FN_F12", 477},
    582   {"KEY_FN_1", 478},
    583   {"KEY_FN_2", 479},
    584   {"KEY_FN_D", 480},
    585   {"KEY_FN_E", 481},
    586   {"KEY_FN_F", 482},
    587   {"KEY_FN_S", 483},
    588   {"KEY_FN_B", 484},
    589   {"KEY_FN_RIGHT_SHIFT", 485},
    590   {"KEY_BRL_DOT1", 497},
    591   {"KEY_BRL_DOT2", 498},
    592   {"KEY_BRL_DOT3", 499},
    593   {"KEY_BRL_DOT4", 500},
    594   {"KEY_BRL_DOT5", 501},
    595   {"KEY_BRL_DOT6", 502},
    596   {"KEY_BRL_DOT7", 503},
    597   {"KEY_BRL_DOT8", 504},
    598   {"KEY_BRL_DOT9", 505},
    599   {"KEY_BRL_DOT10", 506},
    600   {"KEY_NUMERIC_0", 512},
    601   {"KEY_NUMERIC_1", 513},
    602   {"KEY_NUMERIC_2", 514},
    603   {"KEY_NUMERIC_3", 515},
    604   {"KEY_NUMERIC_4", 516},
    605   {"KEY_NUMERIC_5", 517},
    606   {"KEY_NUMERIC_6", 518},
    607   {"KEY_NUMERIC_7", 519},
    608   {"KEY_NUMERIC_8", 520},
    609   {"KEY_NUMERIC_9", 521},
    610   {"KEY_NUMERIC_STAR", 522},
    611   {"KEY_NUMERIC_POUND", 523},
    612   {"KEY_NUMERIC_A", 524},
    613   {"KEY_NUMERIC_B", 525},
    614   {"KEY_NUMERIC_C", 526},
    615   {"KEY_NUMERIC_D", 527},
    616   {"KEY_CAMERA_FOCUS", 528},
    617   {"KEY_WPS_BUTTON", 529},
    618   {"KEY_TOUCHPAD_TOGGLE", 530},
    619   {"KEY_TOUCHPAD_ON", 531},
    620   {"KEY_TOUCHPAD_OFF", 532},
    621   {"KEY_CAMERA_ZOOMIN", 533},
    622   {"KEY_CAMERA_ZOOMOUT", 534},
    623   {"KEY_CAMERA_UP", 535},
    624   {"KEY_CAMERA_DOWN", 536},
    625   {"KEY_CAMERA_LEFT", 537},
    626   {"KEY_CAMERA_RIGHT", 538},
    627   {"KEY_ATTENDANT_ON", 539},
    628   {"KEY_ATTENDANT_OFF", 540},
    629   {"KEY_ATTENDANT_TOGGLE", 541},
    630   {"KEY_LIGHTS_TOGGLE", 542},
    631   {"BTN_DPAD_UP", 544},
    632   {"BTN_DPAD_DOWN", 545},
    633   {"BTN_DPAD_LEFT", 546},
    634   {"BTN_DPAD_RIGHT", 547},
    635   {"KEY_ALS_TOGGLE", 560},
    636   {"KEY_ROTATE_LOCK_TOGGLE", 561},
    637   {"KEY_BUTTONCONFIG", 576},
    638   {"KEY_TASKMANAGER", 577},
    639   {"KEY_JOURNAL", 578},
    640   {"KEY_CONTROLPANEL", 579},
    641   {"KEY_APPSELECT", 580},
    642   {"KEY_SCREENSAVER", 581},
    643   {"KEY_VOICECOMMAND", 582},
    644   {"KEY_ASSISTANT", 583},
    645   {"KEY_KBD_LAYOUT_NEXT", 584},
    646   {"KEY_EMOJI_PICKER", 585},
    647   {"KEY_DICTATE", 586},
    648   {"KEY_CAMERA_ACCESS_ENABLE", 587},
    649   {"KEY_CAMERA_ACCESS_DISABLE", 588},
    650   {"KEY_CAMERA_ACCESS_TOGGLE", 589},
    651   {"KEY_BRIGHTNESS_MIN", 592},
    652   {"KEY_BRIGHTNESS_MAX", 593},
    653   {"KEY_KBDINPUTASSIST_PREV", 608},
    654   {"KEY_KBDINPUTASSIST_NEXT", 609},
    655   {"KEY_KBDINPUTASSIST_PREVGROUP", 610},
    656   {"KEY_KBDINPUTASSIST_NEXTGROUP", 611},
    657   {"KEY_KBDINPUTASSIST_ACCEPT", 612},
    658   {"KEY_KBDINPUTASSIST_CANCEL", 613},
    659   {"KEY_RIGHT_UP", 614},
    660   {"KEY_RIGHT_DOWN", 615},
    661   {"KEY_LEFT_UP", 616},
    662   {"KEY_LEFT_DOWN", 617},
    663   {"KEY_ROOT_MENU", 618},
    664   {"KEY_MEDIA_TOP_MENU", 619},
    665   {"KEY_NUMERIC_11", 620},
    666   {"KEY_NUMERIC_12", 621},
    667   {"KEY_AUDIO_DESC", 622},
    668   {"KEY_3D_MODE", 623},
    669   {"KEY_NEXT_FAVORITE", 624},
    670   {"KEY_STOP_RECORD", 625},
    671   {"KEY_PAUSE_RECORD", 626},
    672   {"KEY_VOD", 627},
    673   {"KEY_UNMUTE", 628},
    674   {"KEY_FASTREVERSE", 629},
    675   {"KEY_SLOWREVERSE", 630},
    676   {"KEY_DATA", 631},
    677   {"KEY_ONSCREEN_KEYBOARD", 632},
    678   {"KEY_PRIVACY_SCREEN_TOGGLE", 633},
    679   {"KEY_SELECTIVE_SCREENSHOT", 634},
    680   {"KEY_NEXT_ELEMENT", 635},
    681   {"KEY_PREVIOUS_ELEMENT", 636},
    682   {"KEY_AUTOPILOT_ENGAGE_TOGGLE", 637},
    683   {"KEY_MARK_WAYPOINT", 638},
    684   {"KEY_SOS", 639},
    685   {"KEY_NAV_CHART", 640},
    686   {"KEY_FISHING_CHART", 641},
    687   {"KEY_SINGLE_RANGE_RADAR", 642},
    688   {"KEY_DUAL_RANGE_RADAR", 643},
    689   {"KEY_RADAR_OVERLAY", 644},
    690   {"KEY_TRADITIONAL_SONAR", 645},
    691   {"KEY_CLEARVU_SONAR", 646},
    692   {"KEY_SIDEVU_SONAR", 647},
    693   {"KEY_NAV_INFO", 648},
    694   {"KEY_BRIGHTNESS_MENU", 649},
    695   {"KEY_MACRO1", 656},
    696   {"KEY_MACRO2", 657},
    697   {"KEY_MACRO3", 658},
    698   {"KEY_MACRO4", 659},
    699   {"KEY_MACRO5", 660},
    700   {"KEY_MACRO6", 661},
    701   {"KEY_MACRO7", 662},
    702   {"KEY_MACRO8", 663},
    703   {"KEY_MACRO9", 664},
    704   {"KEY_MACRO10", 665},
    705   {"KEY_MACRO11", 666},
    706   {"KEY_MACRO12", 667},
    707   {"KEY_MACRO13", 668},
    708   {"KEY_MACRO14", 669},
    709   {"KEY_MACRO15", 670},
    710   {"KEY_MACRO16", 671},
    711   {"KEY_MACRO17", 672},
    712   {"KEY_MACRO18", 673},
    713   {"KEY_MACRO19", 674},
    714   {"KEY_MACRO20", 675},
    715   {"KEY_MACRO21", 676},
    716   {"KEY_MACRO22", 677},
    717   {"KEY_MACRO23", 678},
    718   {"KEY_MACRO24", 679},
    719   {"KEY_MACRO25", 680},
    720   {"KEY_MACRO26", 681},
    721   {"KEY_MACRO27", 682},
    722   {"KEY_MACRO28", 683},
    723   {"KEY_MACRO29", 684},
    724   {"KEY_MACRO30", 685},
    725   {"KEY_MACRO_RECORD_START", 688},
    726   {"KEY_MACRO_RECORD_STOP", 689},
    727   {"KEY_MACRO_PRESET_CYCLE", 690},
    728   {"KEY_MACRO_PRESET1", 691},
    729   {"KEY_MACRO_PRESET2", 692},
    730   {"KEY_MACRO_PRESET3", 693},
    731   {"KEY_KBD_LCD_MENU1", 696},
    732   {"KEY_KBD_LCD_MENU2", 697},
    733   {"KEY_KBD_LCD_MENU3", 698},
    734   {"KEY_KBD_LCD_MENU4", 699},
    735   {"KEY_KBD_LCD_MENU5", 700},
    736   {"BTN_TRIGGER_HAPPY", 704},
    737   {"BTN_TRIGGER_HAPPY1", 704},
    738   {"BTN_TRIGGER_HAPPY2", 705},
    739   {"BTN_TRIGGER_HAPPY3", 706},
    740   {"BTN_TRIGGER_HAPPY4", 707},
    741   {"BTN_TRIGGER_HAPPY5", 708},
    742   {"BTN_TRIGGER_HAPPY6", 709},
    743   {"BTN_TRIGGER_HAPPY7", 710},
    744   {"BTN_TRIGGER_HAPPY8", 711},
    745   {"BTN_TRIGGER_HAPPY9", 712},
    746   {"BTN_TRIGGER_HAPPY10", 713},
    747   {"BTN_TRIGGER_HAPPY11", 714},
    748   {"BTN_TRIGGER_HAPPY12", 715},
    749   {"BTN_TRIGGER_HAPPY13", 716},
    750   {"BTN_TRIGGER_HAPPY14", 717},
    751   {"BTN_TRIGGER_HAPPY15", 718},
    752   {"BTN_TRIGGER_HAPPY16", 719},
    753   {"BTN_TRIGGER_HAPPY17", 720},
    754   {"BTN_TRIGGER_HAPPY18", 721},
    755   {"BTN_TRIGGER_HAPPY19", 722},
    756   {"BTN_TRIGGER_HAPPY20", 723},
    757   {"BTN_TRIGGER_HAPPY21", 724},
    758   {"BTN_TRIGGER_HAPPY22", 725},
    759   {"BTN_TRIGGER_HAPPY23", 726},
    760   {"BTN_TRIGGER_HAPPY24", 727},
    761   {"BTN_TRIGGER_HAPPY25", 728},
    762   {"BTN_TRIGGER_HAPPY26", 729},
    763   {"BTN_TRIGGER_HAPPY27", 730},
    764   {"BTN_TRIGGER_HAPPY28", 731},
    765   {"BTN_TRIGGER_HAPPY29", 732},
    766   {"BTN_TRIGGER_HAPPY30", 733},
    767   {"BTN_TRIGGER_HAPPY31", 734},
    768   {"BTN_TRIGGER_HAPPY32", 735},
    769   {"BTN_TRIGGER_HAPPY33", 736},
    770   {"BTN_TRIGGER_HAPPY34", 737},
    771   {"BTN_TRIGGER_HAPPY35", 738},
    772   {"BTN_TRIGGER_HAPPY36", 739},
    773   {"BTN_TRIGGER_HAPPY37", 740},
    774   {"BTN_TRIGGER_HAPPY38", 741},
    775   {"BTN_TRIGGER_HAPPY39", 742},
    776   {"BTN_TRIGGER_HAPPY40", 743},
    777   {"KEY_MIN_INTERESTING", 113},
    778   {"KEY_MAX", 767},
    779 }
    780 enums.UINPUT = eh.make_enum{
    781   {"FF_UPLOAD", 1},
    782   {"FF_ERASE", 2},
    783 }
    784 enums.INPUT_PROP = eh.make_enum{
    785   {"POINTER", 0},
    786   {"DIRECT", 1},
    787   {"BUTTONPAD", 2},
    788   {"SEMI_MT", 3},
    789   {"TOPBUTTONPAD", 4},
    790   {"POINTING_STICK", 5},
    791   {"ACCELEROMETER", 6},
    792   {"MAX", 31},
    793 }
    794 enums.EV = eh.make_enum{
    795   {"SYN", 0},
    796   {"KEY", 1},
    797   {"REL", 2},
    798   {"ABS", 3},
    799   {"MSC", 4},
    800   {"SW", 5},
    801   {"LED", 17},
    802   {"SND", 18},
    803   {"REP", 20},
    804   {"FF", 21},
    805   {"PWR", 22},
    806   {"FF_STATUS", 23},
    807   {"MAX", 31},
    808   {"UINPUT", 257},
    809 }
    810 enums.SYN = eh.make_enum{
    811   {"REPORT", 0},
    812   {"CONFIG", 1},
    813   {"MT_REPORT", 2},
    814   {"DROPPED", 3},
    815   {"MAX", 15},
    816 }
    817 enums.REL = eh.make_enum{
    818   {"X", 0},
    819   {"Y", 1},
    820   {"Z", 2},
    821   {"RX", 3},
    822   {"RY", 4},
    823   {"RZ", 5},
    824   {"HWHEEL", 6},
    825   {"DIAL", 7},
    826   {"WHEEL", 8},
    827   {"MISC", 9},
    828   {"RESERVED", 10},
    829   {"WHEEL_HI_RES", 11},
    830   {"HWHEEL_HI_RES", 12},
    831   {"MAX", 15},
    832 }
    833 enums.ABS = eh.make_enum{
    834   {"X", 0},
    835   {"Y", 1},
    836   {"Z", 2},
    837   {"RX", 3},
    838   {"RY", 4},
    839   {"RZ", 5},
    840   {"THROTTLE", 6},
    841   {"RUDDER", 7},
    842   {"WHEEL", 8},
    843   {"GAS", 9},
    844   {"BRAKE", 10},
    845   {"HAT0X", 16},
    846   {"HAT0Y", 17},
    847   {"HAT1X", 18},
    848   {"HAT1Y", 19},
    849   {"HAT2X", 20},
    850   {"HAT2Y", 21},
    851   {"HAT3X", 22},
    852   {"HAT3Y", 23},
    853   {"PRESSURE", 24},
    854   {"DISTANCE", 25},
    855   {"TILT_X", 26},
    856   {"TILT_Y", 27},
    857   {"TOOL_WIDTH", 28},
    858   {"VOLUME", 32},
    859   {"PROFILE", 33},
    860   {"MISC", 40},
    861   {"RESERVED", 46},
    862   {"MT_SLOT", 47},
    863   {"MT_TOUCH_MAJOR", 48},
    864   {"MT_TOUCH_MINOR", 49},
    865   {"MT_WIDTH_MAJOR", 50},
    866   {"MT_WIDTH_MINOR", 51},
    867   {"MT_ORIENTATION", 52},
    868   {"MT_POSITION_X", 53},
    869   {"MT_POSITION_Y", 54},
    870   {"MT_TOOL_TYPE", 55},
    871   {"MT_BLOB_ID", 56},
    872   {"MT_TRACKING_ID", 57},
    873   {"MT_PRESSURE", 58},
    874   {"MT_DISTANCE", 59},
    875   {"MT_TOOL_X", 60},
    876   {"MT_TOOL_Y", 61},
    877   {"MAX", 63},
    878 }
    879 enums.SW = eh.make_enum{
    880   {"LID", 0},
    881   {"TABLET_MODE", 1},
    882   {"HEADPHONE_INSERT", 2},
    883   {"RFKILL_ALL", 3},
    884   {"RADIO", 3},
    885   {"MICROPHONE_INSERT", 4},
    886   {"DOCK", 5},
    887   {"LINEOUT_INSERT", 6},
    888   {"JACK_PHYSICAL_INSERT", 7},
    889   {"VIDEOOUT_INSERT", 8},
    890   {"CAMERA_LENS_COVER", 9},
    891   {"KEYPAD_SLIDE", 10},
    892   {"FRONT_PROXIMITY", 11},
    893   {"ROTATE_LOCK", 12},
    894   {"LINEIN_INSERT", 13},
    895   {"MUTE_DEVICE", 14},
    896   {"PEN_INSERTED", 15},
    897   {"MACHINE_COVER", 16},
    898   {"MAX", 16},
    899 }
    900 enums.MSC = eh.make_enum{
    901   {"SERIAL", 0},
    902   {"PULSELED", 1},
    903   {"GESTURE", 2},
    904   {"RAW", 3},
    905   {"SCAN", 4},
    906   {"TIMESTAMP", 5},
    907   {"MAX", 7},
    908 }
    909 enums.LED = eh.make_enum{
    910   {"NUML", 0},
    911   {"CAPSL", 1},
    912   {"SCROLLL", 2},
    913   {"COMPOSE", 3},
    914   {"KANA", 4},
    915   {"SLEEP", 5},
    916   {"SUSPEND", 6},
    917   {"MUTE", 7},
    918   {"MISC", 8},
    919   {"MAIL", 9},
    920   {"CHARGING", 10},
    921   {"MAX", 15},
    922 }
    923 enums.REP = eh.make_enum{
    924   {"DELAY", 0},
    925   {"PERIOD", 1},
    926   {"MAX", 1},
    927 }
    928 enums.SND = eh.make_enum{
    929   {"CLICK", 0},
    930   {"BELL", 1},
    931   {"TONE", 2},
    932   {"MAX", 7},
    933 }
    934 enums.ID = eh.make_enum{
    935   {"BUS", 0},
    936   {"VENDOR", 1},
    937   {"PRODUCT", 2},
    938   {"VERSION", 3},
    939 }
    940 enums.BUS = eh.make_enum{
    941   {"PCI", 1},
    942   {"ISAPNP", 2},
    943   {"USB", 3},
    944   {"HIL", 4},
    945   {"BLUETOOTH", 5},
    946   {"VIRTUAL", 6},
    947   {"ISA", 16},
    948   {"I8042", 17},
    949   {"XTKBD", 18},
    950   {"RS232", 19},
    951   {"GAMEPORT", 20},
    952   {"PARPORT", 21},
    953   {"AMIGA", 22},
    954   {"ADB", 23},
    955   {"I2C", 24},
    956   {"HOST", 25},
    957   {"GSC", 26},
    958   {"ATARI", 27},
    959   {"SPI", 28},
    960   {"RMI", 29},
    961   {"CEC", 30},
    962   {"INTEL_ISHTP", 31},
    963   {"AMD_SFH", 32},
    964 }
    965 enums.MT_TOOL = eh.make_enum{
    966   {"FINGER", 0},
    967   {"PEN", 1},
    968   {"PALM", 2},
    969   {"DIAL", 10},
    970   {"MAX", 15},
    971 }
    972 enums.FF_STATUS = eh.make_enum{
    973   {"STOPPED", 0},
    974   {"PLAYING", 1},
    975   {"MAX", 1},
    976 }
    977 enums.FF = eh.make_enum{
    978   {"RUMBLE", 80},
    979   {"PERIODIC", 81},
    980   {"CONSTANT", 82},
    981   {"SPRING", 83},
    982   {"FRICTION", 84},
    983   {"DAMPER", 85},
    984   {"INERTIA", 86},
    985   {"RAMP", 87},
    986   {"EFFECT_MIN", 80},
    987   {"EFFECT_MAX", 87},
    988   {"SQUARE", 88},
    989   {"TRIANGLE", 89},
    990   {"SINE", 90},
    991   {"SAW_UP", 91},
    992   {"SAW_DOWN", 92},
    993   {"CUSTOM", 93},
    994   {"WAVEFORM_MIN", 88},
    995   {"WAVEFORM_MAX", 93},
    996   {"GAIN", 96},
    997   {"AUTOCENTER", 97},
    998   {"MAX", 127},
    999 }
   1000 enums.EV_VERSION = 0x010001
   1001 
   1002 local ctype_int_5b1_5d = ffi.typeof("int[1]")
   1003 local ctype_struct_20input_5fid_5b1_5d = ffi.typeof("struct input_id[1]")
   1004 local ctype_unsigned_20int_5b2_5d = ffi.typeof("unsigned int[2]")
   1005 local ctype_struct_20input_5fkeymap_5fentry_2a = ffi.typeof("struct input_keymap_entry*")
   1006 local ctype_void_2a = ffi.typeof("void*")
   1007 local ctype_struct_20input_5fabsinfo_5b1_5d = ffi.typeof("struct input_absinfo[1]")
   1008 local ctype_struct_20input_5fabsinfo_2a = ffi.typeof("struct input_absinfo*")
   1009 local ctype_struct_20ff_5feffect_2a = ffi.typeof("struct ff_effect*")
   1010 local ctype_int = ffi.typeof("int")
   1011 local ctype_struct_20input_5fmask_2a = ffi.typeof("struct input_mask*")
   1012 local ctype_unsigned_20int_5b1_5d = ffi.typeof("unsigned int[1]")
   1013 local ctype_struct_20uinput_5fsetup_2a = ffi.typeof("struct uinput_setup*")
   1014 local ctype_struct_20uinput_5fabs_5fsetup_2a = ffi.typeof("struct uinput_abs_setup*")
   1015 local ctype_struct_20uinput_5fff_5fupload_2a = ffi.typeof("struct uinput_ff_upload*")
   1016 local ctype_struct_20uinput_5fff_5ferase_2a = ffi.typeof("struct uinput_ff_erase*")
   1017 local ioctls = {}
   1018 local get_version_req = ioctl_mod.ioctl_req(true, false, 69, 1, ffi.sizeof("int"))
   1019 function ioctls.get_version(fd)
   1020   local arg = ctype_int_5b1_5d()
   1021   local res = ioctl(fd, get_version_req, arg)
   1022   return res, arg[0]
   1023 end
   1024 local get_id_req = ioctl_mod.ioctl_req(true, false, 69, 2, ffi.sizeof("struct input_id"))
   1025 function ioctls.get_id(fd)
   1026   local arg = ctype_struct_20input_5fid_5b1_5d()
   1027   local res = ioctl(fd, get_id_req, arg)
   1028   return res, arg[0]
   1029 end
   1030 local get_rep_req = ioctl_mod.ioctl_req(true, false, 69, 3, ffi.sizeof("unsigned int[2]"))
   1031 function ioctls.get_rep(fd)
   1032   local arg = ctype_unsigned_20int_5b2_5d()
   1033   local res = ioctl(fd, get_rep_req, arg)
   1034   return res, arg[0], arg[1]
   1035 end
   1036 local set_rep_req = ioctl_mod.ioctl_req(false, true, 69, 3, ffi.sizeof("unsigned int[2]"))
   1037 function ioctls.set_rep(fd, x0, x1)
   1038   local arg = ctype_unsigned_20int_5b2_5d(x0, x1)
   1039   local res = ioctl(fd, set_rep_req, arg)
   1040   return res
   1041 end
   1042 local get_keycode_req = ioctl_mod.ioctl_req(true, false, 69, 4, ffi.sizeof("unsigned int[2]"))
   1043 function ioctls.get_keycode(fd, x0, x1)
   1044   local arg = ctype_unsigned_20int_5b2_5d(x0, x1)
   1045   local res = ioctl(fd, get_keycode_req, arg)
   1046   return res, arg[0], arg[1]
   1047 end
   1048 local get_keycode_v2_req = ioctl_mod.ioctl_req(true, false, 69, 4, ffi.sizeof("struct input_keymap_entry"))
   1049 function ioctls.get_keycode_v2(fd, x0)
   1050   local arg = ctype_struct_20input_5fkeymap_5fentry_2a(x0)
   1051   local res = ioctl(fd, get_keycode_v2_req, arg)
   1052   return res, arg[0]
   1053 end
   1054 local set_keycode_req = ioctl_mod.ioctl_req(false, true, 69, 4, ffi.sizeof("unsigned int[2]"))
   1055 function ioctls.set_keycode(fd, x0, x1)
   1056   local arg = ctype_unsigned_20int_5b2_5d(x0, x1)
   1057   local res = ioctl(fd, set_keycode_req, arg)
   1058   return res
   1059 end
   1060 local set_keycode_v2_req = ioctl_mod.ioctl_req(false, true, 69, 4, ffi.sizeof("struct input_keymap_entry"))
   1061 function ioctls.set_keycode_v2(fd, x0)
   1062   local arg = ctype_struct_20input_5fkeymap_5fentry_2a(x0)
   1063   local res = ioctl(fd, set_keycode_v2_req, arg)
   1064   return res
   1065 end
   1066 local get_name_req = ioctl_mod.ioctl_req(true, false, 69, 6, 0)
   1067 function ioctls.get_name(fd, arg, len)
   1068   len = len or ffi_sizeof(arg)
   1069   local res = ioctl(fd, get_name_req + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1070   return res
   1071 end
   1072 local get_phys_req = ioctl_mod.ioctl_req(true, false, 69, 7, 0)
   1073 function ioctls.get_phys(fd, arg, len)
   1074   len = len or ffi_sizeof(arg)
   1075   local res = ioctl(fd, get_phys_req + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1076   return res
   1077 end
   1078 local get_uniq_req = ioctl_mod.ioctl_req(true, false, 69, 8, 0)
   1079 function ioctls.get_uniq(fd, arg, len)
   1080   len = len or ffi_sizeof(arg)
   1081   local res = ioctl(fd, get_uniq_req + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1082   return res
   1083 end
   1084 local get_prop_req = ioctl_mod.ioctl_req(true, false, 69, 9, 0)
   1085 function ioctls.get_prop(fd, arg, len)
   1086   len = len or ffi_sizeof(arg)
   1087   local res = ioctl(fd, get_prop_req + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1088   return res
   1089 end
   1090 local get_mtslots_req = ioctl_mod.ioctl_req(true, false, 69, 10, 0)
   1091 function ioctls.get_mtslots(fd, arg, len)
   1092   len = len or ffi_sizeof(arg)
   1093   local res = ioctl(fd, get_mtslots_req + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1094   return res
   1095 end
   1096 local get_key_req = ioctl_mod.ioctl_req(true, false, 69, 24, 0)
   1097 function ioctls.get_key(fd, arg, len)
   1098   len = len or ffi_sizeof(arg)
   1099   local res = ioctl(fd, get_key_req + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1100   return res
   1101 end
   1102 local get_led_req = ioctl_mod.ioctl_req(true, false, 69, 25, 0)
   1103 function ioctls.get_led(fd, arg, len)
   1104   len = len or ffi_sizeof(arg)
   1105   local res = ioctl(fd, get_led_req + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1106   return res
   1107 end
   1108 local get_snd_req = ioctl_mod.ioctl_req(true, false, 69, 26, 0)
   1109 function ioctls.get_snd(fd, arg, len)
   1110   len = len or ffi_sizeof(arg)
   1111   local res = ioctl(fd, get_snd_req + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1112   return res
   1113 end
   1114 local get_sw_req = ioctl_mod.ioctl_req(true, false, 69, 27, 0)
   1115 function ioctls.get_sw(fd, arg, len)
   1116   len = len or ffi_sizeof(arg)
   1117   local res = ioctl(fd, get_sw_req + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1118   return res
   1119 end
   1120 local get_bit_req = ioctl_mod.ioctl_req(true, false, 69, 32, 0)
   1121 function ioctls.get_bit(fd, ev, arg, len)
   1122   len = len or ffi_sizeof(arg)
   1123   local res = ioctl(fd, get_bit_req + lshift(ev, nrshift) + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1124   return res
   1125 end
   1126 local get_abs_req = ioctl_mod.ioctl_req(true, false, 69, 64, ffi.sizeof("struct input_absinfo"))
   1127 function ioctls.get_abs(fd, abs)
   1128   local arg = ctype_struct_20input_5fabsinfo_5b1_5d()
   1129   local res = ioctl(fd, get_abs_req + lshift(abs, nrshift), arg)
   1130   return res, arg[0]
   1131 end
   1132 local set_abs_req = ioctl_mod.ioctl_req(false, true, 69, 192, ffi.sizeof("struct input_absinfo"))
   1133 function ioctls.set_abs(fd, abs, x0)
   1134   local arg = ctype_struct_20input_5fabsinfo_2a(x0)
   1135   local res = ioctl(fd, set_abs_req + lshift(abs, nrshift), arg)
   1136   return res
   1137 end
   1138 local set_ff_req = ioctl_mod.ioctl_req(false, true, 69, 128, ffi.sizeof("struct ff_effect"))
   1139 function ioctls.set_ff(fd, x0)
   1140   local arg = ctype_struct_20ff_5feffect_2a(x0)
   1141   local res = ioctl(fd, set_ff_req, arg)
   1142   return res
   1143 end
   1144 local rm_ff_req = ioctl_mod.ioctl_req(false, true, 69, 129, ffi.sizeof("int"))
   1145 function ioctls.rm_ff(fd, x0)
   1146   local arg = ctype_int(x0)
   1147   local res = ioctl(fd, rm_ff_req, arg)
   1148   return res
   1149 end
   1150 local get_effects_req = ioctl_mod.ioctl_req(true, false, 69, 132, ffi.sizeof("int"))
   1151 function ioctls.get_effects(fd)
   1152   local arg = ctype_int_5b1_5d()
   1153   local res = ioctl(fd, get_effects_req, arg)
   1154   return res, arg[0]
   1155 end
   1156 local grab_req = ioctl_mod.ioctl_req(false, true, 69, 144, ffi.sizeof("int"))
   1157 function ioctls.grab(fd, x0)
   1158   local arg = ctype_int(x0)
   1159   local res = ioctl(fd, grab_req, arg)
   1160   return res
   1161 end
   1162 local revoke_req = ioctl_mod.ioctl_req(false, true, 69, 145, ffi.sizeof("int"))
   1163 function ioctls.revoke(fd, x0)
   1164   local arg = ctype_int(x0)
   1165   local res = ioctl(fd, revoke_req, arg)
   1166   return res
   1167 end
   1168 local get_mask_req = ioctl_mod.ioctl_req(true, false, 69, 146, ffi.sizeof("struct input_mask"))
   1169 function ioctls.get_mask(fd, x0)
   1170   local arg = ctype_struct_20input_5fmask_2a(x0)
   1171   local res = ioctl(fd, get_mask_req, arg)
   1172   return res, arg[0]
   1173 end
   1174 local set_mask_req = ioctl_mod.ioctl_req(false, true, 69, 147, ffi.sizeof("struct input_mask"))
   1175 function ioctls.set_mask(fd, x0)
   1176   local arg = ctype_struct_20input_5fmask_2a(x0)
   1177   local res = ioctl(fd, set_mask_req, arg)
   1178   return res
   1179 end
   1180 local set_clockid_req = ioctl_mod.ioctl_req(false, true, 69, 160, ffi.sizeof("int"))
   1181 function ioctls.set_clockid(fd, x0)
   1182   local arg = ctype_unsigned_20int_5b1_5d(x0)
   1183   local res = ioctl(fd, set_clockid_req, arg)
   1184   return res
   1185 end
   1186 local ui_dev_create_req = ioctl_mod.ioctl_req(false, false, 85, 1, 0)
   1187 function ioctls.ui_dev_create(fd)
   1188   local res = ioctl(fd, ui_dev_create_req)
   1189   return res
   1190 end
   1191 local ui_dev_destroy_req = ioctl_mod.ioctl_req(false, false, 85, 2, 0)
   1192 function ioctls.ui_dev_destroy(fd)
   1193   local res = ioctl(fd, ui_dev_destroy_req)
   1194   return res
   1195 end
   1196 local ui_dev_setup_req = ioctl_mod.ioctl_req(false, true, 85, 3, ffi.sizeof("struct uinput_setup"))
   1197 function ioctls.ui_dev_setup(fd, x0)
   1198   local arg = ctype_struct_20uinput_5fsetup_2a(x0)
   1199   local res = ioctl(fd, ui_dev_setup_req, arg)
   1200   return res
   1201 end
   1202 local ui_abs_setup_req = ioctl_mod.ioctl_req(false, true, 85, 4, ffi.sizeof("struct uinput_abs_setup"))
   1203 function ioctls.ui_abs_setup(fd, x0)
   1204   local arg = ctype_struct_20uinput_5fabs_5fsetup_2a(x0)
   1205   local res = ioctl(fd, ui_abs_setup_req, arg)
   1206   return res
   1207 end
   1208 local ui_set_evbit_req = ioctl_mod.ioctl_req(false, true, 85, 100, ffi.sizeof("int"))
   1209 function ioctls.ui_set_evbit(fd, x0)
   1210   local arg = ctype_int(x0)
   1211   local res = ioctl(fd, ui_set_evbit_req, arg)
   1212   return res
   1213 end
   1214 local ui_set_keybit_req = ioctl_mod.ioctl_req(false, true, 85, 101, ffi.sizeof("int"))
   1215 function ioctls.ui_set_keybit(fd, x0)
   1216   local arg = ctype_int(x0)
   1217   local res = ioctl(fd, ui_set_keybit_req, arg)
   1218   return res
   1219 end
   1220 local ui_set_relbit_req = ioctl_mod.ioctl_req(false, true, 85, 102, ffi.sizeof("int"))
   1221 function ioctls.ui_set_relbit(fd, x0)
   1222   local arg = ctype_int(x0)
   1223   local res = ioctl(fd, ui_set_relbit_req, arg)
   1224   return res
   1225 end
   1226 local ui_set_absbit_req = ioctl_mod.ioctl_req(false, true, 85, 103, ffi.sizeof("int"))
   1227 function ioctls.ui_set_absbit(fd, x0)
   1228   local arg = ctype_int(x0)
   1229   local res = ioctl(fd, ui_set_absbit_req, arg)
   1230   return res
   1231 end
   1232 local ui_set_mscbit_req = ioctl_mod.ioctl_req(false, true, 85, 104, ffi.sizeof("int"))
   1233 function ioctls.ui_set_mscbit(fd, x0)
   1234   local arg = ctype_int(x0)
   1235   local res = ioctl(fd, ui_set_mscbit_req, arg)
   1236   return res
   1237 end
   1238 local ui_set_ledbit_req = ioctl_mod.ioctl_req(false, true, 85, 105, ffi.sizeof("int"))
   1239 function ioctls.ui_set_ledbit(fd, x0)
   1240   local arg = ctype_int(x0)
   1241   local res = ioctl(fd, ui_set_ledbit_req, arg)
   1242   return res
   1243 end
   1244 local ui_set_sndbit_req = ioctl_mod.ioctl_req(false, true, 85, 106, ffi.sizeof("int"))
   1245 function ioctls.ui_set_sndbit(fd, x0)
   1246   local arg = ctype_int(x0)
   1247   local res = ioctl(fd, ui_set_sndbit_req, arg)
   1248   return res
   1249 end
   1250 local ui_set_ffbit_req = ioctl_mod.ioctl_req(false, true, 85, 107, ffi.sizeof("int"))
   1251 function ioctls.ui_set_ffbit(fd, x0)
   1252   local arg = ctype_int(x0)
   1253   local res = ioctl(fd, ui_set_ffbit_req, arg)
   1254   return res
   1255 end
   1256 local ui_set_phys_req = ioctl_mod.ioctl_req(false, true, 85, 108, ffi.sizeof("char*"))
   1257 function ioctls.ui_set_phys(fd, str)
   1258   local res = ioctl(fd, ui_set_phys_req, tostring(str))
   1259   return res
   1260 end
   1261 local ui_set_swbit_req = ioctl_mod.ioctl_req(false, true, 85, 109, ffi.sizeof("int"))
   1262 function ioctls.ui_set_swbit(fd, x0)
   1263   local arg = ctype_int(x0)
   1264   local res = ioctl(fd, ui_set_swbit_req, arg)
   1265   return res
   1266 end
   1267 local ui_set_propbit_req = ioctl_mod.ioctl_req(false, true, 85, 110, ffi.sizeof("int"))
   1268 function ioctls.ui_set_propbit(fd, x0)
   1269   local arg = ctype_int(x0)
   1270   local res = ioctl(fd, ui_set_propbit_req, arg)
   1271   return res
   1272 end
   1273 local ui_begin_ff_upload_req = ioctl_mod.ioctl_req(true, true, 85, 200, ffi.sizeof("struct uinput_ff_upload"))
   1274 function ioctls.ui_begin_ff_upload(fd, x0)
   1275   local arg = ctype_struct_20uinput_5fff_5fupload_2a(x0)
   1276   local res = ioctl(fd, ui_begin_ff_upload_req, arg)
   1277   return res, arg[0]
   1278 end
   1279 local ui_end_ff_upload_req = ioctl_mod.ioctl_req(false, true, 85, 201, ffi.sizeof("struct uinput_ff_upload"))
   1280 function ioctls.ui_end_ff_upload(fd, x0)
   1281   local arg = ctype_struct_20uinput_5fff_5fupload_2a(x0)
   1282   local res = ioctl(fd, ui_end_ff_upload_req, arg)
   1283   return res
   1284 end
   1285 local ui_begin_ff_erase_req = ioctl_mod.ioctl_req(true, true, 85, 202, ffi.sizeof("struct uinput_ff_erase"))
   1286 function ioctls.ui_begin_ff_erase(fd, x0)
   1287   local arg = ctype_struct_20uinput_5fff_5ferase_2a(x0)
   1288   local res = ioctl(fd, ui_begin_ff_erase_req, arg)
   1289   return res, arg[0]
   1290 end
   1291 local ui_end_ff_erase_req = ioctl_mod.ioctl_req(false, true, 85, 203, ffi.sizeof("struct uinput_ff_erase"))
   1292 function ioctls.ui_end_ff_erase(fd, x0)
   1293   local arg = ctype_struct_20uinput_5fff_5ferase_2a(x0)
   1294   local res = ioctl(fd, ui_end_ff_erase_req, arg)
   1295   return res
   1296 end
   1297 local ui_get_sysname_req = ioctl_mod.ioctl_req(true, false, 85, 44, 0)
   1298 function ioctls.ui_get_sysname(fd, arg, len)
   1299   len = len or ffi_sizeof(arg)
   1300   local res = ioctl(fd, ui_get_sysname_req + lshift(len, sizeshift), ffi_cast(ctype_void_2a, arg))
   1301   return res
   1302 end
   1303 local ui_get_version_req = ioctl_mod.ioctl_req(true, false, 85, 45, ffi.sizeof("unsigned int"))
   1304 function ioctls.ui_get_version(fd)
   1305   local arg = ctype_unsigned_20int_5b1_5d()
   1306   local res = ioctl(fd, ui_get_version_req, arg)
   1307   return res, arg[0]
   1308 end
   1309 
   1310 return {enums=enums, ioctls=ioctls}