-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathremap.py
More file actions
60 lines (47 loc) · 1.85 KB
/
Copy pathremap.py
File metadata and controls
60 lines (47 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import threading
import evdev
import asyncio
import outputdevice
import inputdevice
import util
def do_work(loop, remap, in_dev, out_dev, event_map):
asyncio.set_event_loop(loop)
for event in in_dev.read_loop():
new_event_code = event.code
if new_event_code in event_map:
new_event_code = event_map[new_event_code]
value = event.value
if event.type == evdev.ecodes.EV_ABS and (event.code < evdev.ecodes.ABS_HAT0X or event.code > evdev.ecodes.ABS_HAT3Y):
value = int(util.translate(value, 0, 255, -32768, 32767))
out_dev.write(event.type, new_event_code, value)
out_dev.syn()
if not remap.keep_running:
break
class Remap:
def __init__(self, event_map, inputdevice, outputdevice, grab_device=True):
self.event_map = event_map
self.inputdevice = inputdevice
self.outputdevice = outputdevice
self.grab_device = grab_device
self.keep_running = True
def start(self):
self.keep_running = True
print("Starting", "'" + self.inputdevice.name() + "'",
"to", "'" + self.outputdevice.name + "'", "mapping")
if self.grab_device:
self.inputdevice.grab()
loop = asyncio.new_event_loop()
x = threading.Thread(target=do_work, args=(loop,
self, self.inputdevice, self.outputdevice, self.event_map))
x.start()
def stop(self):
self.keep_running = False
if self.grab_device:
self.inputdevice.ungrab()
def to_dict(self):
data = dict()
data['event_map'] = self.event_map
data['grab_device'] = self.grab_device
data['inputdevice'] = self.inputdevice.to_dict()
data['outputdevice'] = self.outputdevice.to_dict()
return data