繁体   English   中英

使用C或C ++从USB设备接收数据

[英]Receiving data from a USB device in C or C++

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

然后,我可以开始使用我的程序中的数据。

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

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

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

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

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

编写过滤器驱动程序需要非常高级的技能,有很多痛点。 就像在犯一个简单错误时崩溃操作系统一样。 最近Windows驱动程序模型也有相当大的变化,USB驱动程序已经进入第3环(用户模式)以保持操作系统稳定。

要开始使用,请下载Windows WDK(又名“DDK”)并阅读Walter Oney的书籍。 最好全部。

如何编写USB程序,想要了解它的背景,同时又不想阅读它,不想同时使用库? 无论如何。 有一个来自Stefan Meyer的项目“libUSB Win32”目前没有经过大量的开发,但用C语言写的可能这对你来说很有用,它也有能力在古老的​​windows版本下运行;)你可以在这里找到它:
http://sourceforge.net/apps/trac/libusb-win32/wiki
前段时间我在VB6中写了这个使用“libUSB Win32”不知道它是否对你有用:
http://www.activevb.de/cgi-bin/upload/download.pl?id=3061

这是让你入门的东西:

并呼吁大声更新一个不是上一个千禧年的操作系统。 我听说Linux对USB有很大的支持。

你在这里得到的建议是正确的; USB并不容易,相信我......我正在研究USB项目,但是从后端开始。 在我看来,你也需要关注后端,这是你真正无需处理图书馆的所有内容,但无论你做什么,你都无法绕过阅读。

不要气馁,但你需要在跳入并淹死之前弄湿你的脚。 USB2.0和USB3.0非常干燥,但我发现OSDev Wikiusbmadesimple是有用的踏脚石。

如果您仍然需要在PC中,那么您应该考虑尝试获取一些开源USB代码,如果您能找到它,可能是USB嗅探器。

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

获取列表不是大问题,它正在接收数据。

我知道你不想写驱动程序,但这就是驱动程序所做的:从设备接收数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM