1 ! Copyright (C) 2021 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.data alien.syntax byte-arrays
4 classes.struct combinators continuations io.encodings.string
5 io.encodings.utf8 kernel libc math math.vectors sequences
6 splitting unix.ffi unix.types ;
7 IN: linux.input-events.ffi
22 { resolution __s32 } ;
24 STRUCT: input_keymap_entry
29 { scancode __u8[32] } ;
45 { attack_length __u16 }
46 { attack_level __u16 }
48 { fade_level __u16 } ;
50 STRUCT: ff_constant_effect
52 { envelope ff_envelope } ;
54 STRUCT: ff_ramp_effect
57 { envelope ff_envelope } ;
59 STRUCT: ff_condition_effect
60 { right_saturation __u16 }
61 { left_saturation __u16 }
67 STRUCT: ff_periodic_effect
73 { envelope ff_envelope }
75 { custom_data __s16* } ;
77 STRUCT: ff_rumble_effect
78 { strong_magnitude __u16 }
79 { weak_magnitude __u16 } ;
81 UNION-STRUCT: ff_dummy
82 { constant ff_constant_effect }
83 { ramp ff_ramp_effect }
84 { periodic ff_periodic_effect }
85 { condition ff_condition_effect[2] } ! One for each axis
86 { rumble ff_rumble_effect } ;
88 ! direction in degrees, 0, 90, 180, 270: 0x0000 down, 0x4000 left, 0x8000 up, 0xc000 right
93 { trigger ff_trigger }
97 : n>explode-values ( x -- seq )
99 [ dup log2 2^ [ bitxor ] keep ] produce nip reverse ; inline
101 : n>explode-positions ( x -- seq )
102 n>explode-values [ log2 ] map ; inline
104 : seq>explode-values ( seq -- seq' )
105 [ [ n>explode-values ] dip 8 * v+n ] map-index concat ;
107 : seq>explode-positions ( seq -- seq' )
108 [ [ n>explode-positions ] dip 8 * v+n ] map-index concat ;
110 : values>implode ( seq -- x ) 0 [ bitor ] reduce ;
111 : positions>implode ( seq -- x ) 0 [ 2^ bitor ] reduce ;
114 CONSTANT: IOC_WRITE 1
118 CONSTANT: IOC_NRBITS 8
119 CONSTANT: IOC_TYPEBITS 8
120 CONSTANT: IOC_SIZEBITS 14
121 CONSTANT: IOC_DIRBITS 2
123 CONSTANT: IOC_NRSHIFT 0
124 CONSTANT: IOC_TYPESHIFT 8 ! NRSHIFT + NRBITS
125 CONSTANT: IOC_SIZESHIFT 16 ! TYPESHIFT + TYEPBITS
126 CONSTANT: IOC_DIRSHIFT 30 ! SIZESHIFT + SIZEBITS
128 : IOC ( dir type-ch nr c-size -- x )
130 [ IOC_DIRSHIFT shift ]
131 [ IOC_TYPESHIFT shift ]
132 [ IOC_NRSHIFT shift ]
133 [ IOC_SIZESHIFT shift ]
134 } spread + + + ; inline
136 : IOR-size ( type-ch nr size -- x )
137 [ IOC_READ ] 3dip IOC ; inline
139 : IOR ( type-ch nr c-type -- x c-type )
140 [ IOC_READ ] 3dip [ heap-size IOC ] keep ; inline
142 : IOW ( type-ch nr struct -- x struct )
143 [ IOC_WRITE ] 3dip [ byte-length IOC ] keep ; inline
144 : IOW-size ( type-ch nr size -- x )
145 [ IOC_WRITE ] 3dip IOC ; inline
147 : call-ioctl ( handle id bytes -- ) ioctl io-error ; inline
148 : call-ioctl-out ( handle id bytes -- out )
149 [ ioctl io-error ] keep ; inline
151 : <0ref> ( type -- ref ) 0 swap <ref> ; inline
152 : byte-array-ioctl ( handle id len -- out )
153 <byte-array> call-ioctl-out ; inline
154 : c-array-ioctl ( handle id ctype -- out )
155 heap-size <byte-array> call-ioctl-out ; inline
156 : c-string-ioctl ( handle id ctype -- out )
157 c-array-ioctl "\0" split1 drop utf8 decode ;
158 : ctype-ioctl-out ( handle id ctype -- out )
159 [ <0ref> call-ioctl-out ] keep deref ; inline
160 : ctype-ioctl-inout ( handle id bytes type -- out )
161 [ call-ioctl-out ] dip deref ; inline
162 : struct-ioctl ( handle id struct-class -- out )
163 new call-ioctl-out ; inline
165 ! EV IOC G/S - evdev ioctl get/set
166 ! EVIOCGVERSION EVIOCGID EVIOCGREP EVIOCSREP
167 : evdev-get-version ( handle -- version ) CHAR: E 0x01 int IOR ctype-ioctl-out ;
168 : evdev-get-id ( handle -- version ) CHAR: E 0x02 input_id IOR struct-ioctl ;
169 : evdev-get-repeat ( handle -- version ) CHAR: E 0x03 { int 2 } IOR c-array-ioctl ;
170 : evdev-set-repeat ( handle struct -- version )
171 [ CHAR: E 0x03 ] dip IOW call-ioctl-out ;
172 ! EVIOCGKEYCODE EVIOCGKEYCODE_V2 EVIOCSKEYCODE EVIOCSKEYCODE_V2
173 : evdev-get-keycode ( handle -- int[2] ) CHAR: E 0x04 { int 2 } IOR c-array-ioctl ;
174 : evdev-get-keycode-v2 ( handle -- input_keymap_entry ) CHAR: E 0x04 input_keymap_entry IOR struct-ioctl ;
175 : evdev-set-keycode ( handle int[2] -- out ) [ CHAR: E 0x04 ] dip IOW call-ioctl-out ;
176 : evdev-set-keycode-v2 ( handle input_keymap_entry -- out ) [ CHAR: E 0x04 ] dip IOW call-ioctl-out ;
177 ! EVIOCGNAME EVIOCGPHYS EVIOCGUNIQ EVIOCGPROP
178 : evdev-get-name ( handle -- name ) CHAR: E 0x06 { char 256 } IOR c-string-ioctl ;
179 : evdev-get-physical ( handle -- physical ) CHAR: E 0x07 { char 256 } IOR c-string-ioctl ;
180 : evdev-get-unique ( handle -- unique )
181 '[ _ CHAR: E 0x08 { char 512 } IOR c-string-ioctl ] [ drop "" ] recover ;
182 : evdev-get-prop ( handle -- prop ) CHAR: E 0x09 { char 256 } IOR c-string-ioctl ;
183 ! EVIOCGMTSLOTS, size is encoded by IOR
184 STRUCT: input_mt_request_layout
186 { values __s32* } ; ! values[num_slots]
187 : evdev-get-mt-slots ( handle size input_mt_request_layout -- prop )
188 '[ _ CHAR: E 0x0a _ IOR-size _ call-ioctl-out ] [ drop f ] recover ;
189 ! EVIOCGKEY EVIOCGLED EVIOCGSND EVIOCGSW EVIOCGABS EVIOCSABS
190 : evdev-get-key ( handle -- bytes ) CHAR: E 0x18 256 IOR-size 256 byte-array-ioctl ;
191 : evdev-get-led ( handle -- bytes ) CHAR: E 0x19 256 IOR-size 256 byte-array-ioctl ;
192 : evdev-get-sound ( handle -- bytes ) CHAR: E 0x1a 256 IOR-size 256 byte-array-ioctl ;
193 : evdev-get-switch ( handle -- bytes ) CHAR: E 0x1b 256 IOR-size 256 byte-array-ioctl ;
194 : evdev-get-abs ( handle n -- int[6] ) [ CHAR: E ] dip 0x40 + input_absinfo IOR struct-ioctl ;
195 : evdev-set-abs ( handle input_absinfo -- int[6] ) [ CHAR: E ] dip 0xc0 + input_absinfo IOW struct-ioctl ;
196 ! EVIOCSFF EVIOCRMFF EVIOCGEFFECTS
197 : evdev-set-force-feedback ( handle ff_effect -- out )
198 [ CHAR: E 0x80 ] dip IOW call-ioctl-out ;
199 : evdev-unset-force-feedback ( handle int -- int )
200 [ CHAR: E 0x81 ] dip IOW int ctype-ioctl-inout ;
201 : evdev-get-simulataneous-effects ( handle -- int )
202 CHAR: E 0x84 int IOR ctype-ioctl-out ;
203 ! EVIOCGRAB EVIOCREVOKE
204 : evdev-grab-device ( handle -- int )
205 CHAR: E 0x90 69 int <ref> IOW int ctype-ioctl-inout ;
206 : evdev-ungrab-device ( handle -- )
207 CHAR: E 0x90 4 IOW-size f call-ioctl ;
208 : evdev-revoke-device ( handle -- )
209 CHAR: E 0x91 4 IOW-size f call-ioctl ;
210 ! EVIOCGMASK EVIOCSMASK
211 : evdev-get-event-mask ( handle -- int )
212 CHAR: E 0x92 input_mask IOR struct-ioctl ;
213 : evdev-set-event-mask ( handle event_mask -- int )
214 [ CHAR: E 0x93 ] dip IOW call-ioctl-out ;
216 : evdev-set-clock-id ( handle n -- int )
217 [ CHAR: E 0xa0 ] dip int <ref> IOW int ctype-ioctl-inout ;
219 : evdev-get-bytes ( handle ev len -- bits )
224 ] keep byte-array-ioctl ;
227 { INPUT_PROP_POINTER 0x00 } ! needs a pointer
228 { INPUT_PROP_DIRECT 0x01 } ! direct input devices
229 { INPUT_PROP_BUTTONPAD 0x02 } ! has button(s) under pad
230 { INPUT_PROP_SEMI_MT 0x03 } ! touch rectangle only
231 { INPUT_PROP_TOPBUTTONPAD 0x04 } ! softbuttons at top of pad
232 { INPUT_PROP_POINTING_STICK 0x05 } ! is a pointing stick
233 { INPUT_PROP_ACCELEROMETER 0x06 } ! has accelerometer
234 { INPUT_PROP_MAX 0x1f }
235 { INPUT_PROP_CNT 0x20 } ; ! (INPUT_PROP_MAX + 1)
237 ! Type, 2nd parameter from /dev/input/event8
239 { EV_SYN 0x00 } ! events
240 { EV_KEY 0x01 } ! keys/buttons
241 { EV_REL 0x02 } ! relative
242 { EV_ABS 0x03 } ! absolute
243 { EV_MSC 0x04 } ! miscellaneous
244 { EV_SW 0x05 } ! switches
245 { EV_LED 0x11 } ! LEDs
246 { EV_SND 0x12 } ! sound
247 { EV_REP 0x14 } ! autorepeat
248 { EV_FF 0x15 } ! force feedback
249 { EV_PWR 0x16 } ! power management
250 { EV_FF_STATUS 0x17 } ! force feedback status
251 { EV_MAX 0x1f } ! maximum
252 { EV_CNT 0x20 } ; ! EV_MAX + 1
260 { SYN_CNT 0x10 } ; ! (SYN_MAX+1)
291 { KEY_RIGHTBRACE 27 }
304 { KEY_APOSTROPHE 40 }
318 { KEY_RIGHTSHIFT 54 }
319 { KEY_KPASTERISK 55 }
334 { KEY_SCROLLLOCK 70 }
348 { KEY_ZENKAKUHANKAKU 85 }
356 { KEY_KATAKANAHIRAGANA 93 }
377 { KEY_VOLUMEDOWN 114 }
379 { KEY_POWER 116 } ! SC System Power Down
381 { KEY_KPPLUSMINUS 118 }
383 { KEY_SCALE 120 } ! AL Compiz Scale (Expose)
389 { KEY_RIGHTMETA 126 }
391 { KEY_STOP 128 } ! AC Stop
393 { KEY_PROPS 130 } ! AC Properties
394 { KEY_UNDO 131 } ! AC Undo
396 { KEY_COPY 133 } ! AC Copy
397 { KEY_OPEN 134 } ! AC Open
398 { KEY_PASTE 135 } ! AC Paste
399 { KEY_FIND 136 } ! AC Search
400 { KEY_CUT 137 } ! AC Cut
401 { KEY_HELP 138 } ! AL Integrated Help Center
402 { KEY_MENU 139 } ! Menu (show menu)
403 { KEY_CALC 140 } ! AL Calculator
405 { KEY_SLEEP 142 } ! SC System Sleep
406 { KEY_WAKEUP 143 } ! System Wake Up
407 { KEY_FILE 144 } ! AL Local Machine Browser
409 { KEY_DELETEFILE 146 }
413 { KEY_WWW 150 } ! AL Internet Browser
415 { KEY_COFFEE 152 } ! AL Terminal Lock/Screensaver
416 { KEY_ROTATE_DISPLAY 153 } ! Display orientation for e.g. tablets
417 { KEY_CYCLEWINDOWS 154 }
419 { KEY_BOOKMARKS 156 } ! AC Bookmarks
421 { KEY_BACK 158 } ! AC Back
422 { KEY_FORWARD 159 } ! AC Forward
425 { KEY_EJECTCLOSECD 162 }
427 { KEY_PLAYPAUSE 164 }
428 { KEY_PREVIOUSSONG 165 }
432 { KEY_PHONE 169 } ! Media Select Telephone
434 { KEY_CONFIG 171 } ! AL Consumer Control Configuration
435 { KEY_HOMEPAGE 172 } ! AC Home
436 { KEY_REFRESH 173 } ! AC Refresh
437 { KEY_EXIT 174 } ! AC Exit
441 { KEY_SCROLLDOWN 178 }
442 { KEY_KPLEFTPAREN 179 }
443 { KEY_KPRIGHTPAREN 180 }
444 { KEY_NEW 181 } ! AC New
445 { KEY_REDO 182 } ! AC Redo/Repeat
462 { KEY_DASHBOARD 204 } ! AL Dashboard
464 { KEY_CLOSE 206 } ! AC Close
466 { KEY_FASTFORWARD 208 }
467 { KEY_BASSBOOST 209 }
468 { KEY_PRINT 210 } ! AC Print
477 { KEY_FINANCE 219 } ! AL Checkbook/Finance
481 { KEY_CANCEL 223 } ! AC Cancel
482 { KEY_BRIGHTNESSDOWN 224 }
483 { KEY_BRIGHTNESSUP 225 }
485 { KEY_SWITCHVIDEOMODE 227 } ! Cycle between available video
486 ! outputs (Monitor/LCD/TV-out/etc)
487 { KEY_KBDILLUMTOGGLE 228 }
488 { KEY_KBDILLUMDOWN 229 }
489 { KEY_KBDILLUMUP 230 }
490 { KEY_SEND 231 } ! AC Send
491 { KEY_REPLY 232 } ! AC Reply
492 { KEY_FORWARDMAIL 233 } ! AC Forward Msg
493 { KEY_SAVE 234 } ! AC Save
494 { KEY_DOCUMENTS 235 }
496 { KEY_BLUETOOTH 237 }
500 { KEY_VIDEO_NEXT 241 } ! drive next video source
501 { KEY_VIDEO_PREV 242 } ! drive previous video source
502 { KEY_BRIGHTNESS_CYCLE 243 } ! brightness up, after max is min
503 { KEY_BRIGHTNESS_AUTO 244 } ! Set Auto Brightness: manual
504 ! brightness control is off,
506 { KEY_DISPLAY_OFF 245 } ! display device to off state
507 { KEY_WWAN 246 } ! Wireless WAN (LTE, UMTS, GSM, etc.)
508 { KEY_RFKILL 247 } ! Key that controls all radios
509 { KEY_MICMUTE 248 } ! Mute / unmute the microphone
510 ! Code 255 is reserved for special needs of AT keyboard driver
527 { BTN_FORWARD 0x115 }
530 { BTN_TRIGGER 0x120 }
531 { BTN_JOYSTICK 0x120 } ! Button 1
543 { BTN_BASE7 0x12c } ! not defined by linux
544 { BTN_BASE8 0x12d } ! not defined by linux
545 { BTN_BASE9 0x12e } ! not defined by linux
562 { BTN_TOOL_PEN 0x140 }
563 { BTN_TOOL_RUBBER 0x141 }
564 { BTN_TOOL_BRUSH 0x142 }
565 { BTN_TOOL_PENCIL 0x143 }
566 { BTN_TOOL_AIRBRUS 0x144 }
567 { BTN_TOOL_FINGER 0x145 }
568 { BTN_TOOL_MOUSE 0x146 }
569 { BTN_TOOL_LENS 0x147 }
570 { BTN_TOOL_QUINTTA 0x148 } ! Five fingers on trackpad
571 { BTN_STYLUS3 0x149 }
574 { BTN_STYLUS2 0x14c }
575 { BTN_TOOL_DOUBLETAP 0x14d }
576 { BTN_TOOL_TRIPLETAP 0x14e }
577 { BTN_TOOL_QUADTAP 0x14f } ! Four fingers on trackpad
579 { BTN_GEAR_DOWN 0x150 }
580 { BTN_GEAR_UP 0x151 }
587 { KEY_INFO 0x166 } ! AL OEM Features/Tips/Tutorial
590 { KEY_ARCHIVE 0x169 }
591 { KEY_PROGRAM 0x16a } ! Media Select Program Guide
592 { KEY_CHANNEL 0x16b }
593 { KEY_FAVORITES 0x16c }
595 { KEY_PVR 0x16e } ! Media Select Home
597 { KEY_LANGUAGE 0x170 }
599 { KEY_SUBTITLE 0x172 }
603 { KEY_KEYBOARD 0x176 }
605 { KEY_PC 0x178 } ! Media Select Computer
606 { KEY_TV 0x179 } ! Media Select TV
607 { KEY_TV2 0x17a } ! Media Select Cable
608 { KEY_VCR 0x17b } ! Media Select VCR
609 { KEY_VCR2 0x17c } ! VCR Plus
610 { KEY_SAT 0x17d } ! Media Select Satellite
612 { KEY_CD 0x17f } ! Media Select CD
613 { KEY_TAPE 0x180 } ! Media Select Tape
615 { KEY_TUNER 0x182 } ! Media Select Tuner
618 { KEY_DVD 0x185 } ! Media Select DVD
621 { KEY_AUDIO 0x188 } ! AL Audio Browser
622 { KEY_VIDEO 0x189 } ! AL Movie Browser
623 { KEY_DIRECTORY 0x18a }
625 { KEY_MEMO 0x18c } ! Media Select Messages
626 { KEY_CALENDAR 0x18d }
631 { KEY_CHANNELUP 0x192 } ! Channel Increment
632 { KEY_CHANNELDOWN 0x193 } ! Channel Decrement
634 { KEY_LAST 0x195 } ! Recall Last
637 { KEY_RESTART 0x198 }
639 { KEY_SHUFFLE 0x19a }
641 { KEY_PREVIOUS 0x19c }
645 { KEY_VIDEOPHONE 0x1a0 } ! Media Select Video Phone
646 { KEY_GAMES 0x1a1 } ! Media Select Games
647 { KEY_ZOOMIN 0x1a2 } ! AC Zoom In
648 { KEY_ZOOMOUT 0x1a3 } ! AC Zoom Out
649 { KEY_ZOOMRESET 0x1a4 } ! AC Zoom
650 { KEY_WORDPROCESSOR 0x1a5 } ! AL Word Processor
651 { KEY_EDITOR 0x1a6 } ! AL Text Editor
652 { KEY_SPREADSHEET 0x1a7 } ! AL Spreadsheet
653 { KEY_GRAPHICSEDITOR 0x1a8 } ! AL Graphics Editor
654 { KEY_PRESENTATION 0x1a9 } ! AL Presentation App
655 { KEY_DATABASE 0x1aa } ! AL Database App
656 { KEY_NEWS 0x1ab } ! AL Newsreader
657 { KEY_VOICEMAIL 0x1ac } ! AL Voicemail
658 { KEY_ADDRESSBOOK 0x1ad } ! AL Contacts/Address Book
659 { KEY_MESSENGER 0x1ae } ! AL Instant Messaging
660 { KEY_DISPLAYTOGGLE 0x1af } ! Turn display (LCD) on and off
661 { KEY_SPELLCHECK 0x1b0 } ! AL Spell Check
662 { KEY_LOGOFF 0x1b1 } ! AL Logoff
665 { KEY_FRAMEBACK 0x1b4 } ! Consumer - transport controls
666 { KEY_FRAMEFORWARD 0x1b5 }
667 { KEY_CONTEXT_MENU 0x1b6 } ! GenDesc - system context menu
668 { KEY_MEDIA_REPEAT 0x1b7 } ! Consumer - transport control
669 { KEY_10CHANNELSUP 0x1b8 } ! 10 channels up (10+)
670 { KEY_10CHANNELSDOWN 0x1b9 } ! 10 channels down (10-)
671 { KEY_IMAGES 0x1ba } ! AL Image Browser
672 { KEY_DEL_EOL 0x1c0 }
673 { KEY_DEL_EOS 0x1c1 }
674 { KEY_INS_LINE 0x1c2 }
675 { KEY_DEL_LINE 0x1c3 }
697 { KEY_BRL_DOT1 0x1f1 }
698 { KEY_BRL_DOT2 0x1f2 }
699 { KEY_BRL_DOT3 0x1f3 }
700 { KEY_BRL_DOT4 0x1f4 }
701 { KEY_BRL_DOT5 0x1f5 }
702 { KEY_BRL_DOT6 0x1f6 }
703 { KEY_BRL_DOT7 0x1f7 }
704 { KEY_BRL_DOT8 0x1f8 }
705 { KEY_BRL_DOT9 0x1f9 }
706 { KEY_BRL_DOT10 0x1fa }
707 { KEY_NUMERIC_0 0x200 } ! used by phones, remote controls,
708 { KEY_NUMERIC_1 0x201 } ! and other keypads
709 { KEY_NUMERIC_2 0x202 }
710 { KEY_NUMERIC_3 0x203 }
711 { KEY_NUMERIC_4 0x204 }
712 { KEY_NUMERIC_5 0x205 }
713 { KEY_NUMERIC_6 0x206 }
714 { KEY_NUMERIC_7 0x207 }
715 { KEY_NUMERIC_8 0x208 }
716 { KEY_NUMERIC_9 0x209 }
717 { KEY_NUMERIC_STAR 0x20a }
718 { KEY_NUMERIC_POUND 0x20b }
719 { KEY_NUMERIC_A 0x20c } ! Phone key A - HUT Telephony 0xb9
720 { KEY_NUMERIC_B 0x20d }
721 { KEY_NUMERIC_C 0x20e }
722 { KEY_NUMERIC_D 0x20f }
723 { KEY_CAMERA_FOCUS 0x210 }
724 { KEY_WPS_BUTTON 0x211 } ! WiFi Protected Setup key
725 { KEY_TOUCHPAD_TOGGLE 0x212 } ! Request switch touchpad on or off
726 { KEY_TOUCHPAD_ON 0x213 }
727 { KEY_TOUCHPAD_OFF 0x214 }
728 { KEY_CAMERA_ZOOMIN 0x215 }
729 { KEY_CAMERA_ZOOMOUT 0x216 }
730 { KEY_CAMERA_UP 0x217 }
731 { KEY_CAMERA_DOWN 0x218 }
732 { KEY_CAMERA_LEFT 0x219 }
733 { KEY_CAMERA_RIGHT 0x21a }
734 { KEY_ATTENDANT_ON 0x21b }
735 { KEY_ATTENDANT_OFF 0x21c }
736 { KEY_ATTENDANT_TOGGLE 0x21d } ! Attendant call on or off
737 { KEY_LIGHTS_TOGGLE 0x21e } ! Reading light on or off
738 { BTN_DPAD_UP 0x220 }
739 { BTN_DPAD_DOWN 0x221 }
740 { BTN_DPAD_LEFT 0x222 }
741 { BTN_DPAD_RIGHT 0x223 }
742 { KEY_ALS_TOGGLE 0x230 } ! Ambient light sensor
743 { KEY_ROTATE_LOCK_TOGGLE 0x231 } ! Display rotation lock
744 { KEY_BUTTONCONFIG 0x240 } ! AL Button Configuration
745 { KEY_TASKMANAGER 0x241 } ! AL Task/Project Manager
746 { KEY_JOURNAL 0x242 } ! AL Log/Journal/Timecard
747 { KEY_CONTROLPANEL 0x243 } ! AL Control Panel
748 { KEY_APPSELECT 0x244 } ! AL Select Task/Application
749 { KEY_SCREENSAVER 0x245 } ! AL Screen Saver
750 { KEY_VOICECOMMAND 0x246 } ! Listening Voice Command
751 { KEY_ASSISTANT 0x247 } ! AL Context-aware desktop assistant
752 { KEY_BRIGHTNESS_MIN 0x250 } ! Set Brightness to Minimum
753 { KEY_BRIGHTNESS_MAX 0x251 } ! Set Brightness to Maximum
754 { KEY_KBDINPUTASSIST_PREV 0x260 }
755 { KEY_KBDINPUTASSIST_NEXT 0x261 }
756 { KEY_KBDINPUTASSIST_PREVGROUP 0x262 }
757 { KEY_KBDINPUTASSIST_NEXTGROUP 0x263 }
758 { KEY_KBDINPUTASSIST_ACCEPT 0x264 }
759 { KEY_KBDINPUTASSIST_CANCEL 0x265 }
760 ! Diagonal movement keys
761 { KEY_RIGHT_UP 0x266 }
762 { KEY_RIGHT_DOWN 0x267 }
763 { KEY_LEFT_UP 0x268 }
764 { KEY_LEFT_DOWN 0x269 }
765 { KEY_ROOT_MENU 0x26a } ! Show Device's Root Menu
766 ! Show Top Menu of the Media (e.g. DVD)
767 { KEY_MEDIA_TOP_MENU 0x26b }
768 { KEY_NUMERIC_11 0x26c }
769 { KEY_NUMERIC_12 0x26d }
770 ! Toggle Audio Description: refers to an audio service that helps blind and
771 ! visually impaired consumers understand the action in a program. Note: in
772 ! some countries this is referred to as "Video Description".
773 { KEY_AUDIO_DESC 0x26e }
774 { KEY_3D_MODE 0x26f }
775 { KEY_NEXT_FAVORITE 0x270 }
776 { KEY_STOP_RECORD 0x271 }
777 { KEY_PAUSE_RECORD 0x272 }
778 { KEY_VOD 0x273 } ! Video on Demand
780 { KEY_FASTREVERSE 0x275 }
781 { KEY_SLOWREVERSE 0x276 }
782 ! Control a data application associated with the currently viewed channel,
783 ! e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.)
785 { KEY_ONSCREEN_KEYBOARD 0x278 }
786 { BTN_TRIGGER_HAPPY 0x2c0 }
787 { BTN_TRIGGER_HAPPY1 0x2c0 }
788 { BTN_TRIGGER_HAPPY2 0x2c1 }
789 { BTN_TRIGGER_HAPPY3 0x2c2 }
790 { BTN_TRIGGER_HAPPY4 0x2c3 }
791 { BTN_TRIGGER_HAPPY5 0x2c4 }
792 { BTN_TRIGGER_HAPPY6 0x2c5 }
793 { BTN_TRIGGER_HAPPY7 0x2c6 }
794 { BTN_TRIGGER_HAPPY8 0x2c7 }
795 { BTN_TRIGGER_HAPPY9 0x2c8 }
796 { BTN_TRIGGER_HAPPY10 0x2c9 }
797 { BTN_TRIGGER_HAPPY11 0x2ca }
798 { BTN_TRIGGER_HAPPY12 0x2cb }
799 { BTN_TRIGGER_HAPPY13 0x2cc }
800 { BTN_TRIGGER_HAPPY14 0x2cd }
801 { BTN_TRIGGER_HAPPY15 0x2ce }
802 { BTN_TRIGGER_HAPPY16 0x2cf }
803 { BTN_TRIGGER_HAPPY17 0x2d0 }
804 { BTN_TRIGGER_HAPPY18 0x2d1 }
805 { BTN_TRIGGER_HAPPY19 0x2d2 }
806 { BTN_TRIGGER_HAPPY20 0x2d3 }
807 { BTN_TRIGGER_HAPPY21 0x2d4 }
808 { BTN_TRIGGER_HAPPY22 0x2d5 }
809 { BTN_TRIGGER_HAPPY23 0x2d6 }
810 { BTN_TRIGGER_HAPPY24 0x2d7 }
811 { BTN_TRIGGER_HAPPY25 0x2d8 }
812 { BTN_TRIGGER_HAPPY26 0x2d9 }
813 { BTN_TRIGGER_HAPPY27 0x2da }
814 { BTN_TRIGGER_HAPPY28 0x2db }
815 { BTN_TRIGGER_HAPPY29 0x2dc }
816 { BTN_TRIGGER_HAPPY30 0x2dd }
817 { BTN_TRIGGER_HAPPY31 0x2de }
818 { BTN_TRIGGER_HAPPY32 0x2df }
819 { BTN_TRIGGER_HAPPY33 0x2e0 }
820 { BTN_TRIGGER_HAPPY34 0x2e1 }
821 { BTN_TRIGGER_HAPPY35 0x2e2 }
822 { BTN_TRIGGER_HAPPY36 0x2e3 }
823 { BTN_TRIGGER_HAPPY37 0x2e4 }
824 { BTN_TRIGGER_HAPPY38 0x2e5 }
825 { BTN_TRIGGER_HAPPY39 0x2e6 }
826 { BTN_TRIGGER_HAPPY40 0x2e7 }
827 ! We avoid low common keys in module aliases so they don't get huge.
829 { KEY_CNT 0x300 } ; ! (KEY_MAX+1)
831 CONSTANT: BTN_GAMEPAD 0x130
832 CONSTANT: BTN_DIGI 0x140
833 CONSTANT: KEY_MIN_INTERESTING KEY_MUTE
834 CONSTANT: KEY_HANGUEL KEY_HANGEUL
835 CONSTANT: KEY_SCREENLOCK KEY_COFFEE
836 CONSTANT: KEY_DIRECTION KEY_ROTATE_DISPLAY
837 CONSTANT: KEY_BRIGHTNESS_ZERO KEY_BRIGHTNESS_AUTO
838 CONSTANT: KEY_WIMAX KEY_WWAN
839 CONSTANT: KEY_BRIGHTNESS_TOGGLE KEY_DISPLAYTOGGLE
840 CONSTANT: BTN_MISC 0x100
841 CONSTANT: BTN_SOUTH BTN_A
842 CONSTANT: BTN_EAST BTN_B
843 CONSTANT: BTN_NORTH BTN_X
844 CONSTANT: BTN_WEST BTN_Y
859 { REL_RESERVED 0x0a }
860 { REL_WHEEL_HI_RES 0x0b }
861 { REL_HWHEEL_HI_RES 0x0c }
863 { REL_CNT 0x10 } ; ! (REL_MAX+1)
873 { ABS_THROTTLE 0x06 }
886 { ABS_PRESSURE 0x18 }
887 { ABS_DISTANCE 0x19 }
890 { ABS_TOOL_WIDTH 0x1c }
893 { ABS_MT_SLOT 0x2f } ! MT slot being modified
894 { ABS_MT_TOUCH_MAJOR 0x30 } ! Major axis of touching ellipse
895 { ABS_MT_TOUCH_MINOR 0x31 } ! Minor axis (omit if circular)
896 { ABS_MT_WIDTH_MAJOR 0x32 } ! Major axis of approaching ellipse
897 { ABS_MT_WIDTH_MINOR 0x33 } ! Minor axis (omit if circular)
898 { ABS_MT_ORIENTATION 0x34 } ! Ellipse orientation
899 { ABS_MT_POSITION_X 0x35 } ! Center X touch position
900 { ABS_MT_POSITION_Y 0x36 } ! Center Y touch position
901 { ABS_MT_TOOL_TYPE 0x37 } ! Type of touching device
902 { ABS_MT_BLOB_ID 0x38 } ! Group a set of packets as a blob
903 { ABS_MT_TRACKING_ID 0x39 } ! Unique ID of initiated contact
904 { ABS_MT_PRESSURE 0x3a } ! Pressure on contact area
905 { ABS_MT_DISTANCE 0x3b } ! Contact hover distance
906 { ABS_MT_TOOL_X 0x3c } ! Center X tool position
907 { ABS_MT_TOOL_Y 0x3d } ! Center Y tool position
909 { ABS_CNT 0x40 } ; ! (ABS_MAX+1)
913 { SW_LID 0x00 } ! set = lid shut
914 { SW_TABLET_MODE 0x01 } ! set = tablet mode
915 { SW_HEADPHONE_INSERT 0x02 } ! set = inserted
916 { SW_RFKILL_ALL 0x03 } ! rfkill master switch, type "any"
917 ! set = radio enabled
918 { SW_MICROPHONE_INSERT 0x04 } ! set = inserted
919 { SW_DOCK 0x05 } ! set = plugged into dock
920 { SW_LINEOUT_INSERT 0x06 } ! set = inserted
921 { SW_JACK_PHYSICAL_INSERT 0x07 } ! set = mechanical switch set
922 { SW_VIDEOOUT_INSERT 0x08 } ! set = inserted
923 { SW_CAMERA_LENS_COVER 0x09 } ! set = lens covered
924 { SW_KEYPAD_SLIDE 0x0a } ! set = keypad slide out
925 { SW_FRONT_PROXIMITY 0x0b } ! set = front proximity sensor active
926 { SW_ROTATE_LOCK 0x0c } ! set = rotate locked/disabled
927 { SW_LINEIN_INSERT 0x0d } ! set = inserted
928 { SW_MUTE_DEVICE 0x0e } ! set = device disabled
929 { SW_PEN_INSERTED 0x0f } ! set = pen inserted
931 { SW_CNT 0x10 } ; ! (SW_MAX+1)
933 CONSTANT: SW_RADIO SW_RFKILL_ALL ! deprecated
938 { MSC_PULSELED 0x01 }
942 { MSC_TIMESTAMP 0x05 }
944 { MSC_CNT 0x08 } ; ! (MSC_MAX+1)
947 { SCANCODE_BTN_LEFT 589825 }
948 { SCANCODE_BTN_RIGHT 589826 }
949 { SCANCODE_BTN_MIDDLE 589827 }
950 { SCANCODE_BTN_SIDE 589828 }
951 { SCANCODE_BTN_EXTRA 589829 } ;
965 { LED_CHARGING 0x0a }
967 { LED_CNT 0x10 } ; ! (LED_MAX+1)
974 { REP_CNT 0x02 } ; ! (REP_MAX+1)
982 { SND_CNT 0x08 } ; ! (SND_MAX+1)
984 ! Force feedback effect types
995 ! FF_EFFECT_MIN FF_RUMBLE
996 ! FF_EFFECT_MAX FF_RAMP
998 ! Force feedback periodic effect types
1001 { FF_TRIANGLE 0x59 }
1004 { FF_SAW_DOWN 0x5c }
1007 ! FF_WAVEFORM_MIN FF_SQUARE
1008 ! FF_WAVEFORM_MAX FF_CUSTOM
1009 ! Set ff device properties
1011 { FF_AUTOCENTER 0x61 }
1013 ! ff->playback(effect_id = FF_GAIN) is the first effect_id to
1014 ! cause a collision with another ff method, in this case ff->set_gain().
1015 ! Therefore the greatest safe value for effect_id is FF_GAIN - 1,
1016 ! and thus the total number of effects should never exceed FF_GAIN.
1018 ! FF_MAX_EFFECTS FF_GAIN
1023 { FF_STATUS_STOPPED 0x00 }
1024 { FF_STATUS_PLAYING 0x01 }
1025 { FF_STATUS_MAX 0x01 } ;