HID开发笔记
+ -

安装自己研HID虚拟触摸屏驱动后系统重启需要5-10分钟的问题

2022-01-18 450 0

从2021年7-8月份吧,有一个需求就是搞一个HID触摸屏驱动,当时心想,这玩意不要太简单,可事实之于这件事,是没有那么简单的。先不话一位同事的算法的曲折,另一位同事固件的曲折,没想到到我身上,把一个BUG也带到了今日。
虚拟实现的功能比较简单,就是通过同事的自定义BULK端点读取原始的触摸屏数据,然后交由算法处理,得出计算后的触摸屏报告数据。自己然后将这个数据再交给虚拟触摸屏设备,这样实现真实的触摸屏效。

自己以前实现了一个虚拟的触摸屏演示效果可见:https://www.bilibili.com/video/BV1pu411S7us

随着以上事情的曲折开发,自己在这个事上也是三心二意的在搞,给同事弄了一个测试DEMO功能后,就去忙别的事了。悠闲的晒着午后的太阳,不要太得瑟。

2021年的最后个月,西安新冠疫情紧张,23日凌晨封城,所以我们也开始了居家上班,那叫一个酸爽啊,小孩上网课,媳妇处理工作,我也在弄工作。描述这件事感觉一切井井有条,可实际上是唾沫横飞,兵荒马乱才对,还要担心着一家三口的生计问题…

在这种情况下,我又开始了HID虚拟触摸屏之路。
两位同事在固件和算法上有了巨大的突破,我需要调整驱动。美滋滋地出了一版本,其实是忐忑不安的,因为了大家的巨大调整,我也需要进行大幅度的改变,写了一大堆的代码。没有双机调试的日子里总是那么地悲催,无限的蓝屏分析还要不停地远程签名。生活原来也有黑暗的时刻,就如当前西安的疫情一样…

半交半错的几天,自己受不了弄了一个日志打印,记录日志,可无奈重启系统,你在关机的时候,日志不一定能写入,而我遇到了一定是不写入的。但这个不写入我不知道是没有调用,还是没有写入。因没关才机过程中,你知道文件IO关闭在前还是你的驱动在前?

最后经过自己的测入试验,终于得到一个结论,与一个线程有关?那问题来是,这个线程退出的条件是驱动在调用IRP_MN_REMOVE_DEVICE时,所以还是那句话,调不调用的问题。

以前的经验是调用的,不过这几天自己否定了自己的以前,迷糊了。

小孩要去楼下(这会可以下楼,只要不聚集,但还是不能出小区)。自己懵逼的时候,想想下去吹吹冷风好好思考一下。神游般地在楼下待了2小时,冷的受不了才上楼。继续测试。

还好手中有个CAMERA,自己没办法用这个摄像头来测试,在自己的电脑上测试,禁用驱动签名,重新搞一个驱动,用着自己的日志记录函数,果不其然,重启电脑,IRP_MN_REMOVE_DEVICE调用的日志没有记录上。

那我们试试电源更改的状态,即IRP_MJ_POWER的处理,自己写了个代码:

  case IRP_MJ_POWER:
        { 
            {
                PIO_STACK_LOCATION          irpStack;
                POWER_STATE                 powerState;
                POWER_STATE_TYPE            powerType;

                irpStack = IoGetCurrentIrpStackLocation(Irp);
                powerType = irpStack->Parameters.Power.Type;
                powerState = irpStack->Parameters.Power.State;
                PrintLog("FDO IRP_MJ_POWER irpStack->MinorFunction=%d,powerType=%d powerState=%d\n", irpStack->MinorFunction, powerType, powerState);
                if (irpStack->MinorFunction== IRP_MN_SET_POWER)
                {
                    if (powerType == DevicePowerState)
                    {
                        PrintLog("FDO IRP_MN_SET_POWER/DevicePowerState=%d\n", powerState);
                    }
                }
             }
            PoStartNextPowerIrp(Irp);
            IoSkipCurrentIrpStackLocation(Irp);
            return PoCallDriver(FDODeviceExtension->NextDeviceObject, Irp);
        }

不过很遗憾,还是没有日志记录。

没办法了?
自己突发想到可以看系统关机的回调吧,搜索了一下,果然有。在系统关机IRP时,执行线程退出事件激活,这样一试。嘿,还真他娘的起作用。我莫非还是个天才!?
话不多话了,这个注册回调的示例代码分享在:http://www.pnpon.com/article/detail-262.html

