Уникальные идентификаторы устройств для USB, FireWire и последовательных портов
Я работаю над проектом, который предусматривает автоматическое обнаружение подключенных и отключенных USB-устройств и устройств FireWire из системы OS X. Для данного устройства система должна распознавать устройство, когда оно подключено (независимо от того, к какому порту), и загружать пакет для конкретного устройства, чтобы справиться с ним.
Ключом к выполнению этой работы, очевидно, является уникальная идентификация каждого устройства. Я знаю, что USB-устройства идентифицируются по комбинации полей идентификатора поставщика и идентификатора продукта, но это не обеспечивает уникальный идентификатор, только "вид" устройства. Если у меня есть два одинаковых устройства, и я подключаю их оба к компьютеру, я бы хотел как-то их различить. Есть ли общий и надежный способ сделать это, возможно, используя другие поля в дескрипторе USB?
Смежный вопрос, как это работает для последовательных портов USB? Предположим, я подключил два последовательных USB-порта одной марки / модели. OS X должна предоставить им уникальные inode в дереве /dev. Однако предположим, что он вызывает их /dev/usbserial1 и /dev/usbserial2. Если я затем отключу порты и подключу только один из них, будет ли этот порт иметь то же имя, что и раньше, или он просто подключится к порту /dev/usbserial1 (поскольку он единственный)?
Тот же вопрос для устройств FireWire, хотя я думаю, что устройства FireWire должны иметь 64-битный GUID. В этом случае я ищу кого-то, чтобы убедиться, что использование GUID для идентификации устройства FireWire будет надежным. Другими словами, если я подключу две отдельные камеры одного и того же производителя и модели, буду ли я ожидать, что они будут иметь разные GUID?
Я знаю, что мог бы протестировать некоторые из них на соответствующем оборудовании, но в настоящее время у меня нет нескольких битов оборудования, поэтому я надеюсь, что кто-то может знать хотя бы некоторые из ответов на поставленные выше вопросы.
2 ответа
Если вам повезет, ваши USB-устройства должны иметь уникальные серийные номера в дополнение к комбинации VID/PID. Если вы перечисляете IOUSBDevice
объекты, посмотрите на USB Serial Number
имущество.
В Windows Microsoft запоминает настройки устройства следующим образом:
- серийный номер устройства (поле iSerialNumber в дескрипторе устройства USB), если доступно
- или иным образом, по "пути" к устройству: его шине (т.е. к какому концентратору он подключен и т. д.) + USB VID и PID
Без серийных номеров USB-устройства практически неразличимы. Можно отличить разные USB-накопители, но для устройств, у которых нет энергонезависимой памяти (а многие USB-устройства попадают в эту категорию), они просто неразличимы, поэтому вам просто нужно приложить максимум усилий, чтобы сделать то, что пользователь ожидает.