【RK3288 Android10 T8pro usb hid-multitouch idc配置】

【RK3288 Android10 T8pro usb hid-multitouch idc配置】

背景

T8pro Android10,使用usb接口的hid-multitouch触摸,发现触摸映射区域异常,后来增加了idc文件,指定映射到主屏后正常。本文档主要分析一下idc文件的作用。

代码分析

1. 读取配置文件

这里会读取配置文件,及我们自己添加的触摸的idc(inputdeviceconfiguration),如果有这个idc配置文件,就回去读取device.internal这个属性,如果是1,则表示是内置,isExternalDeviceLocked返回0.

如果没有配置文件,就会返回总线类型是否是usb(0003)或者蓝牙。可以从下面的日志中看到我们的usb hid-multitouch是usb总线的。所以返回1,表示是内置。

在这里插入图片描述

05-15 14:04:26.766   387   478 E EventHub: liangji add device 1: /dev/input/event2
05-15 14:04:26.766   387   478 E EventHub: liangji   bus:        0003
05-15 14:04:26.766   387   478 E EventHub: liangji  name:       "USBest Technology SiS HID Touch Controller"
05-15 14:04:26.766   387   478 E EventHub: liangji  location:   "usb-ff500000.usb-1.4/input0"
05-15 14:04:26.766   387   478 E EventHub: liangji  unique id:  ""
05-15 14:04:26.767   387   478 E EventHub: liangji  descriptor: "bc7b0abb0520bb52c8097b668a54d31978583d09"
...
05-15 14:04:26.770   387   478 E EventHub: liangji New device: id=1, fd=127, path='/dev/input/event2', name='USBest Technology SiS HID Touch Controller', classes=0x80000014, configuration='/system/usr/idc/Vendor_0457_Product_f817.idc', keyLayout='', keyCharacterMap='', builtinKeyboard=false,

2. 标志内外置屏幕

根据isExternalDeviceLocked()的返回,这里会|=上外置的标志,
在这里插入图片描述

INPUT_DEVICE_CLASS_EXTERNAL			= 0X80000000

3. 设置输入设备

这里会用上面2中的标志位来进行判断是否是内置还是外置,然后设置到对应的inputdevice中去
在这里插入图片描述

4. findviewport()

TouchInputMapper::configure()中最终执行映射的是在TouchInputMapper::configuresurface中(),里面会调用findviewport(),根据是external还是internal来获取对应的DisplayViewport

在这里插入图片描述

这里我们可以看到如果外置视窗如果获取失败了,就默认新建一个内置视窗,所以T8使用usb触摸+单屏+无idc配置也能正常触摸。
在这里插入图片描述

5. 根据对应的viewport来计算相应的mapping的参数

下图是出错时的现象,由于没有设置idc,导致isExternalDeviceLocked返回1,默认usb总线是外置设备。然后findviewport获取到的实际上是虚线部分,并且physicalTOP的坐标符号不正确,导致后来计算出奇怪的映射范围
在这里插入图片描述

####这里是有添加idc文件,指定内置设备的时候获取的内置视窗数值,如上图实线所示
05-15 11:19:30.973   384   475 E InputReader: liangji ----------------------------------------
05-15 11:19:30.973   384   475 E InputReader: liangji mViewport.logicalBottom = 800, mViewport.logicalTop = 0
05-15 11:19:30.973   384   475 E InputReader: liangji mViewport.logicalRight = 1280, mViewport.logicalLeft = 0

05-15 11:19:30.973   384   475 E InputReader: liangji mViewport.physicalBottom = 800,  mViewport.physicalTop = 0
05-15 11:19:30.973   384   475 E InputReader: liangji mViewport.physicalRight = 1280, mViewport.physicalLeft = 0

05-15 11:19:30.973   384   475 E InputReader: liangji mViewport.deviceHeight = 800, mViewport.deviceWidth = 1280

05-15 11:19:30.973   384   475 E InputReader: liangji naturalLogicalWidth = 1280, naturalLogicalHeight = 800
05-15 11:19:30.973   384   475 E InputReader: liangji naturalPhysicalWidth = 1280, naturalPhysicalHeight = 800
05-15 11:19:30.973   384   475 E InputReader: liangji naturalPhysicalLeft = 0, naturalPhysicalTop = 0
05-15 11:19:30.973   384   475 E InputReader: liangji naturalDeviceWidth = 1280, naturalDeviceHeight = 800
05-15 11:19:30.973   384   475 E InputReader: liangji ----------------------------------------
05-15 11:19:30.973   384   475 E InputReader: liangji Device reconfigured: id=1, name='USBest Technology SiS HID Touch Controller', size 1280x800, orientation 0, mode 1, display id 0


####这里是未添加idc文件,或者是idc里面指定外置的时候,获取的外置视窗数值,如上图虚线所示
05-15 11:28:31.334   387   477 E InputReader: liangji ----------------------------------------
05-15 11:28:31.334   387   477 E InputReader: liangji mViewport.logicalBottom = 800, mViewport.logicalTop = 0
05-15 11:28:31.334   387   477 E InputReader: liangji mViewport.logicalRight = 1280, mViewport.logicalLeft = 0

05-15 11:28:31.334   387   477 E InputReader: liangji mViewport.physicalBottom = 1297,  mViewport.physicalTop = 622
05-15 11:28:31.335   387   477 E InputReader: liangji mViewport.physicalRight = 1080, mViewport.physicalLeft = 0

05-15 11:28:31.335   387   477 E InputReader: liangji mViewport.deviceHeight = 1920, mViewport.deviceWidth = 1080

05-15 11:28:31.335   387   477 E InputReader: liangji naturalLogicalWidth = 800, naturalLogicalHeight = 1280
05-15 11:28:31.335   387   477 E InputReader: liangji naturalPhysicalWidth = 675, naturalPhysicalHeight = 1080
05-15 11:28:31.335   387   477 E InputReader: liangji naturalPhysicalLeft = 623, naturalPhysicalTop = 0
05-15 11:28:31.335   387   477 E InputReader: liangji naturalDeviceWidth = 1920, naturalDeviceHeight = 1080
05-15 11:28:31.335   387   477 E InputReader: liangji ----------------------------------------
05-15 11:28:31.335   387   477 E InputReader: liangji Device reconfigured: id=1, name='USBest Technology SiS HID Touch Controller', size 2275x1280, orientation 1, mode 1, display id 0
05-15 11:28:31.335   387   477 E EventHub: liangji EventHub::getDeviceLocked deviceId = 1, index = 1

结论

触摸
如果不是使用usb总线,即便是双屏也无需配置idc
如果是usb总线触摸,双屏显示时必须配置idc,且idc内部必须指定devic.internal=1;单屏可以不配置idc。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值