0.基本概念
单点触摸:同时只能一个点响应操作,电阻屏就是单点触摸
多点触摸:可以同时几个点响应操作
1.实际应用场景:
(1)一块单板能够兼容多个不同型号的触摸屏,由于这种情况的存在,内核中将会有多个触摸屏程序,同时dts文件中也要配置多款触摸屏设备的信息。
(2)由于上面情况的存在,因此驱动加载时每个驱动实际都要进行加载,一般是在probe函数中,会主动与设备进行通信,如果通信程序驱动往下继续进行,如果不成功会进行重试,达到重试次数后,还未程序,则驱动加载失败
2.硬件接线
(1)一般与主控芯片与触摸屏相连接为4根线,i2c通信的2个引脚,一个复位引脚,一个中断引脚。(大概流程为当按下触摸屏时,会产生中断,主控芯片通过i2c通信从读取数据,然后通过输入子系统往上传递数据)
(2)触摸驱动代码位置:drivers/input/touchscreen,这里包含了各种型号的触摸驱动代码
(3)现有内核代码中包含了3个系类的触摸驱动芯片(具体现有产品具体使用了哪一个触摸芯片,可以通过dmesg信息查看哪一个触摸芯片probe成功):FT3427Chipone --> 北方集创Sitronix --> 矽创电子//设备树中定义的i2c节点,如下
i2c1: i2c@ff190000 {}&i2c1 {status = "okay";focaltech@38 {status = "okay";compatible = "focaltech,3427";//定义的复位引脚,实际通过该引脚可以控制触摸屏的唤醒和休眠,在驱动代码中导出了/sys/kernel/debug/touchscreen/suspend文件,通过写该文件的值即可控制触摸屏的唤醒和休眠focaltech,reset-gpio = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;//定义的中断引脚focaltech,irq-gpio = <&gpio0 RK_PA5 IRQ_TYPE_LEVEL_LOW>;//定义的尺寸大小focaltech,display-coords = <0 0 170 320>;};
}
3.测试触摸屏
# 1.使用evtest命令查看触摸节点是哪一个(在不同产品上触摸节点可能有所不同)
# 方式1: 通过查看名称,查看那个是触摸节点
# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Typec_Headphone
/dev/input/event1: rk8xx_pwrkey
/dev/input/event2: ft3427_ts
/dev/input/event3: adc-keys
/dev/input/event4: led_control
/dev/input/event5: fake-keys# 方式2:通过查看该目录,实际下面的名称为dts文件中定义的名字,例如adc-keys、ff180000.i2c等
# ls -al /dev/input/by-path/
total 0
drwxr-xr-x 2 root root 120 Mar 5 2021 .
drwxr-xr-x 3 root root 180 Mar 5 2021 ..
lrwxrwxrwx 1 root root 9 Mar 5 2021 platform-adc-keys-event -> ../event3
lrwxrwxrwx 1 root root 9 Mar 5 2021 platform-ff180000.i2c-event -> ../event0
lrwxrwxrwx 1 root root 9 Mar 5 2021 platform-ff190000.i2c-event -> ../event2
lrwxrwxrwx 1 root root 9 Mar 5 2021 platform-led_control-event -> ../event4[root@YoudaoDictionaryPen-417:/usr/bin]# evtest /dev/input/by-path/platform-ff190000.i2c-eventInput driver version is 1.0.1
Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0
Input device name: "chipone-ts"
Supported events://事件类型Event type 0 (EV_SYN)Event type 1 (EV_KEY)//哪些操作能够产生该种事件Event code 102 (KEY_HOME)Event code 139 (KEY_MENU)Event code 158 (KEY_BACK)Event code 330 (BTN_TOUCH)Event type 3 (EV_ABS)Event code 0 (ABS_X)//该动作产生的数据值Value 0Min 0Max 480Event code 1 (ABS_Y)Value 0Min 0Max 800Event code 47 (ABS_MT_SLOT)Value 0Min 0Max 0Event code 53 (ABS_MT_POSITION_X)Value 0Min 0Max 480Event code 54 (ABS_MT_POSITION_Y)Value 0Min 0Max 800Event code 57 (ABS_MT_TRACKING_ID)Value 0Min 0Max 65535
Properties:Property type 1 (INPUT_PROP_DIRECT)
Testing ... (interrupt to exit)//一个点按下,抬起日志
Event: time 1612762651.283192, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 72
Event: time 1612762651.283192, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 273
Event: time 1612762651.283192, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 309
Event: time 1612762651.283192, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1 //按键按下
Event: time 1612762651.283192, -------------- SYN_REPORT ------------
Event: time 1612762651.320801, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 310
Event: time 1612762651.320801, -------------- SYN_REPORT ------------
Event: time 1612762651.358969, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 309
Event: time 1612762651.358969, -------------- SYN_REPORT ------------
Event: time 1612762651.368736, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1612762651.368736, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0 //按键抬起
Event: time 1612762651.368736, -------------- SYN_REPORT ------------
5.触摸屏重要参数
报点率:
定义:触摸屏每秒钟向上报的触点信息的次数,跟通信协议也有关系,一般报点率会在60-100之间,意思是1s钟上报60个点或者100个点,如果为100个点,则2个点直接的时间间隔为10mss
实际场景:报点率高,可以真实的还原你触摸的轨迹,如果你想在电容屏上签名,很潇洒的签名,报点率需要在100点以上。目前微软认证只需要60点以上即可通过。因为英文字母的轨迹没有汉字的复杂,所以报点率要求不高。对于书写汉字的人来说,报点率100点还是有必要的。
evtest /dev/input/by-path/platform-ff190000.i2c-event | grep ABS_MT_POSITION_X//可以查看2个上报点之间的时间间隔是否为10msEvent: time 1614931095.505309, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 83Event: time 1614931095.514727, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 86Event: time 1614931095.523403, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 92
6.参考文档
单点触摸与多点触摸
多点触控(MT)协议