Skip to content

Commit 558ed51

Browse files
Much cleaner and generi interface.
1 parent a15a078 commit 558ed51

12 files changed

Lines changed: 1802 additions & 1178 deletions

README

Lines changed: 19 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
==============================================================
2-
python-uinput - Simple Python API to the Linux uinput-system
3-
==============================================================
1+
=======================================================
2+
python-uinput - Python API to the Linux uinput-system
3+
=======================================================
44

55
.. contents::
66

@@ -21,11 +21,11 @@ General information
2121
Requirements
2222
============
2323

24-
- Python 2.6. and development files for it:
24+
- Python 2.5.x+ and development files for it:
2525

2626
- On Ubuntu::
2727

28-
sudo apt-get install python2.6-dev
28+
sudo apt-get install python-dev
2929

3030
Example usage
3131
=============
@@ -35,72 +35,20 @@ Create and use a new uinput device with key-capabilities::
3535
import uinput
3636

3737
device = uinput.Device()
38-
39-
keys = uinput.KeyCapabilities(device)
40-
keys.add(uinput.KEY_A)
41-
keys.add(uinput.KEY_B)
42-
43-
keys.click(uinput.KEY_A)
44-
keys.click(uinput.KEY_B)
45-
keys.click(uinput.KEY_B)
46-
keys.press(uinput.KEY_A)
47-
keys.release(uinput.KEY_A)
48-
49-
Use built-in mouse-device::
50-
51-
import uinput.devices
52-
53-
mouse = uinput.devices.Mouse()
54-
55-
mouse.move(100, 100)
56-
57-
Use built-in keyboard-device::
58-
59-
import uinput.devices
60-
61-
keyboard = uinput.devices.Keyboard()
62-
63-
keyboard.click(uinput.KEY_H)
64-
keyboard.click(uinput.KEY_E)
65-
keyboard.click(uinput.KEY_L)
66-
keyboard.click(uinput.KEY_L)
67-
keyboard.click(uinput.KEY_O)
68-
69-
Create and use a new device with key and absolute-axis capability::
70-
71-
import uinput
72-
73-
device = uinput.Device()
74-
75-
abs_axes = uinput.AbsoluteAxisCapabilities(device)
76-
abs_axes.add(uinput.ABS_X, abs_min=-50, abs_max=50)
77-
78-
keys = uinput.KeyCapabilities(device)
79-
keys.add(uinput.BTN_GAMEPAD)
80-
81-
abs_axes.move_to(uinput.ABS_X, 15)
82-
keys.click(uinput.BTN_GAMEPAD)
83-
84-
All the above things can also be done through the "lower-level API"::
85-
86-
import uinput
87-
88-
device = uinput.Device()
89-
90-
device.add_capability(uinput.EV_KEY, uinput.KEY_A)
91-
device.add_capability(uinput.EV_KEY, uinput.KEY_B)
92-
93-
device.send(uinput.EV_KEY, uinput.KEY_A, 1) # press
94-
device.send(uinput.EV_KEY, uinput.KEY_A, 0) # release
95-
device.send(uinput.EV_KEY, uinput.KEY_B, 1) # press
96-
device.send(uinput.EV_KEY, uinput.KEY_B, 0) # release
97-
device.send(uinput.EV_KEY, uinput.KEY_B, 1) # press
98-
device.send(uinput.EV_KEY, uinput.KEY_B, 0) # release
99-
device.send(uinput.EV_KEY, uinput.KEY_A, 1) # press
100-
device.send(uinput.EV_KEY, uinput.KEY_A, 0) # release
101-
102-
In other words, uinput.Capabilities descendants provide just higher level API
103-
for the uinput.Device.
38+
device.capabilities = {
39+
uinput.EV_KEY: (uinput.KEY_E, uinput.KEY_H, uinput.KEY_L, uinput.KEY_O),
40+
}
41+
42+
device.emit(uinput.EV_KEY, uinput.KEY_H, 1) # Press.
43+
device.emit(uinput.EV_KEY, uinput.KEY_H, 0) # Release.
44+
device.emit(uinput.EV_KEY, uinput.KEY_E, 1)
45+
device.emit(uinput.EV_KEY, uinput.KEY_E, 0)
46+
device.emit(uinput.EV_KEY, uinput.KEY_L, 1)
47+
device.emit(uinput.EV_KEY, uinput.KEY_L, 0)
48+
device.emit(uinput.EV_KEY, uinput.KEY_L, 1)
49+
device.emit(uinput.EV_KEY, uinput.KEY_L, 0)
50+
device.emit(uinput.EV_KEY, uinput.KEY_O, 1)
51+
device.emit(uinput.EV_KEY, uinput.KEY_O, 0)
10452

10553
Downloading
10654
===========

examples/hellokbd.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
#! /usr/bin/env python
22

