2014-10-30 4 views
3

의 USB 하드웨어 위치 및 그 포트 중 하나에 연결되는 마이크로 컨트롤러를 찾기.QSerialPortInfo : I는 USB 허브 칩이 가상 직렬 포트

나는 열거하고 QSerialPortInfo/QSerialPort와 마이크로 컨트롤러와 통신 할 수 있어요. 제 문제는 일반 USB 장치가 마이크로 컨트롤러와 동일한 USB 허브에 연결되어 있는지 여부입니다.

"Port_ # 0001.Hub_ # 0010"과 같이 일반적인 USB 장치의 하드웨어 위치를 쉽게 알 수 있으므로 Hub_ # 번호가 마이크로 컨트롤러가 연결된 위치와 동일하면 알 수 있습니다. 연결되어있는 허브와 같은 것입니다.

문제는 QSerialPortInfo.systemLocation()가 반환 "\. \ COM31는" 문자열, 그리고는 "Port_ # 0002.Hub_ 번호 0010"같이가 someting 것입니다.

어떻게 QSerialPortInfo/QSerialPort 속한 않는 어떤 USB 하드웨어 경로를 구할 수 있습니까?

추가 정보 :

QSerialPortInfo 반환 C++ 11

윈도우 7, Qt는 5.3 정보 : 죄송합니다 (: Windows 장치 관리자가 올바르게 실제 USB를 보여줍니다

QSerialPortInfo.portName() == "COM31" 
QSerialPortInfo.description() == "LPC USB VCom Port" 
QSerialPortInfo.serialNumber() == "" // (Empty string) 

동안) 아직 이미지를 게시 할 수 없습니다

DeviceManager> 포트 (COM & LPT)> LPC U SB VCOM 포트 (COM31)

속성> 일반> 위치 :

0010이 어떻게 내 Qt는 코드에서이 정보에 액세스 할 수 Port_ # 0002.Hub_ 번호? 내가 때까지 속성을 가져올 WINAPI 내가 다음 SetupDiGetDeviceRegistryProperty으로, 특정 GUID에 대한 모든 장치를 얻을 수있는 SetupDiGetClassDevs에게 윈도우 API 호출을 사용 :

답변

1

음, 노력 얻을 수 있었다,하지만하지 원하는 솔루션 MCU가 위치한 특정 포트를 찾고 해당 포트 이름으로 QSerialPort를 초기화하십시오. 다음 속성 SPDRP_LOCATION_PATHS 및 SPDRP_LOCATION_INFORMATION은 일반적인 USB 장치는 동일한 허브되었는지 감지 가능한 정보를 제공한다.

문제는 "Qt가 제공하는 높은 수준의 API를 버리고 winApi로 혼란에 빠지기 시작합니다"라는 것입니다. 나는 이것을 피하고 싶다. 더 많은 QT가 있고 이에 대한 직접적인 WinApi 의존성이 적은 솔루션이 있다면 감사하겠습니다.

+0

젠장! 나는 리눅스에 이식 할 수있는 무엇인가를 원했다 :-(필자는 USB와 "보통"의 시리얼 장치를 구별하고자하는 유사한 문제가있다. –

관련 문제