gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:10:58 25 4
gpt4 key购买 nike

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

然后我可以开始在我的程序中处理数据。

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

最佳答案

这是论坛和编程问答网站中的一个非常持久性问题。永远不会有一个圆满的结局。 USB中的B表示总线。这是计算机硬件设计中的一个术语,用于描述电子设备交换数据的电气接口(interface)。它的作用与机器内部的 PCI(快速)总线完全相同。由于它首先是一个电气规范,因此 USB 支持非常多类型的设备。从无线网络适配器、调制解调器、闪存卡到茶壶加热器,应有尽有。几乎唯一不能很好处理的设备是需要非常大带宽的设备,例如视频适配器。

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

在机器端,您需要软件来解释这些字节并让机器用它们做一些有趣的事情。这需要设备驱动程序。就像您的视频卡和网络接口(interface)卡需要设备驱动程序一样。显然,视频驱动程序与 NIC 驱动程序非常不同。 USB驱动也一样,通用性不大。

如果您想编写类似对待 USB 设备的软件,那么您需要在它们仍有共同点的水平上编写该软件。那是在 USB Controller 级别,您可以编写一个过滤器驱动程序,将自身注入(inject) USB 驱动程序堆栈并查看 Controller 和设备驱动程序之间的 I/O 请求数据包。类似于监视 TCP/IP 流量的 winpcap 过滤器驱动程序。虽然没有什么有趣的东西可看,但您会盯着来回传递的字节 block 。这是一个比 winpcap 更大的问题,至少它看到字节飞过,其含义记录在 RFC 的某处。 USB 并非如此,制造 USB 设备的公司通常也是设备驱动程序供应商。他们保持内部格式未记录。

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

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

关于c++ - 用 C 或 C++ 从 USB 设备接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2981558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com