问题没有解决,终是绕过去了,下回继续努力。

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

0 篇笔记 写笔记

HID 触摸屏的报表描述符
讲道理,这个触摸屏的报告描述符是我从网上搜索的一段代码,这个触摸屏的报告内容本人也进行了测试。测试是通过本站编写的虚拟触摸屏驱动实现的。0x05, 0x0d, // USAGE_PAGE (Digitizers) 0 0x......
Win10 x64虚拟设备之触摸屏
前一段时间在本人整理了自己编写的USB虚拟驱动框架,在其基础上实现了虚拟键盘,鼠标的功能。本节是继虚拟键盘鼠标的另一个虚拟USB设备-触摸屏触摸屏设备是HID设备的一个小类,但是随着触摸设备使用的越来越广泛,这类设备也变地越来越重要。触摸屏设备的原理和我们手机上的触摸屏原理一样,是在电脑屏幕上有一层......
HID设备虚拟触摸屏上报的多点数据系统不响应
前一般时间在Windows10下使用USB驱动虚拟了一个触摸屏设备,上层软件按照HID报告述符的格式下发触摸屏数据给驱动,再由驱动将数据上交给系统,实现虚拟触摸屏的功能。今天,突发奇想,上次的报告描述符仅支持的是一个点触摸效果,今天保不实现了一下多点触摸效果,所以我通过在一个支持多点触摸屏的设备......
Windows支持多点的触摸屏的HID报告描述符
上次在Windows10 x64下实现了 虚拟触摸屏效果。原文见:Win10 x64虚拟设备之触摸屏http://www.usbzh.com/article/detail-513.html但是现在的大部分触摸屏都支持多点触摸,例如十指触摸(因为我们有十个手指头),本想着在原来的基础上只是增加上报的个......
安装自己研HID虚拟触摸屏驱动后系统重启需要5-10分钟的问题
从2021年7-8月份吧,有一个需求就是搞一个HID触摸屏驱动,当时心想,这玩意不要太简单,可事实之于这件事,是没有那么简单的。先不话一位同事的算法的曲折,另一位同事固件的曲折,没想到到我身上,把一个BUG也带到了今日。虚拟实现的功能比较简单,就是通过同事的自定义BULK端点读取原始的触摸屏数据,然......
HID支持4触点的触摸屏报告描述符
HID支持4触点的触摸屏报告描述符 0x05, 0x0D, // USAGE_PAGE (Digitizers) 0x09, 0x04, // USAGE (Touch Screen) 0xA1, 0x01, ......
HID触摸屏单点模式报告描述符
单点混合模式多点触控设备示例报表描述符包含单个逻辑集合。0x05, 0x0d, // USAGE_PAGE (Digitizers) 0x09, 0x04, // USAGE......
HID触摸屏多点模式报告描述符
双指并行/混合模式多点触控设备示例报表描述符包含两个逻辑集合(每个手指一个)0x05, 0x0d, // USAGE_PAGE (Digitizers) 0x09, 0x04, ......
HID多点触摸屏报告描述符
HID报告描述符分析工具USB中文网 http://www.usbzh.com-----报告描述符--------------05 0D //0 GLOBAL_USAGE_PAGE(Digitizer) 09 04 ......
HID触摸屏配置描述符
原始数据:09 02 22 00 01 01 00 a0 32 09 04 02 00 01 03 0101 00 09 21 11 01 00 01 22 0f 03 07 05 84 03 4000 04使用USB标准请求及描述符在线分析工具http://www.usbzh.......
HID触摸屏报告描述符应用层解析分析代码
这一段时间狠狠地研究了HID报告描述符,虽然尚未达到炉火纯青的地步,不过经过自己深入的研究,还是对HID的报告描述符以及Windows系统对HID报告描述符的解析和处理有了更深一层的理解,同时也增进了自己对IRP等Windows驱动编程的技术提高。其实以前做了触摸屏驱动,包括现在虚拟出来的。不过当......
多点触摸屏设备枚举过程及实现关键点分析
注意,系统默认只支持单点的。枚需要Feater描述符来表示支持多点,故在HID报告描述符中指定了Feature描述符的ReportId,系统通过分析后会通过GET_REPORT来获取。如不支持该请求,则通过多点的HID报告描述符上报给系统的触摸数据无触摸效果。42.0 CTL 80 06 ......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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