问题 如何最恰当地使用libusb与连接的USB设备通信?


我如何最恰当地使用 libusb的 与连接的USB设备通信?

具体来说,如何将数据传输到USB设备,从设备接收信息,找出所连接设备的名称,是否有存储等。

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

如果对libusb和USB设备有一个很好的解释,这也会有所帮助。


12694
2018-06-21 16:00


起源



答案:


我在这里找到了关于使用libusb-1.0的文本方法: http://www.dreamincode.net/forums/topic/148707-introduction-to-using-libusb-10/


7
2018-06-26 09:20





这里 是一个类似问题的帖子,可能对您有用。我提供了很多链接。

但也许你宁愿在这里看到它。那么在这种情况下,它就在这里!

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个字符,则必须遍历字符数组并为每个字符发送功能或输出报告。)

作为一个例子,随意引用一个相当具体的终端  我写的是控制两个LED。如果它有用,太棒了!它包含一个libusbx和libusb-0.1示例。

我希望这有帮助!


6
2017-07-16 15:36



而不是lsusb,在Mac(有关的原始帖子)上你可以做到 system_profiler SPUSBDataType 获取供应商ID和产品ID。 - Simo A.
我知道这已经过时了,但是对于多个设备你会怎么做?换句话说,我有两个相同类型和制造商连接的RFID阅读器? - audiFanatic


答案:


我在这里找到了关于使用libusb-1.0的文本方法: http://www.dreamincode.net/forums/topic/148707-introduction-to-using-libusb-10/


7
2018-06-26 09:20





这里 是一个类似问题的帖子,可能对您有用。我提供了很多链接。

但也许你宁愿在这里看到它。那么在这种情况下,它就在这里!

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个字符,则必须遍历字符数组并为每个字符发送功能或输出报告。)

作为一个例子,随意引用一个相当具体的终端  我写的是控制两个LED。如果它有用,太棒了!它包含一个libusbx和libusb-0.1示例。

我希望这有帮助!


6
2017-07-16 15:36



而不是lsusb,在Mac(有关的原始帖子)上你可以做到 system_profiler SPUSBDataType 获取供应商ID和产品ID。 - Simo A.
我知道这已经过时了,但是对于多个设备你会怎么做?换句话说,我有两个相同类型和制造商连接的RFID阅读器? - audiFanatic


您可以遵循的流程是:

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

1
2017-11-19 07:30