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