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

Mag*_*gix 9 c c++ linux libusb linux-device-driver

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

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


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


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

小智 3

根据libusb_claim_interface()的文档:

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

所以你应该能够在每台设备上调用 libusb_claim_interface() 并且它应该只在无人认领的设备上成功:

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