Touch
1. I2C touch
Take SC-3568HA as an example. The board currently has a set of I2C touch interfaces. The touch driver currently adapted to this interface is gt9xx. This driver is a driver under the HDF framework. The driver file is located in this path:
- drivers/hdf_core/framework/model/input/driver/touchscreen/touch_gt911.c
To learn more about the HDF driver framework, please refer to this article: https://blog.csdn.net/wobuzai11/article/details/135959347
The interface location is as shown in the figure:

2. USB touch
HarmonyOS also supports USB touch. When USB touch is connected, the following will be printed in the log:
[ 1483.298817] usb 5-1: new full-speed USB device number 3 using xhci-hcd
[ 1483.440164] usb 5-1: New USB device found, idVendor=10c4, idProduct=5e52, bcdDevice= 2.00
[ 1483.440199] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1483.440207] usb 5-1: Product: TOUCH Devices
[ 1483.440214] usb 5-1: Manufacturer: TOUCH FREE
[ 1483.440220] usb 5-1: SerialNumber: MTD3210
[ 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
[ 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
3. Touch debugging
The touch screen belongs to the input subsystem device. The input subsystem is a unified driver framework provided by Linux for input devices. The driver methods of input devices such as keys, keyboards, touch screens and mice are similar. Input devices driven by the input subsystem can be submitted to the kernel through a unified data structure. The data structure includes the input time, type, code, and specific key value or coordinates. The kernel passes it to the user space through the file interface in the /dev/input directory.
The input sub-device system can obtain the events reported by the device to the system through the getevent command
The board has a built-in getevent command, which can be used to debug whether the touch screen is working properly.
# getevent 获取所有input子设备,并监听所有设备上报事件
~# getevent
add device 1: /dev/input/event7
name: "TOUCH FREE TOUCH Devices" # USB触摸
add device 2: /dev/input/event6
name: "VSoC touchscreen" # I2C触摸
add device 3: /dev/input/event1
name: "fe6e0030.pwm"
add device 4: /dev/input/event4
name: "Logitech USB Optical Mouse"
add device 5: /dev/input/event3
name: "adc-keys"
add device 6: /dev/input/event5
name: "rk-headset"
add device 7: /dev/input/event0
name: "hdmi_cec_key"
add device 8: /dev/input/event2
name: "rk805 pwrkey"
# event6(触摸)上报
/dev/input/event6: 0003 0036 000003a8
/dev/input/event6: 0003 0039 00000000
/dev/input/event6: 0000 0002 00000000
/dev/input/event6: 0001 014a 00000001
......
# getevent -l /dev/input/event* 监听子设备上报的事件类型
~# getevent -l /dev/input/event6
EV_ABS ABS_MT_POSITION_X 0000014c
EV_ABS ABS_MT_POSITION_Y 000002b8
EV_ABS ABS_MT_TRACKING_ID 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_KEY BTN_TOUCH DOWN # 手指按下
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000
EV_ABS ABS_MT_POSITION_X 0000014c # X坐标
EV_ABS ABS_MT_POSITION_Y 000002b8 # Y坐标
EV_ABS ABS_MT_TRACKING_ID 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000
EV_ABS ABS_MT_POSITION_X 0000014c
EV_ABS ABS_MT_POSITION_Y 000002b8
EV_ABS ABS_MT_TRACKING_ID 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000
EV_ABS ABS_MT_POSITION_X 0000014c
EV_ABS ABS_MT_POSITION_Y 000002b8
EV_ABS ABS_MT_TRACKING_ID 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000
EV_KEY BTN_TOUCH UP # 手指抬起
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000