162306a36Sopenharmony_ci.. _input-event-codes:
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci=================
462306a36Sopenharmony_ciInput event codes
562306a36Sopenharmony_ci=================
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciThe input protocol uses a map of types and codes to express input device values
962306a36Sopenharmony_cito userspace. This document describes the types and codes and how and when they
1062306a36Sopenharmony_cimay be used.
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ciA single hardware event generates multiple input events. Each input event
1362306a36Sopenharmony_cicontains the new value of a single data item. A special event type, EV_SYN, is
1462306a36Sopenharmony_ciused to separate input events into packets of input data changes occurring at
1562306a36Sopenharmony_cithe same moment in time. In the following, the term "event" refers to a single
1662306a36Sopenharmony_ciinput event encompassing a type, code, and value.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciThe input protocol is a stateful protocol. Events are emitted only when values
1962306a36Sopenharmony_ciof event codes have changed. However, the state is maintained within the Linux
2062306a36Sopenharmony_ciinput subsystem; drivers do not need to maintain the state and may attempt to
2162306a36Sopenharmony_ciemit unchanged values without harm. Userspace may obtain the current state of
2262306a36Sopenharmony_cievent code values using the EVIOCG* ioctls defined in linux/input.h. The event
2362306a36Sopenharmony_cireports supported by a device are also provided by sysfs in
2462306a36Sopenharmony_ciclass/input/event*/device/capabilities/, and the properties of a device are
2562306a36Sopenharmony_ciprovided in class/input/event*/device/properties.
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciEvent types
2862306a36Sopenharmony_ci===========
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciEvent types are groupings of codes under a logical input construct. Each
3162306a36Sopenharmony_citype has a set of applicable codes to be used in generating events. See the
3262306a36Sopenharmony_ciCodes section for details on valid codes for each type.
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci* EV_SYN:
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci  - Used as markers to separate events. Events may be separated in time or in
3762306a36Sopenharmony_ci    space, such as with the multitouch protocol.
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci* EV_KEY:
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci  - Used to describe state changes of keyboards, buttons, or other key-like
4262306a36Sopenharmony_ci    devices.
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci* EV_REL:
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci  - Used to describe relative axis value changes, e.g. moving the mouse 5 units
4762306a36Sopenharmony_ci    to the left.
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci* EV_ABS:
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci  - Used to describe absolute axis value changes, e.g. describing the
5262306a36Sopenharmony_ci    coordinates of a touch on a touchscreen.
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci* EV_MSC:
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci  - Used to describe miscellaneous input data that do not fit into other types.
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci* EV_SW:
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci  - Used to describe binary state input switches.
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci* EV_LED:
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci  - Used to turn LEDs on devices on and off.
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci* EV_SND:
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci  - Used to output sound to devices.
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci* EV_REP:
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci  - Used for autorepeating devices.
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci* EV_FF:
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci  - Used to send force feedback commands to an input device.
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci* EV_PWR:
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci  - A special type for power button and switch input.
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci* EV_FF_STATUS:
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci  - Used to receive force feedback device status.
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ciEvent codes
8762306a36Sopenharmony_ci===========
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ciEvent codes define the precise type of event.
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ciEV_SYN
9262306a36Sopenharmony_ci------
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ciEV_SYN event values are undefined. Their usage is defined only by when they are
9562306a36Sopenharmony_cisent in the evdev event stream.
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci* SYN_REPORT:
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci  - Used to synchronize and separate events into packets of input data changes
10062306a36Sopenharmony_ci    occurring at the same moment in time. For example, motion of a mouse may set
10162306a36Sopenharmony_ci    the REL_X and REL_Y values for one motion, then emit a SYN_REPORT. The next
10262306a36Sopenharmony_ci    motion will emit more REL_X and REL_Y values and send another SYN_REPORT.
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci* SYN_CONFIG:
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci  - TBD
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci* SYN_MT_REPORT:
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci  - Used to synchronize and separate touch events. See the
11162306a36Sopenharmony_ci    multi-touch-protocol.txt document for more information.
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci* SYN_DROPPED:
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci  - Used to indicate buffer overrun in the evdev client's event queue.
11662306a36Sopenharmony_ci    Client should ignore all events up to and including next SYN_REPORT
11762306a36Sopenharmony_ci    event and query the device (using EVIOCG* ioctls) to obtain its
11862306a36Sopenharmony_ci    current state.
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ciEV_KEY
12162306a36Sopenharmony_ci------
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ciEV_KEY events take the form KEY_<name> or BTN_<name>. For example, KEY_A is used
12462306a36Sopenharmony_cito represent the 'A' key on a keyboard. When a key is depressed, an event with
12562306a36Sopenharmony_cithe key's code is emitted with value 1. When the key is released, an event is
12662306a36Sopenharmony_ciemitted with value 0. Some hardware send events when a key is repeated. These
12762306a36Sopenharmony_cievents have a value of 2. In general, KEY_<name> is used for keyboard keys, and
12862306a36Sopenharmony_ciBTN_<name> is used for other types of momentary switch events.
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ciA few EV_KEY codes have special meanings:
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci* BTN_TOOL_<name>:
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci  - These codes are used in conjunction with input trackpads, tablets, and
13562306a36Sopenharmony_ci    touchscreens. These devices may be used with fingers, pens, or other tools.
13662306a36Sopenharmony_ci    When an event occurs and a tool is used, the corresponding BTN_TOOL_<name>
13762306a36Sopenharmony_ci    code should be set to a value of 1. When the tool is no longer interacting
13862306a36Sopenharmony_ci    with the input device, the BTN_TOOL_<name> code should be reset to 0. All
13962306a36Sopenharmony_ci    trackpads, tablets, and touchscreens should use at least one BTN_TOOL_<name>
14062306a36Sopenharmony_ci    code when events are generated. Likewise all trackpads, tablets, and
14162306a36Sopenharmony_ci    touchscreens should export only one BTN_TOOL_<name> at a time. To not break
14262306a36Sopenharmony_ci    existing userspace, it is recommended to not switch tool in one EV_SYN frame
14362306a36Sopenharmony_ci    but first emitting the old BTN_TOOL_<name> at 0, then emit one SYN_REPORT
14462306a36Sopenharmony_ci    and then set the new BTN_TOOL_<name> at 1.
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci* BTN_TOUCH:
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci    BTN_TOUCH is used for touch contact. While an input tool is determined to be
14962306a36Sopenharmony_ci    within meaningful physical contact, the value of this property must be set
15062306a36Sopenharmony_ci    to 1. Meaningful physical contact may mean any contact, or it may mean
15162306a36Sopenharmony_ci    contact conditioned by an implementation defined property. For example, a
15262306a36Sopenharmony_ci    touchpad may set the value to 1 only when the touch pressure rises above a
15362306a36Sopenharmony_ci    certain value. BTN_TOUCH may be combined with BTN_TOOL_<name> codes. For
15462306a36Sopenharmony_ci    example, a pen tablet may set BTN_TOOL_PEN to 1 and BTN_TOUCH to 0 while the
15562306a36Sopenharmony_ci    pen is hovering over but not touching the tablet surface.
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ciNote: For appropriate function of the legacy mousedev emulation driver,
15862306a36Sopenharmony_ciBTN_TOUCH must be the first evdev code emitted in a synchronization frame.
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ciNote: Historically a touch device with BTN_TOOL_FINGER and BTN_TOUCH was
16162306a36Sopenharmony_ciinterpreted as a touchpad by userspace, while a similar device without
16262306a36Sopenharmony_ciBTN_TOOL_FINGER was interpreted as a touchscreen. For backwards compatibility
16362306a36Sopenharmony_ciwith current userspace it is recommended to follow this distinction. In the
16462306a36Sopenharmony_cifuture, this distinction will be deprecated and the device properties ioctl
16562306a36Sopenharmony_ciEVIOCGPROP, defined in linux/input.h, will be used to convey the device type.
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci* BTN_TOOL_FINGER, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP:
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci  - These codes denote one, two, three, and four finger interaction on a
17062306a36Sopenharmony_ci    trackpad or touchscreen. For example, if the user uses two fingers and moves
17162306a36Sopenharmony_ci    them on the touchpad in an effort to scroll content on screen,
17262306a36Sopenharmony_ci    BTN_TOOL_DOUBLETAP should be set to value 1 for the duration of the motion.
17362306a36Sopenharmony_ci    Note that all BTN_TOOL_<name> codes and the BTN_TOUCH code are orthogonal in
17462306a36Sopenharmony_ci    purpose. A trackpad event generated by finger touches should generate events
17562306a36Sopenharmony_ci    for one code from each group. At most only one of these BTN_TOOL_<name>
17662306a36Sopenharmony_ci    codes should have a value of 1 during any synchronization frame.
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ciNote: Historically some drivers emitted multiple of the finger count codes with
17962306a36Sopenharmony_cia value of 1 in the same synchronization frame. This usage is deprecated.
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ciNote: In multitouch drivers, the input_mt_report_finger_count() function should
18262306a36Sopenharmony_cibe used to emit these codes. Please see multi-touch-protocol.txt for details.
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ciEV_REL
18562306a36Sopenharmony_ci------
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ciEV_REL events describe relative changes in a property. For example, a mouse may
18862306a36Sopenharmony_cimove to the left by a certain number of units, but its absolute position in
18962306a36Sopenharmony_cispace is unknown. If the absolute position is known, EV_ABS codes should be used
19062306a36Sopenharmony_ciinstead of EV_REL codes.
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ciA few EV_REL codes have special meanings:
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci* REL_WHEEL, REL_HWHEEL:
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci  - These codes are used for vertical and horizontal scroll wheels,
19762306a36Sopenharmony_ci    respectively. The value is the number of detents moved on the wheel, the
19862306a36Sopenharmony_ci    physical size of which varies by device. For high-resolution wheels
19962306a36Sopenharmony_ci    this may be an approximation based on the high-resolution scroll events,
20062306a36Sopenharmony_ci    see REL_WHEEL_HI_RES. These event codes are legacy codes and
20162306a36Sopenharmony_ci    REL_WHEEL_HI_RES and REL_HWHEEL_HI_RES should be preferred where
20262306a36Sopenharmony_ci    available.
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ci* REL_WHEEL_HI_RES, REL_HWHEEL_HI_RES:
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci  - High-resolution scroll wheel data. The accumulated value 120 represents
20762306a36Sopenharmony_ci    movement by one detent. For devices that do not provide high-resolution
20862306a36Sopenharmony_ci    scrolling, the value is always a multiple of 120. For devices with
20962306a36Sopenharmony_ci    high-resolution scrolling, the value may be a fraction of 120.
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci    If a vertical scroll wheel supports high-resolution scrolling, this code
21262306a36Sopenharmony_ci    will be emitted in addition to REL_WHEEL or REL_HWHEEL. The REL_WHEEL
21362306a36Sopenharmony_ci    and REL_HWHEEL may be an approximation based on the high-resolution
21462306a36Sopenharmony_ci    scroll events. There is no guarantee that the high-resolution data
21562306a36Sopenharmony_ci    is a multiple of 120 at the time of an emulated REL_WHEEL or REL_HWHEEL
21662306a36Sopenharmony_ci    event.
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ciEV_ABS
21962306a36Sopenharmony_ci------
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ciEV_ABS events describe absolute changes in a property. For example, a touchpad
22262306a36Sopenharmony_cimay emit coordinates for a touch location.
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ciA few EV_ABS codes have special meanings:
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_ci* ABS_DISTANCE:
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_ci  - Used to describe the distance of a tool from an interaction surface. This
22962306a36Sopenharmony_ci    event should only be emitted while the tool is hovering, meaning in close
23062306a36Sopenharmony_ci    proximity of the device and while the value of the BTN_TOUCH code is 0. If
23162306a36Sopenharmony_ci    the input device may be used freely in three dimensions, consider ABS_Z
23262306a36Sopenharmony_ci    instead.
23362306a36Sopenharmony_ci  - BTN_TOOL_<name> should be set to 1 when the tool comes into detectable
23462306a36Sopenharmony_ci    proximity and set to 0 when the tool leaves detectable proximity.
23562306a36Sopenharmony_ci    BTN_TOOL_<name> signals the type of tool that is currently detected by the
23662306a36Sopenharmony_ci    hardware and is otherwise independent of ABS_DISTANCE and/or BTN_TOUCH.
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_ci* ABS_PROFILE:
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci  - Used to describe the state of a multi-value profile switch.  An event is
24162306a36Sopenharmony_ci    emitted only when the selected profile changes, indicating the newly
24262306a36Sopenharmony_ci    selected profile value.
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ci* ABS_MT_<name>:
24562306a36Sopenharmony_ci
24662306a36Sopenharmony_ci  - Used to describe multitouch input events. Please see
24762306a36Sopenharmony_ci    multi-touch-protocol.txt for details.
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci* ABS_PRESSURE/ABS_MT_PRESSURE:
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_ci   - For touch devices, many devices converted contact size into pressure.
25262306a36Sopenharmony_ci     A finger flattens with pressure, causing a larger contact area and thus
25362306a36Sopenharmony_ci     pressure and contact size are directly related. This is not the case
25462306a36Sopenharmony_ci     for other devices, for example digitizers and touchpads with a true
25562306a36Sopenharmony_ci     pressure sensor ("pressure pads").
25662306a36Sopenharmony_ci
25762306a36Sopenharmony_ci     A device should set the resolution of the axis to indicate whether the
25862306a36Sopenharmony_ci     pressure is in measurable units. If the resolution is zero, the
25962306a36Sopenharmony_ci     pressure data is in arbitrary units. If the resolution is non-zero, the
26062306a36Sopenharmony_ci     pressure data is in units/gram. For example, a value of 10 with a
26162306a36Sopenharmony_ci     resolution of 1 represents 10 gram, a value of 10 with a resolution of
26262306a36Sopenharmony_ci     1000 represents 10 microgram.
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ciEV_SW
26562306a36Sopenharmony_ci-----
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ciEV_SW events describe stateful binary switches. For example, the SW_LID code is
26862306a36Sopenharmony_ciused to denote when a laptop lid is closed.
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_ciUpon binding to a device or resuming from suspend, a driver must report
27162306a36Sopenharmony_cithe current switch state. This ensures that the device, kernel, and userspace
27262306a36Sopenharmony_cistate is in sync.
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ciUpon resume, if the switch state is the same as before suspend, then the input
27562306a36Sopenharmony_cisubsystem will filter out the duplicate switch state reports. The driver does
27662306a36Sopenharmony_cinot need to keep the state of the switch at any time.
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ciEV_MSC
27962306a36Sopenharmony_ci------
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ciEV_MSC events are used for input and output events that do not fall under other
28262306a36Sopenharmony_cicategories.
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ciA few EV_MSC codes have special meaning:
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_ci* MSC_TIMESTAMP:
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ci  - Used to report the number of microseconds since the last reset. This event
28962306a36Sopenharmony_ci    should be coded as an uint32 value, which is allowed to wrap around with
29062306a36Sopenharmony_ci    no special consequence. It is assumed that the time difference between two
29162306a36Sopenharmony_ci    consecutive events is reliable on a reasonable time scale (hours).
29262306a36Sopenharmony_ci    A reset to zero can happen, in which case the time since the last event is
29362306a36Sopenharmony_ci    unknown.  If the device does not provide this information, the driver must
29462306a36Sopenharmony_ci    not provide it to user space.
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_ciEV_LED
29762306a36Sopenharmony_ci------
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ciEV_LED events are used for input and output to set and query the state of
30062306a36Sopenharmony_civarious LEDs on devices.
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ciEV_REP
30362306a36Sopenharmony_ci------
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_ciEV_REP events are used for specifying autorepeating events.
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ciEV_SND
30862306a36Sopenharmony_ci------
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ciEV_SND events are used for sending sound commands to simple sound output
31162306a36Sopenharmony_cidevices.
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ciEV_FF
31462306a36Sopenharmony_ci-----
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ciEV_FF events are used to initialize a force feedback capable device and to cause
31762306a36Sopenharmony_cisuch device to feedback.
31862306a36Sopenharmony_ci
31962306a36Sopenharmony_ciEV_PWR
32062306a36Sopenharmony_ci------
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ciEV_PWR events are a special type of event used specifically for power
32362306a36Sopenharmony_cimanagement. Its usage is not well defined. To be addressed later.
32462306a36Sopenharmony_ci
32562306a36Sopenharmony_ciDevice properties
32662306a36Sopenharmony_ci=================
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ciNormally, userspace sets up an input device based on the data it emits,
32962306a36Sopenharmony_cii.e., the event types. In the case of two devices emitting the same event
33062306a36Sopenharmony_citypes, additional information can be provided in the form of device
33162306a36Sopenharmony_ciproperties.
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_ciINPUT_PROP_DIRECT + INPUT_PROP_POINTER
33462306a36Sopenharmony_ci--------------------------------------
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ciThe INPUT_PROP_DIRECT property indicates that device coordinates should be
33762306a36Sopenharmony_cidirectly mapped to screen coordinates (not taking into account trivial
33862306a36Sopenharmony_citransformations, such as scaling, flipping and rotating). Non-direct input
33962306a36Sopenharmony_cidevices require non-trivial transformation, such as absolute to relative
34062306a36Sopenharmony_citransformation for touchpads. Typical direct input devices: touchscreens,
34162306a36Sopenharmony_cidrawing tablets; non-direct devices: touchpads, mice.
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ciThe INPUT_PROP_POINTER property indicates that the device is not transposed
34462306a36Sopenharmony_cion the screen and thus requires use of an on-screen pointer to trace user's
34562306a36Sopenharmony_cimovements.  Typical pointer devices: touchpads, tablets, mice; non-pointer
34662306a36Sopenharmony_cidevice: touchscreen.
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_ciIf neither INPUT_PROP_DIRECT or INPUT_PROP_POINTER are set, the property is
34962306a36Sopenharmony_ciconsidered undefined and the device type should be deduced in the
35062306a36Sopenharmony_citraditional way, using emitted event types.
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_ciINPUT_PROP_BUTTONPAD
35362306a36Sopenharmony_ci--------------------
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_ciFor touchpads where the button is placed beneath the surface, such that
35662306a36Sopenharmony_cipressing down on the pad causes a button click, this property should be
35762306a36Sopenharmony_ciset. Common in Clickpad notebooks and Macbooks from 2009 and onwards.
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ciOriginally, the buttonpad property was coded into the bcm5974 driver
36062306a36Sopenharmony_civersion field under the name integrated button. For backwards
36162306a36Sopenharmony_cicompatibility, both methods need to be checked in userspace.
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ciINPUT_PROP_SEMI_MT
36462306a36Sopenharmony_ci------------------
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ciSome touchpads, most common between 2008 and 2011, can detect the presence
36762306a36Sopenharmony_ciof multiple contacts without resolving the individual positions; only the
36862306a36Sopenharmony_cinumber of contacts and a rectangular shape is known. For such
36962306a36Sopenharmony_citouchpads, the SEMI_MT property should be set.
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ciDepending on the device, the rectangle may enclose all touches, like a
37262306a36Sopenharmony_cibounding box, or just some of them, for instance the two most recent
37362306a36Sopenharmony_citouches. The diversity makes the rectangle of limited use, but some
37462306a36Sopenharmony_cigestures can normally be extracted from it.
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_ciIf INPUT_PROP_SEMI_MT is not set, the device is assumed to be a true MT
37762306a36Sopenharmony_cidevice.
37862306a36Sopenharmony_ci
37962306a36Sopenharmony_ciINPUT_PROP_TOPBUTTONPAD
38062306a36Sopenharmony_ci-----------------------
38162306a36Sopenharmony_ci
38262306a36Sopenharmony_ciSome laptops, most notably the Lenovo 40 series provide a trackstick
38362306a36Sopenharmony_cidevice but do not have physical buttons associated with the trackstick
38462306a36Sopenharmony_cidevice. Instead, the top area of the touchpad is marked to show
38562306a36Sopenharmony_civisual/haptic areas for left, middle, right buttons intended to be used
38662306a36Sopenharmony_ciwith the trackstick.
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ciIf INPUT_PROP_TOPBUTTONPAD is set, userspace should emulate buttons
38962306a36Sopenharmony_ciaccordingly. This property does not affect kernel behavior.
39062306a36Sopenharmony_ciThe kernel does not provide button emulation for such devices but treats
39162306a36Sopenharmony_cithem as any other INPUT_PROP_BUTTONPAD device.
39262306a36Sopenharmony_ci
39362306a36Sopenharmony_ciINPUT_PROP_ACCELEROMETER
39462306a36Sopenharmony_ci------------------------
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ciDirectional axes on this device (absolute and/or relative x, y, z) represent
39762306a36Sopenharmony_ciaccelerometer data. Some devices also report gyroscope data, which devices
39862306a36Sopenharmony_cican report through the rotational axes (absolute and/or relative rx, ry, rz).
39962306a36Sopenharmony_ci
40062306a36Sopenharmony_ciAll other axes retain their meaning. A device must not mix
40162306a36Sopenharmony_ciregular directional axes and accelerometer axes on the same event node.
40262306a36Sopenharmony_ci
40362306a36Sopenharmony_ciGuidelines
40462306a36Sopenharmony_ci==========
40562306a36Sopenharmony_ci
40662306a36Sopenharmony_ciThe guidelines below ensure proper single-touch and multi-finger functionality.
40762306a36Sopenharmony_ciFor multi-touch functionality, see the multi-touch-protocol.rst document for
40862306a36Sopenharmony_cimore information.
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_ciMice
41162306a36Sopenharmony_ci----
41262306a36Sopenharmony_ci
41362306a36Sopenharmony_ciREL_{X,Y} must be reported when the mouse moves. BTN_LEFT must be used to report
41462306a36Sopenharmony_cithe primary button press. BTN_{MIDDLE,RIGHT,4,5,etc.} should be used to report
41562306a36Sopenharmony_cifurther buttons of the device. REL_WHEEL and REL_HWHEEL should be used to report
41662306a36Sopenharmony_ciscroll wheel events where available.
41762306a36Sopenharmony_ci
41862306a36Sopenharmony_ciTouchscreens
41962306a36Sopenharmony_ci------------
42062306a36Sopenharmony_ci
42162306a36Sopenharmony_ciABS_{X,Y} must be reported with the location of the touch. BTN_TOUCH must be
42262306a36Sopenharmony_ciused to report when a touch is active on the screen.
42362306a36Sopenharmony_ciBTN_{MOUSE,LEFT,MIDDLE,RIGHT} must not be reported as the result of touch
42462306a36Sopenharmony_cicontact. BTN_TOOL_<name> events should be reported where possible.
42562306a36Sopenharmony_ci
42662306a36Sopenharmony_ciFor new hardware, INPUT_PROP_DIRECT should be set.
42762306a36Sopenharmony_ci
42862306a36Sopenharmony_ciTrackpads
42962306a36Sopenharmony_ci---------
43062306a36Sopenharmony_ci
43162306a36Sopenharmony_ciLegacy trackpads that only provide relative position information must report
43262306a36Sopenharmony_cievents like mice described above.
43362306a36Sopenharmony_ci
43462306a36Sopenharmony_ciTrackpads that provide absolute touch position must report ABS_{X,Y} for the
43562306a36Sopenharmony_cilocation of the touch. BTN_TOUCH should be used to report when a touch is active
43662306a36Sopenharmony_cion the trackpad. Where multi-finger support is available, BTN_TOOL_<name> should
43762306a36Sopenharmony_cibe used to report the number of touches active on the trackpad.
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_ciFor new hardware, INPUT_PROP_POINTER should be set.
44062306a36Sopenharmony_ci
44162306a36Sopenharmony_ciTablets
44262306a36Sopenharmony_ci-------
44362306a36Sopenharmony_ci
44462306a36Sopenharmony_ciBTN_TOOL_<name> events must be reported when a stylus or other tool is active on
44562306a36Sopenharmony_cithe tablet. ABS_{X,Y} must be reported with the location of the tool. BTN_TOUCH
44662306a36Sopenharmony_cishould be used to report when the tool is in contact with the tablet.
44762306a36Sopenharmony_ciBTN_{STYLUS,STYLUS2} should be used to report buttons on the tool itself. Any
44862306a36Sopenharmony_cibutton may be used for buttons on the tablet except BTN_{MOUSE,LEFT}.
44962306a36Sopenharmony_ciBTN_{0,1,2,etc} are good generic codes for unlabeled buttons. Do not use
45062306a36Sopenharmony_cimeaningful buttons, like BTN_FORWARD, unless the button is labeled for that
45162306a36Sopenharmony_cipurpose on the device.
45262306a36Sopenharmony_ci
45362306a36Sopenharmony_ciFor new hardware, both INPUT_PROP_DIRECT and INPUT_PROP_POINTER should be set.
454