18c2ecf20Sopenharmony_ci.. _input-event-codes:
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci=================
48c2ecf20Sopenharmony_ciInput event codes
58c2ecf20Sopenharmony_ci=================
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ciThe input protocol uses a map of types and codes to express input device values
98c2ecf20Sopenharmony_cito userspace. This document describes the types and codes and how and when they
108c2ecf20Sopenharmony_cimay be used.
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ciA single hardware event generates multiple input events. Each input event
138c2ecf20Sopenharmony_cicontains the new value of a single data item. A special event type, EV_SYN, is
148c2ecf20Sopenharmony_ciused to separate input events into packets of input data changes occurring at
158c2ecf20Sopenharmony_cithe same moment in time. In the following, the term "event" refers to a single
168c2ecf20Sopenharmony_ciinput event encompassing a type, code, and value.
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ciThe input protocol is a stateful protocol. Events are emitted only when values
198c2ecf20Sopenharmony_ciof event codes have changed. However, the state is maintained within the Linux
208c2ecf20Sopenharmony_ciinput subsystem; drivers do not need to maintain the state and may attempt to
218c2ecf20Sopenharmony_ciemit unchanged values without harm. Userspace may obtain the current state of
228c2ecf20Sopenharmony_cievent code values using the EVIOCG* ioctls defined in linux/input.h. The event
238c2ecf20Sopenharmony_cireports supported by a device are also provided by sysfs in
248c2ecf20Sopenharmony_ciclass/input/event*/device/capabilities/, and the properties of a device are
258c2ecf20Sopenharmony_ciprovided in class/input/event*/device/properties.
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ciEvent types
288c2ecf20Sopenharmony_ci===========
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ciEvent types are groupings of codes under a logical input construct. Each
318c2ecf20Sopenharmony_citype has a set of applicable codes to be used in generating events. See the
328c2ecf20Sopenharmony_ciCodes section for details on valid codes for each type.
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci* EV_SYN:
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci  - Used as markers to separate events. Events may be separated in time or in
378c2ecf20Sopenharmony_ci    space, such as with the multitouch protocol.
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci* EV_KEY:
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci  - Used to describe state changes of keyboards, buttons, or other key-like
428c2ecf20Sopenharmony_ci    devices.
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci* EV_REL:
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci  - Used to describe relative axis value changes, e.g. moving the mouse 5 units
478c2ecf20Sopenharmony_ci    to the left.
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci* EV_ABS:
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci  - Used to describe absolute axis value changes, e.g. describing the
528c2ecf20Sopenharmony_ci    coordinates of a touch on a touchscreen.
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci* EV_MSC:
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci  - Used to describe miscellaneous input data that do not fit into other types.
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci* EV_SW:
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci  - Used to describe binary state input switches.
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci* EV_LED:
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ci  - Used to turn LEDs on devices on and off.
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci* EV_SND:
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci  - Used to output sound to devices.
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_ci* EV_REP:
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci  - Used for autorepeating devices.
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci* EV_FF:
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ci  - Used to send force feedback commands to an input device.
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ci* EV_PWR:
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_ci  - A special type for power button and switch input.
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ci* EV_FF_STATUS:
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci  - Used to receive force feedback device status.
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ciEvent codes
878c2ecf20Sopenharmony_ci===========
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ciEvent codes define the precise type of event.
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ciEV_SYN
928c2ecf20Sopenharmony_ci------
938c2ecf20Sopenharmony_ci
948c2ecf20Sopenharmony_ciEV_SYN event values are undefined. Their usage is defined only by when they are
958c2ecf20Sopenharmony_cisent in the evdev event stream.
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ci* SYN_REPORT:
988c2ecf20Sopenharmony_ci
998c2ecf20Sopenharmony_ci  - Used to synchronize and separate events into packets of input data changes
1008c2ecf20Sopenharmony_ci    occurring at the same moment in time. For example, motion of a mouse may set
1018c2ecf20Sopenharmony_ci    the REL_X and REL_Y values for one motion, then emit a SYN_REPORT. The next
1028c2ecf20Sopenharmony_ci    motion will emit more REL_X and REL_Y values and send another SYN_REPORT.
1038c2ecf20Sopenharmony_ci
1048c2ecf20Sopenharmony_ci* SYN_CONFIG:
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci  - TBD
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ci* SYN_MT_REPORT:
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ci  - Used to synchronize and separate touch events. See the
1118c2ecf20Sopenharmony_ci    multi-touch-protocol.txt document for more information.
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ci* SYN_DROPPED:
1148c2ecf20Sopenharmony_ci
1158c2ecf20Sopenharmony_ci  - Used to indicate buffer overrun in the evdev client's event queue.
1168c2ecf20Sopenharmony_ci    Client should ignore all events up to and including next SYN_REPORT
1178c2ecf20Sopenharmony_ci    event and query the device (using EVIOCG* ioctls) to obtain its
1188c2ecf20Sopenharmony_ci    current state.
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ciEV_KEY
1218c2ecf20Sopenharmony_ci------
1228c2ecf20Sopenharmony_ci
1238c2ecf20Sopenharmony_ciEV_KEY events take the form KEY_<name> or BTN_<name>. For example, KEY_A is used
1248c2ecf20Sopenharmony_cito represent the 'A' key on a keyboard. When a key is depressed, an event with
1258c2ecf20Sopenharmony_cithe key's code is emitted with value 1. When the key is released, an event is
1268c2ecf20Sopenharmony_ciemitted with value 0. Some hardware send events when a key is repeated. These
1278c2ecf20Sopenharmony_cievents have a value of 2. In general, KEY_<name> is used for keyboard keys, and
1288c2ecf20Sopenharmony_ciBTN_<name> is used for other types of momentary switch events.
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_ciA few EV_KEY codes have special meanings:
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ci* BTN_TOOL_<name>:
1338c2ecf20Sopenharmony_ci
1348c2ecf20Sopenharmony_ci  - These codes are used in conjunction with input trackpads, tablets, and
1358c2ecf20Sopenharmony_ci    touchscreens. These devices may be used with fingers, pens, or other tools.
1368c2ecf20Sopenharmony_ci    When an event occurs and a tool is used, the corresponding BTN_TOOL_<name>
1378c2ecf20Sopenharmony_ci    code should be set to a value of 1. When the tool is no longer interacting
1388c2ecf20Sopenharmony_ci    with the input device, the BTN_TOOL_<name> code should be reset to 0. All
1398c2ecf20Sopenharmony_ci    trackpads, tablets, and touchscreens should use at least one BTN_TOOL_<name>
1408c2ecf20Sopenharmony_ci    code when events are generated.
1418c2ecf20Sopenharmony_ci
1428c2ecf20Sopenharmony_ci* BTN_TOUCH:
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ci    BTN_TOUCH is used for touch contact. While an input tool is determined to be
1458c2ecf20Sopenharmony_ci    within meaningful physical contact, the value of this property must be set
1468c2ecf20Sopenharmony_ci    to 1. Meaningful physical contact may mean any contact, or it may mean
1478c2ecf20Sopenharmony_ci    contact conditioned by an implementation defined property. For example, a
1488c2ecf20Sopenharmony_ci    touchpad may set the value to 1 only when the touch pressure rises above a
1498c2ecf20Sopenharmony_ci    certain value. BTN_TOUCH may be combined with BTN_TOOL_<name> codes. For
1508c2ecf20Sopenharmony_ci    example, a pen tablet may set BTN_TOOL_PEN to 1 and BTN_TOUCH to 0 while the
1518c2ecf20Sopenharmony_ci    pen is hovering over but not touching the tablet surface.
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ciNote: For appropriate function of the legacy mousedev emulation driver,
1548c2ecf20Sopenharmony_ciBTN_TOUCH must be the first evdev code emitted in a synchronization frame.
1558c2ecf20Sopenharmony_ci
1568c2ecf20Sopenharmony_ciNote: Historically a touch device with BTN_TOOL_FINGER and BTN_TOUCH was
1578c2ecf20Sopenharmony_ciinterpreted as a touchpad by userspace, while a similar device without
1588c2ecf20Sopenharmony_ciBTN_TOOL_FINGER was interpreted as a touchscreen. For backwards compatibility
1598c2ecf20Sopenharmony_ciwith current userspace it is recommended to follow this distinction. In the
1608c2ecf20Sopenharmony_cifuture, this distinction will be deprecated and the device properties ioctl
1618c2ecf20Sopenharmony_ciEVIOCGPROP, defined in linux/input.h, will be used to convey the device type.
1628c2ecf20Sopenharmony_ci
1638c2ecf20Sopenharmony_ci* BTN_TOOL_FINGER, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP:
1648c2ecf20Sopenharmony_ci
1658c2ecf20Sopenharmony_ci  - These codes denote one, two, three, and four finger interaction on a
1668c2ecf20Sopenharmony_ci    trackpad or touchscreen. For example, if the user uses two fingers and moves
1678c2ecf20Sopenharmony_ci    them on the touchpad in an effort to scroll content on screen,
1688c2ecf20Sopenharmony_ci    BTN_TOOL_DOUBLETAP should be set to value 1 for the duration of the motion.
1698c2ecf20Sopenharmony_ci    Note that all BTN_TOOL_<name> codes and the BTN_TOUCH code are orthogonal in
1708c2ecf20Sopenharmony_ci    purpose. A trackpad event generated by finger touches should generate events
1718c2ecf20Sopenharmony_ci    for one code from each group. At most only one of these BTN_TOOL_<name>
1728c2ecf20Sopenharmony_ci    codes should have a value of 1 during any synchronization frame.
1738c2ecf20Sopenharmony_ci
1748c2ecf20Sopenharmony_ciNote: Historically some drivers emitted multiple of the finger count codes with
1758c2ecf20Sopenharmony_cia value of 1 in the same synchronization frame. This usage is deprecated.
1768c2ecf20Sopenharmony_ci
1778c2ecf20Sopenharmony_ciNote: In multitouch drivers, the input_mt_report_finger_count() function should
1788c2ecf20Sopenharmony_cibe used to emit these codes. Please see multi-touch-protocol.txt for details.
1798c2ecf20Sopenharmony_ci
1808c2ecf20Sopenharmony_ciEV_REL
1818c2ecf20Sopenharmony_ci------
1828c2ecf20Sopenharmony_ci
1838c2ecf20Sopenharmony_ciEV_REL events describe relative changes in a property. For example, a mouse may
1848c2ecf20Sopenharmony_cimove to the left by a certain number of units, but its absolute position in
1858c2ecf20Sopenharmony_cispace is unknown. If the absolute position is known, EV_ABS codes should be used
1868c2ecf20Sopenharmony_ciinstead of EV_REL codes.
1878c2ecf20Sopenharmony_ci
1888c2ecf20Sopenharmony_ciA few EV_REL codes have special meanings:
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_ci* REL_WHEEL, REL_HWHEEL:
1918c2ecf20Sopenharmony_ci
1928c2ecf20Sopenharmony_ci  - These codes are used for vertical and horizontal scroll wheels,
1938c2ecf20Sopenharmony_ci    respectively. The value is the number of detents moved on the wheel, the
1948c2ecf20Sopenharmony_ci    physical size of which varies by device. For high-resolution wheels
1958c2ecf20Sopenharmony_ci    this may be an approximation based on the high-resolution scroll events,
1968c2ecf20Sopenharmony_ci    see REL_WHEEL_HI_RES. These event codes are legacy codes and
1978c2ecf20Sopenharmony_ci    REL_WHEEL_HI_RES and REL_HWHEEL_HI_RES should be preferred where
1988c2ecf20Sopenharmony_ci    available.
1998c2ecf20Sopenharmony_ci
2008c2ecf20Sopenharmony_ci* REL_WHEEL_HI_RES, REL_HWHEEL_HI_RES:
2018c2ecf20Sopenharmony_ci
2028c2ecf20Sopenharmony_ci  - High-resolution scroll wheel data. The accumulated value 120 represents
2038c2ecf20Sopenharmony_ci    movement by one detent. For devices that do not provide high-resolution
2048c2ecf20Sopenharmony_ci    scrolling, the value is always a multiple of 120. For devices with
2058c2ecf20Sopenharmony_ci    high-resolution scrolling, the value may be a fraction of 120.
2068c2ecf20Sopenharmony_ci
2078c2ecf20Sopenharmony_ci    If a vertical scroll wheel supports high-resolution scrolling, this code
2088c2ecf20Sopenharmony_ci    will be emitted in addition to REL_WHEEL or REL_HWHEEL. The REL_WHEEL
2098c2ecf20Sopenharmony_ci    and REL_HWHEEL may be an approximation based on the high-resolution
2108c2ecf20Sopenharmony_ci    scroll events. There is no guarantee that the high-resolution data
2118c2ecf20Sopenharmony_ci    is a multiple of 120 at the time of an emulated REL_WHEEL or REL_HWHEEL
2128c2ecf20Sopenharmony_ci    event.
2138c2ecf20Sopenharmony_ci
2148c2ecf20Sopenharmony_ciEV_ABS
2158c2ecf20Sopenharmony_ci------
2168c2ecf20Sopenharmony_ci
2178c2ecf20Sopenharmony_ciEV_ABS events describe absolute changes in a property. For example, a touchpad
2188c2ecf20Sopenharmony_cimay emit coordinates for a touch location.
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_ciA few EV_ABS codes have special meanings:
2218c2ecf20Sopenharmony_ci
2228c2ecf20Sopenharmony_ci* ABS_DISTANCE:
2238c2ecf20Sopenharmony_ci
2248c2ecf20Sopenharmony_ci  - Used to describe the distance of a tool from an interaction surface. This
2258c2ecf20Sopenharmony_ci    event should only be emitted while the tool is hovering, meaning in close
2268c2ecf20Sopenharmony_ci    proximity of the device and while the value of the BTN_TOUCH code is 0. If
2278c2ecf20Sopenharmony_ci    the input device may be used freely in three dimensions, consider ABS_Z
2288c2ecf20Sopenharmony_ci    instead.
2298c2ecf20Sopenharmony_ci  - BTN_TOOL_<name> should be set to 1 when the tool comes into detectable
2308c2ecf20Sopenharmony_ci    proximity and set to 0 when the tool leaves detectable proximity.
2318c2ecf20Sopenharmony_ci    BTN_TOOL_<name> signals the type of tool that is currently detected by the
2328c2ecf20Sopenharmony_ci    hardware and is otherwise independent of ABS_DISTANCE and/or BTN_TOUCH.
2338c2ecf20Sopenharmony_ci
2348c2ecf20Sopenharmony_ci* ABS_MT_<name>:
2358c2ecf20Sopenharmony_ci
2368c2ecf20Sopenharmony_ci  - Used to describe multitouch input events. Please see
2378c2ecf20Sopenharmony_ci    multi-touch-protocol.txt for details.
2388c2ecf20Sopenharmony_ci
2398c2ecf20Sopenharmony_ciEV_SW
2408c2ecf20Sopenharmony_ci-----
2418c2ecf20Sopenharmony_ci
2428c2ecf20Sopenharmony_ciEV_SW events describe stateful binary switches. For example, the SW_LID code is
2438c2ecf20Sopenharmony_ciused to denote when a laptop lid is closed.
2448c2ecf20Sopenharmony_ci
2458c2ecf20Sopenharmony_ciUpon binding to a device or resuming from suspend, a driver must report
2468c2ecf20Sopenharmony_cithe current switch state. This ensures that the device, kernel, and userspace
2478c2ecf20Sopenharmony_cistate is in sync.
2488c2ecf20Sopenharmony_ci
2498c2ecf20Sopenharmony_ciUpon resume, if the switch state is the same as before suspend, then the input
2508c2ecf20Sopenharmony_cisubsystem will filter out the duplicate switch state reports. The driver does
2518c2ecf20Sopenharmony_cinot need to keep the state of the switch at any time.
2528c2ecf20Sopenharmony_ci
2538c2ecf20Sopenharmony_ciEV_MSC
2548c2ecf20Sopenharmony_ci------
2558c2ecf20Sopenharmony_ci
2568c2ecf20Sopenharmony_ciEV_MSC events are used for input and output events that do not fall under other
2578c2ecf20Sopenharmony_cicategories.
2588c2ecf20Sopenharmony_ci
2598c2ecf20Sopenharmony_ciA few EV_MSC codes have special meaning:
2608c2ecf20Sopenharmony_ci
2618c2ecf20Sopenharmony_ci* MSC_TIMESTAMP:
2628c2ecf20Sopenharmony_ci
2638c2ecf20Sopenharmony_ci  - Used to report the number of microseconds since the last reset. This event
2648c2ecf20Sopenharmony_ci    should be coded as an uint32 value, which is allowed to wrap around with
2658c2ecf20Sopenharmony_ci    no special consequence. It is assumed that the time difference between two
2668c2ecf20Sopenharmony_ci    consecutive events is reliable on a reasonable time scale (hours).
2678c2ecf20Sopenharmony_ci    A reset to zero can happen, in which case the time since the last event is
2688c2ecf20Sopenharmony_ci    unknown.  If the device does not provide this information, the driver must
2698c2ecf20Sopenharmony_ci    not provide it to user space.
2708c2ecf20Sopenharmony_ci
2718c2ecf20Sopenharmony_ciEV_LED
2728c2ecf20Sopenharmony_ci------
2738c2ecf20Sopenharmony_ci
2748c2ecf20Sopenharmony_ciEV_LED events are used for input and output to set and query the state of
2758c2ecf20Sopenharmony_civarious LEDs on devices.
2768c2ecf20Sopenharmony_ci
2778c2ecf20Sopenharmony_ciEV_REP
2788c2ecf20Sopenharmony_ci------
2798c2ecf20Sopenharmony_ci
2808c2ecf20Sopenharmony_ciEV_REP events are used for specifying autorepeating events.
2818c2ecf20Sopenharmony_ci
2828c2ecf20Sopenharmony_ciEV_SND
2838c2ecf20Sopenharmony_ci------
2848c2ecf20Sopenharmony_ci
2858c2ecf20Sopenharmony_ciEV_SND events are used for sending sound commands to simple sound output
2868c2ecf20Sopenharmony_cidevices.
2878c2ecf20Sopenharmony_ci
2888c2ecf20Sopenharmony_ciEV_FF
2898c2ecf20Sopenharmony_ci-----
2908c2ecf20Sopenharmony_ci
2918c2ecf20Sopenharmony_ciEV_FF events are used to initialize a force feedback capable device and to cause
2928c2ecf20Sopenharmony_cisuch device to feedback.
2938c2ecf20Sopenharmony_ci
2948c2ecf20Sopenharmony_ciEV_PWR
2958c2ecf20Sopenharmony_ci------
2968c2ecf20Sopenharmony_ci
2978c2ecf20Sopenharmony_ciEV_PWR events are a special type of event used specifically for power
2988c2ecf20Sopenharmony_cimanagement. Its usage is not well defined. To be addressed later.
2998c2ecf20Sopenharmony_ci
3008c2ecf20Sopenharmony_ciDevice properties
3018c2ecf20Sopenharmony_ci=================
3028c2ecf20Sopenharmony_ci
3038c2ecf20Sopenharmony_ciNormally, userspace sets up an input device based on the data it emits,
3048c2ecf20Sopenharmony_cii.e., the event types. In the case of two devices emitting the same event
3058c2ecf20Sopenharmony_citypes, additional information can be provided in the form of device
3068c2ecf20Sopenharmony_ciproperties.
3078c2ecf20Sopenharmony_ci
3088c2ecf20Sopenharmony_ciINPUT_PROP_DIRECT + INPUT_PROP_POINTER
3098c2ecf20Sopenharmony_ci--------------------------------------
3108c2ecf20Sopenharmony_ci
3118c2ecf20Sopenharmony_ciThe INPUT_PROP_DIRECT property indicates that device coordinates should be
3128c2ecf20Sopenharmony_cidirectly mapped to screen coordinates (not taking into account trivial
3138c2ecf20Sopenharmony_citransformations, such as scaling, flipping and rotating). Non-direct input
3148c2ecf20Sopenharmony_cidevices require non-trivial transformation, such as absolute to relative
3158c2ecf20Sopenharmony_citransformation for touchpads. Typical direct input devices: touchscreens,
3168c2ecf20Sopenharmony_cidrawing tablets; non-direct devices: touchpads, mice.
3178c2ecf20Sopenharmony_ci
3188c2ecf20Sopenharmony_ciThe INPUT_PROP_POINTER property indicates that the device is not transposed
3198c2ecf20Sopenharmony_cion the screen and thus requires use of an on-screen pointer to trace user's
3208c2ecf20Sopenharmony_cimovements.  Typical pointer devices: touchpads, tablets, mice; non-pointer
3218c2ecf20Sopenharmony_cidevice: touchscreen.
3228c2ecf20Sopenharmony_ci
3238c2ecf20Sopenharmony_ciIf neither INPUT_PROP_DIRECT or INPUT_PROP_POINTER are set, the property is
3248c2ecf20Sopenharmony_ciconsidered undefined and the device type should be deduced in the
3258c2ecf20Sopenharmony_citraditional way, using emitted event types.
3268c2ecf20Sopenharmony_ci
3278c2ecf20Sopenharmony_ciINPUT_PROP_BUTTONPAD
3288c2ecf20Sopenharmony_ci--------------------
3298c2ecf20Sopenharmony_ci
3308c2ecf20Sopenharmony_ciFor touchpads where the button is placed beneath the surface, such that
3318c2ecf20Sopenharmony_cipressing down on the pad causes a button click, this property should be
3328c2ecf20Sopenharmony_ciset. Common in clickpad notebooks and macbooks from 2009 and onwards.
3338c2ecf20Sopenharmony_ci
3348c2ecf20Sopenharmony_ciOriginally, the buttonpad property was coded into the bcm5974 driver
3358c2ecf20Sopenharmony_civersion field under the name integrated button. For backwards
3368c2ecf20Sopenharmony_cicompatibility, both methods need to be checked in userspace.
3378c2ecf20Sopenharmony_ci
3388c2ecf20Sopenharmony_ciINPUT_PROP_SEMI_MT
3398c2ecf20Sopenharmony_ci------------------
3408c2ecf20Sopenharmony_ci
3418c2ecf20Sopenharmony_ciSome touchpads, most common between 2008 and 2011, can detect the presence
3428c2ecf20Sopenharmony_ciof multiple contacts without resolving the individual positions; only the
3438c2ecf20Sopenharmony_cinumber of contacts and a rectangular shape is known. For such
3448c2ecf20Sopenharmony_citouchpads, the semi-mt property should be set.
3458c2ecf20Sopenharmony_ci
3468c2ecf20Sopenharmony_ciDepending on the device, the rectangle may enclose all touches, like a
3478c2ecf20Sopenharmony_cibounding box, or just some of them, for instance the two most recent
3488c2ecf20Sopenharmony_citouches. The diversity makes the rectangle of limited use, but some
3498c2ecf20Sopenharmony_cigestures can normally be extracted from it.
3508c2ecf20Sopenharmony_ci
3518c2ecf20Sopenharmony_ciIf INPUT_PROP_SEMI_MT is not set, the device is assumed to be a true MT
3528c2ecf20Sopenharmony_cidevice.
3538c2ecf20Sopenharmony_ci
3548c2ecf20Sopenharmony_ciINPUT_PROP_TOPBUTTONPAD
3558c2ecf20Sopenharmony_ci-----------------------
3568c2ecf20Sopenharmony_ci
3578c2ecf20Sopenharmony_ciSome laptops, most notably the Lenovo 40 series provide a trackstick
3588c2ecf20Sopenharmony_cidevice but do not have physical buttons associated with the trackstick
3598c2ecf20Sopenharmony_cidevice. Instead, the top area of the touchpad is marked to show
3608c2ecf20Sopenharmony_civisual/haptic areas for left, middle, right buttons intended to be used
3618c2ecf20Sopenharmony_ciwith the trackstick.
3628c2ecf20Sopenharmony_ci
3638c2ecf20Sopenharmony_ciIf INPUT_PROP_TOPBUTTONPAD is set, userspace should emulate buttons
3648c2ecf20Sopenharmony_ciaccordingly. This property does not affect kernel behavior.
3658c2ecf20Sopenharmony_ciThe kernel does not provide button emulation for such devices but treats
3668c2ecf20Sopenharmony_cithem as any other INPUT_PROP_BUTTONPAD device.
3678c2ecf20Sopenharmony_ci
3688c2ecf20Sopenharmony_ciINPUT_PROP_ACCELEROMETER
3698c2ecf20Sopenharmony_ci------------------------
3708c2ecf20Sopenharmony_ci
3718c2ecf20Sopenharmony_ciDirectional axes on this device (absolute and/or relative x, y, z) represent
3728c2ecf20Sopenharmony_ciaccelerometer data. Some devices also report gyroscope data, which devices
3738c2ecf20Sopenharmony_cican report through the rotational axes (absolute and/or relative rx, ry, rz).
3748c2ecf20Sopenharmony_ci
3758c2ecf20Sopenharmony_ciAll other axes retain their meaning. A device must not mix
3768c2ecf20Sopenharmony_ciregular directional axes and accelerometer axes on the same event node.
3778c2ecf20Sopenharmony_ci
3788c2ecf20Sopenharmony_ciGuidelines
3798c2ecf20Sopenharmony_ci==========
3808c2ecf20Sopenharmony_ci
3818c2ecf20Sopenharmony_ciThe guidelines below ensure proper single-touch and multi-finger functionality.
3828c2ecf20Sopenharmony_ciFor multi-touch functionality, see the multi-touch-protocol.txt document for
3838c2ecf20Sopenharmony_cimore information.
3848c2ecf20Sopenharmony_ci
3858c2ecf20Sopenharmony_ciMice
3868c2ecf20Sopenharmony_ci----
3878c2ecf20Sopenharmony_ci
3888c2ecf20Sopenharmony_ciREL_{X,Y} must be reported when the mouse moves. BTN_LEFT must be used to report
3898c2ecf20Sopenharmony_cithe primary button press. BTN_{MIDDLE,RIGHT,4,5,etc.} should be used to report
3908c2ecf20Sopenharmony_cifurther buttons of the device. REL_WHEEL and REL_HWHEEL should be used to report
3918c2ecf20Sopenharmony_ciscroll wheel events where available.
3928c2ecf20Sopenharmony_ci
3938c2ecf20Sopenharmony_ciTouchscreens
3948c2ecf20Sopenharmony_ci------------
3958c2ecf20Sopenharmony_ci
3968c2ecf20Sopenharmony_ciABS_{X,Y} must be reported with the location of the touch. BTN_TOUCH must be
3978c2ecf20Sopenharmony_ciused to report when a touch is active on the screen.
3988c2ecf20Sopenharmony_ciBTN_{MOUSE,LEFT,MIDDLE,RIGHT} must not be reported as the result of touch
3998c2ecf20Sopenharmony_cicontact. BTN_TOOL_<name> events should be reported where possible.
4008c2ecf20Sopenharmony_ci
4018c2ecf20Sopenharmony_ciFor new hardware, INPUT_PROP_DIRECT should be set.
4028c2ecf20Sopenharmony_ci
4038c2ecf20Sopenharmony_ciTrackpads
4048c2ecf20Sopenharmony_ci---------
4058c2ecf20Sopenharmony_ci
4068c2ecf20Sopenharmony_ciLegacy trackpads that only provide relative position information must report
4078c2ecf20Sopenharmony_cievents like mice described above.
4088c2ecf20Sopenharmony_ci
4098c2ecf20Sopenharmony_ciTrackpads that provide absolute touch position must report ABS_{X,Y} for the
4108c2ecf20Sopenharmony_cilocation of the touch. BTN_TOUCH should be used to report when a touch is active
4118c2ecf20Sopenharmony_cion the trackpad. Where multi-finger support is available, BTN_TOOL_<name> should
4128c2ecf20Sopenharmony_cibe used to report the number of touches active on the trackpad.
4138c2ecf20Sopenharmony_ci
4148c2ecf20Sopenharmony_ciFor new hardware, INPUT_PROP_POINTER should be set.
4158c2ecf20Sopenharmony_ci
4168c2ecf20Sopenharmony_ciTablets
4178c2ecf20Sopenharmony_ci-------
4188c2ecf20Sopenharmony_ci
4198c2ecf20Sopenharmony_ciBTN_TOOL_<name> events must be reported when a stylus or other tool is active on
4208c2ecf20Sopenharmony_cithe tablet. ABS_{X,Y} must be reported with the location of the tool. BTN_TOUCH
4218c2ecf20Sopenharmony_cishould be used to report when the tool is in contact with the tablet.
4228c2ecf20Sopenharmony_ciBTN_{STYLUS,STYLUS2} should be used to report buttons on the tool itself. Any
4238c2ecf20Sopenharmony_cibutton may be used for buttons on the tablet except BTN_{MOUSE,LEFT}.
4248c2ecf20Sopenharmony_ciBTN_{0,1,2,etc} are good generic codes for unlabeled buttons. Do not use
4258c2ecf20Sopenharmony_cimeaningful buttons, like BTN_FORWARD, unless the button is labeled for that
4268c2ecf20Sopenharmony_cipurpose on the device.
4278c2ecf20Sopenharmony_ci
4288c2ecf20Sopenharmony_ciFor new hardware, both INPUT_PROP_DIRECT and INPUT_PROP_POINTER should be set.
429