一.现象
现象:准备两块主屏都接触摸框,A屏的HDMIOUT外接B屏的HDMIIN,用手触摸A屏,发现A屏没有触摸,A屏幕的触摸现象在B屏那边。
现要求:用手触摸A屏,A屏要有现象,不能现象在B屏那边。
二.调试记录
双屏异触的修改方法有两种:
1、修改 EventHub.cpp 代码。
2、 配置触摸屏的IDC文件。
目前我们采用第一种方式来修改。
EventHub.cpp 代码路径:
frameworks\native\services\inputflinger\reader\EventHub.cpp
显示先确认HDMIOUT的输出是作为主屏还是副屏:
130|console:/ # getprop | grep hwc
[debug.sf.enable_hwc_vds]: [true]
[init.svc.vendor.hwcomposer-2-1]: [running]
[init.svc_debug_pid.vendor.hwcomposer-2-1]: [431]
[ro.boottime.vendor.hwcomposer-2-1]: [12279171464]
[vendor.ghwc.version]: [HWC2-1.5.122]
[vendor.hwc.device.display-0]: [HDMI-A-1:108:connected]
[vendor.hwc.device.extend]: [HDMI-A-2] //副屏
[vendor.hwc.device.primary]: [HDMI-A-1] //主屏
[vendor.hwc.enable_sideband_stream_2_mode]: [1]
[vendor.hwc.hdr_state]: [NORMAL]
这里与硬件确认HDMIOUT是HDMI-A-2作为副屏。
RK文档中提供的修改方法:
// Determine whether the device is external or internal.
if (device->isExternalDeviceLocked()) {
device->classes |= InputDeviceClass::EXTERNAL;
}
这里device->classes |= InputDeviceClass::EXTERNAL;表示将触摸指定到副屏幕。
这里尝试将device->classes |= InputDeviceClass::EXTERNAL屏蔽掉。
if (device->isExternalDeviceLocked()) {
//device->classes |= InputDeviceClass::EXTERNAL;
}
看还是一样的效果,不能将触摸修改放在主屏上。
尝试查看InputDeviceClass中属性的定义:
InputDeviceClass定义在:
frameworks\native\services\inputflinger\reader\include\EventHub.h
找到InputDeviceClass::TOUCH
尝试修改:
if (device->isExternalDeviceLocked()) {
device->classes |= InputDeviceClass::TOUCH;
}
最终将触摸修改在主屏上。