源头

这是一个擦PG的活,由于前期和甲方没有沟通好,导致甲方Vxworks没办法读USB  HID触摸屏的数据,然后同事摊手就绕到我这来了。我的第一想法是甲方技术能力不足,USB Host获取不到正确数据怪我咯?在后面的联系中才知道甲方也是个二包,现在是真正的甲方提出这个要求,他们也没辙了。帮人帮到底送佛送到西,行吧。

分析

1、第一个想法是用一块stm32做一个USB host然后通过网口把触控数据转发出去,但众所周知USB调试是个坑,而且USB host的项目并没有做过除了读U盘外的东西,心里还是比较没底的,作为保留方案。

2、第二个想法是用Windows或者Linux现成的HID驱动,将枚举过程省略掉,直接进入通讯阶段,先把系统的触摸接口屏蔽掉,然后把数据抓出来转发。这个方案看上去比较容易,但后面才知道有一个坑。

实践

第一个方案就压根没有去操作,因为懒的。

第二个方案先是用的 Win10 平台测试,用CreateFile接口想去开触屏设备,但是似乎触屏和鼠标键盘是系统独占的设备,没办法打开,另外 Win10 的触摸屏屏蔽只能在设备管理器中将HID设备禁用,这个就麻烦了,如果禁用了HID设备,那么显而易见程序也是获取不到任何数据的。然后做结构的领导默默走过说,Win7可以在控制面板里关掉。遂找了台Win7,真可以在触摸设置里关掉(领导我改行画图得了)。所以Win10要做这个事情还真是不太容易,WinXP又不支持多点触摸,所以干这事要办简单点还真的Win7来干。至于CreateFile打不开设备的问题,我第一个想法就是git,然后就有了如下操作。

开发

