我正在开展一个项目,该项目涉及从OS X系统插入和拔出USB和火线设备的自动检测。对于给定的设备,系统需要在设备插入时识别设备(无论哪个端口)并加载特定于设备的捆绑来处理它。
使这项工作的关键显然是每个设备的唯一标识。我知道USB设备是通过供应商ID和产品ID字段的组合来识别的,但是这不提供唯一的ID,只提供设备的“种类”。如果我有两个相同的设备,我将它们插入计算机,我想要一些方法来区分它们。是否有通用且可靠的方法来执行此操作,可能使用USB描述符中的其他字段?
相关问题,这对USB串口有何影响?假设我插入了相同品牌/型号的两个USB串口。 OS X应该在/ dev树中为它们提供唯一的inode。但是,假设它将它们称为/ dev / usbserial1和/ dev / usbserial2。如果我然后拔掉端口并只插入其中一个端口,那么该端口是否会被赋予与之前相同的名称,或者只是将/ dev / usbserial1(因为它是唯一的)端口插入?
对于firewire设备也有同样的问题,尽管我认为firewire设备应该具有64位GUID。在这种情况下,我正在寻找有人来验证使用GUID进行火线设备识别是可靠的。换句话说,如果我插入两个相同品牌和型号的独立相机,我希望它们有不同的GUID吗?
我知道我可以用适当的硬件测试其中的一些,但我目前没有多个硬件,所以我希望有人可能至少知道上述问题的一些答案。
答案 0 :(得分:1)
幸运的是,除了VID / PID组合外,您的USB设备还应具有唯一的序列号。如果您要枚举IOUSBDevice
个对象,请查看USB Serial Number
属性。
答案 1 :(得分:0)
在Windows上,Microsoft通过以下方式记住设备特定的设置:
没有序列号,USB设备几乎无法区分。您可以区分不同的USB磁盘驱动器,但对于没有任何类型的非易失性存储器的设备(许多USB设备属于此类别),它们只是难以区分,所以您只需要尽最大努力去做什么用户期望。