Modules
Here is a list of all modules:

Initialization and setup | Initialization, initial setup and file descriptor handling. These functions are the main entry points for users of libevdev, usually a caller will use this series of calls:

Library logging facilities

Libevdev provides two methods of logging library-internal messages. The old method is to provide a global log handler in libevdev_set_log_function(). The new method is to provide a per-context log handler in libevdev_set_device_log_function(). Developers are encouraged to use the per-context logging facilities over the global log handler as it provides access to the libevdev instance that caused a message, and is more flexible when libevdev is used from within a shared library

Querying device capabilities | Abstraction functions to handle device capabilities, specifically device properties such as the name of the device and the bits representing the events supported by this device

Multi-touch related functions

Functions for querying multi-touch-related capabilities. MT devices following the kernel protocol B (using `ABS_MT_SLOT`) provide multiple touch points through so-called slots on the same axis. The slots are enumerated, a client reading from the device will first get an ABS_MT_SLOT event, then the values of axes changed in this slot. Multiple slots may be provided in before an `EV_SYN` event

Modifying the appearance or capabilities of the device | Modifying the set of events reported by this device. By default, the libevdev device mirrors the kernel device, enabling only those bits exported by the kernel. This set of functions enable or disable bits as seen from the caller
Miscellaneous helper functions | Functions for printing or querying event ranges. The list of names is compiled into libevdev and is independent of the run-time kernel. Likewise, the max for each event type is compiled in and does not check the kernel at run-time
Event handling | Functions to handle events and fetch the current state of the event. libevdev updates its internal state as the event is processed and forwarded to the caller. Thus, the libevdev state of the device should always be identical to the caller's state. It may however lag behind the actual state of the device
uinput device creation | Creation of uinput devices based on existing libevdev devices. These functions help to create uinput devices that emulate libevdev devices. In the simplest form it serves to duplicate an existing device: