Win10 x64虚拟设备之触摸屏
2021-08-09
2715
67
前一段时间在本人整理了自己编写的USB虚拟驱动框架,在其基础上实现了虚拟键盘,鼠标的功能。
本节是继虚拟键盘鼠标的另一个虚拟USB设备-触摸屏
触摸屏设备是HID设备的一个小类,但是随着触摸设备使用的越来越广泛,这类设备也变地越来越重要。
触摸屏设备的原理和我们手机上的触摸屏原理一样,是在电脑屏幕上有一层薄膜,这种薄膜设备可以感应手指的按压效果,然后将按压的坐标位置上报给主机,主机可以通过这些上报的数据进行手势响应,并作用到主机的应用软件中。
USBIF官方我这里没有找到相应的示例报告描述符,所以本人在网上找到一份报告描述符,并使用该报告描述符进行虚拟触摸屏设备的开发。该触摸屏报告描述符的大概解释可见:http://www.usbzh.com/article/detail-122.html
虚拟触摸屏总线的编译和安装
整个工程使用VS2019和WDK10进行开发,该工程的目录可详见下图:
驱动编译后和部分工具、测试软件:
- devcon.exe 驱动安装工具
- install.bat 驱动安装批处理
- UsbzhVTouch.cer 驱动测试数字证书
- UsbzhVTouch.inf 虚拟触摸屏驱动INF文件
- UsbzhVTouch.sys 虚拟触摸屏驱动文件
- VTouchTest.exe 应用测试软件
虚拟触摸屏总线安装
使用管理员权限执行install.bat后,系统安装虚拟触摸屏驱动后,并不会立即自动创建虚拟touch设备,而是需要通过应用层的接口动态创建。
当然也可以动态销毁。这里和虚拟USB鼠标键盘驱动保持一致。
动态创建虚拟触摸屏设备后,在设备管理器如下图所示:
测试
使用本人开发的测试软件,点击TouchTest按钮,会在某个坐标一直下发按下按钮,在Windows桌面时会调出右键菜单。
测试代码:
void CVMouseDlg::OnBnClickedButtonTochTest()
{
Sleep(2000);
UCHAR data[13] = { 0 };
data[0] = 0xaa;
data[1] = 0x21;
data[2] = 0x00;
data[3] = 0x00;
data[4] = 0x01;
data[5] = 0x00;
data[6] = 0x01;
data[7] = 0x10;
data[8] = 0x00;
data[9] = 0x10;
data[10] = 0x00;
data[11] = 0x0;
data[12] = 0x0;
ULONG rtn = 0;
for (int i = 0; i < 300; i++)
{
data[3] = 0x060 + 0;
data[5] = 0x060 + 0;
m_usb.SetTouchData(data, 13, &rtn);
Sleep(5);
}
m_usb.SetTouchData(data, 13, &rtn);
data[1] = 0; //up
}
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936