add touchscreen as touchpad
This commit is contained in:
@@ -15,16 +15,17 @@ e_type_abs = 3
|
|||||||
e_code_stylus_xpos = 1
|
e_code_stylus_xpos = 1
|
||||||
e_code_stylus_ypos = 0
|
e_code_stylus_ypos = 0
|
||||||
e_code_stylus_pressure = 24
|
e_code_stylus_pressure = 24
|
||||||
# evcode_finger_xpos = 53
|
evcode_finger_xpos = 53
|
||||||
# evcode_finger_ypos = 54
|
evcode_finger_ypos = 54
|
||||||
# evcode_finger_pressure = 58
|
evcode_finger_pressure = 58
|
||||||
|
evcode_finger_mv_id = 0x39
|
||||||
|
|
||||||
# wacom digitizer dimensions
|
# wacom digitizer dimensions
|
||||||
wacom_width = 15725
|
wacom_width = 15725
|
||||||
wacom_height = 20967
|
wacom_height = 20967
|
||||||
# touchscreen dimensions
|
# touchscreen dimensions
|
||||||
# finger_width = 767
|
finger_width = 767
|
||||||
# finger_height = 1023
|
finger_height = 1023
|
||||||
|
|
||||||
|
|
||||||
# remap wacom coordinates to screen coordinates
|
# remap wacom coordinates to screen coordinates
|
||||||
@@ -115,3 +116,79 @@ def read_tablet(args, remote_device):
|
|||||||
monitor.y + mapped_y - mouse.position[1]
|
monitor.y + mapped_y - mouse.position[1]
|
||||||
)
|
)
|
||||||
new_x = new_y = False
|
new_x = new_y = False
|
||||||
|
|
||||||
|
def read_finger(args, remote_device):
|
||||||
|
"""Loop forever and map evdev events to mouse"""
|
||||||
|
|
||||||
|
from pynput.mouse import Button, Controller
|
||||||
|
|
||||||
|
lifted = True
|
||||||
|
new_x = new_y = False
|
||||||
|
|
||||||
|
mouse = Controller()
|
||||||
|
|
||||||
|
monitor = get_monitors()[args.monitor]
|
||||||
|
log.debug('Chose monitor: {}'.format(monitor))
|
||||||
|
|
||||||
|
rel_orig_x = -1
|
||||||
|
rel_orig_y = -1
|
||||||
|
|
||||||
|
last_x = 0
|
||||||
|
last_y = 0
|
||||||
|
while True:
|
||||||
|
_, _, e_type, e_code, e_value = struct.unpack('2IHHi', remote_device.read(16))
|
||||||
|
|
||||||
|
if e_type == e_type_abs:
|
||||||
|
|
||||||
|
# handle x direction
|
||||||
|
if e_code == evcode_finger_xpos:
|
||||||
|
log.debug(e_value)
|
||||||
|
|
||||||
|
if rel_orig_x == -1:
|
||||||
|
rel_orig_x = e_value
|
||||||
|
|
||||||
|
x = e_value
|
||||||
|
new_x = True
|
||||||
|
|
||||||
|
# handle y direction
|
||||||
|
if e_code == evcode_finger_ypos:
|
||||||
|
log.debug('\t{}'.format(e_value))
|
||||||
|
|
||||||
|
if rel_orig_y == -1:
|
||||||
|
rel_orig_y = e_value
|
||||||
|
|
||||||
|
y = e_value
|
||||||
|
new_y = True
|
||||||
|
|
||||||
|
if e_code == evcode_finger_mv_id:
|
||||||
|
if e_value == -1:
|
||||||
|
if rel_orig_x == x and rel_orig_y == y:
|
||||||
|
mouse.press(Button.left)
|
||||||
|
mouse.release(Button.left)
|
||||||
|
rel_orig_x = -1
|
||||||
|
rel_orig_y = -1
|
||||||
|
last_x = 0
|
||||||
|
last_y = 0
|
||||||
|
|
||||||
|
# only move when x and y are updated for smoother mouse
|
||||||
|
if new_x and new_y:
|
||||||
|
|
||||||
|
if rel_orig_x != -1 and rel_orig_y != -1:
|
||||||
|
x_vect = y - rel_orig_y
|
||||||
|
y_vect = rel_orig_x - x
|
||||||
|
|
||||||
|
if(args.orientation == "bottom"):
|
||||||
|
mouse.move(old_x - x, old_y - y)
|
||||||
|
if(args.orientation == "top"):
|
||||||
|
mouse.move(x - old_x, y - old_y)
|
||||||
|
if(args.orientation == "left"):
|
||||||
|
mouse.move(2 * (x_vect - last_x), 2 * (y_vect - last_y))
|
||||||
|
if(args.orientation == "right"):
|
||||||
|
mouse.move(old_y - y, x - old_x)
|
||||||
|
|
||||||
|
new_x = new_y = False
|
||||||
|
|
||||||
|
last_x = x_vect
|
||||||
|
last_y = y_vect
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# Evan Widloski - 2019-02-23
|
# Evan Widloski - 2019-02-23
|
||||||
# Use reMarkable as mouse input
|
# Use reMarkable as mouse input
|
||||||
|
|
||||||
|
import threading
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
@@ -91,7 +93,8 @@ def main():
|
|||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
remote_device = open_remote_device(args)
|
remote_stylus = open_remote_device(args, '/dev/input/event0')
|
||||||
|
remote_finger = open_remote_device(args, '/dev/input/event1')
|
||||||
|
|
||||||
if args.debug:
|
if args.debug:
|
||||||
logging.getLogger('').setLevel(logging.DEBUG)
|
logging.getLogger('').setLevel(logging.DEBUG)
|
||||||
@@ -115,7 +118,13 @@ def main():
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
from remarkable_mouse.pynput import read_tablet
|
from remarkable_mouse.pynput import read_tablet
|
||||||
read_tablet(args, remote_device)
|
from remarkable_mouse.pynput import read_finger
|
||||||
|
stylus_thread = threading.Thread(target=read_tablet, args=(args, remote_stylus))
|
||||||
|
finger_thread = threading.Thread(target=read_finger, args=(args, remote_finger))
|
||||||
|
|
||||||
|
stylus_thread.start()
|
||||||
|
finger_thread.start()
|
||||||
|
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user