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

投訴建議