3-
import time
4-
53
import uinput
64

75
def main():
86
device = uinput.Device()
7+
device.capabilities = {
8+
uinput.EV_KEY: (uinput.KEY_E, uinput.KEY_H, uinput.KEY_L, uinput.KEY_O),
9+
}
910

10-
keys = uinput.KeyCapabilities(device)
11-
keys.add(uinput.KEY_E)
12-
keys.add(uinput.KEY_H)
13-
keys.add(uinput.KEY_L)
14-
keys.add(uinput.KEY_O)
15-
16-
keys.click(uinput.KEY_H)
17-
keys.click(uinput.KEY_E)
18-
keys.click(uinput.KEY_L)
19-
keys.click(uinput.KEY_L)
20-
keys.click(uinput.KEY_O)
11+
device.emit(uinput.EV_KEY, uinput.KEY_H, 1) # Press.
12+
device.emit(uinput.EV_KEY, uinput.KEY_H, 0) # Release.
13+
device.emit(uinput.EV_KEY, uinput.KEY_E, 1)
14+
device.emit(uinput.EV_KEY, uinput.KEY_E, 0)
15+
device.emit(uinput.EV_KEY, uinput.KEY_L, 1)
16+
device.emit(uinput.EV_KEY, uinput.KEY_L, 0)
17+
device.emit(uinput.EV_KEY, uinput.KEY_L, 1)
18+
device.emit(uinput.EV_KEY, uinput.KEY_L, 0)
19+
device.emit(uinput.EV_KEY, uinput.KEY_O, 1)
20+
device.emit(uinput.EV_KEY, uinput.KEY_O, 0)
2121

2222
if __name__ == "__main__":
2323
main()

examples/mouse.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,17 @@
55
import uinput
66

77
def main():
8-
device = uinput.Device()
8+
capabilities = {uinput.EV_REL: [uinput.REL_X, uinput.REL_Y],
9+
uinput.EV_KEY: [uinput.BTN_LEFT, uinput.BTN_RIGHT],
10+
}
911

10-
btns = uinput.KeyCapabilities(device)
11-
for btn in (uinput.BTN_LEFT, uinput.BTN_RIGHT, uinput.BTN_MIDDLE):
12-
btns.add(btn)
13-
14-
rel_axes = uinput.RelativeAxisCapabilities(device)
15-
for rel_axis in (uinput.REL_X, uinput.REL_Y, uinput.REL_WHEEL):
16-
rel_axes.add(rel_axis)
12+
device = uinput.Device(name="python-uinput-mouse",
13+
capabilities=capabilities)
1714

1815
for i in range(20):
19-
rel_axes.move_by(uinput.REL_X, 5, False)
20-
rel_axes.move_by(uinput.REL_Y, 5)
21-
time.sleep(0.01) # Just to show the pointer motion.
22-
23-
btns.click(uinput.BTN_LEFT)
16+
device.emit(uinput.EV_REL, uinput.REL_X, 5, syn=False)
17+
device.emit(uinput.EV_REL, uinput.REL_Y, 5)
18+
time.sleep(0.01) # Just to show the motion.
2419

2520
if __name__ == "__main__":
2621
main()

setup.py

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,20 @@
1818
libraries=['udev'],
1919
)
2020

21-
keycodes_module = Extension('uinput.keycodes',
22-
sources=['src/keycodesmodule.c'],
23-
)
24-
2521
bustypes_module = Extension('uinput.bustypes',
2622
sources=['src/bustypesmodule.c'],
2723
)
2824

29-
relcodes_module = Extension('uinput.relcodes',
30-
sources=['src/relcodesmodule.c'],
31-
)
32-
33-
abscodes_module = Extension('uinput.abscodes',
34-
sources=['src/abscodesmodule.c'],
35-
)
36-
37-
evtypes_module = Extension('uinput.evtypes',
38-
sources=['src/evtypesmodule.c'],
39-
)
40-
4125
setup(name='python-uinput',
4226
version='0.3',
43-
description='Simple Python API to the Linux uinput-system.',
27+
description='Python API to the Linux uinput-system.',
4428
author='Tuomas Räsänen',
4529
author_email='tuos@codegrove.org',
4630
url='http://codegrove.org/python-uinput/',
4731
download_url='http://codegrove.org/python-uinput/0.3/python-uinput-0.3.tar.gz',
4832
package_dir={'uinput': 'src'},
4933
packages=['uinput'],
50-
ext_modules=[suinput_module, keycodes_module, bustypes_module,
51-
relcodes_module, abscodes_module, evtypes_module],
34+
ext_modules=[suinput_module, bustypes_module],
5235
license='LGPLv3+',
5336
platforms=['Linux'],
5437
classifiers=[

0 commit comments

Comments
 (0)