尝试理解USB,使用C语言

3

我已经搜寻答案但没有找到 :( 我一直在使用来自中国的RFID设备,所以我几乎一无所知。我正在尝试编写一个程序(实际上我正在尝试使用别人的库)与它进行交互。当标签经过RFID设备时,设备会像HID键盘一样输出数字,然后按下回车键并等待下一个标签。(我正在使用Windows 7)

我的问题是:

  1. 除了知道VID(供应商ID)和PID(产品ID)外,我还需要知道关于这个设备的其他信息才能开始从中读取内容吗?

  2. 在我看到的一个示例中,在读取设备之前,示例程序先向设备写入8个字节的数组(bytes[8]),每个字节都是类似[0]=60,[1]=0,[2]=20等的东西。当设备停止读取时,它也发送了一堆停止字节。有人能解释一下这个过程,并告诉我这是否必要,这些启动/停止字节是设备特定的还是通用的USB启动/停止事项吗?

  3. 有人知道有没有好的、简单的源代码或应用程序可以做到我想做的事情吗?

感谢回答上述任何问题。


我很好奇你正在使用哪个来自中国的RFID读卡器,你能给我们提供一个链接或其他信息吗? - garzanti
2个回答

3
在尝试部分反向工程基本USB协议之前,您可以阅读(开放的)USB规范(请参见http://www.usb.org/),并熟悉关键词(端点、URB、管道)和原则控制/批量/等时/中断传输)。
我喜欢Linux-USB实现,因为它简单易读:linux/include/usb.h。
要从用户空间访问USB设备,您可以使用libusb(适用于Windows和Linux)。这样,您可以在不编写内核驱动程序的情况下访问USB设备。

谢谢您的回复,我会阅读并采纳您的建议。关于字节问题,是肯定还是否定呢?发送的字节是否唯一于设备?我正在使用的库是http://www.florian-leitner.de/index.php/2007/08/03/hid-usb-driver-library/ .. 您有使用过这个项目的经验吗? - Zephni
是的,抱歉我没有回答你的真正问题。这基本上是因为很难回答:这些字节代表着某些东西,最简单的方法是阅读规格说明以了解它们的含义。除此之外,仅仅查看字节是不够的,您还需要知道使用了哪种类型的传输以及该传输的其他参数(例如,在控制传输中,您还有一个索引和值参数,它们也携带数据)。 - Patrick B.

1

如果您的RFID读卡器确实是一个虚拟USB HID键盘,那么您可以注册RawInput并监听数据。在这种情况下,您真的不关心硬件,我认为其他人已经在这里回答了如何做。

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

如果您在这种情况下找不到驱动程序或某些规格,则必须开始对您的USB设备进行反向工程。您可以使用Microsoft的USBView.exe工具开始,您可以在Windows Driver Kit中找到它的源代码,只需构建它并获得应用程序。之后,您应该尝试获取USB描述符结构并进行分析,您将在那里找到许多有价值的信息,可以帮助您了解数据的发送方式。

正如您所看到的,有很多“如果”...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接