|
|
|
@ -293,38 +293,38 @@ class KeycodeInjector:
|
|
|
|
|
keymapper_device.device.path, keymapper_device.fd
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
newest_abs_event = None
|
|
|
|
|
abs_x = None
|
|
|
|
|
abs_y = None
|
|
|
|
|
self.abs_x = 0
|
|
|
|
|
self.abs_y = 0
|
|
|
|
|
|
|
|
|
|
# events only take ints, so a movement of 0.3 needs to add up to
|
|
|
|
|
# 1.2 to affect the cursor.
|
|
|
|
|
pending_x_rel = 0
|
|
|
|
|
pending_y_rel = 0
|
|
|
|
|
self.pending_x_rel = 0
|
|
|
|
|
self.pending_y_rel = 0
|
|
|
|
|
|
|
|
|
|
async def spam_mouse_movements():
|
|
|
|
|
while True:
|
|
|
|
|
# TODO get absinfo beforehand
|
|
|
|
|
max_value = 32767
|
|
|
|
|
max_speed = ((max_value ** 2) * 2) ** 0.5
|
|
|
|
|
while True:
|
|
|
|
|
await asyncio.sleep(1 / 60)
|
|
|
|
|
|
|
|
|
|
if abs_y is not None and abs_x is not None:
|
|
|
|
|
abs_y = self.abs_y
|
|
|
|
|
abs_x = self.abs_x
|
|
|
|
|
|
|
|
|
|
# to make small movements smaller for more precision
|
|
|
|
|
speed = (abs_x ** 2 + abs_y ** 2) ** 0.5
|
|
|
|
|
max_speed = ((max_value ** 2) * 2) ** 0.5
|
|
|
|
|
non_linearity = 2
|
|
|
|
|
non_linearity = 4
|
|
|
|
|
factor = (speed / max_speed) ** non_linearity
|
|
|
|
|
rel_x = abs_x / max_value * factor * 40
|
|
|
|
|
rel_y = abs_y / max_value * factor * 40
|
|
|
|
|
|
|
|
|
|
pending_x_rel = rel_x
|
|
|
|
|
pending_y_rel = rel_y
|
|
|
|
|
rel_x = int(pending_x_rel)
|
|
|
|
|
rel_y = int(pending_y_rel)
|
|
|
|
|
pending_x_rel -= rel_x
|
|
|
|
|
pending_y_rel -= rel_y
|
|
|
|
|
rel_x = abs_x * factor * 80 / max_value
|
|
|
|
|
rel_y = abs_y * factor * 80 / max_value
|
|
|
|
|
|
|
|
|
|
print('factor', factor)
|
|
|
|
|
print('speed', speed)
|
|
|
|
|
print(rel_x, rel_y)
|
|
|
|
|
self.pending_x_rel += rel_x
|
|
|
|
|
self.pending_y_rel += rel_y
|
|
|
|
|
rel_x = int(self.pending_x_rel)
|
|
|
|
|
rel_y = int(self.pending_y_rel)
|
|
|
|
|
self.pending_x_rel -= rel_x
|
|
|
|
|
self.pending_y_rel -= rel_y
|
|
|
|
|
|
|
|
|
|
self._write(
|
|
|
|
|
keymapper_device,
|
|
|
|
@ -340,8 +340,6 @@ class KeycodeInjector:
|
|
|
|
|
rel_x
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
await asyncio.sleep(1 / 60)
|
|
|
|
|
|
|
|
|
|
asyncio.ensure_future(spam_mouse_movements())
|
|
|
|
|
|
|
|
|
|
async for event in device.async_read_loop():
|
|
|
|
@ -350,10 +348,10 @@ class KeycodeInjector:
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
if event.code == evdev.ecodes.ABS_X:
|
|
|
|
|
abs_x = event.value
|
|
|
|
|
self.abs_x = event.value
|
|
|
|
|
|
|
|
|
|
if event.code == evdev.ecodes.ABS_Y:
|
|
|
|
|
abs_y = event.value
|
|
|
|
|
self.abs_y = event.value
|
|
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|