安卓USB触摸屏HID描述符问题

5
我会尽可能清晰地描述我的问题。我正在尝试将一个触摸屏设备与Android配合使用。该设备是一个USB设备,在各种操作系统中(Windows,Mac OS X,Ubuntu)都可以正确工作。但在Android 4.0.4中,我似乎遇到了问题。有一些触摸响应,但不正确。触摸屏表现为触控板而不是绝对触摸屏,而且触摸不正确发生。
我一直在查看各种HID描述符,并发现以下描述符可能会导致Android出现问题:
接口0 HID报告描述符鼠标 项标签(值)原始数据 用途页(通用桌面)05 01 使用(鼠标)09 02 集合(应用)A1 01 使用(指针)09 01 集合(物理)A1 00 用途页面(数字化器)05 0D 使用(触摸)09 33 使用最小值(数字化器)19 01 使用最大值(数字化器)29 01 逻辑最小值(0)15 00 逻辑最大值(1)25 01 报告计数(1)95 01 报告大小(1)75 01 输入(数据,变量,绝对,NWrp,Lin,Pref,NNul,Bit)81 02 报告计数(1)95 01 报告大小(7)75 07 输入(Cnst,Ary,Abs)81 01 用途页(通用桌面)05 01 使用(X)09 30 使用(Y)09 31 逻辑最小值(0)15 00 逻辑最大值(1024)26 00 04 物理最小值(16)35 10 物理最大值(1024)46 00 04 单位(无)65 00 报告大小(16)75 10 报告计数(2)95 02 输入(数据,变量,绝对,NWrp,Lin,NPrf,Null,Bit)81 62 结束集合 C0 结束集合
现在看起来该设备报告为数字化器和触摸设备?该设备只是单点触控的“点按”设备,并报告绝对X和Y坐标。我想知道Android是否混淆了这个报告,因此加载了数字化器/平板电脑配置而不是触摸屏配置?这里有一些指针 http://source.android.com/tech/input/touch-devices.html,但我不太明白这些东西在哪里被报告/定义?如有必要,我可以发送更多来自HID报告的信息。
2个回答

2

根据我的分析,我建议如下。 考虑到X和Y的逻辑最大值和物理最大值,将它们的因素纳入考虑。

factorValue = 逻辑最大值 / 物理最大值

将这个因素值与从触摸屏幕接收到的原始坐标相乘,尝试发送到Android系统。


1
通常使用发送绝对坐标的鼠标设备至关重要。例如,在Linux上,由于X11中的错误和设计问题,这将无法正常工作。
您的描述显然是错误的。您不能混合使用鼠标和数字化器。它们是两个不同的设备类别。数字化器可以是触摸屏或笔,但不是鼠标。您冒着驱动程序不知道如何处理您的设备的风险。您的描述既不是鱼也不是禽。
您混淆了不同的事情:使用页面“通用桌面”与使用页面“数字化器”。
为确保我的项目安全,我不使用手工制作的描述符。我最终克隆了来自ELO Touchsystems的真正触摸屏。它在我测试过的所有操作系统上都能正常工作。我无法确认它是否也适用于Android。
但您可以简单地尝试我的描述符: http://www.codeproject.com/Articles/1001891/A-USB-HID-Keyboard-Mouse-Touchscreen-emulator-with

谢谢,我正在使用您的描述符,但是在Android上无论我在屏幕上触摸哪里都会显示鼠标指针。https://stackoverflow.com/questions/46033581/what-is-a-correct-usbhidreportdescriptor-for-android - fadedbee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接