1. 前言
Hypervisor多点触摸涉及多个系统多个显示子系统。
多系统:QNX + Android + Linux
多显示子系统:驾驶屏 + 副驾驶 + 控制屏 + 后座屏 + 其他.....
可以用不同技术方案实现。
2. 技术点
2.1 Virtio(vdev)
不做详细介绍
2.1.1 Virtio-i2c
参考文章:QNX Hypervisor Virtio-i2c
不做详细介绍
2.1.2 Virtio-input
技术点与virtio-i2c类似
不做详细介绍
2.1.3 配置
QVM虚拟机参考配置如下:
GVM端内核DTS参考配置:
2.1.4 Qnx mtouch
QNX独有的多点触控设备管理
配置文件:/etc/system/config/mtouch_xxxx.conf
begin mtouch
driver = hid //驱动类型
options = vid=0x1391,did=0x2112,width=1280,height=720,max_touchpoints=5
display = 1 //屏ID
end mtouch
启动:在/scripts/startup.sh中启动
MTOUCH_CONF=/etc/system/config/mtouch.conf
CALIB_CONF=/etc/system/config/calib.conf
chmod a+w /etc/system/config
$ON $MTOUCH_ON_ARGS mtouch -c $MTOUCH_CONF &
if [ $? -eq 0 ]
then
log_ready "mtouch"
else
echo "mtouch failed."
fi
$ON $CALIB_TOUCH_ON_ARGS calib-touch -config-file=$CALIB_CONF &
2.2 Pass-Through(直通)
不做详细介绍
参考文章:QNX Hypervisor passthrough
3. 方案
3.1 GVM实现所有触控 //一体化设备
如果触控操作都是GVM渲染实现(主驾屏,副驾屏等),则可以采用直通模式,将屏触控I2C通过直通模式实现input touchscreen方案,直通模式同时也拥有较高的工作效率。
3.2 分体设备(Ser/DeSer 与 触控IC共一个I2C)
QNX Hypervisor 显示部分(BE)由QNX处理即PVM处理,GVM(Android)端是FE端,负责显示数据绘制,将绘制好的的数据发送给BE端进行渲染显示。
详细可以参考文章:QNX Hypervisor显示
这种情况多屏多点触摸屏该如何实现?
3.2.1 virtio-i2c
参考文章:QNX Hypervisor Virtio-i2c
依据之前写的文章可以看出,虚拟I2C情况下,PVM(QNX)以及GVM(Android)其实均可以访问I2C设备的。因此可以采用虚拟I2C方案,将touchscreen驱动放置在GVM(Android)。
3.2.1 virtio-input
TODO
这种方案就是将touchscreen驱动放在QNX实现,通过virtio-input在GVM(Android)实现多个触摸输入设备。经过mtouch配置给不同的显示屏/ 同时也可以通过virtio-input 在GVM绑定不同的显示屏。
4. 实操
TODO