我正在做一个项目,我有红外线多点触控框架通过USB线连接到PC,每当有物体(例如手/手指)穿过它时,它就充当鼠标。
我想做的是能够打印出物体经过的坐标。我在想,如果我能理解设备如何与 PC 进行通信,那么我可以编写一些程序(如果可能的话)来打印出 x 和 y 值的坐标。我读到这些类型的设备也称为字符设备,并且想知道是否有一种方法可以调试它们并读取它发送到计算机的输入(我假设它们发送有关我的手经过的 x 和 y 坐标的输入)这样鼠标光标就会移动到那里)。
这不是我的研究领域,因为我是一名计算机工程师,所以我不知道如何开始。任何提示将不胜感激。提前致谢..
这是lsusb
输出:
mohammedaabdu@Mohammed-HP-Pavilion-Gaming-Notebook:~$ lsusb -D /dev/bus/usb/001/008
Device: ID 1870:010d Nexio Co., Ltd
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x1870 Nexio Co., Ltd
idProduct 0x010d
bcdDevice 5.a1
iManufacturer 1
iProduct 2
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0029
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 736
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
这是 dmesg 输出:
[ 7907.643318] usb 1-1: new full-speed USB device number 5 using xhci_hcd
[ 7907.792675] usb 1-1: New USB device found, idVendor=1870, idProduct=010d, bcdDevice= 5.a1
[ 7907.792681] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 7907.792684] usb 1-1: Product: Nexio HID Multi-Touch ATI0320-10
[ 7907.792687] usb 1-1: Manufacturer: Nexio Touch Device (HS)
[ 7907.798615] input: Nexio Touch Device (HS) Nexio HID Multi-Touch ATI0320-10 Touchscreen as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1870:010D.0002/input/input22
[ 7907.855645] input: Nexio Touch Device (HS) Nexio HID Multi-Touch ATI0320-10 Mouse as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1870:010D.0002/input/input23
[ 7907.856502] input: Nexio Touch Device (HS) Nexio HID Multi-Touch ATI0320-10 as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1870:010D.0002/input/input24
[ 7907.857637] hid-generic 0003:1870:010D.0002: input,hiddev1,hidraw1: USB HID v1.11 Mouse [Nexio Touch Device (HS) Nexio HID Multi-Touch ATI0320-10] on usb-0000:00:14.0-1/input0
[ 7908.181472] input: Nexio Touch Device (HS) Nexio HID Multi-Touch ATI0320-10 as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1870:010D.0002/input/input26
[ 7908.182031] input: Nexio Touch Device (HS) Nexio HID Multi-Touch ATI0320-10 as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1870:010D.0002/input/input28
[ 7908.182632] hid-multitouch 0003:1870:010D.0002: input,hiddev1,hidraw1: USB HID v1.11 Mouse [Nexio Touch Device (HS) Nexio HID Multi-Touch ATI0320-10] on usb-0000:00:14.0-1/input0
答案1
如果它的行为已经像鼠标一样,您可以直接从鼠标事件获取坐标。
有很多方法可以做到这一点。例如一个Python程序,带有库python-libinput。
xev
还将向您展示事件。
或者,作为 root,evtest
,这将打印您将从 中读取的内容的人类可读版本/dev/ìnput/eventX
。
某些硬件向系统显示为多个设备(例如,鼠标和键盘)。
xinput --list
会告诉您您拥有的输入设备(如果您不确定哪一个是正确的,您可以拔下并重新插入以查看差异)。
在这些情况下,您将不会访问原始数据,而是访问原始事件。
这应该可以帮助你开始。关于 的文档有很多libinput
。