evdev

package module
v0.0.0-...-217e18f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 6, 2024 License: MIT Imports: 8 Imported by: 10

README

Go support for the Linux evdev interface

This is a pure Go package for the Linux evdev interface, without cgo dependencies.

The Linux evdev interface is the userspace interface to interact with input devices such as keyboard, mice, joysticks, touchscreens, rotary encoders etc.

The implementation in this package has the following features:

  • Query device information such as the name, the physical location, the unique ID, the vendor/product/bus/version IDs
  • Query supported event types, codes and device properties
  • Query the current status of bit-field based input types (such as keyboard, switches etc) as well as information on absolute types (ABS_X, ...) including their min/max values and current state
  • Grab/Ungrab/Revoke support for exclusive claiming of devices
  • Auto-generated const definitions and maps for types and codes from the kernel include headers

Install

go get github.com/holoplot/go-evdev

And then use it in your source code.

import "github.com/holoplot/go-evdev"

Re-generating codes.go

To re-generate codes.go from the latest kernel headers, use the following command.

go run build/gen-codes/main.go 

You can optionally validate generated string mappings with go run build/gen-codes-validate/main.go

Example

See the code in cmd/evtest for an example.

MIT License

See file LICENSE for details.

Documentation

Index

Constants

View Source
const (
	INPUT_PROP_POINTER        = 0x00 // needs a pointer
	INPUT_PROP_DIRECT         = 0x01 // direct input devices
	INPUT_PROP_BUTTONPAD      = 0x02 // has button(s) under pad
	INPUT_PROP_SEMI_MT        = 0x03 // touch rectangle only
	INPUT_PROP_TOPBUTTONPAD   = 0x04 // softbuttons at top of pad
	INPUT_PROP_POINTING_STICK = 0x05 // is a pointing stick
	INPUT_PROP_ACCELEROMETER  = 0x06 // has accelerometer

	INPUT_PROP_MAX = 0x1f
	INPUT_PROP_CNT = (INPUT_PROP_MAX + 1)
)

Device properties and quirks

View Source
const (
	EV_SYN       = 0x00
	EV_KEY       = 0x01
	EV_REL       = 0x02
	EV_ABS       = 0x03
	EV_MSC       = 0x04
	EV_SW        = 0x05
	EV_LED       = 0x11
	EV_SND       = 0x12
	EV_REP       = 0x14
	EV_FF        = 0x15
	EV_PWR       = 0x16
	EV_FF_STATUS = 0x17
	EV_MAX       = 0x1f
	EV_CNT       = (EV_MAX + 1)
)

Event types

View Source
const (
	SYN_REPORT    = 0
	SYN_CONFIG    = 1
	SYN_MT_REPORT = 2
	SYN_DROPPED   = 3
	SYN_MAX       = 0xf
	SYN_CNT       = (SYN_MAX + 1)
)

Synchronization events.

