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

接口位置如图:

TOUCH_0

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