Commit graph

299 commits

Author SHA1 Message Date
Peter Hutterer
c3953e1bb8 Change all URLs to gitlab.fdo
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2018-06-06 18:20:11 +10:00
Deepa Dinamani
3c6766c862 Update struct input_event
The struct input_event is not y2038 safe.
Update the struct according to the kernel patch:
https://lkml.org/lkml/2018/1/6/324

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2018-04-12 15:23:22 +10:00
Peter Hutterer
6ff816163e Blacklist SW_MAX so it doesn't shadow SW_PEN_INSERTED
They have the same value, so the _MAX code would shadow the real code, causing
issues in any client that needs to get all event names from libevdev.
Specifically, the loop of:
  for each code in 0 to max-for-type:
      print(name)
would not show up the code (but the _MAX) code instead. This causes issues
with clients that rely on name resolution that works. And the _MAX values are
special values anyway.

Blacklist it in the script here, causing it to resolve from name to code, but
not from code to name (like other duplicated codes).

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2018-02-26 17:12:08 +10:00
Peter Hutterer
a67d1964ff Blacklist REP_MAX so it doesn't shadow REP_PERIOD
They have the same value, so the _MAX code would shadow the real code, causing
issues in any client that needs to get all event names from libevdev.
Specifically, the loop of:
  for each code in 0 to max-for-type:
      print(name)
would not show up the code (but the _MAX) code instead. This causes issues
with clients that rely on name resolution that works. And the _MAX values are
special values anyway.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2018-02-26 17:12:08 +10:00
Peter Hutterer
3799acd49e Drop the python map printing
leftover from when this was part of evemu

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2018-02-26 16:53:55 +10:00
Peter Hutterer
0637d0237a When changing the fd, reset our grab state to ungrabbed
Previously, calling grabbing a device after changing the fd was a no-op
because libevdev's grab state didn't match the fd:

libevdev_grab(LIBEVDEV_GRAB);
  .. fd is grabbed
  .. internal state is 'grabbed'
libevdev_change_fd();
  .. new fd is ungrabbed
  .. internal state is 'grabbed'
libevdev_grab(LIBEVDEV_GRAB);
  .. argument matches internal state and we exit without grabbing the device

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-12-13 10:01:58 +10:00
Peter Hutterer
c6e11a0a80 uinput: make a note that the syspath we return is the input node
And not the syspath for the /dev/input/eventX node

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-07-03 09:55:29 +10:00
Peter Hutterer
abfb307e18 Fix an indentation issues
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-04-25 09:27:16 +10:00
Peter Hutterer
0b482b5f11 doc: add links to git repositories on the main page
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-03-24 14:42:00 +10:00
Peter Hutterer
24dafff909 configure.ac: enable subdir-objects
The main thing holding us back here was our gcov hacks. We used to rebuild the
libevdev sources locally inside test/ with the gcov flags so that we could
leave the main libevdev sources untouched. This doesn't work well with
subdir-objects - we have to link to libevdev.la instead.

To enable gcov, we now have to apply the gcov flags to the main library
object. But this also means that when running, the notes files will be
somewhere within the libevdev/ directory, not the test/ directory. Working
around this in automake gets nasty quickly, so just add a script that knows
how to search for things.

No functional changes unless --enable-gcov is given at configure time - then
don't install the library.

The gcov reports are now in test/gcov-reports/

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2017-01-09 09:40:28 +10:00
Nayan Deshmukh
f7188aabc9 Fix typos in Documentation
Signed-off-by: Nayan Deshmukh <nayan26deshmukh@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-01-03 07:43:41 +10:00
Nathan Baker
e938e0b959 Fix minor error in doxygen example code
The incorrect variable was checked as a return code in an example, and
that can be confusing for people trying to learn or use the example code
as a starting point.
2016-11-14 07:10:02 +10:00
Peter Hutterer
df5ca55609 Don't bother sanitizing disabled event codes
Filter them immediately instead of passing them on and relying on the actual
event handling code to filter them.

Reproducer: if EV_ABS is disabled on an Apple MagicMouse we still get events
passed into sanitize_event(). But the code handling EV_ABS events doesn't
update the state, so we end up complaining about double tracking IDs, even
though that is not actually correct.

