2015-06-08 6 views
2

У меня есть много одинаковых устройств с VMP STM32. Windows 8.1 создает последовательный COM-порт для устройства. Если я подключу устройство ONE к любому USB-порту ПК, окна свяжут с ним один и тот же COM-порт. После подключения второго устройства к другому USB-порту он создаст следующий COM-порт с другим серийным номером COM. Если я отключу эти устройства и подключаюсь в другом порядке, COM-порты будут переключаться между устройствами. Это проблема, потому что мне нужен тот же порядок портовых портов COM (физически) каждый раз. Использования программного обеспечения USBlyzer я могу увидеть, что какое-то номер USB порта отличается для каждого порта физического USB:Возможно ли получить USB-устройство через USB-порт с помощью PyUSB

enter image description here

Так что я хотел бы получить доступ (получить текущее устройство) с помощью этих устройств по номеру порта. Или перечислите все устройства и получите этот номер порта из объекта устройства?

В libusb документации нашли это есть такой метод:

uint8_t libusb_get_port_number (libusb_device * Dev)
Получить номер порта, что устройство подключено.

ссылка: http://libusb.sourceforge.net/api-1.0/group__dev.html

Может PyUSB есть это слишком ...

+0

Я никогда не видел, чтобы Windows вела себя так. Если устройства идентичны (и у них нет серийных номеров USB), то номер COM-порта, который они назначены, должен зависеть только от того, в какой порт они подключены, а не в том порядке, в котором они были подключены. Но я признаю, что я • Не тестируйте устройства USB без серийных номеров очень часто и, возможно, что-то изменилось. Какая версия Windows это? –

ответ

1

Найдено другое решение моей проблемы. Использование окон API DeviceManager Получает номер порта и концентратора (физическая идентификация USB) из информации о местоположении и дружественного имени устройства с номером COM-порта в нем. Разбор этой информации и информация для последовательной связи.

from infi.devicemanager import DeviceManager 
dm = DeviceManager() 
dm.root.rescan() 

devices = dm.all_devices 


for i in devices: 
    try: 
     print '{} : address: {}, bus: {}, location: {}'.format(i.friendly_name, i.address, i.bus_number, i.location) 
    except Exception: 
     pass 
+0

Спасибо за обмен. Это супер полезная библиотека, которая дала мне то, что я искал (после долгих исследований!) – dustinrwh