【问题标题】:Trying to understand USB, using C试图理解 USB,使用 C
【发布时间】:2011-09-27 08:21:51
【问题描述】:

我已经搜索了这些答案但没有运气:(我一直在使用来自中国的 RFID 设备,所以我对此几乎一无所知。我正在尝试编写一个程序(实际上我正在尝试使用其他人的图书馆)与之交互。当标签通过 RFID 设备时,设备会像 HID 键盘一样输入数字,然后按 Enter 键并等待下一个。(我正在使用 Windows 7 顺便说一句) 我的问题是:

  1. 除了知道 VID(供应商 ID)和 PID(产品 ID)之外,我还需要了解有关设备的任何其他信息才能开始读取它。

  2. 在我看到的一个示例中,在读取设备之前,示例程序首先写入设备,发送数组中的 8 个字节 (bytes[8]),每个字节类似于 [0] = 60, [ 1] = 0,[2] = 20 等等。当设备停止被读取时,它还会发送一堆停止字节。有人可以向我解释一下吗,这是必要的,这些开始/停止字节是设备特定的还是USB的一般开始/停止?

  3. 有没有人知道任何好的、简单的资源(或应用程序)可以用来做我想做的事情?

感谢任何问题的解答,谢谢。

【问题讨论】:

  • 我很好奇你用的是什么中国的RFID阅读器,你能给我们一个链接或其他信息吗?

标签: c windows-7 usb rfid


【解决方案1】:

在尝试对基本 USB 协议进行部分逆向工程之前,您可以阅读(开放)USB 规范(请参阅http://www.usb.org/)并熟悉关键字(端点、URB、管道)和控制/批量/等时原则/中断传输)。

我非常喜欢 linux-usb 实现,因为它实现简单且易于阅读:linux/include/usb.h。

要从用户空间寻址 USB 设备,您可以使用 libusb(适用于 Windows 和 Linux)。这样,您无需编写内核驱动程序即可访问 USB 设备。

【讨论】:

  • 感谢您的回复,我会阅读并听取您的建议。在回答字节问题时,是或否?发送的字节对设备来说是唯一的吗?我正在使用的库是florian-leitner.de/index.php/2007/08/03/hid-usb-driver-library ..你对这个项目有任何经验吗?
  • 是的,很抱歉我没有回答你真正的问题。这基本上是因为不容易回答:这些字节代表了一些东西,最简单的方法是阅读规范以理解它们的含义。除此之外,只看字节是不够的,您还需要知道使用了哪种传输以及该传​​输的其他参数(例如,在控制传输中,您有一个索引和值参数,它们也携带数据)。
  • 非常感谢您的帮助
【解决方案2】:

如果您的 RFID 阅读器真的是一个虚拟 USB HID 键盘,那么您可能只需注册 RawInput 并监听数据。在这种情况下,你真的不关心下面的硬件,我认为其他人已经在这里回复了如何做到这一点。

如果这种方法不起作用,则意味着您的 RFID 阅读器不是真正的 USB HID 键盘设备,您应该向供应商索取驱动程序或通过 USB 发送的数据结构。

如果在这种情况下找不到驱动程序或某些规格,则必须开始对 USB 设备进行逆向工程。您可以开始使用它的一个工具是来自 Microsoft 的 USBView.exe,您可以找到它 Windows Driver Kit - 源代码,您只需构建它并拥有应用程序。在此之后,您应该尝试获取 USB 描述符结构并进行分析,您会发现很多有价值的信息可以帮助您了解数据是如何发送的。

你会看到很多如果...

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 2016-06-11
    • 2016-10-15
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多