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