9.触摸
9.1 I2C触摸
以SC-3568HA为例,该板卡目前拥有一组I2C接口的触摸接口,目前该接口适配的触摸驱动为gt9xx,该驱动为HDF框架下的驱动,驱动文件位于该路径:
drivers/hdf_core/framework/model/input/driver/touchscreen/touch_gt911.c
想了解更多关于HDF驱动框架可以参考该文章: https://blog.csdn.net/wobuzai11/article/details/135959347
接口位置如图:
9.2 USB触摸
鸿蒙系统也支持USB触摸,当接入USB触摸时日志中会有以下打印:
1[ 1483.298817] usb 5-1: new full-speed USB device number 3 using xhci-hcd
2[ 1483.440164] usb 5-1: New USB device found, idVendor=10c4, idProduct=5e52, bcdDevice= 2.00
3[ 1483.440199] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
4[ 1483.440207] usb 5-1: Product: TOUCH Devices
5[ 1483.440214] usb 5-1: Manufacturer: TOUCH FREE
6[ 1483.440220] usb 5-1: SerialNumber: MTD3210
7[ 1483.458133] input: TOUCH FREE TOUCH Devices as /devices/platform/usbhost/fd000000.dwc3/xhci-hcd.4.auto/usb5/5-1/5-1:1.0/0003:10C4:5E52.0002/input/input8
8[ 1483.461402] hid-multitouch 0003:10C4:5E52.0002: input,hiddev96,hidraw1: USB HID v1.10 Device [TOUCH FREE TOUCH Devices] on usb-xhci-hcd.4.auto-1/input0
9.3 触摸调试
触摸屏属于input输入子系统设备,input子系统是Linux对输入设备提供的统一驱动框架。 如按键、键盘、触摸屏和鼠标等输入设备的驱动方式是类似的, 使用input子系统驱动的输入设备可以通过统一的数据结构提交给内核, 该数据结构包括输入的时间、类型、代号以及具体的键值或坐标, 内核通过/dev/input目录下的文件接口传递给用户空间。
input输入子设备系统可以通过getevent命令来获取设备上报给系统的事件
板卡中内置了 **getevent**命令,可以用该命令来调试触摸屏是否正常工作
1# getevent 获取所有input子设备,并监听所有设备上报事件
2~# getevent
3add device 1: /dev/input/event7
4name: "TOUCH FREE TOUCH Devices" # USB触摸
5add device 2: /dev/input/event6
6name: "VSoC touchscreen" # I2C触摸
7add device 3: /dev/input/event1
8name: "fe6e0030.pwm"
9add device 4: /dev/input/event4
10name: "Logitech USB Optical Mouse"
11add device 5: /dev/input/event3
12name: "adc-keys"
13add device 6: /dev/input/event5
14name: "rk-headset"
15add device 7: /dev/input/event0
16name: "hdmi_cec_key"
17add device 8: /dev/input/event2
18name: "rk805 pwrkey"
19# event6(触摸)上报
20/dev/input/event6: 0003 0036 000003a8
21/dev/input/event6: 0003 0039 00000000
22/dev/input/event6: 0000 0002 00000000
23/dev/input/event6: 0001 014a 00000001
24......
25
26# getevent -l /dev/input/event* 监听子设备上报的事件类型
27~# getevent -l /dev/input/event6
28EV_ABS ABS_MT_POSITION_X 0000014c
29EV_ABS ABS_MT_POSITION_Y 000002b8
30EV_ABS ABS_MT_TRACKING_ID 00000000
31EV_SYN SYN_MT_REPORT 00000000
32EV_KEY BTN_TOUCH DOWN # 手指按下
33EV_SYN SYN_MT_REPORT 00000000
34EV_SYN SYN_REPORT 00000000
35EV_ABS ABS_MT_POSITION_X 0000014c # X坐标
36EV_ABS ABS_MT_POSITION_Y 000002b8 # Y坐标
37EV_ABS ABS_MT_TRACKING_ID 00000000
38EV_SYN SYN_MT_REPORT 00000000
39EV_SYN SYN_MT_REPORT 00000000
40EV_SYN SYN_REPORT 00000000
41EV_ABS ABS_MT_POSITION_X 0000014c
42EV_ABS ABS_MT_POSITION_Y 000002b8
43EV_ABS ABS_MT_TRACKING_ID 00000000
44EV_SYN SYN_MT_REPORT 00000000
45EV_SYN SYN_MT_REPORT 00000000
46EV_SYN SYN_REPORT 00000000
47EV_ABS ABS_MT_POSITION_X 0000014c
48EV_ABS ABS_MT_POSITION_Y 000002b8
49EV_ABS ABS_MT_TRACKING_ID 00000000
50EV_SYN SYN_MT_REPORT 00000000
51EV_SYN SYN_MT_REPORT 00000000
52EV_SYN SYN_REPORT 00000000
53EV_KEY BTN_TOUCH UP # 手指抬起
54EV_SYN SYN_MT_REPORT 00000000
55EV_SYN SYN_REPORT 00000000
56EV_SYN SYN_MT_REPORT 00000000
57EV_SYN SYN_REPORT 00000000
58EV_SYN SYN_MT_REPORT 00000000
59EV_SYN SYN_REPORT 00000000