Changes the algorithm: before we'd ioctl all axes for all slots, then generate events for all slots one-by-one. Now we ioctl the slot state for each axis, copy the new event value into the device and mark a bitfield that we've updated the value. Then loop through the slots and generate events where changed. Side-effect: this makes it easy to check if anything in the slot has updated, so we can skip empty slot events during sync. Min memory requirement for the state storage was: MAX_SLOTS * (ABS_MT_CNT + 1) * sizeof(int) = 1980 Min memory requirement now: (ABS_MT_CNT + 1) * sizeof(int) + NLONGS((MAX_SLOTS * ABS_MT_CNT) bits) = 544 This is sigsafe code, so this was stack memory. Reducing the requirement allows us to up MAX_SLOTS in the future if we need to. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> |
||
|---|---|---|
| doc | ||
| include/linux | ||
| libevdev | ||
| m4 | ||
| test | ||
| tools | ||
| .gitignore | ||
| autogen.sh | ||
| configure.ac | ||
| COPYING | ||
| libevdev.pc.in | ||
| Makefile.am | ||
| README.md | ||
libevdev - wrapper library for evdev input devices
libevdev is a wrapper library for evdev devices. it moves the common tasks when dealing with evdev devices into a library and provides a library interface to the callers, thus avoiding erroneous ioctls, etc.
git://git.freedesktop.org/git/libevdev http://cgit.freedesktop.org/libevdev/
The eventual goal is that libevdev wraps all ioctls available to evdev devices, thus making direct access unnecessary.
Go here for the API documentation: http://www.freedesktop.org/software/libevdev/doc/latest/
File bugs in the freedesktop.org bugzilla: https://bugs.freedesktop.org/enter_bug.cgi?product=libevdev
Patches, questions and general comments should be submitted to the input-tools@lists.freedesktop.org mailing list: http://lists.freedesktop.org/mailman/listinfo/input-tools