-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtablet_linux.py
79 lines (70 loc) · 3.15 KB
/
tablet_linux.py
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/usr/bin/env python3
import sys
import libevdev
import time
resolution = [1920, 1080]
dev = libevdev.Device()
dev.name = "Tablet"
dev.enable(libevdev.EV_ABS.ABS_X,
libevdev.InputAbsInfo(minimum=0, maximum=65534, resolution=resolution[0]))
dev.enable(libevdev.EV_ABS.ABS_Y,
libevdev.InputAbsInfo(minimum=0, maximum=65534, resolution=resolution[1]))
dev.enable(libevdev.EV_ABS.ABS_Z,
libevdev.InputAbsInfo(minimum=0, maximum=8191))
dev.enable(libevdev.EV_ABS.ABS_PRESSURE,
libevdev.InputAbsInfo(minimum=0, maximum=8191))
dev.enable(libevdev.EV_MSC.MSC_SCAN)
dev.enable(libevdev.EV_KEY.KEY_P)
dev.enable(libevdev.EV_KEY.BTN_LEFT)
dev.enable(libevdev.EV_KEY.BTN_RIGHT)
dev.enable(libevdev.EV_KEY.BTN_MIDDLE)
dev.enable(libevdev.EV_KEY.BTN_TOUCH)
dev.enable(libevdev.EV_SYN.SYN_REPORT)
dev.enable(libevdev.EV_SYN.SYN_CONFIG)
dev.enable(libevdev.EV_SYN.SYN_MT_REPORT)
dev.enable(libevdev.EV_SYN.SYN_DROPPED)
dev.enable(libevdev.EV_KEY.KEY_LEFTMETA)
dev.enable(libevdev.EV_SYN._SYN_04)
dev.enable(libevdev.EV_SYN._SYN_05)
dev.enable(libevdev.EV_SYN._SYN_06)
dev.enable(libevdev.EV_SYN._SYN_07)
dev.enable(libevdev.EV_SYN._SYN_08)
dev.enable(libevdev.EV_SYN._SYN_09)
dev.enable(libevdev.EV_SYN._SYN_0A)
dev.enable(libevdev.EV_SYN._SYN_0B)
dev.enable(libevdev.EV_SYN._SYN_0C)
dev.enable(libevdev.EV_SYN._SYN_0D)
dev.enable(libevdev.EV_SYN._SYN_0E)
dev.enable(libevdev.EV_SYN.SYN_MAX)
uinput = dev.create_uinput_device()
def tablet_move(x : float, y : float):
#x = round(x * resolution[0] / 100)
#y = round(y * resolution[1] / 100)
sensibility = 5
x = round(round(x, sensibility) / 100 * 65534)
y = round(round(y, sensibility) / 100 * 65534)
#click_pressure = round(click_pressure / 100 * 8191)
#print([x, y, click_pressure])
uinput.send_events([
libevdev.InputEvent(libevdev.EV_ABS.ABS_PRESSURE, 0),
libevdev.InputEvent(libevdev.EV_ABS.ABS_X, x),
libevdev.InputEvent(libevdev.EV_ABS.ABS_Y, y),
libevdev.InputEvent(libevdev.EV_KEY.BTN_STYLUS, value=0),
libevdev.InputEvent(libevdev.EV_KEY.BTN_STYLUS2, value=0),
libevdev.InputEvent(libevdev.EV_KEY.BTN_TOOL_PEN, value=1),
libevdev.InputEvent(libevdev.EV_SYN.SYN_REPORT, 0),
])
#mode 0: normal click, 1: hold, 2: release
def mouse_click(btn : int = 0, mode : int = 0):
if btn > 2 or btn < 0 or type(btn) != int:
raise ValueError('btn must be 0, 1 or 2')
if mode > 2 or mode < 0 or type(mode) != int:
raise ValueError('btn must be 0, 1 or 2')
button = libevdev.EV_KEY.BTN_LEFT
if btn == 1: button = libevdev.EV_KEY.BTN_MIDDLE
elif btn == 2: button = libevdev.EV_KEY.BTN_RIGHT
if mode == 0 or mode == 1: uinput.send_events([libevdev.InputEvent(button, 1), libevdev.InputEvent(libevdev.EV_SYN.SYN_REPORT, 0)])
if mode == 0 or mode == 2: uinput.send_events([libevdev.InputEvent(button, 0), libevdev.InputEvent(libevdev.EV_SYN.SYN_REPORT, 0)])
def key_super(mode : int = 0):
if mode == 0 or mode == 1: uinput.send_events([libevdev.InputEvent(libevdev.EV_KEY.KEY_LEFTMETA, 1)])
if mode == 0 or mode == 2: uinput.send_events([libevdev.InputEvent(libevdev.EV_KEY.KEY_LEFTMETA, 0)])