HID开发笔记
+ -

HID设备虚拟触摸屏上报的多点数据系统不响应

2021-09-01 1160 0

前一般时间在Windows10下使用USB驱动虚拟了一个触摸屏设备,上层软件按照HID报告述符的格式下发触摸屏数据给驱动,再由驱动将数据上交给系统,实现虚拟触摸屏的功能。

虚拟触摸屏

今天,突发奇想,上次的报告描述符仅支持的是一个点触摸效果,今天保不实现了一下多点触摸效果,所以我通过在一个支持多点触摸屏的设备抓包,修改报告描述符的内容,HID描述符中关于报告描述符字段的数据长度,重新编译,本以为很简单的事,没想到还是翻车了。

触摸屏报告描述符

windbg下打印上报的数据

99 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 00 00 01 
WriteLen=56/56
99 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 00 00 00 01 
WriteLen=56/56
99 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 56 00 00 00 01 
WriteLen=56/56
99 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 57 00 00 00 01 
WriteLen=56/56
99 00 F4 01 C0 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 57 00 00 00 01

按照上报的数据提交给系统,但是windows桌面没有任何效果。

本人经过多翻查找,最终发现是因为这个报告描述符中含有特性描述符的内容,而本人在虚拟虚拟驱动中并没有相关的功能支持,所以可导致虽然上报的是虚拟触摸屏的数据,但是系统会为此数据不正确导致丢弃。
所以这里,本人将关于Feature相关的内容注释掉,并修改相关的报告描述符长度字段,再次加载,一切正确。

注释掉Feature内容

新的问题

坦率的讲,注释了之后,确实可以实现触摸屏的功能,但只支持单点触摸效果。就算按报告描述符的内容填充多点数据,但系统会将所有的数据丢弃,这样连单点的效果也没有了。关于这个问题的解决方案,本人研究了一天,通过抓包分析,对比,模拟真实设备的数据,最终在赶下班前的8分钟后给实现了。但是,是为什么要这样做,我还不知道,这是一个知识点。待明天好好研究一下,再来给大家分享。

题外话:

这里我不得自己夸奖一下自己,是有多么先见之明。自己之前搞的一个HidReportParser.exe工具,会自动对HID报告描述符进行解析,并生成可直接在C语言中用的数据格式。这大大提高了工作效率,将以前可能需要一天的活,一秒种就干完了,而且还准确,简洁。
不过今天也发现了一个BUG,就是当报告描述符有问题时,会没有任何提示给崩掉。这点后续还得继续改进。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

1 篇笔记 写笔记

遇到了同样的问题,是怎么解决的呢?


