Невозможно записать события касания в uinput с помощью python-uinput

Я пытаюсь написать сенсорные события. Я использую камеру для отслеживания рук, поэтому мне нужно два указателя, и мне нужно их отобразить.

Это то, что я пробовал, но ничего не делает:

import uinput
import time

device = uinput.Device([
        uinput.BTN_TOUCH,
        uinput.BTN_TOOL_PEN,
        # uinput.INPUT_PROP_POINTER,  # This property doesn't exist... what is the alternative?
        uinput.ABS_X,
        uinput.ABS_Y,
        ])
time.sleep(1)

device.emit(uinput.ABS_X, 5)
device.emit(uinput.ABS_Y, 5)

device.emit(uinput.BTN_TOUCH, 1)

for i in range(20):
    time.sleep(0.01)
    device.emit(uinput.ABS_Y, 5 * i)

device.emit(uinput.BTN_TOUCH, 0)

Однако с помощью мыши работает:

import uinput
import time

device = uinput.Device([
        uinput.BTN_LEFT,
        uinput.BTN_RIGHT,
        uinput.REL_X,
        uinput.REL_Y,
        ])
time.sleep(1)

for i in range(20):
    time.sleep(0.01)
    device.emit(uinput.REL_Y, 5)

Но мне нужно абсолютное, а не относительное позиционирование.

Могу ли я видеть события из терминала для отладки?

Я хочу иметь 2 указателя, абсолютное позиционирование, касание/щелчок, наведение (BTN_TOOL_PEN), и я намерен разрешить перетаскивание/прокрутку. Любое руководство относительно того, какие события я должен использовать, и простой рабочий пример были бы замечательными!

Я не мог заставить evdev работать, но ответы на это тоже приветствуются.


person ovg    schedule 26.03.2018    source источник


Ответы (1)


Я предполагаю, что вы где-то используете эти события устройства на сервере? Х11? Удалите uinput.BTN_TOOL_PEN и определите диапазон для каждого оценщика:

    uinput.BTN_TOUCH,
    uinput.ABS_X + (0, 2**24-1, 0, 0),
    uinput.ABS_Y + (0, 2**24-1, 0, 0),
    uinput.ABS_PRESSURE + (0, 255, 0, 0),

Если у вас все еще есть проблемы, следите за файлом журнала Xorg.

person totaam    schedule 30.03.2018