git上找到个项目HidLibrary(c#),(既然是擦XX的活干了就行)源码都没看,直接看的example test,调用非常容易。基本过程就是扫出连接上的HID设备列表,找出相匹配的设备,打开设备并注册消息函数,在数据获取到后该咋滴咋滴就行。

以下是打开触摸屏设备的动作,其中拔出和插入的操作委托与git上的test一致,实测在打开设备拔出再插入后能自动打开设备:

private void RefreshDevices()
{_deviceList = HidDevices.Enumerate().ToArray();if (_deviceList.Length > 0){foreach(HidDevice device in _deviceList){//Console.WriteLine(device.Attributes.VendorId);//Console.WriteLine(device.Attributes.ProductId);//Console.WriteLine();if (device.Attributes.VendorId == VendorID && device.Attributes.ProductId == ProductID){if (_selectedDevice != null)_selectedDevice.CloseDevice();_selectedDevice = device;_selectedDevice.OpenDevice();_selectedDevice.MonitorDeviceEvents = true;_selectedDevice.Inserted += Device_Inserted;_selectedDevice.Removed += Device_Removed;_selectedDevice.ReadReport(ReadProcess);return;}}MessageBox.Show("探测不到指定的触摸屏设备。");return;}MessageBox.Show("探测不到任何HID设备。");return;
}

设备的交互通过委托来触发:

public delegate void ReadHandlerDelegate(HidReport report);private void ReadProcess(HidReport report)
{BeginInvoke(new ReadHandlerDelegate(ReadHandler), new object[] { report });
}private void ReadHandler(HidReport report)
{this.Invoke(new Action(() =>{AppendToTextBox(report.Data);}));_selectedDevice.ReadReport(ReadProcess);
}

具体的数据操作就放在AppendToTextBox中了。

具体的触屏数据就不贴了,跟着描述符定义即可。

至此这个活就干完了,想了想过程,第一是自己想复杂了,第二是操作中确实对一些系统特性不够熟悉,不过好在半天就解决了问题,没有在Win10上耽搁太久(领导我要学画图)。

Window7 USB HID 即插即用触摸屏 原始数据获取相关推荐

  1. C# 访问USB(HID)设备方法一

    这几天捣腾C# 访问USB(HID)设备的方式,看了好多资料,发现有两种方式访问USB设备,废话少说直接看核心代码 h = Win32Wrapper.SetupDiGetClassDevs(IntPt ...

  2. 嵌入式linux作为hid设备,基于嵌入式系统的USB(HID)设备

    基于嵌入式系统的USB(HID)设备 目前嵌入式系统在数字化电子产品领域应用越来越广泛.随着其成本的降低,大有取代单片机的趋势. USB设备以其小巧.便携.即插即用.成本低廉等优势在当前的桌面应用中有 ...

  3. USB HID转蓝牙鼠键宏指纹解锁

    USB-HID-BLER 将有线鼠标键盘游戏手柄等USB HID转换为蓝牙设备,附带鼠键宏和指纹解锁功能. 硬件开源地址  前作 主要功能 使用esp32-c3的GPIO模拟USB HOST,识别低速 ...

  4. C++ MFC界面读写USB HID设备数据程序

    C++ MFC界面读写USB HID设备数据程序 发一个简单易用的界面,用来对USB HID设备(比如说游戏手柄,控制面板等)读写数据,一般情况下面板上有一些LED,可以帮助我们测试读写是否正确.另外 ...

  5. USB HID 协议

    USB HID 协议入门 转载请注明来源:cuixiaolei的技术博客 USB HID设备类的应用场合 USB HID类是USB设备的一个标准设备类,包括的设备非常多.HID类设备定义它属于人机交互 ...

  6. USB HID学习:MFC检测USB拔插事件

    MFC具备检测设备的消息,但需要手动添加.针对USB设备,需要注册对应的GUID方可.本文对此进行简单记录. 本省略对MFC机制的描述,仅描述主要的模块代码. 一.步骤 Dbt.h头文件引用 在std ...

  7. USB HID学习:数据包分析

    本文使用 Bus Hound 工具对 USB HID 设备数据包进行分析,并结合官方手册及网上文章进行整理.文中未提到的知识,建议移步参考资源. 以笔者经验,直接阅读协议无法直观理解,最好使用工具抓包 ...

  8. 一个单片机搞定USB电阻式触摸屏,完美解决飞点问题。

    一个单片机搞定USB电阻式触摸屏,完美解决飞点问题. 参考文章: (1)一个单片机搞定USB电阻式触摸屏,完美解决飞点问题. (2)https://www.cnblogs.com/zkp2010/ar ...

  9. [转载]基于Stm32,LD3320的非特定语音识别USB HID Keyboar

    基于Stm32,LD3320的非特定语音识别USB HID Keyboard实现 ---用声音跟机器沟通 鉴于手头拥有一块ST官方的stm32f407VG discover板子以及一块ICRoute公 ...

最新文章

  1. 几种常用的C#排序方法简介
  2. 项目感言--功能的模块化
  3. 在JSP页面中显示List集合·
  4. java设计模——反射的应用 (利用反射来去除if判断语句)
  5. python 摄像头录制帧率_基于opencv和python的可变帧速率IP摄像机视频记录
  6. ubuntu install baidu inputmethod
  7. 《北大学科》第一季:数学篇
  8. (原)使用vectot的.end()报错:iterators incompatible
  9. ajax数据显示,使用js通用模板
  10. 【北交所周报】IPO上会5过5;四成个股实现上涨,硅烷科技涨56%,成单周涨幅最大个股;...
  11. 计算机网络信息安全风险评估准则,计算机网络信息安全风险评估准则及方法研究.pdf...
  12. 彻底清除 mplay.com与mplay.exe病毒
  13. 深入浅出DockerPDF
  14. 第二周博客作业西北师范大学|李晓婷
  15. 2513: 小勇学分数(公约数问题)
  16. 标志Logo设计的起源和艺术特点
  17. 双十一大战前瞻:拼多多京东苏宁纷纷放大招,谁能挑战阿里C位?
  18. android入门之Activity 后台启动限制
  19. 两个div实现十字架
  20. 程序江湖事——docker江湖缘

热门文章

  1. 海思SD3403/SS928开发(一)简介
  2. 关于@Valid和Validated的比较
  3. 阳光智博改嫁给万物云:终止独立IPO计划,阳光城获利25亿元
  4. 1.4_18 Axure RP 9 for mac 高保真原型图 - 案例17 【js-echarts官网】
  5. wFlow(CVPR2022)-虚拟试衣论文解读
  6. email.class.php,利用PHP发送邮件Class类
  7. [1179]hive的lateral view用法
  8. layui的常用方法汇总——基础提升
  9. 清华出版计算机书籍相关资源全下载
  10. macOS下使用命令行制作 MacOS cdr/iso 镜像文件