Qt QSerialPortInfo:查找虚拟串行端口的USB硬件位置

Qt QSerialPortInfo:查找虚拟串行端口的USB硬件位置,qt,serial-port,location,usb,Qt,Serial Port,Location,Usb,我有一个USB集线器芯片,它的一个端口上连接着一个微控制器 我能够使用QSerialPortInfo/QSerialPort枚举并与微控制器通信。 我的问题是,我必须判断一个通用USB设备是否与我的微控制器连接到同一个USB集线器 这应该很简单,我可以告诉通用USB设备的硬件位置,如“Port#0001.Hub#0010”,因此如果Hub#编号与微控制器连接的位置相同,我可以告诉您它们连接的是同一个Hub 问题是QSerialPortInfo.systemLocation()返回的是“\。\CO

我有一个USB集线器芯片,它的一个端口上连接着一个微控制器

我能够使用QSerialPortInfo/QSerialPort枚举并与微控制器通信。 我的问题是,我必须判断一个通用USB设备是否与我的微控制器连接到同一个USB集线器

这应该很简单,我可以告诉通用USB设备的硬件位置,如“Port#0001.Hub#0010”,因此如果Hub#编号与微控制器连接的位置相同,我可以告诉您它们连接的是同一个Hub

问题是QSerialPortInfo.systemLocation()返回的是“\。\COM31”字符串,而不是类似于“Port\u35; 0002.Hub\u35; 0010”的内容

如何获取QSerialPortInfo/QSerialPort所属的USB硬件路径

其他信息:

Windows7,Qt5.3,C++11

QSerialPortInfo返回信息:

QSerialPortInfo.portName() == "COM31"
QSerialPortInfo.description() == "LPC USB VCom Port"
QSerialPortInfo.serialNumber() == "" // (Empty string)
当windows设备管理器正确显示真正的USB时:(抱歉,现在还不能发布图像)

DeviceManager>端口(COM和LPT)>LPC USB VCom端口(COM31)

属性>常规>位置:端口0002.集线器0010


如何从我的Qt代码中访问此信息?

好吧,managed to get正在工作,但它不是理想的解决方案: 我使用SetupDiGetClassDevswindows api调用获取特定GUID的所有设备,然后使用SetupDiGetDeviceRegistryPropertywinApi获取属性,直到找到MCU所在的特定端口,并用该端口名初始化QSerialPort。然后属性SPDRP_位置_路径SPDRP_位置_信息提供可用于检测通用USB设备是否位于同一集线器上的信息


问题是,这是一个“扔掉Qt提供的高级API,开始乱用winApi”的解决方案。我宁愿避免这样。如果有一个更类似于Qt、更不直接依赖winApi的解决方案,我们将不胜感激。

Dang!我希望能够移植到Linux上:-(我有一个类似的问题,我想区分“普通”串行设备和USB设备。到目前为止,Qt还没有提供任何方法。