Commit graph

849 commits

Author SHA1 Message Date
Peter Hutterer
f8689be5ba include: update to Linux 3.16 header
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-08-08 11:12:24 +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
aa201a4737 test: ignore any timer_create errors in valgrind
Drop the rest of the stack trace, we know whenever check calls this we get a
valgrind error if sevp in timer_create(2) is NULL.

https://bugs.freedesktop.org/show_bug.cgi?id=79921

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-12 09:50:22 +10:00
Peter Hutterer
02fc1bb235 include: update to Linux 3.15 header
Adds INPUT_PROP_TOPBUTTONPAD

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-10 07:51:09 +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
a5a1042312 m4: fix CC_CHECK_WERROR and CC_FLAG_VISIBILITY macros
These macros come from systemd, but CC_CHECK_CFLAGS_SILENT was removed in
systemd commit eb2e280f9c59b66965c9316eadc4c113a13ca744, breaking some of
them.

CC_FLAG_VISIBILITY doesn't need to require CC_CHECK_WERROR because
CC_CHECK_FLAG_APPEND always append -Werror anyway. Which kinda brings into
question why we have CC_CHECK_WERROR in the first place, but whavever.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-05 15:16:06 +10:00
Peter Hutterer
4e7863eee1 libevdev 1.2.99.1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-05 15:16:05 +10:00
Peter Hutterer
576ceeea59 libevdev 1.2.2
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-05 15:15:30 +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
ee6d8b6f6e libevdev 1.2.1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-05-14 15:12:31 +10:00
Peter Hutterer
067426385e test: unconditionally distribute the valgrind suppressions
Reported-by: David Herrmann <dh.herrmann@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-05-07 18:55:02 +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
Peter Hutterer
b5a39e9e05 libevdev 1.2
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-30 15:08:25 +10:00
Peter Hutterer
a93baace89 test: run all tests through valgrind
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-29 10:49:10 +10:00
Peter Hutterer
974e330ac2 test: disable parallel testing
The tests create devices on the host system, avoid running them in parallel to
avoid interference between the test devices.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-29 10:48:36 +10:00
Peter Hutterer
9d22a52383 test: silence some valgrind warnings
ioctl points to uninitialized bytes - correct but we didn't use those anyway.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-28 08:27:06 +10:00
Peter Hutterer
5dacba1ef8 libevdev 1.2RC1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-24 08:24:09 +10:00
Peter Hutterer
050bca91a1 Drain all events before synchronizing after SYN_DROPPED
The kernel ring buffer drops all events on SYN_DROPPED, but then continues to
fill up again. So by the time we read the events, the kernel's client buffer is
essentially like this:
  SYN_DROPPED, ev1, ev2, ev3, ...., evN

The kernel's device state represents the device after evN, and that is what
the ioctls return. For EV_KEY, EV_SND, EV_LED and EV_SW the kernel removes
potential duplicates from the client buffer [1], it doesn't do so for EV_ABS.

So we can't actually sync while there are events on the wire because the
events represent an earlier state. So simply discard all events in the kernel
buffer, synchronize, and then start processing again. We lose some granularity
but at least the events are correct.

