我们有一个3 m的微触摸显示器。它通过USB连接到我的Debian系统,并被识别为人机接口(hid)。我正在尝试访问和推送实时信息...如果它被触摸,我想知道在哪里(x,y),并通过netcat将其传输到另一个主机。
遗憾的是,我只能使用以下方法获得原始数据:
cat /dev/input/event2 | hexdump
或
evtest
你得到的十六进制码似乎没有记录...
有人知道如何得到这些信息吗?一定有办法从十六进制代码中提取出来。不幸的是,我不知道如何解释十六进制代码。我找不到任何记录它的来源...
内核有办法实时提供我想要的信息吗?
作为一个解决方案,也许有一个解决方案,X-服务器可以告诉我?触摸屏的行为就像一个鼠标在X。我实际上已经尝试过通过xlib获得鼠标的x,y位置。但它太慢,不会告诉我,如果有人正在触摸或没有...evtest
样本输出:
Event: time 1425319271.595631, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 51
Event: time 1425319271.595631, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 10304
Event: time 1425319271.595631, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 30629
Event: time 1425319271.595631, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 893
Event: time 1425319271.595631, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 414
Event: time 1425319271.595631, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1425319271.595631, type 3 (EV_ABS), code 0 (ABS_X), value 10304
Event: time 1425319271.595631, type 3 (EV_ABS), code 1 (ABS_Y), value 30629
Event: time 1425319271.595631, -------------- SYN_REPORT ------------
Event: time 1425319271.601632, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 10306
Event: time 1425319271.601632, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 30625
Event: time 1425319271.601632, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 962
Event: time 1425319271.601632, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 421
Event: time 1425319271.601632, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 1
Event: time 1425319271.601632, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 52
Event: time 1425319271.601632, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 15416
Event: time 1425319271.601632, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 24159
Event: time 1425319271.601632, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 649
Event: time 1425319271.601632, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 354
Event: time 1425319271.601632, type 3 (EV_ABS), code 0 (ABS_X), value 10306
Event: time 1425319271.601632, type 3 (EV_ABS), code 1 (ABS_Y), value 30625
Event: time 1425319271.601632, -------------- SYN_REPORT ------------
Event: time 1425319271.606626, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 0
Event: time 1425319271.606626, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 10318
Event: time 1425319271.606626, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 30609
Event: time 1425319271.606626, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 1014
Event: time 1425319271.606626, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 426
Event: time 1425319271.606626, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 1
Event: time 1425319271.606626, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 24161
Event: time 1425319271.606626, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 681
Event: time 1425319271.606626, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 376
Event: time 1425319271.606626, type 3 (EV_ABS), code 0 (ABS_X), value 10318
Event: time 1425319271.606626, type 3 (EV_ABS), code 1 (ABS_Y), value 30609
Event: time 1425319271.606626, -------------- SYN_REPORT ------------
Event: time 1425319271.611629, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 0
Event: time 1425319271.611629, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 10320
Event: time 1425319271.611629, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 30605
Event: time 1425319271.611629, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 1053
Event: time 1425319271.611629, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 430
Event: time 1425319271.611629, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 1
Event: time 1425319271.611629, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 705
Event: time 1425319271.611629, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 392
Event: time 1425319271.611629, type 3 (EV_ABS), code 0 (ABS_X), value 10320
Event: time 1425319271.611629, type 3 (EV_ABS), code 1 (ABS_Y), value 30605
2条答案
按热度按时间n9vozmp41#
基于控制台的解决方案
可以使用
evtest
工具获取解析坐标。1.如果您只需要单点触控坐标:查找
ABS_X
和ABS_Y
字段:ABS_MT_SLOT
表示指状物的数量ABS_MT_POSITION_X
和ABS_MT_POSITION_Y
--坐标手指编号0:
手指#1:
例如,如果您需要通过网络发送单点触控坐标,则可以使用如下脚本:
基于程序的解决方案
您可以编写C应用程序来读取您的事件文件。获取的二进制数据可以很容易地解释,请参阅kernel documentation中的第5节。您可以使用
select()
系统调用等待下一个数据部分。坐标单位
首先,你需要知道接下来的事情:
[x=0;y=0]
)此信息通常可以在设备的驱动程序代码中找到。
这是您设备的驱动程序。
因此,您需要将
evtest
中的轴值除以65535,然后乘以设备的宽度或高度(以像素为单位)。例如,如果您得到X=30000,LCD面板的宽度为1080像素,您需要执行以下操作:hfwmuf9z2#
你得到的十六进制码似乎没有记录...
这是由设备本身 * 记录 * 的,这是
hid-multitouch
驱动程序解释它接收到的USB数据的方式。您可以使用以下命令查找信息:
我使用
lsusb
命令来确定总线和设备号,并将其传递给usbhid-dump
命令。您可以使用dump命令而不使用这些编号,但这样您会得到所有设备的列表。在大多数情况下,这可能不是您想要的。这里的代码是由内核中的
hid_parser()
命令解释的。只有一些设备可能无法正确识别,这就是你需要这些信息的时候。如何解释该数据由USB协会定义。目前,它是版本1.11,可以找到on this page用于HID类型的设备。
这主要包括键盘、鼠标、触摸屏、触摸板、操纵杆,尽管一些其他类型的设备也支持此功能(电源按钮、显示器上的各种按钮等)。