之前调试安卓的tp的时候遇到一个问题,就是系统将触摸设备识别为usb鼠标设备
一、修改方法
在对应的device/nxp/imx8m/evk_8mp目录下,添加一个Goodix_Capacitive_TouchScreen.idc
其内容如下
这个idc的名字好像也有关系,到时候你们可以自己看看,不同的tp这个名字好像有关系。
touch.deviceType = touchScreen
/*
如果值为 touchScreen,那么触摸设备是与显示屏相关联的触摸屏。
如果值为 touchPad,那么触摸设备是不与显示屏相关联的触摸板。
如果值为 pointer,那么触摸设备是不与显示屏相关联的触摸板,并且其动作用于间接多点触控指控手势。
如果值为 default,系统将根据分类算法自动检测设备类型。
*/
touch.orientationAware = 1
/*
如果值为 1,只要显示屏的方向更改了,触摸设备报告的触摸位置就会旋转。
如果值为 0,触摸设备报告的触摸位置将不受显示屏方向更改的影响。
*/
touch.size.calibration = none
/*
指定触摸驱动程序报告触摸尺寸和工具尺寸时所用的测量类型。
如果值为 none,那么尺寸设为零。
如果值为 geometric,那么假定以与位置相同的 Surface 单元指定尺寸,从而以相同的方式对尺寸进行缩放。
如果值为 diameter,那么假定尺寸与触摸或工具直径(宽度)成比例。
如果值为 area,那么假定尺寸与触摸或工具面积成比例。
如果值为 default,那么在 raw.touchMajor 或 raw.toolMajor 轴可用的情况下,系统将使用 geometric 校准,否则使用 none 校准。
*/
touch.orientation.calibration = none
/*
指定触摸驱动程序报告方向时所用的测量类型。
如果值为 none,方向未知,则设为 0。
如果值为 interpolated,则方向被线性插入,使得 raw.orientation.min 的原始值映射到 -PI/2,raw.orientation.max 的原始值映射到 PI/2。(raw.orientation.min + raw.orientation.max) / 2 的中心值映射到 0。
如果值为 vector,则方向表示为包含两个带符号的 4 位字段的压缩向量。该表示法用于 Atmel 基于对象的协议部分。当解码时,向量生成定向角和置信度。置信度用于缩放尺寸信息,除非它是几何图形。
如果值为 default,那么在方向轴可用的情况下,系统将使用 interpolated 校准,否则使用 none。
*/
关于触摸的官方详细解释可以看:
触摸官方网址
修改对应的imx8m/evk_8mp/BoardConfig.mk
添加下面对应的一行
PRODUCT_COPY_FILES += \
device/nxp/imx8m/evk_8mp/Goodix_Capacitive_TouchScreen.idc:vendor/usr/idc/Goodix_Capacitive_TouchScreen.idc
编译烧录
二、修改usb触摸跟随HDMI分辨率
遇到一个新bug就是我使用usb触摸的时候,插入HDMI会导致我的usb触摸跟随HDMI的分辨率,而不是屏幕的分辨率。
拔出HDMI
log显示:
03-21 09:52:47.400 543 626 I InputReader: Reconfiguring input devices, changes=DISPLAY_INFO |
03-21 09:52:47.400 543 626 W InputReader: Input device ILITEK ILITEK-TP should be associated with external display, fallback to internal one for the external viewport is not found.
03-21 09:52:47.400 543 626 I InputReader: Device reconfigured: id=2, name='ILITEK ILITEK-TP', size 1280x800, orientation 0, mode 1, display id 0
插入HDMI
LOG显示:
03-21 09:53:22.735 543 626 I InputReader: Reconfiguring input devices, changes=DISPLAY_INFO |
03-21 09:53:22.735 543 626 I InputReader: Device reconfigured: id=2, name='ILITEK ILITEK-TP', size 1422x800, orientation 0, mode 1, display id 0
很明显分辨比变
原因就是每次插拔显示外设的时候,usb触摸就会去重新配置一次,我们关闭触摸跟随外设就行。
屏蔽掉frameworks/native/下的代码
diff --git a/services/inputflinger/reader/EventHub.cpp b/services/inputflinger/reader/EventHub.cpp
index a1514af66..630079555 100644
--- a/services/inputflinger/reader/EventHub.cpp
+++ b/services/inputflinger/reader/EventHub.cpp
@@ -1459,7 +1459,7 @@ status_t EventHub::openDeviceLocked(const char* devicePath) {
// Determine whether the device is external or internal.
if (isExternalDeviceLocked(device)) {
- device->classes |= INPUT_DEVICE_CLASS_EXTERNAL;
+ //device->classes |= INPUT_DEVICE_CLASS_EXTERNAL;
//这个决定异显后usb接口的触摸屏会在调用到副屏上,这里注释掉就是禁止