[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/drivers/input/evdev.c?id=483180281f0ac60d1138710eb21f4b9961901294

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-24 08:17:01 +10:00
Peter Hutterer
8b01184404 Move read_more_events() up in the file
No functional change

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-24 08:17:01 +10:00
Peter Hutterer
1c425e9837 Actually make the min queue size a minimum
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-10 11:00:56 +10:00
Peter Hutterer
779654839a Clarify what signal-safe means
Just in case...

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-10 11:00:56 +10:00
Peter Hutterer
d55056c468 Calling libevdev_enable_event_code() overwrites EV_ABS/EV_REP values
Document this behaviour

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-08 09:01:56 +10:00
Peter Hutterer
6721131eaf test: restore default log priority after tests
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-08 09:01:50 +10:00
Peter Hutterer
c44e510acd Split the SYN_DROPPED page into a few sections
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-07 14:26:31 +10:00
Peter Hutterer
be87068a9b Fix a typo, add a @ref in the documentation
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-07 14:23:21 +10:00
Peter Hutterer
6cbf971b39 Drop invalid ABS_MT_TRACKING_ID changes
Follow-up to
commit 41334b5b40
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Mar 6 11:54:00 2014 +1000

    If the tracking ID changes during SYN_DROPPED, terminate the touch first

In normal mode, we may get double tracking ID events in the same slot, but
only if we either have a user-generated event sequence (uinput) or a malicious
device that tries to send data on a slot > dev->num_slots.
Since the client is unlikely to be able to handle these events, discard the
ABS_MT_TRACKING_ID completely. This is a bug somewhere in the stack, so
complain and hobble on along.

Note: the kernel doesn't allow that, but we cap to num_slots anyway, see
66fee1bec4.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-03 13:31:40 +10:00
Peter Hutterer
27df93737e Move slot-related initialization down
No real effects, but improves readability

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-03 13:31:39 +10:00
Peter Hutterer
f8fba5b588 Drop hardcoded MAX_SLOTS in favour of pre-allocated memory
We can't allocate in sync_mt_state since it may be called in the signal
handler. So pre-allocate based on the device's number of slots, store that in
the libevdev struct and use it for the sync process.

This fixes a remaining bug with the handling of ABS_MT_TRACKING_ID. If a
device had > MAX_SLOTS and a slot above that limit would start or stop during
a SYN_DROPPED event, the slot would not be synced, and a subsequent touch in
that slot may double-terminate or double-open a touchpoint in the client.
For the effects of that see

commit 41334b5b40
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Mar 6 11:54:00 2014 +1000

    If the tracking ID changes during SYN_DROPPED, terminate the touch first

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-03 13:30:49 +10:00
Peter Hutterer
ca082d5fcb Only sync the initial MT state for Protocol B devices
For protocol A devices we won't get the information from the kernel anyway and
we expect all axes to be updated in the next event.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-03 12:08:54 +10:00
Peter Hutterer
7164e1d412 Drop unnecessary memset
The EVICOCGMTSLOTS ioctl returns all slot values for the requested code or an
error code, it doesn't return the number of bytes successfully transferred.
Thus all values in the input array are always defined (on success), we don't
need to memset it.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-03 12:08:28 +10:00
Peter Hutterer
fda0b3bf23 Use libevdev_reset from libevdev_free
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-04-02 12:04:46 +10:00
Peter Hutterer
79041dd602 Add quote around device name during error message
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-02 11:35:58 +10:00
Peter Hutterer
c97839a81e test: remove checks for test device creation failure
test_create_... fails on a non-zero return code anyway

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-02 11:35:56 +10:00
Peter Hutterer
befe33620b test: the kernel test build doesn't need to link to libevdev
We statically compile libevdev in anyway through $(common_sources)

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-02 11:35:12 +10:00
Peter Hutterer
f90c038a2d test: fix kernel test for revoke after
dev2 by definition doesn't initialize, we expect it to fail. Freeing it after
is a bad idea. Also initialize it to NULL so this is a bit more obvious now.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-02 11:35:12 +10:00
Peter Hutterer
9fa89aabba test: fix the tracking_id sync test
A max of num_slots -1 caused the first MT_SLOT event to be skipped, leading to
wrong tracking IDs in the slots.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-01 17:05:53 +10:00
Peter Hutterer
e8505f57a4 Fix indentation
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-01 14:02:41 +10:00
Peter Hutterer
b23649e1ba libevdev 1.1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-03-25 16:20:24 +10:00
Peter Hutterer
a75e1c3533 Add documentation for axis updates without a tracking ID
If a touch starts and terminates while in SYN_DROPPED, the tracking ID appears
to stay at -1, but the other axes may update. We need to pass these on to the
client since the kernel may buffer the next event with the same value
otherwise. Note this in the documentation so that client's don't create touch
points based on out-of-touchpoint updates.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-03-21 11:27:27 +10:00
Peter Hutterer
66a78e3391 libevdev 1.1RC2
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-03-19 10:30:02 +10:00
Peter Hutterer
019953ebea Bump library revision
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-03-19 10:29:51 +10:00
Peter Hutterer
f29008b758 uinput: check for asprintf failure
This doesn't really do much here, but strictly speaking: if asprintf returns
-1, devnode is undefined. So reset it to NULL to avoid weird pointers. And
also free the rest of the names if we ever have more than one device - which
also shouldn't happen.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-03-19 09:36:41 +10:00
Peter Hutterer
2ad8980c5a test: shut up compiler warning
test-libevdev-events.c: In function ‘test_double_syn_dropped_event’:
test-libevdev-events.c:187:2: warning: ignoring return value of ‘read’,
declared with attribute warn_unused_result [-Wunused-result]

This read was there to drain events even when there shouldn't be any on the
pipe anyway. So let's add an assert.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-03-19 09:36:41 +10:00
Peter Hutterer
982866824c Shut up another warning
Triggered with -O3

../libevdev/libevdev.c: In function ‘libevdev_get_event_value’:
../libevdev/libevdev.c:1112:6: warning: ‘value’ may be used uninitialized in
this function [-Wmaybe-uninitialized]

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-03-19 09:36:41 +10:00
Peter Hutterer
ab4fdcc0d5 Shut up compiler warning
Triggered with -O

../libevdev/libevdev.c: In function ‘libevdev_has_event_code’:
../libevdev/libevdev-util.h:58:20: warning: ‘mask’ may be used uninitialized
in this function [-Wmaybe-uninitialized]

Optimisation clearly shuffles things around here: in the code, if no max is
found, we return -1 and bail out before we access mask.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-03-19 09:36:41 +10:00
Peter Hutterer
b7bc345b40 Sanitize events when we're skipping sync as well
If a client doesn't sync expliciltly, make sure we sanitize the events when we
update the internal library state.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-03-19 09:36:41 +10:00