Weston 桌面雙屏顯示獨立觸摸配置
1). 簡介
在前述文章中,我們介紹了如何基于 Weston Compositor 實現(xiàn)多屏幕分別顯示不同的應(yīng)用,而進一步延伸出的一個應(yīng)用場景,就是多屏幕分別有獨立的觸摸實現(xiàn)分別控制在對應(yīng)屏幕之上進行響應(yīng)。本文就基于前述文章同樣的 NXP i.MX8MP 平臺來測試如何實現(xiàn)這個功能場景。
本文所演示的平臺來自于 Toradex Verdin i.MX8MP 嵌入式平臺。
2. 準備
a). Verdin i.MX8MP ARM核心版配合Dahlia 載板,并連接調(diào)試串口用于測試。
b). Dahlia 載板分別由 DSI-HDMI 轉(zhuǎn)接卡和 native HDMI 兩個接口連接兩臺 HDMI 顯示器以便于進行多屏顯示測試。
c). 兩個 HDMI 屏幕都具備 USB 電容觸摸屏接口,將兩個 USB 通過一個 USB Hub 連接到 Dahlia 載板 X4 上的 USB Host 接口。
3) . 部署流程
a). 首先參考前述文章將兩個屏幕分別顯示兩個 Qt 應(yīng)用配置成功。通過如下命令可以確認,DSI-HDMI 接口的 HDMI 顯示設(shè)備是 “HDMI-A-1”;而 native HDMI 接口的顯示設(shè)備是 “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). 為了實現(xiàn)對于兩個觸摸設(shè)備分別對應(yīng)兩個顯示設(shè)備,需要通過 udev rule來進行關(guān)聯(lián)。
./ 首先通過執(zhí)行如 “evtest” 或者 “udenadm monitor” 來確認觸摸屏 event 對應(yīng)關(guān)系,注意這個可能是動態(tài)變化的,本文配置當前啟動下的狀態(tài)如下:
---------------------------------------
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” 對應(yīng) “HDMI-A-1” 顯示器的觸摸; “/dev/input/event6: HID 27c0:0818” 對應(yīng) “HDMI-A-2” 顯示器的觸摸
./ 基于上述信息通過 “udevadm info” 命令進一步確認觸摸設(shè)備的信息,其中 “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
--------------------------------------
./ 利用上述信息修改系統(tǒng)默認的 udev rules 文件 - /etc/udev/rules.d/touchscreen.rules,通過輸出 “WL_OUTPUT” 環(huán)境變量來將觸摸屏設(shè)備和顯示設(shè)備綁定
---------------------------------------
--- 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). 重新啟動后,通過如下命令可以查詢到觸摸設(shè)備和對應(yīng)屏幕關(guān)聯(lián)成功
-------------------------------
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 應(yīng)用分別顯示在兩個 HDMI 顯示器上,通過實際觸摸操作可以分別操控兩個 Qt 應(yīng)用,部署測試成功。
5). 總結(jié)
本文基于 NXP i.MX8MP 處理器平臺測試了 Yocto Linux 下基于 Weston 實現(xiàn)多屏幕分別有獨立的觸摸實現(xiàn)單獨控制。
參考文檔
https://web.archive.org/web/20201112030845/https://wiki.tizen.org/IVI/Mapping_multiple_touchscreen_Wayland
提交
NXP iMX8MP 使用 OP-TEE
NXP iMX8MM 通過本地服務(wù)器更新 BSP 鏡像
NXP iMX8MM ARM 平臺 Weston RDP 遠程桌面部署測試
基于 NXP iMX8MP 平臺測試 CODESYS TargetVisu
通過 Docker 部署測試 CODESYS PLC示例

投訴建議