2013-06-21 64 views
11

如何正确使用libusb与连接的USB设备通话?如何最正确地使用libusb与连接的USB设备通话?

具体如何做我的数据传输到USB设备,接收设备的信息,找到所连接的设备的名称,如果他们有存储等

更具体地说,我将运行这在Mac上  OS   X机器,所以我知道我不能只使用Windows头文件。

如果对libusb和USB设备有很好的解释,那也是有帮助的。

回答

6

Here是一个类似的问题,可能是对你有用的一个职位。我包括很多链接。

但也许你宁愿在这里看到它。所以在这种情况下,它就这样了!

Libusb允许您枚举设备并根据特定的供应商/产品ID(V/P Id)选择您想要的设备。如果您不知道这一点,并且无法在网上找到产品描述,那么您可以轻松找到它。

如果它不在线,您需要在Linux上使用类似于lsusb的应用程序。 (我不相信它是在Mac上)。当你运行lsusb时,它会列出连接的设备和它们的V/P ID。您可以轻松找到您的设备,方法是拔下插头,运行lsusb,然后再插入设备并进行比较。很简单的。 Mac上的任何USB列表应用程序都希望显示像lsusb一样的V/P ID。

然后,一旦你有这个V/P ID,你将使用libusb(如果使用0.1)来枚举所有设备并找到与该ID匹配的设备。 (我支持使用libusbx,它恰好具有基于V/P id的单个查找设备功能 - 实际上,libusbx在整个周围都是更加简洁的。)

选择设备后,您将使用功能或输出报告。这是最复杂的部分,因为您发送的数据包依赖于我相信的单个设备。它是8个字节的数据,其中只有一个是你想发送给USB设备的单个字符。 (如果你想送8个字符,您将通过字符数组必须循环和发送功能或输出报告的每个字符。)

举个例子随意引用,而特定终端example我写的控制两个LED。如果它有帮助,太棒了!它包含一个libusbx和libusb-0.1的例子。

我希望这有助于!

+0

而不是lsusb,在Mac上(您可以在原始文章中找到),您可以使用'system_profiler SPUSBDataType'来获取供应商ID和产品ID。 –

+0

我知道这是过时的,但你会在多个设备的情况下做什么?换句话说,假设我有两台连接了相同类型和制造商的RFID阅读器? – audiFanatic

1

,你可以遵循的过程是:

  1. 获取VID,PID的设备要使用lsusb
  2. 尝试打开该设备并读取设备描述符
  3. 如果沟通你想要设备的名称使用字符串描述符来获得
  4. 检查是否有任何内核驱动程序已连接。如果是,然后分离它并做一些原始数据传输
  5. 再次获得响应后重新附加驱动程序。