2010-06-05 148 views
9

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

然后我可以开始在我的程序中播放数据。

我不想使用图书馆的,唯一的标准C++函数,程序应该在Windows 98

+0

有没有标准的C++功能来做到这一点。 – 2010-06-05 18:38:05

+0

我不确定...你可以告诉我如何做到这一点。 – Midas 2010-06-05 18:40:49

+0

为什么你不想使用库? – OlimilOops 2010-06-05 18:45:31

回答

1

工作,这里的东西,让你开始:

而对于哭出声来更新操作系统,从最后千年不是。我听说Linux对USB有很好的支持。

+1

+1更新 - Windows 98是古老的。 (对于隐含的Linux推荐+1。)如果人们更新,我们会更快地获得很酷的东西。 – Thanatos 2010-06-05 19:09:53

+0

今天我读了很多,没有任何结果,我不觉得只阅读一本关于USB规范的书。你可以给我一个我想做的代码示例吗?它可以是非常基本的。 – Midas 2010-06-05 19:30:14

+0

@Midas:低层次的东西并不简单。就我而言,我花了很多时间阅读规范,以更好地了解USB的工作原理。如果您正在寻找有关事物的信息,那么阅读文档有时会更好,而不是跳入示例代码。 – 2010-06-05 19:57:06

3

怎么能写一个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

+0

libUSB基于标准C++代码,不是吗?我可以自己写这个,适合我的程序。 我可以看看源代码。 – Midas 2010-06-05 19:51:41

+0

网址似乎已更改。你的不再工作了。 但使用谷歌我发现这个链接工作:https://sourceforge.net/projects/libusb-win32/ – Scindix 2018-01-19 17:47:06

+0

维基mentiions以下内容: “libusb-win32现在处于Bug-Fix-Only维护模式。建议新项目应该迁移到libusb-1.0 API并改用libusb Windows(http://libusb.info)。“ – Scindix 2018-01-19 17:52:58

19

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

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

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

如果你想编写对待USB设备类似的软件,那么你需要在它们仍然有共同点的级别编写它。这是在USB控制器级别,您可以编写一个筛选器驱动程序,将其注入到USB驱动程序堆栈中,并查看控制器和设备驱动程序之间的I/O请求数据包。类似于对TCP/IP流量进行监视的winpcap过滤器驱动程序。虽然没有太多有趣的东西可以看,但是你会盯着来回传递的字节。这是一个比winpcap更大的问题,至少它看到的字节飞行的意思是在RFC中记录的。 USB的情况并非如此,制造USB设备的公司通常也是设备驱动供应商。他们保持内部格式无证。

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

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

+0

谢谢,但我真的不想要一个司机。那是问题吗?你确定这本书对我有好处吗?我住在比利时,我不能在这里买。 – Midas 2010-06-05 20:33:47

+1

是的,这将是一个问题。 Amazon.com提供给比利时afaik。你可能不想在它上面花太多钱,美满的结局等等。我知道你在大学城有好的图书馆。 – 2010-06-05 20:37:54

+0

+1非常好回答 – OlimilOops 2010-06-05 20:39:29

0

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

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

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

0

要添加一些很好的答案...

USB编程是不是“小事”

首先,你必须了解操作系统如何工作以及为什么它们的驱动程序。

除非你想程序DOS的RS-232端口,你可以不直接与USB端口进行通信,必须与操作系统和你所感兴趣的设备的驱动程序进行通信。

0

你在这里得到的建议是关键的; USB并不容易,相信我......我正在开发USB项目,但是从后端开始。在我看来,你也需要考虑后端,那就是你不必处理图书馆和所有这些,但是你无论如何都无法绕过阅读。

不要灰心,但在跳进去和淹死之前,确实需要弄湿你的脚。 USB2.0和USB3.0相当干燥,但我发现OSDev Wikiusbmadesimple是有用的垫脚石。

如果你仍然需要在PC上,那么你应该考虑尝试获得一些开源USB代码,如果你可以找到USB嗅探器。

+0

请不要将签名添加到您的帖子。 (根据[帮助内容](http://stackoverflow.com/help/behavior)中的“不要使用签名,标语或问候语”部分。) – 2013-08-03 11:37:48