"); //-->
By Toradex秦海
1). 简介
在前述文章中,我们介绍了如何基于 Weston Compositor 实现多屏幕分别显示不同的应用,而进一步延伸出的一个应用场景,就是多屏幕分别有独立的触摸实现分别控制在对应屏幕之上进行响应。本文就基于前述文章同样的 NXP i.MX8MP 平台来测试如何实现这个功能场景。
本文所演示的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。
2. 准备
a). Verdin i.MX8MP ARM核心版配合Dahlia 载板,并连接调试串口用于测试。
b). Dahlia 载板分别由 DSI-HDMI 转接卡和 native HDMI 两个接口连接两台 HDMI 显示器以便于进行多屏显示测试。
c). 两个 HDMI 屏幕都具备 USB 电容触摸屏接口,将两个 USB 通过一个 USB Hub 连接到 Dahlia 载板 X4 上的 USB Host 接口。
3) . 部署流程
a). 首先参考前述文章将两个屏幕分别显示两个 Qt 应用配置成功。通过如下命令可以确认,DSI-HDMI 接口的 HDMI 显示设备是 “HDMI-A-1”;而 native HDMI 接口的显示设备是 “HDMI-A-2”:
---------------------------------------
root@verdin-imx8mp-06849028:~# modetest -M imx-drm |grep -C 3 Encoders
Encoders:
id crtc type possible crtcs possible clones
37 33 DSI 0x00000001 0x00000001
39 36 TMDS 0x00000002 0x00000002
root@verdin-imx8mp-06849028:~# modetest -M imx-drm |grep -C 1 connected
id encoder status name size (mm) modes encoders
38 37 connected HDMI-A-1 0x0 12 37
...
40 39 connected HDMI-A-2 0x0 24 39
...
---------------------------------------
b). 为了实现对于两个触摸设备分别对应两个显示设备,需要通过 udev rule来进行关联。
./ 首先通过执行如 “evtest” 或者 “udenadm monitor” 来确认触摸屏 event 对应关系,注意这个可能是动态变化的,本文配置当前启动下的状态如下:
---------------------------------------
root@verdin-imx8mp-06849028:~# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: gpio-keys
/dev/input/event1: 30370000.snvs:snvs-powerkey
/dev/input/event2: audio-hdmi HDMI Jack
/dev/input/event3: ELAN Touchscreen
/dev/input/event4: ELAN Touchscreen UNKNOWN
/dev/input/event5: ELAN Touchscreen UNKNOWN
/dev/input/event6: HID 27c0:0818
---------------------------------------
其中 “/dev/input/event3: ELAN Touchscreen” 对应 “HDMI-A-1” 显示器的触摸; “/dev/input/event6: HID 27c0:0818” 对应 “HDMI-A-2” 显示器的触摸
./ 基于上述信息通过 “udevadm info” 命令进一步确认触摸设备的信息,其中 “ID_VENDOR_ID” 和 “ID_MODEL_ID” 是固定不变的,”DEVPATH” 的前部分在不改变 USB 接口的情况下是不变的。
--------------------------------------
root@verdin-imx8mp-06849028:~# udevadm info /dev/input/event3 |grep ID_VENDOR
E: ID_VENDOR=ELAN
E: ID_VENDOR_ENC=ELAN
E: ID_VENDOR_ID=04f3
root@verdin-imx8mp-06849028:~# udevadm info /dev/input/event3 |grep ID_MODEL
E: ID_MODEL=Touchscreen
E: ID_MODEL_ENC=Touchscreen
E: ID_MODEL_ID=2884
root@verdin-imx8mp-06849028:~# udevadm info /dev/input/event3 |grep DEVPATH
E: DEVPATH=/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.2
/1-1.2.3/1-1.2.3.2/1-1.2.3.2:1.0/0003:04F3:2884.0009/input/input14/event3
root@verdin-imx8mp-06849028:~# udevadm info /dev/input/event6 |grep ID_VENDOR
E: ID_VENDOR=27c0
E: ID_VENDOR_ENC=27c0
E: ID_VENDOR_ID=27c0
root@verdin-imx8mp-06849028:~# udevadm info /dev/input/event6 |grep ID_MODEL
E: ID_MODEL=0818
E: ID_MODEL_ENC=0818
E: ID_MODEL_ID=0818
root@verdin-imx8mp-06849028:~# udevadm info /dev/input/event6 |grep DEVPATH
E: DEVPATH=/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.2
/1-1.2.4/1-1.2.4.4/1-1.2.4.4:1.0/0003:27C0:0818.0007/input/input13/event6
--------------------------------------
./ 利用上述信息修改系统默认的 udev rules 文件 - /etc/udev/rules.d/touchscreen.rules,通过输出 “WL_OUTPUT” 环境变量来将触摸屏设备和显示设备绑定
---------------------------------------
--- a/etc/udev/rules.d/touchscreen.rules
+++ b/etc/udev/rules.d/touchscreen.rules
@@ -16,3 +16,7 @@
# Create a symlink to any touchscreen input device
SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="input:*-e0*,3,*a0,1,*18,*", S
YMLINK+="input/touchscreen0"
SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="ads7846", SYMLINK+="input/tou
chscreen0"
+
+ENV{ID_VENDOR_ID}=="27c0",ENV{ID_MODEL_ID}=="0818",DEVPATH=="/devices/platform/soc@0/32f10
108.usb/38200000.usb/xhci-hcd.1.auto/usb1/1-1/*",ENV{WL_OUTPUT}="HDMI-A-2"
+
+ENV{ID_VENDOR_ID}=="04f3",ENV{ID_MODEL_ID}=="2884",DEVPATH=="/devices/platform/soc@0/32f10
108.usb/38200000.usb/xhci-hcd.1.auto/usb1/1-1/*",ENV{WL_OUTPUT}="HDMI-A-1"
---------------------------------------
c). 完成上述修改后重新启动使得修改生效。
4). 测试
a). 重新启动后,通过如下命令可以查询到触摸设备和对应屏幕关联成功
-------------------------------
root@verdin-imx8mp-06849028:~# journalctl |grep HDMI-A-1
Dec 26 04:05:12 verdin-imx8mp-06849028 weston[513]: [04:05:12.151] DRM: head 'HDMI-A-1' fou
nd, connector 38 is connected, EDID make 'RTK', model 'WCS Display', serial 'demoset-1'
...
Dec 26 04:05:12 verdin-imx8mp-06849028 weston[513]: [04:05:12.421] associating input device
event3 with output HDMI-A-1 (HDMI-A-1 by udev)
root@verdin-imx8mp-06849028:~# journalctl |grep HDMI-A-2
Dec 26 04:05:12 verdin-imx8mp-06849028 weston[513]: [04:05:12.259] DRM: head 'HDMI-A-2' fou
nd, connector 40 is connected, EDID make 'RTK', model 'WCS Display', serial 'demoset-1'
...
Dec 26 04:05:15 verdin-imx8mp-06849028 weston[513]: [04:05:15.268] associating input device
event6 with output HDMI-A-2 (HDMI-A-2 by udev)
-------------------------------
b). 此时两个Qt 应用分别显示在两个 HDMI 显示器上,通过实际触摸操作可以分别操控两个 Qt 应用,部署测试成功。
5). 总结
本文基于 NXP i.MX8MP 处理器平台测试了 Yocto Linux 下基于 Weston 实现多屏幕分别有独立的触摸实现单独控制。
参考文档
https://web.archive.org/web/20201112030845/https://wiki.tizen.org/IVI/Mapping_multiple_touchscreen_Wayland
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。