blob: 55c12b9c79b615b3ca7c0fab45d97e3342561a77 (
plain)
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
|
from evdev import InputDevice, list_devices, ecodes
SCANCODES = {0x11A: "up", 0x148: "down", 0x147: "left", 0x107: "right", 0x106: "ok", 0x141: "play/pause", 0x11c: "power", 0x103: "vol+", 0x142: "vol-"}
device = None
last = 0x00
def do_action(action: str):
if action == "ok":
print("ok")
for path in list_devices():
candidate = InputDevice(path)
if candidate.name == "meson-ir":
device = candidate
break
if device is None:
raise RuntimeError("meson-ir input device not found")
print(f"Listening on {device.path}: {device.name}")
try:
for event in device.read_loop():
if event.type == ecodes.EV_MSC and event.code == ecodes.MSC_SCAN:
if (event.value != last):
print(f"scancode {event.value:#x}")
last = event.value
action = SCANCODES.get(event.value)
if action:
print(f"got action {action}")
do_action(action)
else:
print(f"repeat scancode {event.value:#x}")
last = 0x00
except KeyboardInterrupt:
print("\nExiting...")
finally:
device.close()
|