在C或C中从USB设备接收数据

我需要一个所有插入USB设备的列表,并让用户选择一个让控制台应用程序接收USB设备发送的任何数据.

然后我可以开始玩我的程序中的数据.

我不想使用库,只有标准的C函数,程序应该在Windows 98中工作.

解决方法

这是一个非常持久的问题在论坛和编程Q A网站.从来没有一个愉快的结局. USB中的B表示总线.这是计算机硬件设计中的术语,用于描述用于电子设备交换数据的电接口.它与您的机器中的PCI(express)总线完全相同.由于它首先是电气规范,因此USB支持非常大量的设备类型.任何从无线网络适配器,调制解调器,闪存卡到茶壶加热器.关于它不能处理的唯一种类的设备是需要非常大带宽的设备,如视频适配器.

USB规范具有非常优雅的协议规范,描述设备如何共享总线以及如何交换数据.然而,该协议规范根本没有描述数据的格式,它仅仅定义了能够传送大量字节的概念.设备本身取决于这些字节的含义.

在机器端,您需要软件来解释这些字节,并使机器对其进行有趣的事情.这需要一个设备驱动程序.就像您的视频卡和网络接口卡一样,需要一个设备驱动程序.显然,视频驱动程序与NIC驱动程序非常不同. USB驱动程序也是如此,几乎没有共同点.

如果要编写类似于USB设备的软件,那么您需要在仍然有一些共同点的层面上写下.在USB控制器级别,您可以编写一个过滤器驱动程序,将其自身注入USB驱动程序堆栈,并窥视控制器和设备驱动程序之间的I / O请求数据包.类似于,例如,监视TCP / IP流量的winpcap过滤器驱动程序.没有什么有趣的东西可以看出来,你会盯着来回传递的字节数.这是一个比winpcap更大的问题,至少它看到字节飞,其含义被记录在RFC的某个地方.不是USB的情况,制造USB设备的公司通常也是设备驱动程序供应商.他们保留内部格式无证件.

编写过滤器驱动程序需要相当先进的技能,有很多痛点.像你在做一个简单的错误时崩溃操作系统.最近Windows驱动程序模型中也有相当大的助推器,USB驱动程序已经进入了3号环境(用户模式),以保持操作系统的稳定.

要开始,请下载Windows WDK(又名“DDK”)并阅读Walter Oney的书籍.最好是所有的.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...