- Respect the
CPATH/C_INCLUDE_PATH
environment variables during install. - Add the uniq address to the string representation of
InputDevice
. - Improved method for finding the device node corresponding to a uinput device (`#206 https://github.com/gvalkov/python-evdev/pull/206`_).
- Repository TLC (reformatted with ruff, fixed linting warnings, moved packaging metadata to
pyproject.toml
etc.).
- Fix generation of
ecodes.c
when the path tosys.executable
contains spaces.
- Fix Python 3.11 compatibility (#174).
- Fix documentation (#163, #160).
- Re-enable TTY echo at evtest exit (#155).
- Fix
ImportError: sys.meta_path is None, Python is likely shutting down
(#154). - Closing the input device file descriptor in
InputDevice.close()
now happens in the main thread, instead of in a new thread (reverts #146). - Fix
util.find_ecodes_by_regex
not working across all supported Python versions (#152).
- Fix
InputDevice.set_absinfo
to allow setting parameters to zero. - Fix off-by-one in
ioctl_EVIOCG_bits
, which causes value at the end of the list to not be reported back (#131). - Fix
set_absinfo
to allow setting parameters to zero (#128). - Fix leak when returning
BlockingIOError
from a read (#143). - Fix "There is no current event loop in thread" error for non asyncio code (#146).
- Prevent
InputDevice
destructor from blocking (#145). - Add missing return codes to
os.strerror()
calls and fix force feedback example in docs (#138). - Add the
util.find_ecodes_by_regex()
helper function.
- Fix build on 32bit arches with 64bit time_t
- Add functionality to query device properties. See
InputDevice.input_props
and theinput_props
argument toUinput
. KeyEvent
received anallow_unknown
constructor argument, which determines what will happen when an event code cannot be mapped to a keycode. The default and behavior so far has been to raiseKeyError
. If set toTrue
, the keycode will be set to the event code formatted as a hex number.- Add
InputDevice.set_absinfo()
andInputDevice.absinfo()
. - Instruct the asyncio event loop to stop monitoring the fd of the input device when the device is closed.
- Add UInput support for the resolution parameter in AbsInfo. This brings support for the new method of uinput device setup, which was introduced in Linux 4.5 (thanks to @LinusCDE).
- Vendor and product identifiers can be greater or equal to 0x8000 (thanks @ivaradi).
- Fix installation on kernels <= 4.4.
- Fix uinput creation ignoring absinfo settings.
- Add support for handling force-feedback effect uploads (many thanks to @ndreys).
- Fix typo preventing ff effects that need left coefficients from working.
- Prevent
Uinput
device creation raisingObjects/longobject.c:415: bad argument to internal function
when a non-completeAbsInfo
structure is passed. All missingAbsInfo
fields are set to 0. - Fix
Uinput
device creation raisingKeyError
when a capability filtered by default is not present. - The
InputDevice.fn
attribute was deprecated in favor ofInputDevice.path
. Using the former will show aDeprecationWarning
, but would otherwise continue working as before. - Fix
InputDevice
comparison raisingAttributeError
due to a non-existantpath
attribute. - Fix asyncio support in Python 3.5+.
- Uploading FF effect now works both on Python 2.7 and Python 3+.
- Remove the
asyncore
example from the tutorial.
- Fix Python 2 compatibility issue in with
Uinput.from_device
. - Fix minor evdev.evtest formatting issue.
Fix
InputDevice
comparison on Python 2.The device path is now considered when comparing two devices.
Fix
UInput.from_device
not correctly merging the capabilities of selected devices.The list of excluded event types in
UInput.from_device
is now configurable. For example:UInput.from_device(dev, filtered_types=(EV_SYN, EV_FF))
In addition,
ecodes.EV_FF
is now excluded by default.Add a context manager for grabbing access to a device -
InputDevice.grab_context
. For example:with dev.grab_context(): pass
Add the
InputDevice.uniq
attribute, which contains the unique identifier of the device. As withphys
, this attribute may be empty (i.e. '').
InputDevice
now accepts objects that support the path protocol. For example:pth = pathlib.Path('/dev/input/event0') dev = evdev.InputDevice(pth)
Support path protocol in
InputDevice
. This means thatInputDevice
instances can be passed to callers that expect aos.PathLike
object.Exceptions raised during
InputDevice.async_read()
(and similar) are now handled properly (i.e. an exception is set on the returned future instead of leaking that exception into the event loop) (Fixes #67).
- Exclude
ecodes.c
from source distribution (Fixes #63).
Add the
UInput.from_device
class method, which allows uinput device to be created with the capabiltiies of one or more existing input devices:ui = UInput.from_device('/dev/input1', '/dev/input2', **constructor_kwargs)
Add the
build_ecodes
distutils command, which generates theecodes.c
extension module. The new way of overwriting the evdev header locations is:python setup.py build \ build_ecodes --evdev-headers path/input.h:path/input-event-codes.h \ build_ext --include-dirs path/ \ install
The
build*
andinstall
commands no longer have to be part of the same command-line (i.e. runninginstall
will reuse the outputs of the lastbuild
).
Disable tty echoing while evtest is running.
Allow evtest to listen to more than one devices.
The setup.py script now allows the location of the input header files to be overwritten. For example:
python setup.py build_ext \ --evdev-headers path/input.h:path/input-event-codes.h \ --include-dirs path/ \ install
- Asyncio and async/await support (many thanks to @paulo-raca).
- Add the ability to set the phys property of uinput devices (thanks @paulo-raca).
- Add a generic :func:`InputDevice.set` method (thanks @paulo-raca).
- Distribute the evtest script along with evdev.
- Fix issue with generating :mod:`ecodes.c` in recent kernels (
>= 4.4.0
). - Fix absinfo item indexes in :func:`UInput.uinput_create()` (thanks @forsenonlhaimaisentito).
- More robust comparison of :class:`InputDevice` objects (thanks @isia).
- Write access to the input device is no longer mandatory. Evdev will first try to open the device for reading and writing and fallback to read-only. Methods that require write access (e.g. :func:`set_led()`) will raise :class:`EvdevError` if the device is open only for reading.
- Fallback to distutils if setuptools is not available.
- Rework documentation and docstrings once more.
- Fix install on Python 3.4 (works around issue21121).
- Fix :func:`ioctl()` requested buffer size (thanks Jakub Wojciech Klama).
- Add method for returning a list of the currently active keys - :func:`InputDevice.active_keys()` (thanks @spasche).
- Fix a potential buffer overflow in :func:`ioctl_capabilities()` (thanks @spasche).
- Calling :func:`InputDevice.read_one()` should always return
None
, when there is nothing to be read, even in case of aEAGAIN
errno (thanks JPP).
- Silence :class:`OSError` in destructor (thanks @polyphemus).
- Make :func:`InputDevice.close()` work in cases in which stdin (fd 0) has been closed (thanks @polyphemus).
- Rework documentation and docstrings.
- Call :func:`InputDevice.close()` from :func:`InputDevice.__del__()`.
- Fix reference counting in :func:`InputDevice.device_read()`, :func:`InputDevice.device_read_many()` and :func:`ioctl_capabilities`.
Add
FF_*
andFF_STATUS
codes to :func:`ecodes` (thanks @bgilbert).Reverse event code mappings (
ecodes.{KEY,FF,REL,ABS}
and etc.) will now map to a list of codes, whenever a value corresponds to multiple codes:>>> ecodes.KEY[152] ... ['KEY_COFFEE', 'KEY_SCREENLOCK'] >>> ecodes.KEY[30] ... 'KEY_A'
Set the state of a LED through :func:`InputDevice.set_led()` (thanks @accek).
Open :attr:`InputDevice.fd` in
O_RDWR
mode from now on.Fix segfault in :func:`InputDevice.device_read_many()` (thanks @bgilbert).
- Raise :class:`IOError` from :func:`InputDevice.device_read()` and :func:`InputDevice.device_read_many()` when :func:`InputDevice.read()` fails.
- Several stability and style changes (thank you debian code reviewers).
- Fix vendor id and product id order in :func:`DeviceInfo` (thanks @kived).
- :func:`InputDevice.read()` will return an empty tuple if the device has nothing to offer (instead of segfaulting).
- Exclude unnecessary package data in sdist and bdist.
- Add ability to set/get auto-repeat settings with
EVIOC{SG}REP
. - Add :func:`InputDevice.version` - the value of
EVIOCGVERSION
. - Add :func:`InputDevice.read_loop()`.
- Add :func:`InputDevice.grab()` and :func:`InputDevice.ungrab()` -
exposes
EVIOCGRAB
. - Add :func:`InputDevice.leds` - exposes
EVIOCGLED
. - Replace :class:`DeviceInfo` class with a namedtuple.
- Prevent :func:`InputDevice.read_one()` from skipping events.
- Rename :class:`AbsData` to :class:`AbsInfo` (as in
struct input_absinfo
).
- Add the ability to set arbitrary device capabilities on uinput
devices (defaults to all
EV_KEY
ecodes). - Add :attr:`UInput.device` which is an open :class:`InputDevice` to the input device that uinput 'spawns'.
- Add :func:`UInput.capabilities()` which is just a shortcut to :func:`UInput.device.capabilities()`.
- Rename :func:`UInput.write()` to :func:`UInput.write_event()`.
- Add a simpler :func:`UInput.write(type, code, value)` method.
- Make all :func:`UInput` constructor arguments optional (default
device name is now
py-evdev-uinput
). - Add the ability to set
absmin
,absmax
,absfuzz
andabsflat
when specifying the uinput device's capabilities. - Remove the
nophys
argument - if a device fails theEVIOCGPHYS
ioctl, phys will equal the empty string. - Make :func:`InputDevice.capabilities()` perform a
EVIOCGABS
ioctl for devices that supportEV_ABS
and return that info wrapped in anAbsData
namedtuple. - Split
ioctl_devinfo
intoioctl_devinfo
andioctl_capabilities
. - Split :func:`UInput.uinput_open()` to :func:`UInput.uinput_open()` and :func:`UInput.uinput_create()`
- Add more uinput usage examples and documentation.
- Rewrite uinput tests.
- Remove
mouserel
andmouseabs
from :class:`UInput`. - Tie the sphinx version and release to the distutils version.
- Set 'methods-before-attributes' sorting in the docs.
- Remove
KEY_CNT
andKEY_MAX
from :func:`ecodes.keys`.
- Add
events.keys
, which is a combination of allBTN_
andKEY_
event codes. ecodes.c
was not generated when installing throughpip
.
Initial Release