https://bugzilla.redhat.com/show_bug.cgi?id=1361325

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-08-17 17:43:32 +10:00
Armin K
e628bb938b libevdev: Properly distribute uinput.h
Signed-off-by: Armin K <krejzi@email.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-05-16 08:12:05 +10:00
Peter Hutterer
60188f1c4d Fix typo in doc string
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-04-20 11:31:38 +10:00
Peter Hutterer
0b92e1ae5e uinput: support the new UI_DEV_SETUP/UI_ABS_SETUP ioctls
Available in kernel 4.5 and later (uinput version 5), these ioctls allow us to
set the absinfo correctly, i.e. including the resolution.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-04-07 11:06:19 +10:00
Peter Hutterer
7989eef759 uinput: split uinput device creation into a helper function
No functional changes. This is prep work for supporting the new
UIDEV_DEV_SETUP ioctl.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-04-07 11:05:00 +10:00
Peter Hutterer
345a1589a5 uinput: drop an unused argument
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-04-07 11:04:59 +10:00
Peter Hutterer
5ea0a27ba6 Add parsing linux/input-event-codes.h, update to kernel v4.5
The kernel has split most of the event codes out to a new header but the FF_
bits are missing from that header. Until this is fixed upstream, change the
event code parsing so it can take two files (using cat and stdin) so we can
update the kernel headers again.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-03-30 15:45:58 +10:00
Peter Hutterer
006f10cfcb uinput: fix race condition in uinput syspath check
In theory, the device could change between stat() call and open(), resulting
in us opening the new device. Change to open() first, then fstat() on the fd.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: David Herrmann <dh.herrmann@gmail.com>
2016-01-04 07:39:24 +10:00
Peter Hutterer
cabe03d8fe Document that the fd should be drained before libevdev_set_fd
This is the caller's responsibility, for two reasons:
* we don't know if O_NONBLOCK is set, so draining the fd isn't a simple matter
  of read() until EAGAIN. A select() + read() could work around this of
  course.
* for stateless information, keys and relative data, it is not a problem when
  there are events waiting on the fd already, they are processed correctly,
  albeit with a delay.

So punt this decision to the caller, they openend the fd, they know if they
care about delayed events, they can drain the fd before handing it to us.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Acked-by: David Herrmann <dh.herrmann@gmail.com>
2015-12-17 10:46:31 +10:00
Andreas Pokorny
0028174c0b Fix invalid absinfo range values reported by certain mtk soc
This change will only affect certain touch screens, for which the driver
integration code does not provide meaningful values for the allowed range
of ABS_MT_TRACKING_IDs. The reported range [0, 0] will be overwritten with
[-1, 0xFFFF]

Signed-off-by: Andreas Pokorny <andreas.pokorny@canonical.com>

[Changed from INT_MAX to 0xFFFF to match the kernel, add device name to log
message]

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-24 16:26:00 +10:00
Peter Hutterer
743deafb95 Note that libevdev_free() does not close the fd
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-29 12:23:34 +10:00
Peter Hutterer
97da13c3c4 Accept LIBEVDEV_READ_FLAG_BLOCKING as valid flag
https://bugs.freedesktop.org/show_bug.cgi?id=89798

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-04-08 12:48:43 +10:00
Peter Hutterer
635c07ee98 ABS_MAX counts as MT axis for the event queue
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-03-23 14:02:15 +10:00
Peter Hutterer
5e49ce5630 cosmetic: fix a comment
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-03-23 14:01:58 +10:00
Peter Hutterer
4160d94baf cosmetic: fix a couple of duplicate/missing empty lines
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-03-04 08:41:33 +10:00
Thilo Schulz
7571dc49e5 Use memcpy/memmove instead of loop operations
Signed-off-by: Thilo Schulz <thilo@tjps.eu>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-02-02 11:42:57 +10:00
Owen W. Taylor
867a237c55 libevdev_uinput_destroy: don't close non-open FD
The returned errno from libevdev_input_create_from_device was returned
incorrectly because libevdev_uinput_destroy() would try to close the
unset value of ->fd, overwriting errno.

That was fixed in debe9b030c, this patch avoids
the ioctl/close calls if the fd isn't set.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-01-21 08:48:50 +10:00
Peter Hutterer
3a2f4ba2f3 Shut up clang compiler warnings
clang looks at GCC pragmas, but doesn't understand -Woverride-init. Instead,
it uses -Winitializer-overrides.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: David Herrmann <dh.herrmann@gmail.com>
2015-01-07 08:33:10 +10:00
Peter Hutterer
3320407c12 doc: add the prefixing * to all @code doxygen sections
These were removed in (7da329b) because for some reason they got copied into
the output. That was either a buggy doxygen or just some other problem. Add
them again, makes it much easier to read the header file.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-11-18 09:05:16 +10:00
Peter Hutterer
318b0a5b11 Remove superfluous linebreak in an error message
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-11-18 08:17:56 +10:00
Peter Hutterer
0bf6d29ceb doc: fix uinput example code
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-11-18 08:17:55 +10:00
Peter Hutterer
45670fa6db Fix a confusing comment
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-11-17 11:26:29 +10:00
Ran Benita
f92f4027d1 doc: fix slightly confusing code/type comments
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-08-28 07:54:22 +10:00
Peter Hutterer
0ceee5ec65 Add some minimal documentation about static linking
I can't recommend it, but I can't stop people from doing it, so at least
document the ground rules.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-08-25 10:12:37 +10:00
Peter Hutterer
6247e5c12a uinput: explicitly ignore the UI_DEV_DESTROY return value
This can't fail in the kernel anyway, so cast it to shut up Coverity.
Error message:
"Calling function "ioctl(int, unsigned long, ...)" without checking return
 value (as is done elsewhere 35 out of 36 times)."

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-08-25 09:54:28 +10:00
Peter Hutterer
53958c56cd uinput: close the managed fd on error
Using LIBEVDEV_UINPUT_OPEN_MANAGED can leak the fd if an error occurs after
opening it.

Found by Coverity.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-08-22 11:50:13 +10:00
Peter Hutterer
e4c315fc16 Rename symbols leaking from static library to avoid name clashes
The static library currently leaks log_msg and log_priority. Both are too
generic, so rename them, with a leading underscore to hint they're supposed to
be private.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-08-20 16:43:58 +10:00
Peter Hutterer
8742e1e346 Add libevdev_property_from_name()
12717d79 "Add libevdev_event_type/code_from_name() resolvers" added the
lookup functions for types and codes, this commit adds the missing ones for
input properties.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-08-20 08:43:15 +10:00
Peter Hutterer
debe9b030c uinput: preserve the errno before cleaning up
libevdev_uinput_destroy() may/will botch the errno, make sure we save it
before use.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-08-15 08:37:30 +10:00
Peter Hutterer
09529a6a65 uinput: check errno against the positive value
We use the negative errno internally, but the proper errno is always positive.

Fixes device creation failures on kernels that don't support UI_SET_PROPBIT.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: David Herrmann <dh.herrmann@gmail.com>
2014-08-15 08:37:26 +10:00
Peter Hutterer
9058665fc0 include: add uinput.h header as well
Older kernels don't have UI_GET_SYSNAME, and upstream is adding a few more
ioctls to the uinput code. So ship the header we're using to avoid compilation
errors.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-06-25 08:29:53 +10:00
Peter Hutterer
734aadb487 uinput: change strcpy/strcat usage for snprintf
Better protection against buffer overflow, though by the time someone
is manipulating your sysfs, libevdev is unlikely to be the biggest worry.

Slight change in functionality: before we checked the timestamp of
/sys/devices/virtual/input/inputXYZ before looking at /inputXYZ/name, now we
just check the name file for the timestamp.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-06-20 11:00:16 +10:00
Peter Hutterer
2ff45c73a1 uinput: use the UI_GET_SYSNAME ioctl if available
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-06-20 10:58:46 +10:00
Peter Hutterer
f415f2a694 whitespace fix
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-19 13:52:02 +10:00
Peter Hutterer
93bc9a329d Add per-device log handlers
The global log handler isn't a good choice for a low-level library. In the
caser of the X server, both evdev and synaptics are now using the libevdev but
are loaded from the same server process. Thus, there's only one log handler,
but evdev and synaptics don't talk to each other (a bit childish, I know).

Add a per-device log handler that overrides the global log handler, and fall
back to the global log handler if no device log handler is set. The log
macros take care of that automatically, especially as we can't do per-device
log handlers for the uinput code.

Note that we use the same struct for the global and device logging, so in each
instance one of the two function pointers is NULL. Suicide triggers are in
place in case we mess that up.

This also makes libevdev_new_from_fd() a bit less useful since we can't set
the log handler beforehand.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: David Herrmann <dh.herrmann@gmail.com>
2014-06-05 15:16:06 +10:00
Peter Hutterer
f5c4de024d Mark the log functions with the printf format attribute
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: David Herrmann <dh.herrmann@gmail.com>
2014-06-05 15:15:12 +10:00
Peter Hutterer
25507127bd Document that we need uinput in the kernel for the test suite
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-05-22 15:07:59 +10:00
Peter Hutterer
d0af7f2851 Ignore NULL as argument in libevdev_uinput_destroy()
Triggered by the tests when run as non-root. Simply ignore any attempt to
destroy a NULL device, which also matches the behaviour of libevdev_free().

Reported-by: Andreas Radke <a.radke@arcor.de>
Reviewed-by: Daniel Martin <consume.noise@gmail.com>
Tested-by: Daniel Martin <consume.noise@gmail.com>
Reviewed-by: David Herrmann <dh.herrmann@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-05-07 18:52:17 +10:00