Find a file
Peter Hutterer de994d135e evdev: add new debouncing code
The current debouncing code monitors events and switches on when events are
too close together. From then on, any event can be delayed.

Vicente Bergas provided an algorithm that avoids most of these delays:
on a button state change we now forward the change without delay but start a
timer. If the button changes state during that timer, the changes are
ignored. On timer expiry, events are sent to match the hardware state
with the client's view of the device. This is only done if needed.

Thus, a press-release sequence of: PRP sends a single press event, a sequence of
PRPR sends press and then the release at the end of the timeout. The timeout
is short enough that the delay should not be noticeable.

This new mode is called the 'bounce' mode. The old mode is now referred to as
'spurious' mode and only covers the case of a button held down that loses
contact. It works as before, monitoring a button for these spurious contact
losses and switching on. When on, button release events are delayed as before.

The whole button debouncing moves to a state machine which makes debugging a
lot easier. See the accompanying SVG for the diagram.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-11-20 09:55:05 +10:00
doc evdev: add new debouncing code 2017-11-20 09:55:05 +10:00
include/linux include: sync linux kernel header files with 4.12 2017-09-21 09:07:21 +10:00
src evdev: add new debouncing code 2017-11-20 09:55:05 +10:00
test evdev: add new debouncing code 2017-11-20 09:55:05 +10:00
tools tools: fix two flake8-3 warnings 2017-11-14 12:04:27 +10:00
udev udev: drop the version field in device groups 2017-10-26 18:25:54 +10:00
.gitignore Drop autotools 2017-07-04 13:44:07 +10:00
.vimdir Add .vimdir for libinput-specific settings 2015-05-25 09:17:29 +10:00
circle.yml circle.yml: add libsolv to the fedora packages 2017-11-06 09:42:26 +10:00
CODING_STYLE Add more rules to CODING_STYLE 2015-07-08 09:19:05 +10:00
COPYING COPYING: Update boilerplate from MIT X11 to MIT Expat license 2015-06-16 14:36:04 +10:00
meson.build evdev: add new debouncing code 2017-11-20 09:55:05 +10:00
meson_options.txt Fix meson options default values 2017-10-10 08:21:10 +10:00
README.md README: tidy up the documentation links 2017-07-03 14:43:26 +10:00

libinput

libinput is a library that handles input devices for display servers and other applications that need to directly deal with input devices.

It provides device detection, device handling, input device event processing and abstraction so minimize the amount of custom input code the user of libinput need to provide the common set of functionality that users expect. Input event processing includes scaling touch coordinates, generating pointer events from touchpads, pointer acceleration, etc.

libinput originates from weston, the Wayland reference compositor.

Architecture

libinput is not used directly by applications, rather it is used by the xf86-input-libinput X.Org driver or wayland compositors. The typical software stack for a system running Wayland is:

@dotfile libinput-stack-wayland.gv

Where the Wayland compositor may be Weston, mutter, KWin, etc. Note that Wayland encourages the use of toolkits, so the Wayland client (your application) does not usually talk directly to the compositor but rather employs a toolkit (e.g. GTK) to do so.

The simplified software stack for a system running X.Org is:

@dotfile libinput-stack-xorg.gv

Again, on a modern system the application does not usually talk directly to the X server using Xlib but rather employs a toolkit to do so.

Source code

The source code of libinput can be found at: http://cgit.freedesktop.org/wayland/libinput

For a list of current and past releases visit: http://www.freedesktop.org/wiki/Software/libinput/

Build instructions: http://wayland.freedesktop.org/libinput/doc/latest/building_libinput.html

Reporting Bugs

Bugs can be filed in the libinput component of Wayland: https://bugs.freedesktop.org/enter_bug.cgi?product=Wayland&component=libinput

Where possible, please provide an evemu recording of the input device and/or the event sequence in question.

See @ref reporting_bugs for more info.

Documentation

Examples of how to use libinput are the debugging tools in the libinput repository. Developers are encouraged to look at those tools for a real-world (yet simple) example on how to use libinput.

License

libinput is licensed under the MIT license.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: [...]

See the COPYING file for the full license information.