View Source
const (
	KEY_RESERVED   = 0
	KEY_ESC        = 1
	KEY_1          = 2
	KEY_2          = 3
	KEY_3          = 4
	KEY_4          = 5
	KEY_5          = 6
	KEY_6          = 7
	KEY_7          = 8
	KEY_8          = 9
	KEY_9          = 10
	KEY_0          = 11
	KEY_MINUS      = 12
	KEY_EQUAL      = 13
	KEY_BACKSPACE  = 14
	KEY_TAB        = 15
	KEY_Q          = 16
	KEY_W          = 17
	KEY_E          = 18
	KEY_R          = 19
	KEY_T          = 20
	KEY_Y          = 21
	KEY_U          = 22
	KEY_I          = 23
	KEY_O          = 24
	KEY_P          = 25
	KEY_LEFTBRACE  = 26
	KEY_RIGHTBRACE = 27
	KEY_ENTER      = 28
	KEY_LEFTCTRL   = 29
	KEY_A          = 30
	KEY_S          = 31
	KEY_D          = 32
	KEY_F          = 33
	KEY_G          = 34
	KEY_H          = 35
	KEY_J          = 36
	KEY_K          = 37
	KEY_L          = 38
	KEY_SEMICOLON  = 39
	KEY_APOSTROPHE = 40
	KEY_GRAVE      = 41
	KEY_LEFTSHIFT  = 42
	KEY_BACKSLASH  = 43
	KEY_Z          = 44
	KEY_X          = 45
	KEY_C          = 46
	KEY_V          = 47
	KEY_B          = 48
	KEY_N          = 49
	KEY_M          = 50
	KEY_COMMA      = 51
	KEY_DOT        = 52
	KEY_SLASH      = 53
	KEY_RIGHTSHIFT = 54
	KEY_KPASTERISK = 55
	KEY_LEFTALT    = 56
	KEY_SPACE      = 57
	KEY_CAPSLOCK   = 58
	KEY_F1         = 59
	KEY_F2         = 60
	KEY_F3         = 61
	KEY_F4         = 62
	KEY_F5         = 63
	KEY_F6         = 64
	KEY_F7         = 65
	KEY_F8         = 66
	KEY_F9         = 67
	KEY_F10        = 68
	KEY_NUMLOCK    = 69
	KEY_SCROLLLOCK = 70
	KEY_KP7        = 71
	KEY_KP8        = 72
	KEY_KP9        = 73
	KEY_KPMINUS    = 74
	KEY_KP4        = 75
	KEY_KP5        = 76
	KEY_KP6        = 77
	KEY_KPPLUS     = 78
	KEY_KP1        = 79
	KEY_KP2        = 80
	KEY_KP3        = 81
	KEY_KP0        = 82
	KEY_KPDOT      = 83

	KEY_ZENKAKUHANKAKU   = 85
	KEY_102ND            = 86
	KEY_F11              = 87
	KEY_F12              = 88
	KEY_RO               = 89
	KEY_KATAKANA         = 90
	KEY_HIRAGANA         = 91
	KEY_HENKAN           = 92
	KEY_KATAKANAHIRAGANA = 93
	KEY_MUHENKAN         = 94
	KEY_KPJPCOMMA        = 95
	KEY_KPENTER          = 96
	KEY_RIGHTCTRL        = 97
	KEY_KPSLASH          = 98
	KEY_SYSRQ            = 99
	KEY_RIGHTALT         = 100
	KEY_LINEFEED         = 101
	KEY_HOME             = 102
	KEY_UP               = 103
	KEY_PAGEUP           = 104
	KEY_LEFT             = 105
	KEY_RIGHT            = 106
	KEY_END              = 107
	KEY_DOWN             = 108
	KEY_PAGEDOWN         = 109
	KEY_INSERT           = 110
	KEY_DELETE           = 111
	KEY_MACRO            = 112
	KEY_MUTE             = 113
	KEY_VOLUMEDOWN       = 114
	KEY_VOLUMEUP         = 115
	KEY_POWER            = 116 // SC System Power Down
	KEY_KPEQUAL          = 117
	KEY_KPPLUSMINUS      = 118
	KEY_PAUSE            = 119
	KEY_SCALE            = 120 // AL Compiz Scale (Expose)

	KEY_KPCOMMA   = 121
	KEY_HANGEUL   = 122
	KEY_HANGUEL   = KEY_HANGEUL
	KEY_HANJA     = 123
	KEY_YEN       = 124
	KEY_LEFTMETA  = 125
	KEY_RIGHTMETA = 126
	KEY_COMPOSE   = 127

	KEY_STOP           = 128 // AC Stop
	KEY_AGAIN          = 129
	KEY_PROPS          = 130 // AC Properties
	KEY_UNDO           = 131 // AC Undo
	KEY_FRONT          = 132
	KEY_COPY           = 133 // AC Copy
	KEY_OPEN           = 134 // AC Open
	KEY_PASTE          = 135 // AC Paste
	KEY_FIND           = 136 // AC Search
	KEY_CUT            = 137 // AC Cut
	KEY_HELP           = 138 // AL Integrated Help Center
	KEY_MENU           = 139 // Menu (show menu)
	KEY_CALC           = 140 // AL Calculator
	KEY_SETUP          = 141
	KEY_SLEEP          = 142 // SC System Sleep
	KEY_WAKEUP         = 143 // System Wake Up
	KEY_FILE           = 144 // AL Local Machine Browser
	KEY_SENDFILE       = 145
	KEY_DELETEFILE     = 146
	KEY_XFER           = 147
	KEY_PROG1          = 148
	KEY_PROG2          = 149
	KEY_WWW            = 150 // AL Internet Browser
	KEY_MSDOS          = 151
	KEY_COFFEE         = 152 // AL Terminal Lock/Screensaver
	KEY_SCREENLOCK     = KEY_COFFEE
	KEY_ROTATE_DISPLAY = 153 // Display orientation for e.g. tablets
	KEY_DIRECTION      = KEY_ROTATE_DISPLAY
	KEY_CYCLEWINDOWS   = 154
	KEY_MAIL           = 155
	KEY_BOOKMARKS      = 156 // AC Bookmarks
	KEY_COMPUTER       = 157
	KEY_BACK           = 158 // AC Back
	KEY_FORWARD        = 159 // AC Forward
	KEY_CLOSECD        = 160
	KEY_EJECTCD        = 161
	KEY_EJECTCLOSECD   = 162
	KEY_NEXTSONG       = 163
	KEY_PLAYPAUSE      = 164
	KEY_PREVIOUSSONG   = 165
	KEY_STOPCD         = 166
	KEY_RECORD         = 167
	KEY_REWIND         = 168
	KEY_PHONE          = 169 // Media Select Telephone
	KEY_ISO            = 170
	KEY_CONFIG         = 171 // AL Consumer Control Configuration
	KEY_HOMEPAGE       = 172 // AC Home
	KEY_REFRESH        = 173 // AC Refresh
	KEY_EXIT           = 174 // AC Exit
	KEY_MOVE           = 175
	KEY_EDIT           = 176
	KEY_SCROLLUP       = 177
	KEY_SCROLLDOWN     = 178
	KEY_KPLEFTPAREN    = 179
	KEY_KPRIGHTPAREN   = 180
	KEY_NEW            = 181 // AC New
	KEY_REDO           = 182 // AC Redo/Repeat

	KEY_F13 = 183
	KEY_F14 = 184
	KEY_F15 = 185
	KEY_F16 = 186
	KEY_F17 = 187
	KEY_F18 = 188
	KEY_F19 = 189
	KEY_F20 = 190
	KEY_F21 = 191
	KEY_F22 = 192
	KEY_F23 = 193
	KEY_F24 = 194

	KEY_PLAYCD           = 200
	KEY_PAUSECD          = 201
	KEY_PROG3            = 202
	KEY_PROG4            = 203
	KEY_ALL_APPLICATIONS = 204 // AC Desktop Show All Applications
	KEY_DASHBOARD        = KEY_ALL_APPLICATIONS
	KEY_SUSPEND          = 205
	KEY_CLOSE            = 206 // AC Close
	KEY_PLAY             = 207
	KEY_FASTFORWARD      = 208
	KEY_BASSBOOST        = 209
	KEY_PRINT            = 210 // AC Print
	KEY_HP               = 211
	KEY_CAMERA           = 212
	KEY_SOUND            = 213
	KEY_QUESTION         = 214
	KEY_EMAIL            = 215
	KEY_CHAT             = 216
	KEY_SEARCH           = 217
	KEY_CONNECT          = 218
	KEY_FINANCE          = 219 // AL Checkbook/Finance
	KEY_SPORT            = 220
	KEY_SHOP             = 221
	KEY_ALTERASE         = 222
	KEY_CANCEL           = 223 // AC Cancel
	KEY_BRIGHTNESSDOWN   = 224
	KEY_BRIGHTNESSUP     = 225
	KEY_MEDIA            = 226

	KEY_SWITCHVIDEOMODE = 227 // Cycle between available videooutputs (Monitor/LCD/TV-out/etc)

	KEY_KBDILLUMTOGGLE = 228
	KEY_KBDILLUMDOWN   = 229
	KEY_KBDILLUMUP     = 230

	KEY_SEND        = 231 // AC Send
	KEY_REPLY       = 232 // AC Reply
	KEY_FORWARDMAIL = 233 // AC Forward Msg
	KEY_SAVE        = 234 // AC Save
	KEY_DOCUMENTS   = 235

	KEY_BATTERY = 236

	KEY_BLUETOOTH = 237
	KEY_WLAN      = 238
	KEY_UWB       = 239

	KEY_UNKNOWN = 240

	KEY_VIDEO_NEXT       = 241 // drive next video source
	KEY_VIDEO_PREV       = 242 // drive previous video source
	KEY_BRIGHTNESS_CYCLE = 243 // brightness up, after max is min
	KEY_BRIGHTNESS_AUTO  = 244 // Set Auto Brightness: manualbrightness control is off,rely on ambient

	KEY_BRIGHTNESS_ZERO = KEY_BRIGHTNESS_AUTO
	KEY_DISPLAY_OFF     = 245 // display device to off state

	KEY_WWAN   = 246 // Wireless WAN (LTE, UMTS, GSM, etc.)
	KEY_WIMAX  = KEY_WWAN
	KEY_RFKILL = 247 // Key that controls all radios

	KEY_MICMUTE = 248 // Mute / unmute the microphone

	BTN_MISC = 0x100
	BTN_0    = 0x100
	BTN_1    = 0x101
	BTN_2    = 0x102
	BTN_3    = 0x103
	BTN_4    = 0x104
	BTN_5    = 0x105
	BTN_6    = 0x106
	BTN_7    = 0x107
	BTN_8    = 0x108
	BTN_9    = 0x109

	BTN_MOUSE   = 0x110
	BTN_LEFT    = 0x110
	BTN_RIGHT   = 0x111
	BTN_MIDDLE  = 0x112
	BTN_SIDE    = 0x113
	BTN_EXTRA   = 0x114
	BTN_FORWARD = 0x115
	BTN_BACK    = 0x116
	BTN_TASK    = 0x117

	BTN_JOYSTICK = 0x120
	BTN_TRIGGER  = 0x120
	BTN_THUMB    = 0x121
	BTN_THUMB2   = 0x122
	BTN_TOP      = 0x123
	BTN_TOP2     = 0x124
	BTN_PINKIE   = 0x125
	BTN_BASE     = 0x126
	BTN_BASE2    = 0x127
	BTN_BASE3    = 0x128
	BTN_BASE4    = 0x129
	BTN_BASE5    = 0x12a
	BTN_BASE6    = 0x12b
	BTN_DEAD     = 0x12f

	BTN_GAMEPAD = 0x130
	BTN_SOUTH   = 0x130
	BTN_A       = BTN_SOUTH
	BTN_EAST    = 0x131
	BTN_B       = BTN_EAST
	BTN_C       = 0x132
	BTN_NORTH   = 0x133
	BTN_X       = BTN_NORTH
	BTN_WEST    = 0x134
	BTN_Y       = BTN_WEST
	BTN_Z       = 0x135
	BTN_TL      = 0x136
	BTN_TR      = 0x137
	BTN_TL2     = 0x138
	BTN_TR2     = 0x139
	BTN_SELECT  = 0x13a
	BTN_START   = 0x13b
	BTN_MODE    = 0x13c
	BTN_THUMBL  = 0x13d
	BTN_THUMBR  = 0x13e

	BTN_DIGI           = 0x140
	BTN_TOOL_PEN       = 0x140
	BTN_TOOL_RUBBER    = 0x141
	BTN_TOOL_BRUSH     = 0x142
	BTN_TOOL_PENCIL    = 0x143
	BTN_TOOL_AIRBRUSH  = 0x144
	BTN_TOOL_FINGER    = 0x145
	BTN_TOOL_MOUSE     = 0x146
	BTN_TOOL_LENS      = 0x147
	BTN_TOOL_QUINTTAP  = 0x148 // Five fingers on trackpad
	BTN_STYLUS3        = 0x149
	BTN_TOUCH          = 0x14a
	BTN_STYLUS         = 0x14b
	BTN_STYLUS2        = 0x14c
	BTN_TOOL_DOUBLETAP = 0x14d
	BTN_TOOL_TRIPLETAP = 0x14e
	BTN_TOOL_QUADTAP   = 0x14f // Four fingers on trackpad

	BTN_WHEEL     = 0x150
	BTN_GEAR_DOWN = 0x150
	BTN_GEAR_UP   = 0x151

	KEY_OK                = 0x160
	KEY_SELECT            = 0x161
	KEY_GOTO              = 0x162
	KEY_CLEAR             = 0x163
	KEY_POWER2            = 0x164
	KEY_OPTION            = 0x165
	KEY_INFO              = 0x166 // AL OEM Features/Tips/Tutorial
	KEY_TIME              = 0x167
	KEY_VENDOR            = 0x168
	KEY_ARCHIVE           = 0x169
	KEY_PROGRAM           = 0x16a // Media Select Program Guide
	KEY_CHANNEL           = 0x16b
	KEY_FAVORITES         = 0x16c
	KEY_EPG               = 0x16d
	KEY_PVR               = 0x16e // Media Select Home
	KEY_MHP               = 0x16f
	KEY_LANGUAGE          = 0x170
	KEY_TITLE             = 0x171
	KEY_SUBTITLE          = 0x172
	KEY_ANGLE             = 0x173
	KEY_FULL_SCREEN       = 0x174 // AC View Toggle
	KEY_ZOOM              = KEY_FULL_SCREEN
	KEY_MODE              = 0x175
	KEY_KEYBOARD          = 0x176
	KEY_ASPECT_RATIO      = 0x177 // HUTRR37: Aspect
	KEY_SCREEN            = KEY_ASPECT_RATIO
	KEY_PC                = 0x178 // Media Select Computer
	KEY_TV                = 0x179 // Media Select TV
	KEY_TV2               = 0x17a // Media Select Cable
	KEY_VCR               = 0x17b // Media Select VCR
	KEY_VCR2              = 0x17c // VCR Plus
	KEY_SAT               = 0x17d // Media Select Satellite
	KEY_SAT2              = 0x17e
	KEY_CD                = 0x17f // Media Select CD
	KEY_TAPE              = 0x180 // Media Select Tape
	KEY_RADIO             = 0x181
	KEY_TUNER             = 0x182 // Media Select Tuner
	KEY_PLAYER            = 0x183
	KEY_TEXT              = 0x184
	KEY_DVD               = 0x185 // Media Select DVD
	KEY_AUX               = 0x186
	KEY_MP3               = 0x187
	KEY_AUDIO             = 0x188 // AL Audio Browser
	KEY_VIDEO             = 0x189 // AL Movie Browser
	KEY_DIRECTORY         = 0x18a
	KEY_LIST              = 0x18b
	KEY_MEMO              = 0x18c // Media Select Messages
	KEY_CALENDAR          = 0x18d
	KEY_RED               = 0x18e
	KEY_GREEN             = 0x18f
	KEY_YELLOW            = 0x190
	KEY_BLUE              = 0x191
	KEY_CHANNELUP         = 0x192 // Channel Increment
	KEY_CHANNELDOWN       = 0x193 // Channel Decrement
	KEY_FIRST             = 0x194
	KEY_LAST              = 0x195 // Recall Last
	KEY_AB                = 0x196
	KEY_NEXT              = 0x197
	KEY_RESTART           = 0x198
	KEY_SLOW              = 0x199
	KEY_SHUFFLE           = 0x19a
	KEY_BREAK             = 0x19b
	KEY_PREVIOUS          = 0x19c
	KEY_DIGITS            = 0x19d
	KEY_TEEN              = 0x19e
	KEY_TWEN              = 0x19f
	KEY_VIDEOPHONE        = 0x1a0 // Media Select Video Phone
	KEY_GAMES             = 0x1a1 // Media Select Games
	KEY_ZOOMIN            = 0x1a2 // AC Zoom In
	KEY_ZOOMOUT           = 0x1a3 // AC Zoom Out
	KEY_ZOOMRESET         = 0x1a4 // AC Zoom
	KEY_WORDPROCESSOR     = 0x1a5 // AL Word Processor
	KEY_EDITOR            = 0x1a6 // AL Text Editor
	KEY_SPREADSHEET       = 0x1a7 // AL Spreadsheet
	KEY_GRAPHICSEDITOR    = 0x1a8 // AL Graphics Editor
	KEY_PRESENTATION      = 0x1a9 // AL Presentation App
	KEY_DATABASE          = 0x1aa // AL Database App
	KEY_NEWS              = 0x1ab // AL Newsreader
	KEY_VOICEMAIL         = 0x1ac // AL Voicemail
	KEY_ADDRESSBOOK       = 0x1ad // AL Contacts/Address Book
	KEY_MESSENGER         = 0x1ae // AL Instant Messaging
	KEY_DISPLAYTOGGLE     = 0x1af // Turn display (LCD) on and off
	KEY_BRIGHTNESS_TOGGLE = KEY_DISPLAYTOGGLE
	KEY_SPELLCHECK        = 0x1b0 // AL Spell Check
	KEY_LOGOFF            = 0x1b1 // AL Logoff

	KEY_DOLLAR = 0x1b2
	KEY_EURO   = 0x1b3

	KEY_FRAMEBACK           = 0x1b4 // Consumer - transport controls
	KEY_FRAMEFORWARD        = 0x1b5
	KEY_CONTEXT_MENU        = 0x1b6 // GenDesc - system context menu
	KEY_MEDIA_REPEAT        = 0x1b7 // Consumer - transport control
	KEY_10CHANNELSUP        = 0x1b8 // 10 channels up (10+)
	KEY_10CHANNELSDOWN      = 0x1b9 // 10 channels down (10-)
	KEY_IMAGES              = 0x1ba // AL Image Browser
	KEY_NOTIFICATION_CENTER = 0x1bc // Show/hide the notification center
	KEY_PICKUP_PHONE        = 0x1bd // Answer incoming call
	KEY_HANGUP_PHONE        = 0x1be // Decline incoming call

	KEY_DEL_EOL  = 0x1c0
	KEY_DEL_EOS  = 0x1c1
	KEY_INS_LINE = 0x1c2
	KEY_DEL_LINE = 0x1c3

	KEY_FN             = 0x1d0
	KEY_FN_ESC         = 0x1d1
	KEY_FN_F1          = 0x1d2
	KEY_FN_F2          = 0x1d3
	KEY_FN_F3          = 0x1d4
	KEY_FN_F4          = 0x1d5
	KEY_FN_F5          = 0x1d6
	KEY_FN_F6          = 0x1d7
	KEY_FN_F7          = 0x1d8
	KEY_FN_F8          = 0x1d9
	KEY_FN_F9          = 0x1da
	KEY_FN_F10         = 0x1db
	KEY_FN_F11         = 0x1dc
	KEY_FN_F12         = 0x1dd
	KEY_FN_1           = 0x1de
	KEY_FN_2           = 0x1df
	KEY_FN_D           = 0x1e0
	KEY_FN_E           = 0x1e1
	KEY_FN_F           = 0x1e2
	KEY_FN_S           = 0x1e3
	KEY_FN_B           = 0x1e4
	KEY_FN_RIGHT_SHIFT = 0x1e5

	KEY_BRL_DOT1  = 0x1f1
	KEY_BRL_DOT2  = 0x1f2
	KEY_BRL_DOT3  = 0x1f3
	KEY_BRL_DOT4  = 0x1f4
	KEY_BRL_DOT5  = 0x1f5
	KEY_BRL_DOT6  = 0x1f6
	KEY_BRL_DOT7  = 0x1f7
	KEY_BRL_DOT8  = 0x1f8
	KEY_BRL_DOT9  = 0x1f9
	KEY_BRL_DOT10 = 0x1fa

	KEY_NUMERIC_0     = 0x200 // used by phones, remote controls,
	KEY_NUMERIC_1     = 0x201 // and other keypads
	KEY_NUMERIC_2     = 0x202
	KEY_NUMERIC_3     = 0x203
	KEY_NUMERIC_4     = 0x204
	KEY_NUMERIC_5     = 0x205
	KEY_NUMERIC_6     = 0x206
	KEY_NUMERIC_7     = 0x207
	KEY_NUMERIC_8     = 0x208
	KEY_NUMERIC_9     = 0x209
	KEY_NUMERIC_STAR  = 0x20a
	KEY_NUMERIC_POUND = 0x20b
	KEY_NUMERIC_A     = 0x20c // Phone key A - HUT Telephony 0xb9
	KEY_NUMERIC_B     = 0x20d
	KEY_NUMERIC_C     = 0x20e
	KEY_NUMERIC_D     = 0x20f

	KEY_CAMERA_FOCUS = 0x210
	KEY_WPS_BUTTON   = 0x211 // WiFi Protected Setup key

	KEY_TOUCHPAD_TOGGLE = 0x212 // Request switch touchpad on or off
	KEY_TOUCHPAD_ON     = 0x213
	KEY_TOUCHPAD_OFF    = 0x214

	KEY_CAMERA_ZOOMIN  = 0x215
	KEY_CAMERA_ZOOMOUT = 0x216
	KEY_CAMERA_UP      = 0x217
	KEY_CAMERA_DOWN    = 0x218
	KEY_CAMERA_LEFT    = 0x219
	KEY_CAMERA_RIGHT   = 0x21a

	KEY_ATTENDANT_ON     = 0x21b
	KEY_ATTENDANT_OFF    = 0x21c
	KEY_ATTENDANT_TOGGLE = 0x21d // Attendant call on or off
	KEY_LIGHTS_TOGGLE    = 0x21e // Reading light on or off

	BTN_DPAD_UP    = 0x220
	BTN_DPAD_DOWN  = 0x221
	BTN_DPAD_LEFT  = 0x222
	BTN_DPAD_RIGHT = 0x223

	KEY_ALS_TOGGLE         = 0x230 // Ambient light sensor
	KEY_ROTATE_LOCK_TOGGLE = 0x231 // Display rotation lock

	KEY_BUTTONCONFIG          = 0x240 // AL Button Configuration
	KEY_TASKMANAGER           = 0x241 // AL Task/Project Manager
	KEY_JOURNAL               = 0x242 // AL Log/Journal/Timecard
	KEY_CONTROLPANEL          = 0x243 // AL Control Panel
	KEY_APPSELECT             = 0x244 // AL Select Task/Application
	KEY_SCREENSAVER           = 0x245 // AL Screen Saver
	KEY_VOICECOMMAND          = 0x246 // Listening Voice Command
	KEY_ASSISTANT             = 0x247 // AL Context-aware desktop assistant
	KEY_KBD_LAYOUT_NEXT       = 0x248 // AC Next Keyboard Layout Select
	KEY_EMOJI_PICKER          = 0x249 // Show/hide emoji picker (HUTRR101)
	KEY_DICTATE               = 0x24a // Start or Stop Voice Dictation Session (HUTRR99)
	KEY_CAMERA_ACCESS_ENABLE  = 0x24b // Enables programmatic access to camera devices. (HUTRR72)
	KEY_CAMERA_ACCESS_DISABLE = 0x24c // Disables programmatic access to camera devices. (HUTRR72)
	KEY_CAMERA_ACCESS_TOGGLE  = 0x24d // Toggles the current state of the camera access control. (HUTRR72)

	KEY_BRIGHTNESS_MIN = 0x250 // Set Brightness to Minimum
	KEY_BRIGHTNESS_MAX = 0x251 // Set Brightness to Maximum

	KEY_KBDINPUTASSIST_PREV      = 0x260
	KEY_KBDINPUTASSIST_NEXT      = 0x261
	KEY_KBDINPUTASSIST_PREVGROUP = 0x262
	KEY_KBDINPUTASSIST_NEXTGROUP = 0x263
	KEY_KBDINPUTASSIST_ACCEPT    = 0x264
	KEY_KBDINPUTASSIST_CANCEL    = 0x265

	KEY_RIGHT_UP   = 0x266
	KEY_RIGHT_DOWN = 0x267
	KEY_LEFT_UP    = 0x268
	KEY_LEFT_DOWN  = 0x269

	KEY_ROOT_MENU = 0x26a // Show Device's Root Menu

	KEY_MEDIA_TOP_MENU = 0x26b
	KEY_NUMERIC_11     = 0x26c
	KEY_NUMERIC_12     = 0x26d

	KEY_AUDIO_DESC    = 0x26e
	KEY_3D_MODE       = 0x26f
	KEY_NEXT_FAVORITE = 0x270
	KEY_STOP_RECORD   = 0x271
	KEY_PAUSE_RECORD  = 0x272
	KEY_VOD           = 0x273 // Video on Demand
	KEY_UNMUTE        = 0x274
	KEY_FASTREVERSE   = 0x275
	KEY_SLOWREVERSE   = 0x276

	KEY_DATA              = 0x277
	KEY_ONSCREEN_KEYBOARD = 0x278

	KEY_PRIVACY_SCREEN_TOGGLE = 0x279

	KEY_SELECTIVE_SCREENSHOT = 0x27a

	KEY_NEXT_ELEMENT     = 0x27b
	KEY_PREVIOUS_ELEMENT = 0x27c

	KEY_AUTOPILOT_ENGAGE_TOGGLE = 0x27d

	KEY_MARK_WAYPOINT      = 0x27e
	KEY_SOS                = 0x27f
	KEY_NAV_CHART          = 0x280
	KEY_FISHING_CHART      = 0x281
	KEY_SINGLE_RANGE_RADAR = 0x282
	KEY_DUAL_RANGE_RADAR   = 0x283
	KEY_RADAR_OVERLAY      = 0x284
	KEY_TRADITIONAL_SONAR  = 0x285
	KEY_CLEARVU_SONAR      = 0x286
	KEY_SIDEVU_SONAR       = 0x287
	KEY_NAV_INFO           = 0x288
	KEY_BRIGHTNESS_MENU    = 0x289

	KEY_MACRO1  = 0x290
	KEY_MACRO2  = 0x291
	KEY_MACRO3  = 0x292
	KEY_MACRO4  = 0x293
	KEY_MACRO5  = 0x294
	KEY_MACRO6  = 0x295
	KEY_MACRO7  = 0x296
	KEY_MACRO8  = 0x297
	KEY_MACRO9  = 0x298
	KEY_MACRO10 = 0x299
	KEY_MACRO11 = 0x29a
	KEY_MACRO12 = 0x29b
	KEY_MACRO13 = 0x29c
	KEY_MACRO14 = 0x29d
	KEY_MACRO15 = 0x29e
	KEY_MACRO16 = 0x29f
	KEY_MACRO17 = 0x2a0
	KEY_MACRO18 = 0x2a1
	KEY_MACRO19 = 0x2a2
	KEY_MACRO20 = 0x2a3
	KEY_MACRO21 = 0x2a4
	KEY_MACRO22 = 0x2a5
	KEY_MACRO23 = 0x2a6
	KEY_MACRO24 = 0x2a7
	KEY_MACRO25 = 0x2a8
	KEY_MACRO26 = 0x2a9
	KEY_MACRO27 = 0x2aa
	KEY_MACRO28 = 0x2ab
	KEY_MACRO29 = 0x2ac
	KEY_MACRO30 = 0x2ad

	KEY_MACRO_RECORD_START = 0x2b0
	KEY_MACRO_RECORD_STOP  = 0x2b1
	KEY_MACRO_PRESET_CYCLE = 0x2b2
	KEY_MACRO_PRESET1      = 0x2b3
	KEY_MACRO_PRESET2      = 0x2b4
	KEY_MACRO_PRESET3      = 0x2b5

	KEY_KBD_LCD_MENU1 = 0x2b8
	KEY_KBD_LCD_MENU2 = 0x2b9
	KEY_KBD_LCD_MENU3 = 0x2ba
	KEY_KBD_LCD_MENU4 = 0x2bb
	KEY_KBD_LCD_MENU5 = 0x2bc

	BTN_TRIGGER_HAPPY   = 0x2c0
	BTN_TRIGGER_HAPPY1  = 0x2c0
	BTN_TRIGGER_HAPPY2  = 0x2c1
	BTN_TRIGGER_HAPPY3  = 0x2c2
	BTN_TRIGGER_HAPPY4  = 0x2c3
	BTN_TRIGGER_HAPPY5  = 0x2c4
	BTN_TRIGGER_HAPPY6  = 0x2c5
	BTN_TRIGGER_HAPPY7  = 0x2c6
	BTN_TRIGGER_HAPPY8  = 0x2c7
	BTN_TRIGGER_HAPPY9  = 0x2c8
	BTN_TRIGGER_HAPPY10 = 0x2c9
	BTN_TRIGGER_HAPPY11 = 0x2ca
	BTN_TRIGGER_HAPPY12 = 0x2cb
	BTN_TRIGGER_HAPPY13 = 0x2cc
	BTN_TRIGGER_HAPPY14 = 0x2cd
	BTN_TRIGGER_HAPPY15 = 0x2ce
	BTN_TRIGGER_HAPPY16 = 0x2cf
	BTN_TRIGGER_HAPPY17 = 0x2d0
	BTN_TRIGGER_HAPPY18 = 0x2d1
	BTN_TRIGGER_HAPPY19 = 0x2d2
	BTN_TRIGGER_HAPPY20 = 0x2d3
	BTN_TRIGGER_HAPPY21 = 0x2d4
	BTN_TRIGGER_HAPPY22 = 0x2d5
	BTN_TRIGGER_HAPPY23 = 0x2d6
	BTN_TRIGGER_HAPPY24 = 0x2d7
	BTN_TRIGGER_HAPPY25 = 0x2d8
	BTN_TRIGGER_HAPPY26 = 0x2d9
	BTN_TRIGGER_HAPPY27 = 0x2da
	BTN_TRIGGER_HAPPY28 = 0x2db
	BTN_TRIGGER_HAPPY29 = 0x2dc
	BTN_TRIGGER_HAPPY30 = 0x2dd
	BTN_TRIGGER_HAPPY31 = 0x2de
	BTN_TRIGGER_HAPPY32 = 0x2df
	BTN_TRIGGER_HAPPY33 = 0x2e0
	BTN_TRIGGER_HAPPY34 = 0x2e1
	BTN_TRIGGER_HAPPY35 = 0x2e2
	BTN_TRIGGER_HAPPY36 = 0x2e3
	BTN_TRIGGER_HAPPY37 = 0x2e4
	BTN_TRIGGER_HAPPY38 = 0x2e5
	BTN_TRIGGER_HAPPY39 = 0x2e6
	BTN_TRIGGER_HAPPY40 = 0x2e7

	KEY_MIN_INTERESTING = KEY_MUTE
	KEY_MAX             = 0x2ff
	KEY_CNT             = (KEY_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

View Source
const (
	REL_X      = 0x00
	REL_Y      = 0x01
	REL_Z      = 0x02
	REL_RX     = 0x03
	REL_RY     = 0x04
	REL_RZ     = 0x05
	REL_HWHEEL = 0x06
	REL_DIAL   = 0x07
	REL_WHEEL  = 0x08
	REL_MISC   = 0x09

	REL_RESERVED      = 0x0a
	REL_WHEEL_HI_RES  = 0x0b
	REL_HWHEEL_HI_RES = 0x0c
	REL_MAX           = 0x0f
	REL_CNT           = (REL_MAX + 1)
)

Relative axes

View Source
const (
	ABS_X          = 0x00
	ABS_Y          = 0x01
	ABS_Z          = 0x02
	ABS_RX         = 0x03
	ABS_RY         = 0x04
	ABS_RZ         = 0x05
	ABS_THROTTLE   = 0x06
	ABS_RUDDER     = 0x07
	ABS_WHEEL      = 0x08
	ABS_GAS        = 0x09
	ABS_BRAKE      = 0x0a
	ABS_HAT0X      = 0x10
	ABS_HAT0Y      = 0x11
	ABS_HAT1X      = 0x12
	ABS_HAT1Y      = 0x13
	ABS_HAT2X      = 0x14
	ABS_HAT2Y      = 0x15
	ABS_HAT3X      = 0x16
	ABS_HAT3Y      = 0x17
	ABS_PRESSURE   = 0x18
	ABS_DISTANCE   = 0x19
	ABS_TILT_X     = 0x1a
	ABS_TILT_Y     = 0x1b
	ABS_TOOL_WIDTH = 0x1c

	ABS_VOLUME  = 0x20
	ABS_PROFILE = 0x21

	ABS_MISC = 0x28

	ABS_RESERVED = 0x2e

	ABS_MT_SLOT        = 0x2f // MT slot being modified
	ABS_MT_TOUCH_MAJOR = 0x30 // Major axis of touching ellipse
	ABS_MT_TOUCH_MINOR = 0x31 // Minor axis (omit if circular)
	ABS_MT_WIDTH_MAJOR = 0x32 // Major axis of approaching ellipse
	ABS_MT_WIDTH_MINOR = 0x33 // Minor axis (omit if circular)
	ABS_MT_ORIENTATION = 0x34 // Ellipse orientation
	ABS_MT_POSITION_X  = 0x35 // Center X touch position
	ABS_MT_POSITION_Y  = 0x36 // Center Y touch position
	ABS_MT_TOOL_TYPE   = 0x37 // Type of touching device
	ABS_MT_BLOB_ID     = 0x38 // Group a set of packets as a blob
	ABS_MT_TRACKING_ID = 0x39 // Unique ID of initiated contact
	ABS_MT_PRESSURE    = 0x3a // Pressure on contact area
	ABS_MT_DISTANCE    = 0x3b // Contact hover distance
	ABS_MT_TOOL_X      = 0x3c // Center X tool position
	ABS_MT_TOOL_Y      = 0x3d // Center Y tool position

	ABS_MAX = 0x3f
	ABS_CNT = (ABS_MAX + 1)
)

Absolute axes

View Source
const (
	SW_LID              = 0x00 // set = lid shut
	SW_TABLET_MODE      = 0x01 // set = tablet mode
	SW_HEADPHONE_INSERT = 0x02 // set = inserted
	SW_RFKILL_ALL       = 0x03 // rfkill master switch, type "any"set = radio enabled

	SW_RADIO                = SW_RFKILL_ALL // deprecated
	SW_MICROPHONE_INSERT    = 0x04          // set = inserted
	SW_DOCK                 = 0x05          // set = plugged into dock
	SW_LINEOUT_INSERT       = 0x06          // set = inserted
	SW_JACK_PHYSICAL_INSERT = 0x07          // set = mechanical switch set
	SW_VIDEOOUT_INSERT      = 0x08          // set = inserted
	SW_CAMERA_LENS_COVER    = 0x09          // set = lens covered
	SW_KEYPAD_SLIDE         = 0x0a          // set = keypad slide out
	SW_FRONT_PROXIMITY      = 0x0b          // set = front proximity sensor active
	SW_ROTATE_LOCK          = 0x0c          // set = rotate locked/disabled
	SW_LINEIN_INSERT        = 0x0d          // set = inserted
	SW_MUTE_DEVICE          = 0x0e          // set = device disabled
	SW_PEN_INSERTED         = 0x0f          // set = pen inserted
	SW_MACHINE_COVER        = 0x10          // set = cover closed
	SW_MAX                  = 0x10
	SW_CNT                  = (SW_MAX + 1)
)

Switch events

View Source
const (
	MSC_SERIAL    = 0x00
	MSC_PULSELED  = 0x01
	MSC_GESTURE   = 0x02
	MSC_RAW       = 0x03
	MSC_SCAN      = 0x04
	MSC_TIMESTAMP = 0x05
	MSC_MAX       = 0x07
	MSC_CNT       = (MSC_MAX + 1)
)

Misc events

View Source
const (
	LED_NUML     = 0x00
	LED_CAPSL    = 0x01
	LED_SCROLLL  = 0x02
	LED_COMPOSE  = 0x03
	LED_KANA     = 0x04
	LED_SLEEP    = 0x05
	LED_SUSPEND  = 0x06
	LED_MUTE     = 0x07
	LED_MISC     = 0x08
	LED_MAIL     = 0x09
	LED_CHARGING = 0x0a
	LED_MAX      = 0x0f
	LED_CNT      = (LED_MAX + 1)
)

LEDs

View Source
const (
	REP_DELAY  = 0x00
	REP_PERIOD = 0x01
	REP_MAX    = 0x01
	REP_CNT    = (REP_MAX + 1)
)

Autorepeat values

View Source
const (
	SND_CLICK = 0x00
	SND_BELL  = 0x01
	SND_TONE  = 0x02
	SND_MAX   = 0x07
	SND_CNT   = (SND_MAX + 1)
)

Sounds

View Source
const (
	ID_BUS     = 0
	ID_VENDOR  = 1
	ID_PRODUCT = 2
	ID_VERSION = 3
)

IDs.

View Source
const (
	BUS_PCI       = 0x01
	BUS_ISAPNP    = 0x02
	BUS_USB       = 0x03
	BUS_HIL       = 0x04
	BUS_BLUETOOTH = 0x05
	BUS_VIRTUAL   = 0x06

	BUS_ISA         = 0x10
	BUS_I8042       = 0x11
	BUS_XTKBD       = 0x12
	BUS_RS232       = 0x13
	BUS_GAMEPORT    = 0x14
	BUS_PARPORT     = 0x15
	BUS_AMIGA       = 0x16
	BUS_ADB         = 0x17
	BUS_I2C         = 0x18
	BUS_HOST        = 0x19
	BUS_GSC         = 0x1A
	BUS_ATARI       = 0x1B
	BUS_SPI         = 0x1C
	BUS_RMI         = 0x1D
	BUS_CEC         = 0x1E
	BUS_INTEL_ISHTP = 0x1F
	BUS_AMD_SFH     = 0x20
)
View Source
const (
	MT_TOOL_FINGER = 0x00
	MT_TOOL_PEN    = 0x01
	MT_TOOL_PALM   = 0x02
	MT_TOOL_DIAL   = 0x0a
	MT_TOOL_MAX    = 0x0f
)

MT_TOOL types

View Source
const (
	FF_STATUS_STOPPED = 0x00
	FF_STATUS_PLAYING = 0x01
	FF_STATUS_MAX     = 0x01

	FF_RUMBLE   = 0x50
	FF_PERIODIC = 0x51
	FF_CONSTANT = 0x52
	FF_SPRING   = 0x53
	FF_FRICTION = 0x54
	FF_DAMPER   = 0x55
	FF_INERTIA  = 0x56
	FF_RAMP     = 0x57

	FF_EFFECT_MIN = FF_RUMBLE
	FF_EFFECT_MAX = FF_RAMP

	FF_SQUARE   = 0x58
	FF_TRIANGLE = 0x59
	FF_SINE     = 0x5a
	FF_SAW_UP   = 0x5b
	FF_SAW_DOWN = 0x5c
	FF_CUSTOM   = 0x5d

	FF_WAVEFORM_MIN = FF_SQUARE
	FF_WAVEFORM_MAX = FF_CUSTOM

	FF_GAIN       = 0x60
	FF_AUTOCENTER = 0x61

	FF_MAX_EFFECTS = FF_GAIN

	FF_MAX = 0x7f
	FF_CNT = (FF_MAX + 1)
)

Values describing the status of a force-feedback effect

Variables

View Source
var ABSFromString = map[string]EvCode{
	"ABS_X":          ABS_X,
	"ABS_Y":          ABS_Y,
	"ABS_Z":          ABS_Z,
	"ABS_RX":         ABS_RX,
	"ABS_RY":         ABS_RY,
	"ABS_RZ":         ABS_RZ,
	"ABS_THROTTLE":   ABS_THROTTLE,
	"ABS_RUDDER":     ABS_RUDDER,
	"ABS_WHEEL":      ABS_WHEEL,
	"ABS_GAS":        ABS_GAS,
	"ABS_BRAKE":      ABS_BRAKE,
	"ABS_HAT0X":      ABS_HAT0X,
	"ABS_HAT0Y":      ABS_HAT0Y,
	"ABS_HAT1X":      ABS_HAT1X,
	"ABS_HAT1Y":      ABS_HAT1Y,
	"ABS_HAT2X":      ABS_HAT2X,
	"ABS_HAT2Y":      ABS_HAT2Y,
	"ABS_HAT3X":      ABS_HAT3X,
	"ABS_HAT3Y":      ABS_HAT3Y,
	"ABS_PRESSURE":   ABS_PRESSURE,
	"ABS_DISTANCE":   ABS_DISTANCE,
	"ABS_TILT_X":     ABS_TILT_X,
	"ABS_TILT_Y":     ABS_TILT_Y,
	"ABS_TOOL_WIDTH": ABS_TOOL_WIDTH,

	"ABS_VOLUME":  ABS_VOLUME,
	"ABS_PROFILE": ABS_PROFILE,

	"ABS_MISC": ABS_MISC,

	"ABS_RESERVED": ABS_RESERVED,

	"ABS_MT_SLOT":        ABS_MT_SLOT,
	"ABS_MT_TOUCH_MAJOR": ABS_MT_TOUCH_MAJOR,
	"ABS_MT_TOUCH_MINOR": ABS_MT_TOUCH_MINOR,
	"ABS_MT_WIDTH_MAJOR": ABS_MT_WIDTH_MAJOR,
	"ABS_MT_WIDTH_MINOR": ABS_MT_WIDTH_MINOR,
	"ABS_MT_ORIENTATION": ABS_MT_ORIENTATION,
	"ABS_MT_POSITION_X":  ABS_MT_POSITION_X,
	"ABS_MT_POSITION_Y":  ABS_MT_POSITION_Y,
	"ABS_MT_TOOL_TYPE":   ABS_MT_TOOL_TYPE,
	"ABS_MT_BLOB_ID":     ABS_MT_BLOB_ID,
	"ABS_MT_TRACKING_ID": ABS_MT_TRACKING_ID,
	"ABS_MT_PRESSURE":    ABS_MT_PRESSURE,
	"ABS_MT_DISTANCE":    ABS_MT_DISTANCE,
	"ABS_MT_TOOL_X":      ABS_MT_TOOL_X,
	"ABS_MT_TOOL_Y":      ABS_MT_TOOL_Y,

	"ABS_MAX": ABS_MAX,
	"ABS_CNT": ABS_CNT,
}
View Source
var ABSNames = map[EvCode]string{
	ABS_X:          "ABS_X",
	ABS_Y:          "ABS_Y",
	ABS_Z:          "ABS_Z",
	ABS_RX:         "ABS_RX",
	ABS_RY:         "ABS_RY",
	ABS_RZ:         "ABS_RZ",
	ABS_THROTTLE:   "ABS_THROTTLE",
	ABS_RUDDER:     "ABS_RUDDER",
	ABS_WHEEL:      "ABS_WHEEL",
	ABS_GAS:        "ABS_GAS",
	ABS_BRAKE:      "ABS_BRAKE",
	ABS_HAT0X:      "ABS_HAT0X",
	ABS_HAT0Y:      "ABS_HAT0Y",
	ABS_HAT1X:      "ABS_HAT1X",
	ABS_HAT1Y:      "ABS_HAT1Y",
	ABS_HAT2X:      "ABS_HAT2X",
	ABS_HAT2Y:      "ABS_HAT2Y",
	ABS_HAT3X:      "ABS_HAT3X",
	ABS_HAT3Y:      "ABS_HAT3Y",
	ABS_PRESSURE:   "ABS_PRESSURE",
	ABS_DISTANCE:   "ABS_DISTANCE",
	ABS_TILT_X:     "ABS_TILT_X",
	ABS_TILT_Y:     "ABS_TILT_Y",
	ABS_TOOL_WIDTH: "ABS_TOOL_WIDTH",

	ABS_VOLUME:  "ABS_VOLUME",
	ABS_PROFILE: "ABS_PROFILE",

	ABS_MISC: "ABS_MISC",

	ABS_RESERVED: "ABS_RESERVED",

	ABS_MT_SLOT:        "ABS_MT_SLOT",
	ABS_MT_TOUCH_MAJOR: "ABS_MT_TOUCH_MAJOR",
	ABS_MT_TOUCH_MINOR: "ABS_MT_TOUCH_MINOR",
	ABS_MT_WIDTH_MAJOR: "ABS_MT_WIDTH_MAJOR",
	ABS_MT_WIDTH_MINOR: "ABS_MT_WIDTH_MINOR",
	ABS_MT_ORIENTATION: "ABS_MT_ORIENTATION",
	ABS_MT_POSITION_X:  "ABS_MT_POSITION_X",
	ABS_MT_POSITION_Y:  "ABS_MT_POSITION_Y",
	ABS_MT_TOOL_TYPE:   "ABS_MT_TOOL_TYPE",
	ABS_MT_BLOB_ID:     "ABS_MT_BLOB_ID",
	ABS_MT_TRACKING_ID: "ABS_MT_TRACKING_ID",
	ABS_MT_PRESSURE:    "ABS_MT_PRESSURE",
	ABS_MT_DISTANCE:    "ABS_MT_DISTANCE",
	ABS_MT_TOOL_X:      "ABS_MT_TOOL_X",
	ABS_MT_TOOL_Y:      "ABS_MT_TOOL_Y",

	ABS_MAX: "ABS_MAX",
	ABS_CNT: "ABS_CNT",
}
View Source
var ABSToString = map[EvCode]string{
	ABS_X:          "ABS_X",
	ABS_Y:          "ABS_Y",
	ABS_Z:          "ABS_Z",
	ABS_RX:         "ABS_RX",
	ABS_RY:         "ABS_RY",
	ABS_RZ:         "ABS_RZ",
	ABS_THROTTLE:   "ABS_THROTTLE",
	ABS_RUDDER:     "ABS_RUDDER",
	ABS_WHEEL:      "ABS_WHEEL",
	ABS_GAS:        "ABS_GAS",
	ABS_BRAKE:      "ABS_BRAKE",
	ABS_HAT0X:      "ABS_HAT0X",
	ABS_HAT0Y:      "ABS_HAT0Y",
	ABS_HAT1X:      "ABS_HAT1X",
	ABS_HAT1Y:      "ABS_HAT1Y",
	ABS_HAT2X:      "ABS_HAT2X",
	ABS_HAT2Y:      "ABS_HAT2Y",
	ABS_HAT3X:      "ABS_HAT3X",
	ABS_HAT3Y:      "ABS_HAT3Y",
	ABS_PRESSURE:   "ABS_PRESSURE",
	ABS_DISTANCE:   "ABS_DISTANCE",
	ABS_TILT_X:     "ABS_TILT_X",
	ABS_TILT_Y:     "ABS_TILT_Y",
	ABS_TOOL_WIDTH: "ABS_TOOL_WIDTH",

	ABS_VOLUME:  "ABS_VOLUME",
	ABS_PROFILE: "ABS_PROFILE",

	ABS_MISC: "ABS_MISC",

	ABS_RESERVED: "ABS_RESERVED",

	ABS_MT_SLOT:        "ABS_MT_SLOT",
	ABS_MT_TOUCH_MAJOR: "ABS_MT_TOUCH_MAJOR",
	ABS_MT_TOUCH_MINOR: "ABS_MT_TOUCH_MINOR",
	ABS_MT_WIDTH_MAJOR: "ABS_MT_WIDTH_MAJOR",
	ABS_MT_WIDTH_MINOR: "ABS_MT_WIDTH_MINOR",
	ABS_MT_ORIENTATION: "ABS_MT_ORIENTATION",
	ABS_MT_POSITION_X:  "ABS_MT_POSITION_X",
	ABS_MT_POSITION_Y:  "ABS_MT_POSITION_Y",
	ABS_MT_TOOL_TYPE:   "ABS_MT_TOOL_TYPE",
	ABS_MT_BLOB_ID:     "ABS_MT_BLOB_ID",
	ABS_MT_TRACKING_ID: "ABS_MT_TRACKING_ID",
	ABS_MT_PRESSURE:    "ABS_MT_PRESSURE",
	ABS_MT_DISTANCE:    "ABS_MT_DISTANCE",
	ABS_MT_TOOL_X:      "ABS_MT_TOOL_X",
	ABS_MT_TOOL_Y:      "ABS_MT_TOOL_Y",

	ABS_MAX: "ABS_MAX",
	ABS_CNT: "ABS_CNT",
}
View Source
var BUSFromString = map[string]EvCode{
	"BUS_PCI":       BUS_PCI,
	"BUS_ISAPNP":    BUS_ISAPNP,
	"BUS_USB":       BUS_USB,
	"BUS_HIL":       BUS_HIL,
	"BUS_BLUETOOTH": BUS_BLUETOOTH,
	"BUS_VIRTUAL":   BUS_VIRTUAL,

	"BUS_ISA":         BUS_ISA,
	"BUS_I8042":       BUS_I8042,
	"BUS_XTKBD":       BUS_XTKBD,
	"BUS_RS232":       BUS_RS232,
	"BUS_GAMEPORT":    BUS_GAMEPORT,
	"BUS_PARPORT":     BUS_PARPORT,
	"BUS_AMIGA":       BUS_AMIGA,
	"BUS_ADB":         BUS_ADB,
	"BUS_I2C":         BUS_I2C,
	"BUS_HOST":        BUS_HOST,
	"BUS_GSC":         BUS_GSC,
	"BUS_ATARI":       BUS_ATARI,
	"BUS_SPI":         BUS_SPI,
	"BUS_RMI":         BUS_RMI,
	"BUS_CEC":         BUS_CEC,
	"BUS_INTEL_ISHTP": BUS_INTEL_ISHTP,
	"BUS_AMD_SFH":     BUS_AMD_SFH,
}
View Source
var BUSNames = map[EvCode]string{
	BUS_PCI:       "BUS_PCI",
	BUS_ISAPNP:    "BUS_ISAPNP",
	BUS_USB:       "BUS_USB",
	BUS_HIL:       "BUS_HIL",
	BUS_BLUETOOTH: "BUS_BLUETOOTH",
	BUS_VIRTUAL:   "BUS_VIRTUAL",

	BUS_ISA:         "BUS_ISA",
	BUS_I8042:       "BUS_I8042",
	BUS_XTKBD:       "BUS_XTKBD",
	BUS_RS232:       "BUS_RS232",
	BUS_GAMEPORT:    "BUS_GAMEPORT",
	BUS_PARPORT:     "BUS_PARPORT",
	BUS_AMIGA:       "BUS_AMIGA",
	BUS_ADB:         "BUS_ADB",
	BUS_I2C:         "BUS_I2C",
	BUS_HOST:        "BUS_HOST",
	BUS_GSC:         "BUS_GSC",
	BUS_ATARI:       "BUS_ATARI",
	BUS_SPI:         "BUS_SPI",
	BUS_RMI:         "BUS_RMI",
	BUS_CEC:         "BUS_CEC",
	BUS_INTEL_ISHTP: "BUS_INTEL_ISHTP",
	BUS_AMD_SFH:     "BUS_AMD_SFH",
}
View Source
var BUSToString = map[EvCode]string{
	BUS_PCI:       "BUS_PCI",
	BUS_ISAPNP:    "BUS_ISAPNP",
	BUS_USB:       "BUS_USB",
	BUS_HIL:       "BUS_HIL",
	BUS_BLUETOOTH: "BUS_BLUETOOTH",
	BUS_VIRTUAL:   "BUS_VIRTUAL",

	BUS_ISA:         "BUS_ISA",
	BUS_I8042:       "BUS_I8042",
	BUS_XTKBD:       "BUS_XTKBD",
	BUS_RS232:       "BUS_RS232",
	BUS_GAMEPORT:    "BUS_GAMEPORT",
	BUS_PARPORT:     "BUS_PARPORT",
	BUS_AMIGA:       "BUS_AMIGA",
	BUS_ADB:         "BUS_ADB",
	BUS_I2C:         "BUS_I2C",
	BUS_HOST:        "BUS_HOST",
	BUS_GSC:         "BUS_GSC",
	BUS_ATARI:       "BUS_ATARI",
	BUS_SPI:         "BUS_SPI",
	BUS_RMI:         "BUS_RMI",
	BUS_CEC:         "BUS_CEC",
	BUS_INTEL_ISHTP: "BUS_INTEL_ISHTP",
	BUS_AMD_SFH:     "BUS_AMD_SFH",
}
View Source
var EVFromString = map[string]EvType{
	"EV_SYN":       EV_SYN,
	"EV_KEY":       EV_KEY,
	"EV_REL":       EV_REL,
	"EV_ABS":       EV_ABS,
	"EV_MSC":       EV_MSC,
	"EV_SW":        EV_SW,
	"EV_LED":       EV_LED,
	"EV_SND":       EV_SND,
	"EV_REP":       EV_REP,
	"EV_FF":        EV_FF,
	"EV_PWR":       EV_PWR,
	"EV_FF_STATUS": EV_FF_STATUS,
	"EV_MAX":       EV_MAX,
	"EV_CNT":       EV_CNT,
}
View Source
var EVNames = map[EvType]string{
	EV_SYN:       "EV_SYN",
	EV_KEY:       "EV_KEY",
	EV_REL:       "EV_REL",
	EV_ABS:       "EV_ABS",
	EV_MSC:       "EV_MSC",
	EV_SW:        "EV_SW",
	EV_LED:       "EV_LED",
	EV_SND:       "EV_SND",
	EV_REP:       "EV_REP",
	EV_FF:        "EV_FF",
	EV_PWR:       "EV_PWR",
	EV_FF_STATUS: "EV_FF_STATUS",
	EV_MAX:       "EV_MAX",
	EV_CNT:       "EV_CNT",
}
View Source
var EVToString = map[EvType]string{
	EV_SYN:       "EV_SYN",
	EV_KEY:       "EV_KEY",
	EV_REL:       "EV_REL",
	EV_ABS:       "EV_ABS",
	EV_MSC:       "EV_MSC",
	EV_SW:        "EV_SW",
	EV_LED:       "EV_LED",
	EV_SND:       "EV_SND",
	EV_REP:       "EV_REP",
	EV_FF:        "EV_FF",
	EV_PWR:       "EV_PWR",
	EV_FF_STATUS: "EV_FF_STATUS",
	EV_MAX:       "EV_MAX",
	EV_CNT:       "EV_CNT",
}
View Source
var EvCodeNameLookup = map[EvType]map[EvCode]string{
	EV_SYN: SYNNames,
	EV_KEY: KEYNames,
	EV_REL: RELNames,
	EV_ABS: ABSNames,
	EV_MSC: MSCNames,
	EV_SW:  SWNames,
	EV_LED: LEDNames,
	EV_SND: SNDNames,
	EV_REP: REPNames,
	EV_FF:  FFNames,
}
View Source
var FFFromString = map[string]EvCode{
	"FF_STATUS_STOPPED": FF_STATUS_STOPPED,
	"FF_STATUS_PLAYING": FF_STATUS_PLAYING,
	"FF_STATUS_MAX":     FF_STATUS_MAX,

	"FF_RUMBLE":   FF_RUMBLE,
	"FF_PERIODIC": FF_PERIODIC,
	"FF_CONSTANT": FF_CONSTANT,
	"FF_SPRING":   FF_SPRING,
	"FF_FRICTION": FF_FRICTION,
	"FF_DAMPER":   FF_DAMPER,
	"FF_INERTIA":  FF_INERTIA,
	"FF_RAMP":     FF_RAMP,

	"FF_EFFECT_MIN": FF_EFFECT_MIN,
	"FF_EFFECT_MAX": FF_EFFECT_MAX,

	"FF_SQUARE":   FF_SQUARE,
	"FF_TRIANGLE": FF_TRIANGLE,
	"FF_SINE":     FF_SINE,
	"FF_SAW_UP":   FF_SAW_UP,
	"FF_SAW_DOWN": FF_SAW_DOWN,
	"FF_CUSTOM":   FF_CUSTOM,

	"FF_WAVEFORM_MIN": FF_WAVEFORM_MIN,
	"FF_WAVEFORM_MAX": FF_WAVEFORM_MAX,

	"FF_GAIN":       FF_GAIN,
	"FF_AUTOCENTER": FF_AUTOCENTER,

	"FF_MAX_EFFECTS": FF_MAX_EFFECTS,

	"FF_MAX": FF_MAX,
	"FF_CNT": FF_CNT,
}
View Source
var FFNames = map[EvCode]string{
	FF_STATUS_STOPPED: "FF_STATUS_STOPPED",
	FF_STATUS_PLAYING: "FF_STATUS_PLAYING/FF_STATUS_MAX",

	FF_RUMBLE:   "FF_RUMBLE/FF_EFFECT_MIN",
	FF_PERIODIC: "FF_PERIODIC",
	FF_CONSTANT: "FF_CONSTANT",
	FF_SPRING:   "FF_SPRING",
	FF_FRICTION: "FF_FRICTION",
	FF_DAMPER:   "FF_DAMPER",
	FF_INERTIA:  "FF_INERTIA",
	FF_RAMP:     "FF_RAMP/FF_EFFECT_MAX",

	FF_SQUARE:   "FF_SQUARE/FF_WAVEFORM_MIN",
	FF_TRIANGLE: "FF_TRIANGLE",
	FF_SINE:     "FF_SINE",
	FF_SAW_UP:   "FF_SAW_UP",
	FF_SAW_DOWN: "FF_SAW_DOWN",
	FF_CUSTOM:   "FF_CUSTOM/FF_WAVEFORM_MAX",

	FF_GAIN:       "FF_GAIN/FF_MAX_EFFECTS",
	FF_AUTOCENTER: "FF_AUTOCENTER",

	FF_MAX: "FF_MAX",
	FF_CNT: "FF_CNT",
}
View Source
var FFToString = map[EvCode]string{
	FF_STATUS_STOPPED: "FF_STATUS_STOPPED",
	FF_STATUS_PLAYING: "FF_STATUS_PLAYING",

	FF_RUMBLE:   "FF_RUMBLE",
	FF_PERIODIC: "FF_PERIODIC",
	FF_CONSTANT: "FF_CONSTANT",
	FF_SPRING:   "FF_SPRING",
	FF_FRICTION: "FF_FRICTION",
	FF_DAMPER:   "FF_DAMPER",
	FF_INERTIA:  "FF_INERTIA",
	FF_RAMP:     "FF_RAMP",

	FF_SQUARE:   "FF_SQUARE",
	FF_TRIANGLE: "FF_TRIANGLE",
	FF_SINE:     "FF_SINE",
	FF_SAW_UP:   "FF_SAW_UP",
	FF_SAW_DOWN: "FF_SAW_DOWN",
	FF_CUSTOM:   "FF_CUSTOM",

	FF_GAIN:       "FF_GAIN",
	FF_AUTOCENTER: "FF_AUTOCENTER",

	FF_MAX: "FF_MAX",
	FF_CNT: "FF_CNT",
}
View Source
var IDFromString = map[string]EvCode{
	"ID_BUS":     ID_BUS,
	"ID_VENDOR":  ID_VENDOR,
	"ID_PRODUCT": ID_PRODUCT,
	"ID_VERSION": ID_VERSION,
}
View Source
var IDNames = map[EvCode]string{
	ID_BUS:     "ID_BUS",
	ID_VENDOR:  "ID_VENDOR",
	ID_PRODUCT: "ID_PRODUCT",
	ID_VERSION: "ID_VERSION",
}
View Source
var IDToString = map[EvCode]string{
	ID_BUS:     "ID_BUS",
	ID_VENDOR:  "ID_VENDOR",
	ID_PRODUCT: "ID_PRODUCT",
	ID_VERSION: "ID_VERSION",
}
View Source
var INPUTFromString = map[string]EvProp{
	"INPUT_PROP_POINTER":        INPUT_PROP_POINTER,
	"INPUT_PROP_DIRECT":         INPUT_PROP_DIRECT,
	"INPUT_PROP_BUTTONPAD":      INPUT_PROP_BUTTONPAD,
	"INPUT_PROP_SEMI_MT":        INPUT_PROP_SEMI_MT,
	"INPUT_PROP_TOPBUTTONPAD":   INPUT_PROP_TOPBUTTONPAD,
	"INPUT_PROP_POINTING_STICK": INPUT_PROP_POINTING_STICK,
	"INPUT_PROP_ACCELEROMETER":  INPUT_PROP_ACCELEROMETER,

	"INPUT_PROP_MAX": INPUT_PROP_MAX,
	"INPUT_PROP_CNT": INPUT_PROP_CNT,
}
View Source
var INPUTNames = map[EvProp]string{
	INPUT_PROP_POINTER:        "INPUT_PROP_POINTER",
	INPUT_PROP_DIRECT:         "INPUT_PROP_DIRECT",
	INPUT_PROP_BUTTONPAD:      "INPUT_PROP_BUTTONPAD",
	INPUT_PROP_SEMI_MT:        "INPUT_PROP_SEMI_MT",
	INPUT_PROP_TOPBUTTONPAD:   "INPUT_PROP_TOPBUTTONPAD",
	INPUT_PROP_POINTING_STICK: "INPUT_PROP_POINTING_STICK",
	INPUT_PROP_ACCELEROMETER:  "INPUT_PROP_ACCELEROMETER",

	INPUT_PROP_MAX: "INPUT_PROP_MAX",
	INPUT_PROP_CNT: "INPUT_PROP_CNT",
}
View Source
var INPUTToString = map[EvProp]string{
	INPUT_PROP_POINTER:        "INPUT_PROP_POINTER",
	INPUT_PROP_DIRECT:         "INPUT_PROP_DIRECT",
	INPUT_PROP_BUTTONPAD:      "INPUT_PROP_BUTTONPAD",
	INPUT_PROP_SEMI_MT:        "INPUT_PROP_SEMI_MT",
	INPUT_PROP_TOPBUTTONPAD:   "INPUT_PROP_TOPBUTTONPAD",
	INPUT_PROP_POINTING_STICK: "INPUT_PROP_POINTING_STICK",
	INPUT_PROP_ACCELEROMETER:  "INPUT_PROP_ACCELEROMETER",

	INPUT_PROP_MAX: "INPUT_PROP_MAX",
	INPUT_PROP_CNT: "INPUT_PROP_CNT",
}
View Source
var KEYFromString = map[string]EvCode{}/* 636 elements not displayed */
View Source
var KEYNames = map[EvCode]string{}/* 615 elements not displayed */
View Source
var KEYToString = map[EvCode]string{}/* 615 elements not displayed */
View Source
var LEDFromString = map[string]EvCode{
	"LED_NUML":     LED_NUML,
	"LED_CAPSL":    LED_CAPSL,
	"LED_SCROLLL":  LED_SCROLLL,
	"LED_COMPOSE":  LED_COMPOSE,
	"LED_KANA":     LED_KANA,
	"LED_SLEEP":    LED_SLEEP,
	"LED_SUSPEND":  LED_SUSPEND,
	"LED_MUTE":     LED_MUTE,
	"LED_MISC":     LED_MISC,
	"LED_MAIL":     LED_MAIL,
	"LED_CHARGING": LED_CHARGING,
	"LED_MAX":      LED_MAX,
	"LED_CNT":      LED_CNT,
}
View Source
var LEDNames = map[EvCode]string{
	LED_NUML:     "LED_NUML",
	LED_CAPSL:    "LED_CAPSL",
	LED_SCROLLL:  "LED_SCROLLL",
	LED_COMPOSE:  "LED_COMPOSE",
	LED_KANA:     "LED_KANA",
	LED_SLEEP:    "LED_SLEEP",
	LED_SUSPEND:  "LED_SUSPEND",
	LED_MUTE:     "LED_MUTE",
	LED_MISC:     "LED_MISC",
	LED_MAIL:     "LED_MAIL",
	LED_CHARGING: "LED_CHARGING",
	LED_MAX:      "LED_MAX",
	LED_CNT:      "LED_CNT",
}
View Source
var LEDToString = map[EvCode]string{
	LED_NUML:     "LED_NUML",
	LED_CAPSL:    "LED_CAPSL",
	LED_SCROLLL:  "LED_SCROLLL",
	LED_COMPOSE:  "LED_COMPOSE",
	LED_KANA:     "LED_KANA",
	LED_SLEEP:    "LED_SLEEP",
	LED_SUSPEND:  "LED_SUSPEND",
	LED_MUTE:     "LED_MUTE",
	LED_MISC:     "LED_MISC",
	LED_MAIL:     "LED_MAIL",
	LED_CHARGING: "LED_CHARGING",
	LED_MAX:      "LED_MAX",
	LED_CNT:      "LED_CNT",
}
View Source
var MSCFromString = map[string]EvCode{
	"MSC_SERIAL":    MSC_SERIAL,
	"MSC_PULSELED":  MSC_PULSELED,
	"MSC_GESTURE":   MSC_GESTURE,
	"MSC_RAW":       MSC_RAW,
	"MSC_SCAN":      MSC_SCAN,
	"MSC_TIMESTAMP": MSC_TIMESTAMP,
	"MSC_MAX":       MSC_MAX,
	"MSC_CNT":       MSC_CNT,
}
View Source
var MSCNames = map[EvCode]string{
	MSC_SERIAL:    "MSC_SERIAL",
	MSC_PULSELED:  "MSC_PULSELED",
	MSC_GESTURE:   "MSC_GESTURE",
	MSC_RAW:       "MSC_RAW",
	MSC_SCAN:      "MSC_SCAN",
	MSC_TIMESTAMP: "MSC_TIMESTAMP",
	MSC_MAX:       "MSC_MAX",
	MSC_CNT:       "MSC_CNT",
}
View Source
var MSCToString = map[EvCode]string{
	MSC_SERIAL:    "MSC_SERIAL",
	MSC_PULSELED:  "MSC_PULSELED",
	MSC_GESTURE:   "MSC_GESTURE",
	MSC_RAW:       "MSC_RAW",
	MSC_SCAN:      "MSC_SCAN",
	MSC_TIMESTAMP: "MSC_TIMESTAMP",
	MSC_MAX:       "MSC_MAX",
	MSC_CNT:       "MSC_CNT",
}
View Source
var MTFromString = map[string]EvCode{
	"MT_TOOL_FINGER": MT_TOOL_FINGER,
	"MT_TOOL_PEN":    MT_TOOL_PEN,
	"MT_TOOL_PALM":   MT_TOOL_PALM,
	"MT_TOOL_DIAL":   MT_TOOL_DIAL,
	"MT_TOOL_MAX":    MT_TOOL_MAX,
}
View Source
var MTNames = map[EvCode]string{
	MT_TOOL_FINGER: "MT_TOOL_FINGER",
	MT_TOOL_PEN:    "MT_TOOL_PEN",
	MT_TOOL_PALM:   "MT_TOOL_PALM",
	MT_TOOL_DIAL:   "MT_TOOL_DIAL",
	MT_TOOL_MAX:    "MT_TOOL_MAX",
}
View Source
var MTToString = map[EvCode]string{
	MT_TOOL_FINGER: "MT_TOOL_FINGER",
	MT_TOOL_PEN:    "MT_TOOL_PEN",
	MT_TOOL_PALM:   "MT_TOOL_PALM",
	MT_TOOL_DIAL:   "MT_TOOL_DIAL",
	MT_TOOL_MAX:    "MT_TOOL_MAX",
}
View Source
var RELFromString = map[string]EvCode{
	"REL_X":      REL_X,
	"REL_Y":      REL_Y,
	"REL_Z":      REL_Z,
	"REL_RX":     REL_RX,
	"REL_RY":     REL_RY,
	"REL_RZ":     REL_RZ,
	"REL_HWHEEL": REL_HWHEEL,
	"REL_DIAL":   REL_DIAL,
	"REL_WHEEL":  REL_WHEEL,
	"REL_MISC":   REL_MISC,

	"REL_RESERVED":      REL_RESERVED,
	"REL_WHEEL_HI_RES":  REL_WHEEL_HI_RES,
	"REL_HWHEEL_HI_RES": REL_HWHEEL_HI_RES,
	"REL_MAX":           REL_MAX,
	"REL_CNT":           REL_CNT,
}
View Source
var RELNames = map[EvCode]string{
	REL_X:      "REL_X",
	REL_Y:      "REL_Y",
	REL_Z:      "REL_Z",
	REL_RX:     "REL_RX",
	REL_RY:     "REL_RY",
	REL_RZ:     "REL_RZ",
	REL_HWHEEL: "REL_HWHEEL",
	REL_DIAL:   "REL_DIAL",
	REL_WHEEL:  "REL_WHEEL",
	REL_MISC:   "REL_MISC",

	REL_RESERVED:      "REL_RESERVED",
	REL_WHEEL_HI_RES:  "REL_WHEEL_HI_RES",
	REL_HWHEEL_HI_RES: "REL_HWHEEL_HI_RES",
	REL_MAX:           "REL_MAX",
	REL_CNT:           "REL_CNT",
}
View Source
var RELToString = map[EvCode]string{
	REL_X:      "REL_X",
	REL_Y:      "REL_Y",
	REL_Z:      "REL_Z",
	REL_RX:     "REL_RX",
	REL_RY:     "REL_RY",
	REL_RZ:     "REL_RZ",
	REL_HWHEEL: "REL_HWHEEL",
	REL_DIAL:   "REL_DIAL",
	REL_WHEEL:  "REL_WHEEL",
	REL_MISC:   "REL_MISC",

	REL_RESERVED:      "REL_RESERVED",
	REL_WHEEL_HI_RES:  "REL_WHEEL_HI_RES",
	REL_HWHEEL_HI_RES: "REL_HWHEEL_HI_RES",
	REL_MAX:           "REL_MAX",
	REL_CNT:           "REL_CNT",
}
View Source
var REPFromString = map[string]EvCode{
	"REP_DELAY":  REP_DELAY,
	"REP_PERIOD": REP_PERIOD,
	"REP_MAX":    REP_MAX,
	"REP_CNT":    REP_CNT,
}
View Source
var REPNames = map[EvCode]string{
	REP_DELAY:  "REP_DELAY",
	REP_PERIOD: "REP_PERIOD/REP_MAX",
	REP_CNT:    "REP_CNT",
}
View Source
var REPToString = map[EvCode]string{
	REP_DELAY:  "REP_DELAY",
	REP_PERIOD: "REP_PERIOD",

	REP_CNT: "REP_CNT",
}
View Source
var SNDFromString = map[string]EvCode{
	"SND_CLICK": SND_CLICK,
	"SND_BELL":  SND_BELL,
	"SND_TONE":  SND_TONE,
	"SND_MAX":   SND_MAX,
	"SND_CNT":   SND_CNT,
}
View Source
var SNDNames = map[EvCode]string{
	SND_CLICK: "SND_CLICK",
	SND_BELL:  "SND_BELL",
	SND_TONE:  "SND_TONE",
	SND_MAX:   "SND_MAX",
	SND_CNT:   "SND_CNT",
}
View Source
var SNDToString = map[EvCode]string{
	SND_CLICK: "SND_CLICK",
	SND_BELL:  "SND_BELL",
	SND_TONE:  "SND_TONE",
	SND_MAX:   "SND_MAX",
	SND_CNT:   "SND_CNT",
}
View Source
var SWFromString = map[string]EvCode{
	"SW_LID":                  SW_LID,
	"SW_TABLET_MODE":          SW_TABLET_MODE,
	"SW_HEADPHONE_INSERT":     SW_HEADPHONE_INSERT,
	"SW_RFKILL_ALL":           SW_RFKILL_ALL,
	"SW_RADIO":                SW_RADIO,
	"SW_MICROPHONE_INSERT":    SW_MICROPHONE_INSERT,
	"SW_DOCK":                 SW_DOCK,
	"SW_LINEOUT_INSERT":       SW_LINEOUT_INSERT,
	"SW_JACK_PHYSICAL_INSERT": SW_JACK_PHYSICAL_INSERT,
	"SW_VIDEOOUT_INSERT":      SW_VIDEOOUT_INSERT,
	"SW_CAMERA_LENS_COVER":    SW_CAMERA_LENS_COVER,
	"SW_KEYPAD_SLIDE":         SW_KEYPAD_SLIDE,
	"SW_FRONT_PROXIMITY":      SW_FRONT_PROXIMITY,
	"SW_ROTATE_LOCK":          SW_ROTATE_LOCK,
	"SW_LINEIN_INSERT":        SW_LINEIN_INSERT,
	"SW_MUTE_DEVICE":          SW_MUTE_DEVICE,
	"SW_PEN_INSERTED":         SW_PEN_INSERTED,
	"SW_MACHINE_COVER":        SW_MACHINE_COVER,
	"SW_MAX":                  SW_MAX,
	"SW_CNT":                  SW_CNT,
}
View Source
var SWNames = map[EvCode]string{
	SW_LID:                  "SW_LID",
	SW_TABLET_MODE:          "SW_TABLET_MODE",
	SW_HEADPHONE_INSERT:     "SW_HEADPHONE_INSERT",
	SW_RFKILL_ALL:           "SW_RFKILL_ALL/SW_RADIO",
	SW_MICROPHONE_INSERT:    "SW_MICROPHONE_INSERT",
	SW_DOCK:                 "SW_DOCK",
	SW_LINEOUT_INSERT:       "SW_LINEOUT_INSERT",
	SW_JACK_PHYSICAL_INSERT: "SW_JACK_PHYSICAL_INSERT",
	SW_VIDEOOUT_INSERT:      "SW_VIDEOOUT_INSERT",
	SW_CAMERA_LENS_COVER:    "SW_CAMERA_LENS_COVER",
	SW_KEYPAD_SLIDE:         "SW_KEYPAD_SLIDE",
	SW_FRONT_PROXIMITY:      "SW_FRONT_PROXIMITY",
	SW_ROTATE_LOCK:          "SW_ROTATE_LOCK",
	SW_LINEIN_INSERT:        "SW_LINEIN_INSERT",
	SW_MUTE_DEVICE:          "SW_MUTE_DEVICE",
	SW_PEN_INSERTED:         "SW_PEN_INSERTED",
	SW_MACHINE_COVER:        "SW_MACHINE_COVER/SW_MAX",
	SW_CNT:                  "SW_CNT",
}
View Source
var SWToString = map[EvCode]string{
	SW_LID:              "SW_LID",
	SW_TABLET_MODE:      "SW_TABLET_MODE",
	SW_HEADPHONE_INSERT: "SW_HEADPHONE_INSERT",
	SW_RFKILL_ALL:       "SW_RFKILL_ALL",

	SW_MICROPHONE_INSERT:    "SW_MICROPHONE_INSERT",
	SW_DOCK:                 "SW_DOCK",
	SW_LINEOUT_INSERT:       "SW_LINEOUT_INSERT",
	SW_JACK_PHYSICAL_INSERT: "SW_JACK_PHYSICAL_INSERT",
	SW_VIDEOOUT_INSERT:      "SW_VIDEOOUT_INSERT",
	SW_CAMERA_LENS_COVER:    "SW_CAMERA_LENS_COVER",
	SW_KEYPAD_SLIDE:         "SW_KEYPAD_SLIDE",
	SW_FRONT_PROXIMITY:      "SW_FRONT_PROXIMITY",
	SW_ROTATE_LOCK:          "SW_ROTATE_LOCK",
	SW_LINEIN_INSERT:        "SW_LINEIN_INSERT",
	SW_MUTE_DEVICE:          "SW_MUTE_DEVICE",
	SW_PEN_INSERTED:         "SW_PEN_INSERTED",
	SW_MACHINE_COVER:        "SW_MACHINE_COVER",

	SW_CNT: "SW_CNT",
}
View Source
var SYNFromString = map[string]EvCode{
	"SYN_REPORT":    SYN_REPORT,
	"SYN_CONFIG":    SYN_CONFIG,
	"SYN_MT_REPORT": SYN_MT_REPORT,
	"SYN_DROPPED":   SYN_DROPPED,
	"SYN_MAX":       SYN_MAX,
	"SYN_CNT":       SYN_CNT,
}
View Source
var SYNNames = map[EvCode]string{
	SYN_REPORT:    "SYN_REPORT",
	SYN_CONFIG:    "SYN_CONFIG",
	SYN_MT_REPORT: "SYN_MT_REPORT",
	SYN_DROPPED:   "SYN_DROPPED",
	SYN_MAX:       "SYN_MAX",
	SYN_CNT:       "SYN_CNT",
}
View Source
var SYNToString = map[EvCode]string{
	SYN_REPORT:    "SYN_REPORT",
	SYN_CONFIG:    "SYN_CONFIG",
	SYN_MT_REPORT: "SYN_MT_REPORT",
	SYN_DROPPED:   "SYN_DROPPED",
	SYN_MAX:       "SYN_MAX",
	SYN_CNT:       "SYN_CNT",
}

Functions

func CodeName

func CodeName(t EvType, c EvCode) string

CodeName returns the name of an EvfCode in the given EvType, or "UNKNOWN" of the code is not valid.

func DestroyDevice

func DestroyDevice(dev *InputDevice) error

Destroy destroys an input device, removing it from the system This is designed to be called on self created virtual devices and may fail if called on real devices attached to the system

func PropName

func PropName(p EvProp) string

PropName returns the name of the given EvProp, or "UNKNOWN" if the property is not valid

func TypeName

func TypeName(t EvType) string

TypeName returns the name of an EvType as string, or "UNKNOWN" if the type is not valid

Types

type AbsInfo

type AbsInfo struct {
	Value      int32
	Minimum    int32
	Maximum    int32
	Fuzz       int32
	Flat       int32
	Resolution int32
}

AbsInfo describes details on ABS input types

type EvCode

type EvCode uint16

EvCode describes codes within a type (eg. KEY_A, KEY_B, ...)

type EvProp

type EvProp uint16

EvProp describes device properties (eg. INPUT_PROP_ACCELEROMETER, INPUT_PROP_BUTTONPAD, ...)

type EvType

type EvType uint16

EvType is EV_KEY, EV_SW, EV_LED, EV_SND, ...

type InputDevice

type InputDevice struct {
	// contains filtered or unexported fields
}

InputDevice represent a Linux kernel input device in userspace. It can be used to query and write device properties, read input events, or grab it for exclusive access.

func CloneDevice

func CloneDevice(name string, dev *InputDevice) (*InputDevice, error)

CloneDevice creates a new device from an existing one all capabilites will be coppied over to the new virtual device If set up fails the device will be removed from the system, once set up it can be removed by calling dev.Close

func CreateDevice

func CreateDevice(name string, id InputID, capabilities map[EvType][]EvCode) (*InputDevice, error)

CreateDevice creates a device from scratch with the provided capabilities and name If set up fails the device will be removed from the system, once set up it can be removed by calling dev.Close

func Open

func Open(path string) (*InputDevice, error)

Open creates a new InputDevice from the given path. The input device is opened with flag O_RDWR. Returns an error if the device node could not be opened or its properties failed to read.

func OpenByName

func OpenByName(name string) (*InputDevice, error)

OpenByName creates a new InputDevice from the device name as reported by the kernel. The input device is opened with flag O_RDWR. Returns an error if the name does not exist, or the device node could not be opened or its properties failed to read.

func OpenByNameWithFlags

func OpenByNameWithFlags(name string, flags int) (*InputDevice, error)

OpenByNameWithFlags creates a new InputDevice from the device name as reported by the kernel. The input device is opened with the specified flags (O_RDONLY etc.). It is the responsibility of the user to provide sane flags and handle potential errors resulting from inappropriate flag combinations or permissions. Returns an error if the name does not exist, or the device node could not be opened or its properties failed to read.

func OpenWithFlags

func OpenWithFlags(path string, flags int) (*InputDevice, error)

OpenWithFlags creates a new InputDevice from the given path. The input device is opened with the specified flags (O_RDONLY etc.). It is the responsibility of the user to provide sane flags and handle potential errors resulting from inappropriate flag combinations or permissions. Returns an error if the device node could not be opened or its properties failed to read.

func (*InputDevice) AbsInfos

func (d *InputDevice) AbsInfos() (map[EvCode]AbsInfo, error)

AbsInfos returns the AbsInfo struct for all axis the device supports.

func (*InputDevice) CapableEvents

func (d *InputDevice) CapableEvents(t EvType) []EvCode

CapableEvents returns a slice of EvCode that are the device supports for given EvType

func (*InputDevice) CapableTypes

func (d *InputDevice) CapableTypes() []EvType

CapableTypes returns a slice of EvType that are the device supports

func (*InputDevice) Close

func (d *InputDevice) Close() error

Close releases the resources held by an InputDevice. After calling this function, the InputDevice is no longer operational.

func (*InputDevice) DriverVersion

func (d *InputDevice) DriverVersion() (int, int, int)

DriverVersion returns the version of the Linux Evdev driver. The three ints returned by this function describe the major, minor and micro parts of the version code.

func (*InputDevice) Grab

func (d *InputDevice) Grab() error

Grab grabs the device for exclusive access. No other process will receive input events until the device instance is active.

func (*InputDevice) InputID

func (d *InputDevice) InputID() (InputID, error)

InputID returns the device's vendor/product/busType/version information as reported by the kernel.

func (*InputDevice) Name

func (d *InputDevice) Name() (string, error)

Name returns the device's name as reported by the kernel.

func (*InputDevice) NonBlock

func (d *InputDevice) NonBlock() error

NonBlock sets file descriptor into nonblocking mode. This way it is possible to interrupt ReadOne call by closing the device. Note: file.Fd() call will set file descriptor back to blocking mode so make sure your program is not using any other method than ReadOne after NonBlock call.

func (*InputDevice) Path

func (d *InputDevice) Path() string

Path returns the device's node path it was opened under.

func (*InputDevice) PhysicalLocation

func (d *InputDevice) PhysicalLocation() (string, error)

PhysicalLocation returns the device's physical location as reported by the kernel.

func (*InputDevice) Properties

func (d *InputDevice) Properties() []EvProp

Properties returns a slice of EvProp that are the device supports

func (*InputDevice) ReadOne

func (d *InputDevice) ReadOne() (*InputEvent, error)

ReadOne reads one InputEvent from the device. It blocks until an event has been received or an error has occurred.

func (*InputDevice) Revoke

func (d *InputDevice) Revoke() error

Revoke revokes device access

func (*InputDevice) State

func (d *InputDevice) State(t EvType) (StateMap, error)

State return a StateMap for the given type. The map will be empty if the requested type is not supported by the device.

func (*InputDevice) Ungrab

func (d *InputDevice) Ungrab() error

Ungrab releases a previously taken exclusive use with Grab().

func (*InputDevice) UniqueID

func (d *InputDevice) UniqueID() (string, error)

UniqueID returns the device's unique identifier as reported by the kernel.

func (*InputDevice) WriteOne

func (d *InputDevice) WriteOne(event *InputEvent) error

WriteOne writes one InputEvent to the device. Useful for controlling LEDs of the device

type InputEvent

type InputEvent struct {
	Time  syscall.Timeval // time in seconds since epoch at which event occurred
	Type  EvType          // event type - one of ecodes.EV_*
	Code  EvCode          // event code related to the event type
	Value int32           // event value related to the event type
}

InputEvent describes an event that is generated by an InputDevice

func (*InputEvent) CodeName

func (e *InputEvent) CodeName() string

func (*InputEvent) String

func (e *InputEvent) String() string

func (*InputEvent) TypeName

func (e *InputEvent) TypeName() string

type InputID

type InputID struct {
	BusType uint16
	Vendor  uint16
	Product uint16
	Version uint16
}

InputID ...

type InputKeymapEntry

type InputKeymapEntry struct {
	Flags    uint8
	Len      uint8
	Index    uint16
	KeyCode  uint32
	ScanCode [32]uint8
}

InputKeymapEntry is used to retrieve and modify keymap data

type InputMask

type InputMask struct {
	Type      uint32
	CodesSize uint32
	CodesPtr  uint64
}

InputMask ...

type InputPath

type InputPath struct {
	Name string
	Path string
}

InputPath contains information about an InputDevice Name & Path

func ListDevicePaths

func ListDevicePaths() ([]InputPath, error)

ListDevicePaths lists all available input devices, returning their filename path, and the name as reported by the kernel.

type StateMap

type StateMap map[EvCode]bool

StateMap describes the current state of codes within a type, as booleans.

type UinputUserDevice

type UinputUserDevice struct {
	Name       [uinputMaxNameSize]byte
	ID         InputID
	EffectsMax uint32
	Absmax     [absSize]int32
	Absmin     [absSize]int32
	Absfuzz    [absSize]int32
	Absflat    [absSize]int32
}

UinputUserDevice is used when creating or cloning a device

Directories

Path Synopsis
build
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL