У меня есть устройство, которое действует как последовательный порт, подключенный через USB. У меня есть класс, который взаимодействует с устройством через QSerialPort
, Вскоре у меня будет несколько таких устройств, и программа должна будет надежно различать их, чтобы назначать настроенные значения экземплярам класса.
Qt идентифицирует последовательные устройства по portName
поле QSerialPortInfo
вспомогательный объект. Это имя происходит от / dev / path (например, /dev/tty.foo42
это имя порта "foo42"
) и этот путь не остается связанным с конкретным устройством при перезагрузке или развертывании на другом компьютере. Тем не менее, через libusb я могу получить серийный номер, который стабилен при перезагрузке и на разных машинах.
Чего я до сих пор не нашел, так это способа сопоставить серийный номер, который можно заранее определить и записать в файле конфигурации, с именем порта, которое можно использовать для открытия QSerialPort
, В настоящее время развертывается на MacOS, но в будущем мы можем захотеть развернуть на Linux.
Поиск существующих вопросов в основном приводит к тому, что в системе Linux всегда можно назначить конкретный путь разработки определенному устройству. Решение, которое включает в себя настройку операционной системы, является приемлемым, но то, что приложение может обойтись без этого, является предпочтительным. Подходящее для Mac решение приемлемо, но то, что также работает в Linux, предпочтительнее.
Документация для QSerialPortInfo :: SERIALNUMBER () (новое в Qt 5.3) звучит так, как вы хотите:
QString QSerialPortInfo :: serialNumber () const
Возвращает строку серийного номера последовательного порта, если доступно;
в противном случае возвращает пустую строку.Примечание. Серийный номер может содержать буквы.