input-linux-sys-0.9.0/.cargo_vcs_info.json0000644000000001360000000000100141520ustar { "git": { "sha1": "b39046ceb4d6ae3369e7a101484b5df9cf02f5eb" }, "path_in_vcs": "" }input-linux-sys-0.9.0/COPYING000064400000000000000000000021331046102023000137740ustar 00000000000000Copyright (c) 2015-2017 Corey Richardson Copyright (c) 2016 meh. Copyright (c) 2017 arcnmx Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. input-linux-sys-0.9.0/Cargo.toml0000644000000023120000000000100121460ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2018" name = "input-linux-sys" version = "0.9.0" authors = [ "arcnmx", "meh. ", "Corey Richardson ", ] build = false include = [ "src/**/*.rs", "/README*", "/COPYING*", ] autobins = false autoexamples = false autotests = false autobenches = false description = "Bindings for " documentation = "https://docs.rs/input-linux-sys/*/input_linux_sys" readme = "README.md" keywords = [ "linux", "input", "evdev", "uinput", ] license = "MIT" repository = "https://github.com/arcnmx/input-linux-sys-rs" [lib] name = "input_linux_sys" path = "src/lib.rs" [dependencies.libc] version = "0.2" [dependencies.nix] version = "0.29" features = ["ioctl"] input-linux-sys-0.9.0/Cargo.toml.orig000064400000000000000000000010601046102023000156260ustar 00000000000000[package] name = "input-linux-sys" version = "0.9.0" authors = ["arcnmx", "meh. ", "Corey Richardson "] edition = "2018" description = "Bindings for " keywords = ["linux", "input", "evdev", "uinput"] documentation = "https://docs.rs/input-linux-sys/*/input_linux_sys" repository = "https://github.com/arcnmx/input-linux-sys-rs" readme = "README.md" license = "MIT" include = [ "src/**/*.rs", "/README*", "/COPYING*", ] [dependencies] libc = "0.2" nix = { version = "0.29", features = ["ioctl"] } input-linux-sys-0.9.0/README.md000064400000000000000000000014631046102023000142250ustar 00000000000000# input-linux-sys [![release-badge][]][cargo] [![docs-badge][]][docs] [![license-badge][]][license] Rust bindings to uinput and evdev from `` A combination of [rust-uinput-sys](https://github.com/meh/rust-uinput-sys) and [evdev/raw.rs](https://github.com/cmr/evdev). ## [Documentation][docs] See the [documentation][docs] for up to date API documentation. [release-badge]: https://img.shields.io/crates/v/input_linux_sys.svg?style=flat-square [cargo]: https://crates.io/crates/input_linux_sys [docs-badge]: https://img.shields.io/badge/API-docs-blue.svg?style=flat-square [docs]: https://docs.rs/input-linux-sys/*/input_linux_sys/ [license-badge]: https://img.shields.io/badge/license-MIT-ff69b4.svg?style=flat-square [license]: https://github.com/arcnmx/input-linux-sys-rs/blob/master/COPYING input-linux-sys-0.9.0/src/events.rs000064400000000000000000001212251046102023000154060ustar 00000000000000use libc::c_int; pub const INPUT_PROP_POINTER: c_int = 0x00; /* needs a pointer */ pub const INPUT_PROP_DIRECT: c_int = 0x01; /* direct input devices */ pub const INPUT_PROP_BUTTONPAD: c_int = 0x02; /* has button: c_int = s under pad */ pub const INPUT_PROP_SEMI_MT: c_int = 0x03; /* touch rectangle only */ pub const INPUT_PROP_TOPBUTTONPAD: c_int = 0x04; /* softbuttons at top of pad */ pub const INPUT_PROP_POINTING_STICK: c_int = 0x05; /* is a pointing stick */ pub const INPUT_PROP_ACCELEROMETER: c_int = 0x06; /* has accelerometer */ pub const INPUT_PROP_MAX: c_int = 0x1f; pub const INPUT_PROP_CNT: c_int = INPUT_PROP_MAX + 1; /* * Event types */ pub const EV_SYN: c_int = 0x00; pub const EV_KEY: c_int = 0x01; pub const EV_REL: c_int = 0x02; pub const EV_ABS: c_int = 0x03; pub const EV_MSC: c_int = 0x04; pub const EV_SW: c_int = 0x05; pub const EV_LED: c_int = 0x11; pub const EV_SND: c_int = 0x12; pub const EV_REP: c_int = 0x14; pub const EV_FF: c_int = 0x15; pub const EV_PWR: c_int = 0x16; pub const EV_FF_STATUS: c_int = 0x17; pub const EV_MAX: c_int = 0x1f; pub const EV_CNT: c_int = EV_MAX + 1; /* * Synchronization events. */ pub const SYN_REPORT: c_int = 0; pub const SYN_CONFIG: c_int = 1; pub const SYN_MT_REPORT: c_int = 2; pub const SYN_DROPPED: c_int = 3; pub const SYN_MAX: c_int = 0xf; pub const SYN_CNT: c_int = SYN_MAX + 1; /* * Keys and buttons * * Most of the keys/buttons are modeled after USB HUT 1.12 (see * http://www.usb.org/developers/hidpage). * Abbreviations in the comments: * AC - Application Control * AL - Application Launch Button * SC - System Control */ pub const KEY_RESERVED: c_int = 0; pub const KEY_ESC: c_int = 1; pub const KEY_1: c_int = 2; pub const KEY_2: c_int = 3; pub const KEY_3: c_int = 4; pub const KEY_4: c_int = 5; pub const KEY_5: c_int = 6; pub const KEY_6: c_int = 7; pub const KEY_7: c_int = 8; pub const KEY_8: c_int = 9; pub const KEY_9: c_int = 10; pub const KEY_0: c_int = 11; pub const KEY_MINUS: c_int = 12; pub const KEY_EQUAL: c_int = 13; pub const KEY_BACKSPACE: c_int = 14; pub const KEY_TAB: c_int = 15; pub const KEY_Q: c_int = 16; pub const KEY_W: c_int = 17; pub const KEY_E: c_int = 18; pub const KEY_R: c_int = 19; pub const KEY_T: c_int = 20; pub const KEY_Y: c_int = 21; pub const KEY_U: c_int = 22; pub const KEY_I: c_int = 23; pub const KEY_O: c_int = 24; pub const KEY_P: c_int = 25; pub const KEY_LEFTBRACE: c_int = 26; pub const KEY_RIGHTBRACE: c_int = 27; pub const KEY_ENTER: c_int = 28; pub const KEY_LEFTCTRL: c_int = 29; pub const KEY_A: c_int = 30; pub const KEY_S: c_int = 31; pub const KEY_D: c_int = 32; pub const KEY_F: c_int = 33; pub const KEY_G: c_int = 34; pub const KEY_H: c_int = 35; pub const KEY_J: c_int = 36; pub const KEY_K: c_int = 37; pub const KEY_L: c_int = 38; pub const KEY_SEMICOLON: c_int = 39; pub const KEY_APOSTROPHE: c_int = 40; pub const KEY_GRAVE: c_int = 41; pub const KEY_LEFTSHIFT: c_int = 42; pub const KEY_BACKSLASH: c_int = 43; pub const KEY_Z: c_int = 44; pub const KEY_X: c_int = 45; pub const KEY_C: c_int = 46; pub const KEY_V: c_int = 47; pub const KEY_B: c_int = 48; pub const KEY_N: c_int = 49; pub const KEY_M: c_int = 50; pub const KEY_COMMA: c_int = 51; pub const KEY_DOT: c_int = 52; pub const KEY_SLASH: c_int = 53; pub const KEY_RIGHTSHIFT: c_int = 54; pub const KEY_KPASTERISK: c_int = 55; pub const KEY_LEFTALT: c_int = 56; pub const KEY_SPACE: c_int = 57; pub const KEY_CAPSLOCK: c_int = 58; pub const KEY_F1: c_int = 59; pub const KEY_F2: c_int = 60; pub const KEY_F3: c_int = 61; pub const KEY_F4: c_int = 62; pub const KEY_F5: c_int = 63; pub const KEY_F6: c_int = 64; pub const KEY_F7: c_int = 65; pub const KEY_F8: c_int = 66; pub const KEY_F9: c_int = 67; pub const KEY_F10: c_int = 68; pub const KEY_NUMLOCK: c_int = 69; pub const KEY_SCROLLLOCK: c_int = 70; pub const KEY_KP7: c_int = 71; pub const KEY_KP8: c_int = 72; pub const KEY_KP9: c_int = 73; pub const KEY_KPMINUS: c_int = 74; pub const KEY_KP4: c_int = 75; pub const KEY_KP5: c_int = 76; pub const KEY_KP6: c_int = 77; pub const KEY_KPPLUS: c_int = 78; pub const KEY_KP1: c_int = 79; pub const KEY_KP2: c_int = 80; pub const KEY_KP3: c_int = 81; pub const KEY_KP0: c_int = 82; pub const KEY_KPDOT: c_int = 83; pub const KEY_ZENKAKUHANKAKU: c_int = 85; pub const KEY_102ND: c_int = 86; pub const KEY_F11: c_int = 87; pub const KEY_F12: c_int = 88; pub const KEY_RO: c_int = 89; pub const KEY_KATAKANA: c_int = 90; pub const KEY_HIRAGANA: c_int = 91; pub const KEY_HENKAN: c_int = 92; pub const KEY_KATAKANAHIRAGANA: c_int = 93; pub const KEY_MUHENKAN: c_int = 94; pub const KEY_KPJPCOMMA: c_int = 95; pub const KEY_KPENTER: c_int = 96; pub const KEY_RIGHTCTRL: c_int = 97; pub const KEY_KPSLASH: c_int = 98; pub const KEY_SYSRQ: c_int = 99; pub const KEY_RIGHTALT: c_int = 100; pub const KEY_LINEFEED: c_int = 101; pub const KEY_HOME: c_int = 102; pub const KEY_UP: c_int = 103; pub const KEY_PAGEUP: c_int = 104; pub const KEY_LEFT: c_int = 105; pub const KEY_RIGHT: c_int = 106; pub const KEY_END: c_int = 107; pub const KEY_DOWN: c_int = 108; pub const KEY_PAGEDOWN: c_int = 109; pub const KEY_INSERT: c_int = 110; pub const KEY_DELETE: c_int = 111; pub const KEY_MACRO: c_int = 112; pub const KEY_MUTE: c_int = 113; pub const KEY_VOLUMEDOWN: c_int = 114; pub const KEY_VOLUMEUP: c_int = 115; pub const KEY_POWER: c_int = 116; /* SC System Power Down */ pub const KEY_KPEQUAL: c_int = 117; pub const KEY_KPPLUSMINUS: c_int = 118; pub const KEY_PAUSE: c_int = 119; pub const KEY_SCALE: c_int = 120; /* AL Compiz Scale : c_int = Expose */ pub const KEY_KPCOMMA: c_int = 121; pub const KEY_HANGEUL: c_int = 122; pub const KEY_HANGUEL: c_int = KEY_HANGEUL; pub const KEY_HANJA: c_int = 123; pub const KEY_YEN: c_int = 124; pub const KEY_LEFTMETA: c_int = 125; pub const KEY_RIGHTMETA: c_int = 126; pub const KEY_COMPOSE: c_int = 127; pub const KEY_STOP: c_int = 128; /* AC Stop */ pub const KEY_AGAIN: c_int = 129; pub const KEY_PROPS: c_int = 130; /* AC Properties */ pub const KEY_UNDO: c_int = 131; /* AC Undo */ pub const KEY_FRONT: c_int = 132; pub const KEY_COPY: c_int = 133; /* AC Copy */ pub const KEY_OPEN: c_int = 134; /* AC Open */ pub const KEY_PASTE: c_int = 135; /* AC Paste */ pub const KEY_FIND: c_int = 136; /* AC Search */ pub const KEY_CUT: c_int = 137; /* AC Cut */ pub const KEY_HELP: c_int = 138; /* AL Integrated Help Center */ pub const KEY_MENU: c_int = 139; /* Menu : c_int = show menu */ pub const KEY_CALC: c_int = 140; /* AL Calculator */ pub const KEY_SETUP: c_int = 141; pub const KEY_SLEEP: c_int = 142; /* SC System Sleep */ pub const KEY_WAKEUP: c_int = 143; /* System Wake Up */ pub const KEY_FILE: c_int = 144; /* AL Local Machine Browser */ pub const KEY_SENDFILE: c_int = 145; pub const KEY_DELETEFILE: c_int = 146; pub const KEY_XFER: c_int = 147; pub const KEY_PROG1: c_int = 148; pub const KEY_PROG2: c_int = 149; pub const KEY_WWW: c_int = 150; /* AL Internet Browser */ pub const KEY_MSDOS: c_int = 151; pub const KEY_COFFEE: c_int = 152; /* AL Terminal Lock/Screensaver */ pub const KEY_SCREENLOCK: c_int = KEY_COFFEE; pub const KEY_ROTATE_DISPLAY: c_int = 153; /* Display orientation for e.g. tablets */ pub const KEY_DIRECTION: c_int = KEY_ROTATE_DISPLAY; pub const KEY_CYCLEWINDOWS: c_int = 154; pub const KEY_MAIL: c_int = 155; pub const KEY_BOOKMARKS: c_int = 156; /* AC Bookmarks */ pub const KEY_COMPUTER: c_int = 157; pub const KEY_BACK: c_int = 158; /* AC Back */ pub const KEY_FORWARD: c_int = 159; /* AC Forward */ pub const KEY_CLOSECD: c_int = 160; pub const KEY_EJECTCD: c_int = 161; pub const KEY_EJECTCLOSECD: c_int = 162; pub const KEY_NEXTSONG: c_int = 163; pub const KEY_PLAYPAUSE: c_int = 164; pub const KEY_PREVIOUSSONG: c_int = 165; pub const KEY_STOPCD: c_int = 166; pub const KEY_RECORD: c_int = 167; pub const KEY_REWIND: c_int = 168; pub const KEY_PHONE: c_int = 169; /* Media Select Telephone */ pub const KEY_ISO: c_int = 170; pub const KEY_CONFIG: c_int = 171; /* AL Consumer Control Configuration */ pub const KEY_HOMEPAGE: c_int = 172; /* AC Home */ pub const KEY_REFRESH: c_int = 173; /* AC Refresh */ pub const KEY_EXIT: c_int = 174; /* AC Exit */ pub const KEY_MOVE: c_int = 175; pub const KEY_EDIT: c_int = 176; pub const KEY_SCROLLUP: c_int = 177; pub const KEY_SCROLLDOWN: c_int = 178; pub const KEY_KPLEFTPAREN: c_int = 179; pub const KEY_KPRIGHTPAREN: c_int = 180; pub const KEY_NEW: c_int = 181; /* AC New */ pub const KEY_REDO: c_int = 182; /* AC Redo/Repeat */ pub const KEY_F13: c_int = 183; pub const KEY_F14: c_int = 184; pub const KEY_F15: c_int = 185; pub const KEY_F16: c_int = 186; pub const KEY_F17: c_int = 187; pub const KEY_F18: c_int = 188; pub const KEY_F19: c_int = 189; pub const KEY_F20: c_int = 190; pub const KEY_F21: c_int = 191; pub const KEY_F22: c_int = 192; pub const KEY_F23: c_int = 193; pub const KEY_F24: c_int = 194; pub const KEY_PLAYCD: c_int = 200; pub const KEY_PAUSECD: c_int = 201; pub const KEY_PROG3: c_int = 202; pub const KEY_PROG4: c_int = 203; pub const KEY_ALL_APPLICATIONS: c_int = 204; /* AC Desktop Show All Applications */ pub const KEY_DASHBOARD: c_int = KEY_ALL_APPLICATIONS; /* AL Dashboard */ pub const KEY_SUSPEND: c_int = 205; pub const KEY_CLOSE: c_int = 206; /* AC Close */ pub const KEY_PLAY: c_int = 207; pub const KEY_FASTFORWARD: c_int = 208; pub const KEY_BASSBOOST: c_int = 209; pub const KEY_PRINT: c_int = 210; /* AC Print */ pub const KEY_HP: c_int = 211; pub const KEY_CAMERA: c_int = 212; pub const KEY_SOUND: c_int = 213; pub const KEY_QUESTION: c_int = 214; pub const KEY_EMAIL: c_int = 215; pub const KEY_CHAT: c_int = 216; pub const KEY_SEARCH: c_int = 217; pub const KEY_CONNECT: c_int = 218; pub const KEY_FINANCE: c_int = 219; /* AL Checkbook/Finance */ pub const KEY_SPORT: c_int = 220; pub const KEY_SHOP: c_int = 221; pub const KEY_ALTERASE: c_int = 222; pub const KEY_CANCEL: c_int = 223; /* AC Cancel */ pub const KEY_BRIGHTNESSDOWN: c_int = 224; pub const KEY_BRIGHTNESSUP: c_int = 225; pub const KEY_MEDIA: c_int = 226; pub const KEY_SWITCHVIDEOMODE: c_int = 227; /* Cycle between available video outputs (Monitor/LCD/TV-out/etc) */ pub const KEY_KBDILLUMTOGGLE: c_int = 228; pub const KEY_KBDILLUMDOWN: c_int = 229; pub const KEY_KBDILLUMUP: c_int = 230; pub const KEY_SEND: c_int = 231; /* AC Send */ pub const KEY_REPLY: c_int = 232; /* AC Reply */ pub const KEY_FORWARDMAIL: c_int = 233; /* AC Forward Msg */ pub const KEY_SAVE: c_int = 234; /* AC Save */ pub const KEY_DOCUMENTS: c_int = 235; pub const KEY_BATTERY: c_int = 236; pub const KEY_BLUETOOTH: c_int = 237; pub const KEY_WLAN: c_int = 238; pub const KEY_UWB: c_int = 239; pub const KEY_UNKNOWN: c_int = 240; pub const KEY_VIDEO_NEXT: c_int = 241; /* drive next video source */ pub const KEY_VIDEO_PREV: c_int = 242; /* drive previous video source */ pub const KEY_BRIGHTNESS_CYCLE: c_int = 243; /* brightness up, after max is min */ pub const KEY_BRIGHTNESS_AUTO: c_int = 244; /* Set Auto Brightness: manual brightness control is off, rely on ambient */ pub const KEY_BRIGHTNESS_ZERO: c_int = KEY_BRIGHTNESS_AUTO; pub const KEY_DISPLAY_OFF: c_int = 245; /* display device to off state */ pub const KEY_WWAN: c_int = 246; /* Wireless WAN : c_int = LTE, UMTS, GSM, etc. */ pub const KEY_WIMAX: c_int = KEY_WWAN; pub const KEY_RFKILL: c_int = 247; /* Key that controls all radios */ pub const KEY_MICMUTE: c_int = 248; /* Mute / unmute the microphone */ /* Code 255 is reserved for special needs of AT keyboard driver */ pub const BTN_MISC: c_int = 0x100; pub const BTN_0: c_int = 0x100; pub const BTN_1: c_int = 0x101; pub const BTN_2: c_int = 0x102; pub const BTN_3: c_int = 0x103; pub const BTN_4: c_int = 0x104; pub const BTN_5: c_int = 0x105; pub const BTN_6: c_int = 0x106; pub const BTN_7: c_int = 0x107; pub const BTN_8: c_int = 0x108; pub const BTN_9: c_int = 0x109; pub const BTN_MOUSE: c_int = 0x110; pub const BTN_LEFT: c_int = 0x110; pub const BTN_RIGHT: c_int = 0x111; pub const BTN_MIDDLE: c_int = 0x112; pub const BTN_SIDE: c_int = 0x113; pub const BTN_EXTRA: c_int = 0x114; pub const BTN_FORWARD: c_int = 0x115; pub const BTN_BACK: c_int = 0x116; pub const BTN_TASK: c_int = 0x117; pub const BTN_JOYSTICK: c_int = 0x120; pub const BTN_TRIGGER: c_int = 0x120; pub const BTN_THUMB: c_int = 0x121; pub const BTN_THUMB2: c_int = 0x122; pub const BTN_TOP: c_int = 0x123; pub const BTN_TOP2: c_int = 0x124; pub const BTN_PINKIE: c_int = 0x125; pub const BTN_BASE: c_int = 0x126; pub const BTN_BASE2: c_int = 0x127; pub const BTN_BASE3: c_int = 0x128; pub const BTN_BASE4: c_int = 0x129; pub const BTN_BASE5: c_int = 0x12a; pub const BTN_BASE6: c_int = 0x12b; pub const BTN_DEAD: c_int = 0x12f; pub const BTN_GAMEPAD: c_int = 0x130; pub const BTN_SOUTH: c_int = 0x130; pub const BTN_A: c_int = BTN_SOUTH; pub const BTN_EAST: c_int = 0x131; pub const BTN_B: c_int = BTN_EAST; pub const BTN_C: c_int = 0x132; pub const BTN_NORTH: c_int = 0x133; pub const BTN_X: c_int = BTN_NORTH; pub const BTN_WEST: c_int = 0x134; pub const BTN_Y: c_int = BTN_WEST; pub const BTN_Z: c_int = 0x135; pub const BTN_TL: c_int = 0x136; pub const BTN_TR: c_int = 0x137; pub const BTN_TL2: c_int = 0x138; pub const BTN_TR2: c_int = 0x139; pub const BTN_SELECT: c_int = 0x13a; pub const BTN_START: c_int = 0x13b; pub const BTN_MODE: c_int = 0x13c; pub const BTN_THUMBL: c_int = 0x13d; pub const BTN_THUMBR: c_int = 0x13e; pub const BTN_DIGI: c_int = 0x140; pub const BTN_TOOL_PEN: c_int = 0x140; pub const BTN_TOOL_RUBBER: c_int = 0x141; pub const BTN_TOOL_BRUSH: c_int = 0x142; pub const BTN_TOOL_PENCIL: c_int = 0x143; pub const BTN_TOOL_AIRBRUSH: c_int = 0x144; pub const BTN_TOOL_FINGER: c_int = 0x145; pub const BTN_TOOL_MOUSE: c_int = 0x146; pub const BTN_TOOL_LENS: c_int = 0x147; pub const BTN_TOOL_QUINTTAP: c_int = 0x148; /* Five fingers on trackpad */ pub const BTN_STYLUS3: c_int = 0x149; pub const BTN_TOUCH: c_int = 0x14a; pub const BTN_STYLUS: c_int = 0x14b; pub const BTN_STYLUS2: c_int = 0x14c; pub const BTN_TOOL_DOUBLETAP: c_int = 0x14d; pub const BTN_TOOL_TRIPLETAP: c_int = 0x14e; pub const BTN_TOOL_QUADTAP: c_int = 0x14f; /* Four fingers on trackpad */ pub const BTN_WHEEL: c_int = 0x150; pub const BTN_GEAR_DOWN: c_int = 0x150; pub const BTN_GEAR_UP: c_int = 0x151; pub const KEY_OK: c_int = 0x160; pub const KEY_SELECT: c_int = 0x161; pub const KEY_GOTO: c_int = 0x162; pub const KEY_CLEAR: c_int = 0x163; pub const KEY_POWER2: c_int = 0x164; pub const KEY_OPTION: c_int = 0x165; pub const KEY_INFO: c_int = 0x166; /* AL OEM Features/Tips/Tutorial */ pub const KEY_TIME: c_int = 0x167; pub const KEY_VENDOR: c_int = 0x168; pub const KEY_ARCHIVE: c_int = 0x169; pub const KEY_PROGRAM: c_int = 0x16a; /* Media Select Program Guide */ pub const KEY_CHANNEL: c_int = 0x16b; pub const KEY_FAVORITES: c_int = 0x16c; pub const KEY_EPG: c_int = 0x16d; pub const KEY_PVR: c_int = 0x16e; /* Media Select Home */ pub const KEY_MHP: c_int = 0x16f; pub const KEY_LANGUAGE: c_int = 0x170; pub const KEY_TITLE: c_int = 0x171; pub const KEY_SUBTITLE: c_int = 0x172; pub const KEY_ANGLE: c_int = 0x173; pub const KEY_FULL_SCREEN: c_int = 0x174; /* AC View Toggle */ pub const KEY_ZOOM: c_int = KEY_FULL_SCREEN; pub const KEY_MODE: c_int = 0x175; pub const KEY_KEYBOARD: c_int = 0x176; pub const KEY_ASPECT_RATIO: c_int = 0x177; /* HUTRR37: Aspect */ pub const KEY_SCREEN: c_int = KEY_ASPECT_RATIO; pub const KEY_PC: c_int = 0x178; /* Media Select Computer */ pub const KEY_TV: c_int = 0x179; /* Media Select TV */ pub const KEY_TV2: c_int = 0x17a; /* Media Select Cable */ pub const KEY_VCR: c_int = 0x17b; /* Media Select VCR */ pub const KEY_VCR2: c_int = 0x17c; /* VCR Plus */ pub const KEY_SAT: c_int = 0x17d; /* Media Select Satellite */ pub const KEY_SAT2: c_int = 0x17e; pub const KEY_CD: c_int = 0x17f; /* Media Select CD */ pub const KEY_TAPE: c_int = 0x180; /* Media Select Tape */ pub const KEY_RADIO: c_int = 0x181; pub const KEY_TUNER: c_int = 0x182; /* Media Select Tuner */ pub const KEY_PLAYER: c_int = 0x183; pub const KEY_TEXT: c_int = 0x184; pub const KEY_DVD: c_int = 0x185; /* Media Select DVD */ pub const KEY_AUX: c_int = 0x186; pub const KEY_MP3: c_int = 0x187; pub const KEY_AUDIO: c_int = 0x188; /* AL Audio Browser */ pub const KEY_VIDEO: c_int = 0x189; /* AL Movie Browser */ pub const KEY_DIRECTORY: c_int = 0x18a; pub const KEY_LIST: c_int = 0x18b; pub const KEY_MEMO: c_int = 0x18c; /* Media Select Messages */ pub const KEY_CALENDAR: c_int = 0x18d; pub const KEY_RED: c_int = 0x18e; pub const KEY_GREEN: c_int = 0x18f; pub const KEY_YELLOW: c_int = 0x190; pub const KEY_BLUE: c_int = 0x191; pub const KEY_CHANNELUP: c_int = 0x192; /* Channel Increment */ pub const KEY_CHANNELDOWN: c_int = 0x193; /* Channel Decrement */ pub const KEY_FIRST: c_int = 0x194; pub const KEY_LAST: c_int = 0x195; /* Recall Last */ pub const KEY_AB: c_int = 0x196; pub const KEY_NEXT: c_int = 0x197; pub const KEY_RESTART: c_int = 0x198; pub const KEY_SLOW: c_int = 0x199; pub const KEY_SHUFFLE: c_int = 0x19a; pub const KEY_BREAK: c_int = 0x19b; pub const KEY_PREVIOUS: c_int = 0x19c; pub const KEY_DIGITS: c_int = 0x19d; pub const KEY_TEEN: c_int = 0x19e; pub const KEY_TWEN: c_int = 0x19f; pub const KEY_VIDEOPHONE: c_int = 0x1a0; /* Media Select Video Phone */ pub const KEY_GAMES: c_int = 0x1a1; /* Media Select Games */ pub const KEY_ZOOMIN: c_int = 0x1a2; /* AC Zoom In */ pub const KEY_ZOOMOUT: c_int = 0x1a3; /* AC Zoom Out */ pub const KEY_ZOOMRESET: c_int = 0x1a4; /* AC Zoom */ pub const KEY_WORDPROCESSOR: c_int = 0x1a5; /* AL Word Processor */ pub const KEY_EDITOR: c_int = 0x1a6; /* AL Text Editor */ pub const KEY_SPREADSHEET: c_int = 0x1a7; /* AL Spreadsheet */ pub const KEY_GRAPHICSEDITOR: c_int = 0x1a8; /* AL Graphics Editor */ pub const KEY_PRESENTATION: c_int = 0x1a9; /* AL Presentation App */ pub const KEY_DATABASE: c_int = 0x1aa; /* AL Database App */ pub const KEY_NEWS: c_int = 0x1ab; /* AL Newsreader */ pub const KEY_VOICEMAIL: c_int = 0x1ac; /* AL Voicemail */ pub const KEY_ADDRESSBOOK: c_int = 0x1ad; /* AL Contacts/Address Book */ pub const KEY_MESSENGER: c_int = 0x1ae; /* AL Instant Messaging */ pub const KEY_DISPLAYTOGGLE: c_int = 0x1af; /* Turn display : c_int = LCD on and off */ pub const KEY_BRIGHTNESS_TOGGLE: c_int = KEY_DISPLAYTOGGLE; pub const KEY_SPELLCHECK: c_int = 0x1b0; /* AL Spell Check */ pub const KEY_LOGOFF: c_int = 0x1b1; /* AL Logoff */ pub const KEY_DOLLAR: c_int = 0x1b2; pub const KEY_EURO: c_int = 0x1b3; pub const KEY_FRAMEBACK: c_int = 0x1b4; /* Consumer - transport controls */ pub const KEY_FRAMEFORWARD: c_int = 0x1b5; pub const KEY_CONTEXT_MENU: c_int = 0x1b6; /* GenDesc - system context menu */ pub const KEY_MEDIA_REPEAT: c_int = 0x1b7; /* Consumer - transport control */ pub const KEY_10CHANNELSUP: c_int = 0x1b8; /* 10 channels up : c_int = 10+ */ pub const KEY_10CHANNELSDOWN: c_int = 0x1b9; /* 10 channels down : c_int = 10- */ pub const KEY_IMAGES: c_int = 0x1ba; /* AL Image Browser */ pub const KEY_NOTIFICATION_CENTER: c_int = 0x1bc; /* Show/hide the notification center */ pub const KEY_PICKUP_PHONE: c_int = 0x1bd; /* Answer incoming call */ pub const KEY_HANGUP_PHONE: c_int = 0x1be; /* Decline incoming call */ pub const KEY_DEL_EOL: c_int = 0x1c0; pub const KEY_DEL_EOS: c_int = 0x1c1; pub const KEY_INS_LINE: c_int = 0x1c2; pub const KEY_DEL_LINE: c_int = 0x1c3; pub const KEY_FN: c_int = 0x1d0; pub const KEY_FN_ESC: c_int = 0x1d1; pub const KEY_FN_F1: c_int = 0x1d2; pub const KEY_FN_F2: c_int = 0x1d3; pub const KEY_FN_F3: c_int = 0x1d4; pub const KEY_FN_F4: c_int = 0x1d5; pub const KEY_FN_F5: c_int = 0x1d6; pub const KEY_FN_F6: c_int = 0x1d7; pub const KEY_FN_F7: c_int = 0x1d8; pub const KEY_FN_F8: c_int = 0x1d9; pub const KEY_FN_F9: c_int = 0x1da; pub const KEY_FN_F10: c_int = 0x1db; pub const KEY_FN_F11: c_int = 0x1dc; pub const KEY_FN_F12: c_int = 0x1dd; pub const KEY_FN_1: c_int = 0x1de; pub const KEY_FN_2: c_int = 0x1df; pub const KEY_FN_D: c_int = 0x1e0; pub const KEY_FN_E: c_int = 0x1e1; pub const KEY_FN_F: c_int = 0x1e2; pub const KEY_FN_S: c_int = 0x1e3; pub const KEY_FN_B: c_int = 0x1e4; pub const KEY_FN_RIGHT_SHIFT: c_int = 0x1e5; pub const KEY_BRL_DOT1: c_int = 0x1f1; pub const KEY_BRL_DOT2: c_int = 0x1f2; pub const KEY_BRL_DOT3: c_int = 0x1f3; pub const KEY_BRL_DOT4: c_int = 0x1f4; pub const KEY_BRL_DOT5: c_int = 0x1f5; pub const KEY_BRL_DOT6: c_int = 0x1f6; pub const KEY_BRL_DOT7: c_int = 0x1f7; pub const KEY_BRL_DOT8: c_int = 0x1f8; pub const KEY_BRL_DOT9: c_int = 0x1f9; pub const KEY_BRL_DOT10: c_int = 0x1fa; pub const KEY_NUMERIC_0: c_int = 0x200; /* used by phones, remote controls, */ pub const KEY_NUMERIC_1: c_int = 0x201; /* and other keypads */ pub const KEY_NUMERIC_2: c_int = 0x202; pub const KEY_NUMERIC_3: c_int = 0x203; pub const KEY_NUMERIC_4: c_int = 0x204; pub const KEY_NUMERIC_5: c_int = 0x205; pub const KEY_NUMERIC_6: c_int = 0x206; pub const KEY_NUMERIC_7: c_int = 0x207; pub const KEY_NUMERIC_8: c_int = 0x208; pub const KEY_NUMERIC_9: c_int = 0x209; pub const KEY_NUMERIC_STAR: c_int = 0x20a; pub const KEY_NUMERIC_POUND: c_int = 0x20b; pub const KEY_NUMERIC_A: c_int = 0x20c; /* Phone key A - HUT Telephony 0xb9 */ pub const KEY_NUMERIC_B: c_int = 0x20d; pub const KEY_NUMERIC_C: c_int = 0x20e; pub const KEY_NUMERIC_D: c_int = 0x20f; pub const KEY_CAMERA_FOCUS: c_int = 0x210; pub const KEY_WPS_BUTTON: c_int = 0x211; /* WiFi Protected Setup key */ pub const KEY_TOUCHPAD_TOGGLE: c_int = 0x212; /* Request switch touchpad on or off */ pub const KEY_TOUCHPAD_ON: c_int = 0x213; pub const KEY_TOUCHPAD_OFF: c_int = 0x214; pub const KEY_CAMERA_ZOOMIN: c_int = 0x215; pub const KEY_CAMERA_ZOOMOUT: c_int = 0x216; pub const KEY_CAMERA_UP: c_int = 0x217; pub const KEY_CAMERA_DOWN: c_int = 0x218; pub const KEY_CAMERA_LEFT: c_int = 0x219; pub const KEY_CAMERA_RIGHT: c_int = 0x21a; pub const KEY_ATTENDANT_ON: c_int = 0x21b; pub const KEY_ATTENDANT_OFF: c_int = 0x21c; pub const KEY_ATTENDANT_TOGGLE: c_int = 0x21d; /* Attendant call on or off */ pub const KEY_LIGHTS_TOGGLE: c_int = 0x21e; /* Reading light on or off */ pub const BTN_DPAD_UP: c_int = 0x220; pub const BTN_DPAD_DOWN: c_int = 0x221; pub const BTN_DPAD_LEFT: c_int = 0x222; pub const BTN_DPAD_RIGHT: c_int = 0x223; pub const KEY_ALS_TOGGLE: c_int = 0x230; /* Ambient light sensor */ pub const KEY_ROTATE_LOCK_TOGGLE: c_int = 0x231; /* Display rotation lock */ pub const KEY_REFRESH_RATE_TOGGLE: c_int = 0x232; /* Display refresh rate toggle */ pub const KEY_BUTTONCONFIG: c_int = 0x240; /* AL Button Configuration */ pub const KEY_TASKMANAGER: c_int = 0x241; /* AL Task/Project Manager */ pub const KEY_JOURNAL: c_int = 0x242; /* AL Log/Journal/Timecard */ pub const KEY_CONTROLPANEL: c_int = 0x243; /* AL Control Panel */ pub const KEY_APPSELECT: c_int = 0x244; /* AL Select Task/Application */ pub const KEY_SCREENSAVER: c_int = 0x245; /* AL Screen Saver */ pub const KEY_VOICECOMMAND: c_int = 0x246; /* Listening Voice Command */ pub const KEY_ASSISTANT: c_int = 0x247; /* AL Context-aware desktop assistant */ pub const KEY_KBD_LAYOUT_NEXT: c_int = 0x248; /* AC Next Keyboard Layout Select */ pub const KEY_EMOJI_PICKER: c_int = 0x249; /* Show/hide emoji picker (HUTRR101) */ pub const KEY_DICTATE: c_int = 0x24a; /* Start or Stop Voice Dictation Session (HUTRR99) */ pub const KEY_CAMERA_ACCESS_ENABLE: c_int = 0x24b; /* Enables programmatic access to camera devices. (HUTRR72) */ pub const KEY_CAMERA_ACCESS_DISABLE: c_int = 0x24c; /* Disables programmatic access to camera devices. (HUTRR72) */ pub const KEY_CAMERA_ACCESS_TOGGLE: c_int = 0x24d; /* Toggles the current state of the camera access control. (HUTRR72) */ pub const KEY_ACCESSIBILITY: c_int = 0x24e; /* Toggles the system bound accessibility UI/command (HUTRR116) */ pub const KEY_DO_NOT_DISTURB: c_int = 0x24f; /* Toggles the system-wide "Do Not Disturb" control (HUTRR94)*/ pub const KEY_BRIGHTNESS_MIN: c_int = 0x250; /* Set Brightness to Minimum */ pub const KEY_BRIGHTNESS_MAX: c_int = 0x251; /* Set Brightness to Maximum */ pub const KEY_KBDINPUTASSIST_PREV: c_int = 0x260; pub const KEY_KBDINPUTASSIST_NEXT: c_int = 0x261; pub const KEY_KBDINPUTASSIST_PREVGROUP: c_int = 0x262; pub const KEY_KBDINPUTASSIST_NEXTGROUP: c_int = 0x263; pub const KEY_KBDINPUTASSIST_ACCEPT: c_int = 0x264; pub const KEY_KBDINPUTASSIST_CANCEL: c_int = 0x265; /* Diagonal movement keys */ pub const KEY_RIGHT_UP: c_int = 0x266; pub const KEY_RIGHT_DOWN: c_int = 0x267; pub const KEY_LEFT_UP: c_int = 0x268; pub const KEY_LEFT_DOWN: c_int = 0x269; pub const KEY_ROOT_MENU: c_int = 0x26a; /* Show Device's Root Menu */ /* Show Top Menu of the Media (e.g. DVD) */ pub const KEY_MEDIA_TOP_MENU: c_int = 0x26b; pub const KEY_NUMERIC_11: c_int = 0x26c; pub const KEY_NUMERIC_12: c_int = 0x26d; /* * Toggle Audio Description: refers to an audio service that helps blind and * visually impaired consumers understand the action in a program. Note: in * some countries this is referred to as "Video Description". */ pub const KEY_AUDIO_DESC: c_int = 0x26e; pub const KEY_3D_MODE: c_int = 0x26f; pub const KEY_NEXT_FAVORITE: c_int = 0x270; pub const KEY_STOP_RECORD: c_int = 0x271; pub const KEY_PAUSE_RECORD: c_int = 0x272; pub const KEY_VOD: c_int = 0x273; /* Video on Demand */ pub const KEY_UNMUTE: c_int = 0x274; pub const KEY_FASTREVERSE: c_int = 0x275; pub const KEY_SLOWREVERSE: c_int = 0x276; /* * Control a data application associated with the currently viewed channel, * e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.) */ pub const KEY_DATA: c_int = 0x277; pub const KEY_ONSCREEN_KEYBOARD: c_int = 0x278; pub const KEY_PRIVACY_SCREEN_TOGGLE: c_int = 0x279; /* Electronic privacy screen control */ pub const KEY_SELECTIVE_SCREENSHOT: c_int = 0x27a; /* Select an area of screen to be copied */ /* Move the focus to the next or previous user controllable element within a UI container */ pub const KEY_NEXT_ELEMENT: c_int = 0x27b; pub const KEY_PREVIOUS_ELEMENT: c_int = 0x27c; /* Toggle Autopilot engagement */ pub const KEY_AUTOPILOT_ENGAGE_TOGGLE: c_int = 0x27d; /* Shortcut Keys */ pub const KEY_MARK_WAYPOINT: c_int = 0x27e; pub const KEY_SOS: c_int = 0x27f; pub const KEY_NAV_CHART: c_int = 0x280; pub const KEY_FISHING_CHART: c_int = 0x281; pub const KEY_SINGLE_RANGE_RADAR: c_int = 0x282; pub const KEY_DUAL_RANGE_RADAR: c_int = 0x283; pub const KEY_RADAR_OVERLAY: c_int = 0x284; pub const KEY_TRADITIONAL_SONAR: c_int = 0x285; pub const KEY_CLEARVU_SONAR: c_int = 0x286; pub const KEY_SIDEVU_SONAR: c_int = 0x287; pub const KEY_NAV_INFO: c_int = 0x288; pub const KEY_BRIGHTNESS_MENU: c_int = 0x289; /* * Some keyboards have keys which do not have a defined meaning, these keys * are intended to be programmed / bound to macros by the user. For most * keyboards with these macro-keys the key-sequence to inject, or action to * take, is all handled by software on the host side. So from the kernel's * point of view these are just normal keys. * * The KEY_MACRO# codes below are intended for such keys, which may be labeled * e.g. G1-G18, or S1 - S30. The KEY_MACRO# codes MUST NOT be used for keys * where the marking on the key does indicate a defined meaning / purpose. * * The KEY_MACRO# codes MUST also NOT be used as fallback for when no existing * KEY_FOO define matches the marking / purpose. In this case a new KEY_FOO * define MUST be added. */ pub const KEY_MACRO1: c_int = 0x290; pub const KEY_MACRO2: c_int = 0x291; pub const KEY_MACRO3: c_int = 0x292; pub const KEY_MACRO4: c_int = 0x293; pub const KEY_MACRO5: c_int = 0x294; pub const KEY_MACRO6: c_int = 0x295; pub const KEY_MACRO7: c_int = 0x296; pub const KEY_MACRO8: c_int = 0x297; pub const KEY_MACRO9: c_int = 0x298; pub const KEY_MACRO10: c_int = 0x299; pub const KEY_MACRO11: c_int = 0x29a; pub const KEY_MACRO12: c_int = 0x29b; pub const KEY_MACRO13: c_int = 0x29c; pub const KEY_MACRO14: c_int = 0x29d; pub const KEY_MACRO15: c_int = 0x29e; pub const KEY_MACRO16: c_int = 0x29f; pub const KEY_MACRO17: c_int = 0x2a0; pub const KEY_MACRO18: c_int = 0x2a1; pub const KEY_MACRO19: c_int = 0x2a2; pub const KEY_MACRO20: c_int = 0x2a3; pub const KEY_MACRO21: c_int = 0x2a4; pub const KEY_MACRO22: c_int = 0x2a5; pub const KEY_MACRO23: c_int = 0x2a6; pub const KEY_MACRO24: c_int = 0x2a7; pub const KEY_MACRO25: c_int = 0x2a8; pub const KEY_MACRO26: c_int = 0x2a9; pub const KEY_MACRO27: c_int = 0x2aa; pub const KEY_MACRO28: c_int = 0x2ab; pub const KEY_MACRO29: c_int = 0x2ac; pub const KEY_MACRO30: c_int = 0x2ad; /* * Some keyboards with the macro-keys described above have some extra keys * for controlling the host-side software responsible for the macro handling: * -A macro recording start/stop key. Note that not all keyboards which emit * KEY_MACRO_RECORD_START will also emit KEY_MACRO_RECORD_STOP if * KEY_MACRO_RECORD_STOP is not advertised, then KEY_MACRO_RECORD_START * should be interpreted as a recording start/stop toggle; * -Keys for switching between different macro (pre)sets, either a key for * cycling through the configured presets or keys to directly select a preset. */ pub const KEY_MACRO_RECORD_START: c_int = 0x2b0; pub const KEY_MACRO_RECORD_STOP: c_int = 0x2b1; pub const KEY_MACRO_PRESET_CYCLE: c_int = 0x2b2; pub const KEY_MACRO_PRESET1: c_int = 0x2b3; pub const KEY_MACRO_PRESET2: c_int = 0x2b4; pub const KEY_MACRO_PRESET3: c_int = 0x2b5; /* * Some keyboards have a buildin LCD panel where the contents are controlled * by the host. Often these have a number of keys directly below the LCD * intended for controlling a menu shown on the LCD. These keys often don't * have any labeling so we just name them KEY_KBD_LCD_MENU# */ pub const KEY_KBD_LCD_MENU1: c_int = 0x2b8; pub const KEY_KBD_LCD_MENU2: c_int = 0x2b9; pub const KEY_KBD_LCD_MENU3: c_int = 0x2ba; pub const KEY_KBD_LCD_MENU4: c_int = 0x2bb; pub const KEY_KBD_LCD_MENU5: c_int = 0x2bc; pub const BTN_TRIGGER_HAPPY: c_int = 0x2c0; pub const BTN_TRIGGER_HAPPY1: c_int = 0x2c0; pub const BTN_TRIGGER_HAPPY2: c_int = 0x2c1; pub const BTN_TRIGGER_HAPPY3: c_int = 0x2c2; pub const BTN_TRIGGER_HAPPY4: c_int = 0x2c3; pub const BTN_TRIGGER_HAPPY5: c_int = 0x2c4; pub const BTN_TRIGGER_HAPPY6: c_int = 0x2c5; pub const BTN_TRIGGER_HAPPY7: c_int = 0x2c6; pub const BTN_TRIGGER_HAPPY8: c_int = 0x2c7; pub const BTN_TRIGGER_HAPPY9: c_int = 0x2c8; pub const BTN_TRIGGER_HAPPY10: c_int = 0x2c9; pub const BTN_TRIGGER_HAPPY11: c_int = 0x2ca; pub const BTN_TRIGGER_HAPPY12: c_int = 0x2cb; pub const BTN_TRIGGER_HAPPY13: c_int = 0x2cc; pub const BTN_TRIGGER_HAPPY14: c_int = 0x2cd; pub const BTN_TRIGGER_HAPPY15: c_int = 0x2ce; pub const BTN_TRIGGER_HAPPY16: c_int = 0x2cf; pub const BTN_TRIGGER_HAPPY17: c_int = 0x2d0; pub const BTN_TRIGGER_HAPPY18: c_int = 0x2d1; pub const BTN_TRIGGER_HAPPY19: c_int = 0x2d2; pub const BTN_TRIGGER_HAPPY20: c_int = 0x2d3; pub const BTN_TRIGGER_HAPPY21: c_int = 0x2d4; pub const BTN_TRIGGER_HAPPY22: c_int = 0x2d5; pub const BTN_TRIGGER_HAPPY23: c_int = 0x2d6; pub const BTN_TRIGGER_HAPPY24: c_int = 0x2d7; pub const BTN_TRIGGER_HAPPY25: c_int = 0x2d8; pub const BTN_TRIGGER_HAPPY26: c_int = 0x2d9; pub const BTN_TRIGGER_HAPPY27: c_int = 0x2da; pub const BTN_TRIGGER_HAPPY28: c_int = 0x2db; pub const BTN_TRIGGER_HAPPY29: c_int = 0x2dc; pub const BTN_TRIGGER_HAPPY30: c_int = 0x2dd; pub const BTN_TRIGGER_HAPPY31: c_int = 0x2de; pub const BTN_TRIGGER_HAPPY32: c_int = 0x2df; pub const BTN_TRIGGER_HAPPY33: c_int = 0x2e0; pub const BTN_TRIGGER_HAPPY34: c_int = 0x2e1; pub const BTN_TRIGGER_HAPPY35: c_int = 0x2e2; pub const BTN_TRIGGER_HAPPY36: c_int = 0x2e3; pub const BTN_TRIGGER_HAPPY37: c_int = 0x2e4; pub const BTN_TRIGGER_HAPPY38: c_int = 0x2e5; pub const BTN_TRIGGER_HAPPY39: c_int = 0x2e6; pub const BTN_TRIGGER_HAPPY40: c_int = 0x2e7; /* We avoid low common keys in module aliases so they don't get huge. */ pub const KEY_MIN_INTERESTING: c_int = KEY_MUTE; pub const KEY_MAX: c_int = 0x2ff; pub const KEY_CNT: c_int = KEY_MAX + 1; /* * Relative axes */ pub const REL_X: c_int = 0x00; pub const REL_Y: c_int = 0x01; pub const REL_Z: c_int = 0x02; pub const REL_RX: c_int = 0x03; pub const REL_RY: c_int = 0x04; pub const REL_RZ: c_int = 0x05; pub const REL_HWHEEL: c_int = 0x06; pub const REL_DIAL: c_int = 0x07; pub const REL_WHEEL: c_int = 0x08; pub const REL_MISC: c_int = 0x09; /* * 0x0a is reserved and should not be used in input drivers. * It was used by HID as REL_MISC+1 and userspace needs to detect if * the next REL_* event is correct or is just REL_MISC + n. * We define here REL_RESERVED so userspace can rely on it and detect * the situation described above. */ pub const REL_RESERVED: c_int = 0x0a; pub const REL_WHEEL_HI_RES: c_int = 0x0b; pub const REL_HWHEEL_HI_RES: c_int = 0x0c; pub const REL_MAX: c_int = 0x0f; pub const REL_CNT: c_int = REL_MAX + 1; /* * Absolute axes */ pub const ABS_X: c_int = 0x00; pub const ABS_Y: c_int = 0x01; pub const ABS_Z: c_int = 0x02; pub const ABS_RX: c_int = 0x03; pub const ABS_RY: c_int = 0x04; pub const ABS_RZ: c_int = 0x05; pub const ABS_THROTTLE: c_int = 0x06; pub const ABS_RUDDER: c_int = 0x07; pub const ABS_WHEEL: c_int = 0x08; pub const ABS_GAS: c_int = 0x09; pub const ABS_BRAKE: c_int = 0x0a; pub const ABS_HAT0X: c_int = 0x10; pub const ABS_HAT0Y: c_int = 0x11; pub const ABS_HAT1X: c_int = 0x12; pub const ABS_HAT1Y: c_int = 0x13; pub const ABS_HAT2X: c_int = 0x14; pub const ABS_HAT2Y: c_int = 0x15; pub const ABS_HAT3X: c_int = 0x16; pub const ABS_HAT3Y: c_int = 0x17; pub const ABS_PRESSURE: c_int = 0x18; pub const ABS_DISTANCE: c_int = 0x19; pub const ABS_TILT_X: c_int = 0x1a; pub const ABS_TILT_Y: c_int = 0x1b; pub const ABS_TOOL_WIDTH: c_int = 0x1c; pub const ABS_VOLUME: c_int = 0x20; pub const ABS_PROFILE: c_int = 0x21; pub const ABS_MISC: c_int = 0x28; /* * 0x2e is reserved and should not be used in input drivers. * It was used by HID as ABS_MISC+6 and userspace needs to detect if * the next ABS_* event is correct or is just ABS_MISC + n. * We define here ABS_RESERVED so userspace can rely on it and detect * the situation described above. */ pub const ABS_RESERVED: c_int = 0x2e; pub const ABS_MT_SLOT: c_int = 0x2f; /* MT slot being modified */ pub const ABS_MT_TOUCH_MAJOR: c_int = 0x30; /* Major axis of touching ellipse */ pub const ABS_MT_TOUCH_MINOR: c_int = 0x31; /* Minor axis : c_int = omit if circular */ pub const ABS_MT_WIDTH_MAJOR: c_int = 0x32; /* Major axis of approaching ellipse */ pub const ABS_MT_WIDTH_MINOR: c_int = 0x33; /* Minor axis : c_int = omit if circular */ pub const ABS_MT_ORIENTATION: c_int = 0x34; /* Ellipse orientation */ pub const ABS_MT_POSITION_X: c_int = 0x35; /* Center X touch position */ pub const ABS_MT_POSITION_Y: c_int = 0x36; /* Center Y touch position */ pub const ABS_MT_TOOL_TYPE: c_int = 0x37; /* Type of touching device */ pub const ABS_MT_BLOB_ID: c_int = 0x38; /* Group a set of packets as a blob */ pub const ABS_MT_TRACKING_ID: c_int = 0x39; /* Unique ID of initiated contact */ pub const ABS_MT_PRESSURE: c_int = 0x3a; /* Pressure on contact area */ pub const ABS_MT_DISTANCE: c_int = 0x3b; /* Contact hover distance */ pub const ABS_MT_TOOL_X: c_int = 0x3c; /* Center X tool position */ pub const ABS_MT_TOOL_Y: c_int = 0x3d; /* Center Y tool position */ pub const ABS_MAX: c_int = 0x3f; pub const ABS_CNT: c_int = ABS_MAX + 1; /* * Switch events */ pub const SW_LID: c_int = 0x00; /* set = lid shut */ pub const SW_TABLET_MODE: c_int = 0x01; /* set = tablet mode */ pub const SW_HEADPHONE_INSERT: c_int = 0x02; /* set = inserted */ pub const SW_RFKILL_ALL: c_int = 0x03; /* rfkill master switch, type "any" set = radio enabled */ pub const SW_RADIO: c_int = SW_RFKILL_ALL; /* deprecated */ pub const SW_MICROPHONE_INSERT: c_int = 0x04; /* set = inserted */ pub const SW_DOCK: c_int = 0x05; /* set = plugged into dock */ pub const SW_LINEOUT_INSERT: c_int = 0x06; /* set = inserted */ pub const SW_JACK_PHYSICAL_INSERT: c_int = 0x07; /* set = mechanical switch set */ pub const SW_VIDEOOUT_INSERT: c_int = 0x08; /* set = inserted */ pub const SW_CAMERA_LENS_COVER: c_int = 0x09; /* set = lens covered */ pub const SW_KEYPAD_SLIDE: c_int = 0x0a; /* set = keypad slide out */ pub const SW_FRONT_PROXIMITY: c_int = 0x0b; /* set = front proximity sensor active */ pub const SW_ROTATE_LOCK: c_int = 0x0c; /* set = rotate locked/disabled */ pub const SW_LINEIN_INSERT: c_int = 0x0d; /* set = inserted */ pub const SW_MUTE_DEVICE: c_int = 0x0e; /* set = device disabled */ pub const SW_PEN_INSERTED: c_int = 0x0f; /* set = pen inserted */ pub const SW_MACHINE_COVER: c_int = 0x10; /* set = cover closed */ pub const SW_MAX: c_int = 0x10; pub const SW_CNT: c_int = SW_MAX + 1; /* * Misc events */ pub const MSC_SERIAL: c_int = 0x00; pub const MSC_PULSELED: c_int = 0x01; pub const MSC_GESTURE: c_int = 0x02; pub const MSC_RAW: c_int = 0x03; pub const MSC_SCAN: c_int = 0x04; pub const MSC_TIMESTAMP: c_int = 0x05; pub const MSC_MAX: c_int = 0x07; pub const MSC_CNT: c_int = MSC_MAX + 1; /* * LEDs */ pub const LED_NUML: c_int = 0x00; pub const LED_CAPSL: c_int = 0x01; pub const LED_SCROLLL: c_int = 0x02; pub const LED_COMPOSE: c_int = 0x03; pub const LED_KANA: c_int = 0x04; pub const LED_SLEEP: c_int = 0x05; pub const LED_SUSPEND: c_int = 0x06; pub const LED_MUTE: c_int = 0x07; pub const LED_MISC: c_int = 0x08; pub const LED_MAIL: c_int = 0x09; pub const LED_CHARGING: c_int = 0x0a; pub const LED_MAX: c_int = 0x0f; pub const LED_CNT: c_int = LED_MAX + 1; /* * Autorepeat values */ pub const REP_DELAY: c_int = 0x00; pub const REP_PERIOD: c_int = 0x01; pub const REP_MAX: c_int = 0x01; pub const REP_CNT: c_int = REP_MAX + 1; /* * Sounds */ pub const SND_CLICK: c_int = 0x00; pub const SND_BELL: c_int = 0x01; pub const SND_TONE: c_int = 0x02; pub const SND_MAX: c_int = 0x07; pub const SND_CNT: c_int = SND_MAX + 1; input-linux-sys-0.9.0/src/input.rs000064400000000000000000000172531046102023000152460ustar 00000000000000use std::mem::{size_of, size_of_val}; use nix::{ self, sys::ioctl::ioctl_num_type, convert_ioctl_res, ioctl_read, ioctl_read_buf, ioctl_write_ptr, ioctl_write_int, request_code_read, request_code_write, }; use libc::{c_char, c_int, c_uint, clockid_t, ioctl}; pub use libc::{ timeval, input_event, input_id, input_absinfo, input_keymap_entry, input_mask, ff_replay, ff_trigger, ff_envelope, ff_effect, ff_constant_effect, ff_ramp_effect, ff_condition_effect, ff_periodic_effect, ff_rumble_effect, }; /// Protocol version. pub const EV_VERSION: c_int = 0x010001; pub const ID_BUS: usize = 0; pub const ID_VENDOR: usize = 1; pub const ID_PRODUCT: usize = 2; pub const ID_VERSION: usize = 3; pub const BUS_PCI: u16 = 0x01; pub const BUS_ISAPNP: u16 = 0x02; pub const BUS_USB: u16 = 0x03; pub const BUS_HIL: u16 = 0x04; pub const BUS_BLUETOOTH: u16 = 0x05; pub const BUS_VIRTUAL: u16 = 0x06; pub const BUS_ISA: u16 = 0x10; pub const BUS_I8042: u16 = 0x11; pub const BUS_XTKBD: u16 = 0x12; pub const BUS_RS232: u16 = 0x13; pub const BUS_GAMEPORT: u16 = 0x14; pub const BUS_PARPORT: u16 = 0x15; pub const BUS_AMIGA: u16 = 0x16; pub const BUS_ADB: u16 = 0x17; pub const BUS_I2C: u16 = 0x18; pub const BUS_HOST: u16 = 0x19; pub const BUS_GSC: u16 = 0x1A; pub const BUS_ATARI: u16 = 0x1B; pub const BUS_SPI: u16 = 0x1C; pub const BUS_RMI: u16 = 0x1D; pub const BUS_CEC: u16 = 0x1E; pub const BUS_INTEL_ISHTP: u16 = 0x1F; pub const BUS_AMD_SFH: u16 = 0x20; pub const MT_TOOL_FINGER: u16 = 0x00; pub const MT_TOOL_PEN: u16 = 0x01; pub const MT_TOOL_PALM: u16 = 0x02; pub const MT_TOOL_DIAL: u16 = 0x0a; pub const MT_TOOL_MAX: u16 = 0x0f; pub const FF_STATUS_STOPPED: u16 = 0x00; pub const FF_STATUS_PLAYING: u16 = 0x01; pub const FF_STATUS_MAX: u16 = 0x01; pub const FF_RUMBLE: u16 = 0x50; pub const FF_PERIODIC: u16 = 0x51; pub const FF_CONSTANT: u16 = 0x52; pub const FF_SPRING: u16 = 0x53; pub const FF_FRICTION: u16 = 0x54; pub const FF_DAMPER: u16 = 0x55; pub const FF_INERTIA: u16 = 0x56; pub const FF_RAMP: u16 = 0x57; pub const FF_EFFECT_MIN: u16 = FF_RUMBLE; pub const FF_EFFECT_MAX: u16 = FF_RAMP; pub const FF_SQUARE: u16 = 0x58; pub const FF_TRIANGLE: u16 = 0x59; pub const FF_SINE: u16 = 0x5a; pub const FF_SAW_UP: u16 = 0x5b; pub const FF_SAW_DOWN: u16 = 0x5c; pub const FF_CUSTOM: u16 = 0x5d; pub const FF_WAVEFORM_MIN: u16 = FF_SQUARE; pub const FF_WAVEFORM_MAX: u16 = FF_CUSTOM; /// Set ff device properties pub const FF_GAIN: u16 = 0x60; pub const FF_AUTOCENTER: u16 = 0x61; /// The greatest safe value for effect_id is `FF_GAIN - 1` pub const FF_MAX_EFFECTS: u16 = FF_GAIN; pub const FF_MAX: u16 = 0x7f; pub const FF_CNT: u16 = FF_MAX + 1; #[repr(C)] #[derive(Copy, Clone)] pub struct ff_effect_union { #[cfg(target_pointer_width = "64")] pub u: [u64; 4], #[cfg(target_pointer_width = "32")] pub u: [u32; 7], } impl<'a> From<&'a ff_effect> for &'a ff_effect_union { fn from(effect: &'a ff_effect) -> Self { unsafe { let raw = &effect.u as *const _ as *const _; &*raw } } } impl<'a> From<&'a mut ff_effect> for &'a mut ff_effect_union { fn from(effect: &'a mut ff_effect) -> Self { unsafe { let raw = &mut effect.u as *mut _ as *mut _; &mut *raw } } } impl ff_effect_union { pub fn constant(&self) -> &ff_constant_effect { unsafe { let raw = &self.u as *const _ as *const _; &*raw } } pub fn constant_mut(&mut self) -> &mut ff_constant_effect { unsafe { let raw = &mut self.u as *mut _ as *mut _; &mut *raw } } pub fn ramp(&self) -> &ff_ramp_effect { unsafe { let raw = &self.u as *const _ as *const _; &*raw } } pub fn ramp_mut(&mut self) -> &mut ff_ramp_effect { unsafe { let raw = &mut self.u as *mut _ as *mut _; &mut *raw } } pub fn periodic(&self) -> &ff_periodic_effect { unsafe { let raw = &self.u as *const _ as *const _; &*raw } } pub fn periodic_mut(&mut self) -> &mut ff_periodic_effect { unsafe { let raw = &mut self.u as *mut _ as *mut _; &mut *raw } } pub fn condition(&self) -> &[ff_condition_effect; 2] { unsafe { let raw = &self.u as *const _ as *const _; &*raw } } pub fn condition_mut(&mut self) -> &mut [ff_condition_effect; 2] { unsafe { let raw = &mut self.u as *mut _ as *mut _; &mut *raw } } pub fn rumble(&self) -> &ff_rumble_effect { unsafe { let raw = &self.u as *const _ as *const _; &*raw } } pub fn rumble_mut(&mut self) -> &mut ff_rumble_effect { unsafe { let raw = &mut self.u as *mut _ as *mut _; &mut *raw } } } #[repr(C)] #[derive(Copy, Clone)] pub struct repeat_settings { pub delay: c_uint, pub period: c_uint, } #[repr(C)] #[derive(Copy, Clone)] pub struct input_mt_request_layout { pub code: u32, pub values: T, } ioctl_read! { /// get driver version ev_get_version, b'E', 0x01, c_int } ioctl_read! { /// get device ID ev_get_id, b'E', 0x02, input_id } ioctl_read! { /// get repeat settings ev_get_rep, b'E', 0x03, repeat_settings } ioctl_write_ptr! { /// set repeat settings ev_set_rep, b'E', 0x03, repeat_settings } ioctl_read! { /// get keycode ev_get_keycode, b'E', 0x04, [c_uint; 2] } ioctl_read! { /// get keycode ev_get_keycode_v2, b'E', 0x04, input_keymap_entry } ioctl_write_ptr! { /// set keycode ev_set_keycode, b'E', 0x04, [c_uint; 2] } ioctl_write_ptr! { /// set keycode ev_set_keycode_v2, b'E', 0x04, input_keymap_entry } ioctl_read_buf! { /// get device name ev_get_name, b'E', 0x06, c_char } ioctl_read_buf! { /// get physical location ev_get_phys, b'E', 0x07, c_char } ioctl_read_buf! { /// get unique identifier ev_get_uniq, b'E', 0x08, c_char } ioctl_read_buf! { /// get device properties ev_get_prop, b'E', 0x09, u8 } /// get MT slot values pub unsafe fn ev_get_mtslots(fd: c_int, buf: *mut input_mt_request_layout) -> nix::Result { // for some reason this isn't _IORW? convert_ioctl_res!(ioctl(fd, request_code_read!(b'E', 0x0a, size_of_val(&*buf)) as ioctl_num_type, buf)) } ioctl_read_buf! { /// get global key state ev_get_key, b'E', 0x18, u8 } ioctl_read_buf! { /// get all LEDs ev_get_led, b'E', 0x19, u8 } ioctl_read_buf! { /// get all sounds status ev_get_snd, b'E', 0x1a, u8 } ioctl_read_buf! { /// get all switch states ev_get_sw, b'E', 0x1b, u8 } /// get event bits pub unsafe fn ev_get_bit(fd: c_int, ev: u32, buf: &mut [u8]) -> nix::Result { convert_ioctl_res!(ioctl(fd, request_code_read!(b'E', 0x20 + ev, buf.len()) as ioctl_num_type, buf)) } /// get abs value/limits pub unsafe fn ev_get_abs(fd: c_int, abs: u32, buf: *mut input_absinfo) -> nix::Result { convert_ioctl_res!(ioctl(fd, request_code_read!(b'E', 0x40 + abs, size_of::()) as ioctl_num_type, buf)) } /// set abs value/limits pub unsafe fn ev_set_abs(fd: c_int, abs: u32, buf: *const input_absinfo) -> nix::Result { convert_ioctl_res!(ioctl(fd, request_code_read!(b'E', 0x40 + abs, size_of::()) as ioctl_num_type, buf)) } /// send a force effect to a force feedback device pub unsafe fn ev_send_ff(fd: c_int, buf: *mut ff_effect) -> nix::Result { // for some reason this isn't _IORW? convert_ioctl_res!(ioctl(fd, request_code_write!(b'E', 0x80, size_of::()) as ioctl_num_type, buf)) } ioctl_write_int! { /// Erase a force effect ev_erase_ff, b'E', 0x81 } ioctl_read! { /// Report number of effects playable at the same time ev_get_effects, b'E', 0x84, c_int } ioctl_write_int! { /// Grab/Release device ev_grab, b'E', 0x90 } ioctl_write_int! { /// Revoke device access ev_revoke, b'E', 0x91 } ioctl_read! { /// Retrieve current event mask ev_get_mask, b'E', 0x92, input_mask } ioctl_write_ptr! { /// Set event mask ev_set_mask, b'E', 0x93, input_mask } ioctl_write_ptr! { /// Set clockid to be used for timestamps ev_set_clockid, b'E', 0xa0, clockid_t } input-linux-sys-0.9.0/src/lib.rs000064400000000000000000000003571046102023000146520ustar 00000000000000#![doc(html_root_url = "https://docs.rs/input-linux-sys/0.9.0/")] pub use nix::{Error, Result}; pub use nix::errno::Errno; mod events; pub use crate::events::*; mod input; pub use crate::input::*; mod uinput; pub use crate::uinput::*; input-linux-sys-0.9.0/src/uinput.rs000064400000000000000000000050111046102023000154200ustar 00000000000000use crate::{ff_effect, input_absinfo, input_id, ABS_CNT}; use libc::{c_char, c_int, c_uint}; use nix::{ ioctl_none, ioctl_read, ioctl_read_buf, ioctl_readwrite, ioctl_write_int, ioctl_write_ptr, }; pub const UINPUT_MAX_NAME_SIZE: c_int = 80; pub const UINPUT_VERSION: c_int = 5; /// This is the new event type, used only by uinput. /// 'code' is UI_FF_UPLOAD or UI_FF_ERASE, and 'value' is the unique request ID. pub const EV_UINPUT: c_int = 0x0101; pub const UI_FF_UPLOAD: c_int = 1; pub const UI_FF_ERASE: c_int = 2; #[repr(C)] pub struct uinput_setup { pub id: input_id, pub name: [c_char; UINPUT_MAX_NAME_SIZE as usize], pub ff_effects_max: u32, } #[repr(C)] pub struct uinput_abs_setup { pub code: u16, pub absinfo: input_absinfo, } #[repr(C)] pub struct uinput_user_dev { pub name: [c_char; UINPUT_MAX_NAME_SIZE as usize], pub id: input_id, pub ff_effects_max: u32, pub absmax: [i32; ABS_CNT as usize], pub absmin: [i32; ABS_CNT as usize], pub absfuzz: [i32; ABS_CNT as usize], pub absflat: [i32; ABS_CNT as usize], } #[repr(C)] #[derive(Copy, Clone)] pub struct uinput_ff_upload { pub request_id: u32, pub retval: i32, pub effect: ff_effect, pub old: ff_effect, } #[repr(C)] #[derive(Copy, Clone)] pub struct uinput_ff_erase { pub request_id: u32, pub retval: i32, pub effect_id: u32, } ioctl_none!(ui_dev_create, b'U', 1); ioctl_none!(ui_dev_destroy, b'U', 2); ioctl_write_ptr! { /// Set device parameters for setup ui_dev_setup, b'U', 3, uinput_setup } ioctl_write_ptr! { /// Set absolute axis information for the device to setup ui_abs_setup, b'U', 4, uinput_abs_setup } ioctl_write_int!(ui_set_evbit, b'U', 100); ioctl_write_int!(ui_set_keybit, b'U', 101); ioctl_write_int!(ui_set_relbit, b'U', 102); ioctl_write_int!(ui_set_absbit, b'U', 103); ioctl_write_int!(ui_set_mscbit, b'U', 104); ioctl_write_int!(ui_set_ledbit, b'U', 105); ioctl_write_int!(ui_set_sndbit, b'U', 106); ioctl_write_int!(ui_set_ffbit, b'U', 107); ioctl_write_ptr!(ui_set_phys, b'U', 108, c_char); ioctl_write_int!(ui_set_swbit, b'U', 109); ioctl_write_int!(ui_set_propbit, b'U', 110); ioctl_readwrite!(ui_begin_ff_upload, b'U', 200, uinput_ff_upload); ioctl_write_ptr!(ui_end_ff_upload, b'U', 201, uinput_ff_upload); ioctl_readwrite!(ui_begin_ff_erase, b'U', 202, uinput_ff_erase); ioctl_write_ptr!(ui_end_ff_erase, b'U', 203, uinput_ff_erase); ioctl_read_buf! { /// get the sysfs name of the created uinput device ui_get_sysname, b'U', 44, c_char } ioctl_read! { /// Return version of uinput protocol ui_get_version, b'U', 45, c_uint }