На Linux USB-серийных устройства создают два псевдонима для последовательного порта:
/dev/tty*
и/dev/serial/by-id/<my_usb_device_id>
Есть ли способ на OSX идентифицировать последовательный порт по идентификатору устройства USB? И в System Profiler, и при использовании ioreg -p IOUSB
я могу видеть идентификатор, но это не приближает меня к подключению с использованием этого идентификатора.
Мы разрабатываем несколько единиц оборудования, и тестировать их очень сложно, так как каждый раз, когда я подключаю другое устройство, мне нужно проверять конфигурацию последовательного порта тестируемого программного обеспечения, потому что в OSX tty.*
имя порта зависит от порта на моем компьютере, не на устройстве. Ребята, работающие под Linux, с радостью используют /dev/serial/by-id/<my_usb_device_id>
порт, чтобы автоматически различать разные устройства.
На самом деле вы должны быть в состоянии найти соответствие между идентификатором устройства / серийным номером и именем последовательного порта, используя
ioreg
. Попробуйте эту команду:Он распечатает все хост-устройства USB и распечатает все свойства из поддерева каждого устройства. Вы должны быть в состоянии найти ваше устройство на верхнем уровне по его идентификатору или серийному номеру. Найдя его, вы сможете сканировать его поддерево и в конечном итоге найти объект класса
IOSerialBSDClient
. Это будет содержать свойство,IODialinDevice
которое вы хотите.Если вы затем хотите сделать это программно, вы можете добавить
-a
опцию вioreg
команду, которая выведет версию plist вышеприведенного вывода. Затем вы можете разобрать это с помощью библиотеки, напримерplistlib
.Возможно, вам будет полезно использовать приложение IORegistryExplorer, чтобы помочь визуализировать это, поскольку полный
ioreg
вывод немного сложно прочитать! Это доступно в пакете XCode «Hardware IO Tools», который можно найти, выполнив поиск по загрузкам на сайте разработчиков Apple . Вот как это выглядит на моем устройстве:источник