如何知道USB设备是否已被使用?

时间:2017-05-02 09:16:19

标签: c++ c linux linux-device-driver libusb

我正在使用C库libusb为USB设备编写C ++ Linux用户空间驱动程序。我有两个相同设备的副本(相同的供应商ID和产品ID),并想知道如何处理这种情况。

以下是我能想到的可能性:

我该如何处理?前面的哪个选项(如果有的话)是libusb在处理许多相同设备时的行为?如何区分使用中的设备和空闲设备?

正如@fiscblog在他的回答中所说,“识别是通过设备描述符完成的(使用序列号,它应该始终是唯一的)”。我的问题是,为了做到这一点,两个驱动程序应该通信以知道哪个实例正在处理哪个设备(例如,使用文件),我想避免这种情况。我也想避免引入多线程并用一个驱动程序管理两个设备,因为我没有这种技能以高效和良好控制的方式这样做(令人讨厌的竞争条件......!)

3 个答案:

答案 0 :(得分:4)

正确处理是:

  • 枚举所有设备(获取设备列表)
  • 识别所请求的设备并将其打开

通过设备描述符进行识别(使用序列号,它应该始终是唯一的),就像你自己发现的一样。

如何知道设备是否正在使用?

如果设备已打开,则将为I / O绑定和配置端点。因此,您无法再次打开它,但会收到您提到的错误代码。

答案 1 :(得分:2)

根据libusb_claim_interface()上的文件:

  

接口声明用于指示底层操作系统您的应用程序希望获得接口的所有权。

所以你应该可以在每个设备上调用libusb_claim_interface(),它应该只在无人认领的设备上成功:

  

尝试声明已声明的接口是合法的,在这种情况下,libusb只返回0而不执行任何操作。

答案 2 :(得分:2)

libusb是用C语言编写的,遵循访问设备,文件描述符,流等相同的基本通用指南。

1 - 连接到de device

2 - 检查连接,如果出现错误,请通知并返回

3 - 没有错误!!交互

按照这个基本流程,你的案例恕我直言的解决方案就像:

  • 识别设备
  • 通过他们试图连接,直到一个人没有失败
  • 做点什么
  • 靠近