-.- 2023-06-01 13:50:22
HID 触摸屏的报表描述符
讲道理,这个触摸屏的报告描述符是我从网上搜索的一段代码,这个触摸屏的报告内容本人也进行了测试。测试是通过本站编写的虚拟触摸屏驱动实现的。0x05, 0x0d, // USAGE_PAGE (Digitizers) 0 0x......
Windows下UVC虚拟摄像头的实现
最近在Windows10 x64环境下,开发了一个虚拟UVC摄像头驱动。确切的来说这不是摄像头驱动,而是一个虚拟USB总线驱动。使用该虚拟总线驱动使用应用软件通过IOCTL控制总线子设备的创建与卸载。驱动安装完成后,是一个单纯的USB虚拟总线。应用软件通过发送自定义IOCTL码IOCTL_BUSEN......
Win10 x64虚拟设备触摸屏
前一段时间在本人整理了自己编写的USB虚拟驱动框架,在其基础上实现了虚拟键盘,鼠标的功能。本节是继虚拟键盘鼠标的另一个虚拟USB设备-触摸屏触摸屏设备是HID设备的一个小类,但是随着触摸设备使用的越来越广泛,这类设备也变地越来越重要。触摸屏设备的原理和我们手机上的触摸屏原理一样,是在电脑屏幕上有一层......
HID设备虚拟触摸屏上报的多点数据系统不响应
前一般时间在Windows10下使用USB驱动虚拟了一个触摸屏设备,上层软件按照HID报告述符的格式下发触摸屏数据给驱动,再由驱动将数据上交给系统,实现虚拟触摸屏的功能。今天,突发奇想,上次的报告描述符仅支持的是一个点触摸效果,今天保不实现了一下多点触摸效果,所以我通过在一个支持多点触摸屏的设备......
Windows支持多点的触摸屏的HID报告描述符
上次在Windows10 x64下实现了 虚拟触摸屏效果。原文见:Win10 x64虚拟设备触摸屏http://www.usbzh.com/article/detail-513.html但是现在的大部分触摸屏都支持多点触摸,例如十指触摸(因为我们有十个手指头),本想着在原来的基础上只是增加上报的个......
Win10 x64下USB-UAC虚拟声卡扬声器的实现
UsbzhVSpeaker虚拟声卡下载地址: http://www.usbzh.com/article/detail-1076.html去年的时候,使用portclass驱动模型在windows下虚拟了一个虚拟扬声器和虚拟麦克风。扬声器和麦克风在内部通过拓扑结构进行数据关联,即麦克风的数据的来......
Win10 x64下USB-UAC虚拟麦克风的实现
对于虚拟的UAC设备,实现了虚拟的UAC扬声器,总是想着再一个USB虚拟的UAC麦克风。因为这样,才算完美。本着完了完美的结果,自己又忍不住给自己找了一个活-USB虚拟麦克风虚拟麦克风的大体开发和USB虚拟扬声器类似,只是一个是输入设备,另一个是输出设备而已。所以参考UAC规范,基于UAC虚拟扬声......
USB中文网虚拟麦克风驱动程序视频演示
0.整个软件的框架如图1.安装虚拟麦克风由于本人机器处于是禁用驱动签名模式,所以会弹出签名询问对话框2.打开设备管理器可以看到虚拟的麦克风USBZH Microphone3.在音频控制面板打开设备,并使用扬声器监听该设备。这样麦克风如果有声音会通过扬声器播放出来。4.打开测试程序MicApp......
USB虚拟鼠标功能演示
该功能是USB中文网的开发例程,其设计原理见:http://www.usbzh.com/article/detail-476.html使用驱动程序实现的是虚拟USB鼠标功能。鼠标的事件由应用应用层下发:当前完成的功能:鼠标指针的移动鼠标的点击事件动态创建和销毁鼠标设备支持WIN7,WIN10 ......
安装自己研HID虚拟触摸屏驱动后系统重启需要5-10分钟的问题
从2021年7-8月份吧,有一个需求就是搞一个HID触摸屏驱动,当时心想,这玩意不要太简单,可事实之于这件事,是没有那么简单的。先不话一位同事的算法的曲折,另一位同事固件的曲折,没想到到我身上,把一个BUG也带到了今日。虚拟实现的功能比较简单,就是通过同事的自定义BULK端点读取原始的触摸屏数据,然......
USB中文网虚拟UVC摄像头DEMO演示
请查看UCAM简介 https://www.usbzh.com/article/detail-1187.html其实最开始搞的就是虚拟的UVC摄像头,没想到今天才开始展示。这次展示的是自己虚拟4个1920X1080x30的NV12数据格式的摄像头,摄像头的编号自己也就随意一些,分别为UsbzhVC......
USB中文网出品-HID虚拟全局坐标鼠标
以往我们的鼠标指针移动都是相对当前的坐标进行移动,如果要移动到指定的位置,需要不停地获取当前应用层的鼠标指针进行逼近,这样实现鼠标的定位移动或者按下等动作。但是在实际的USB鼠标分类中,还存在另一种鼠标类型,叫做全局坐标鼠标类型,即通过在指定相关的XY坐标进行相应的鼠标动作,其实现原理也和触摸屏类似......
USB 虚拟显示器
虚拟显示器需求呃,有一个需求,说要搞一个显示虚拟器,用来干什么了,我也不清楚,反下干就对了。手中无任何资料,不过在网友的建议下买了一个USB转HDMI的设备,这个安装完成后,用它自带的驱动就可以在电脑上有一个显示器。当然,如果接上HDMI的显示器,会真的出现一个显示器的。虚拟显示器实现本人经过认......
HID支持4触点的触摸屏报告描述符
HID支持4触点的触摸屏报告描述符 0x05, 0x0D, // USAGE_PAGE (Digitizers) 0x09, 0x04, // USAGE (Touch Screen) 0xA1, 0x01, ......
Windows10x64虚拟自定义HID设备通讯演示
以前在Windows搞了很多虚拟的USB设备,像麦克风,扬声器,摄像头,键盘,鼠标等USB设备,突估有人说没有自定义HID设备啊。我一想,确实没有,要不搞一个。不过话又说回来,搞这个有什么用了?我想了想可能是为了调试,或者为了软件隔离吧。比如说有一个软件用户不想和我们的软件有任何接口,但之间又必须通......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!