2017-04-10 97 views
1

我需要從C++程序檢查運行程序的系統上可用的USB端口版本。
現在我需要它在Windows上,但Linux將是下一個。如何檢查可用USB端口的版本?

是否有如下簡單功能:int GetUsbVersion()

我不需要像libusb那樣複雜的任何東西,但爲了防止它使用哪些函數?

+0

https://stackoverflow.com/questions/42160635/how-to-determine-usb-port-version-on- windows – sailfish009

+0

@ sailfish009:他們提出了USBView,它是一個完整的GUI應用程序。我正在尋找從C++程序調用的低級函數。 – Pietro

+0

https://github.com/Microsoft/Windows-driver-samples/tree/master/usb/usbview在鏈接中,有一個功能。 – sailfish009

回答

0

在linux中是lsusb |的grep ...或直接與libusb命令(在libusb__device__descriptor領域bcdUSB

Bus 002 Device 007: ID 04f2:b1d8 Chicony Electronics Co., Ltd 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 

2.0, 1.1 , ...的是根集線器的版本。如果有2.0或3.0根集線器然後也有和1.1(和/或2.0)的向後兼容性

http://libusb.sourceforge.net/api-1.0/structlibusb__device__descriptor.html https://itsfoss.com/find-usb-3-port-linux/

在窗口這是比較困難的,因爲窗口提供了非常壞訪問下級USB功能。圖形這可以通過確定Universal Serial Bus controllersDevice Manager的USB主機控制器的版本做,看https://kb.iu.edu/d/aout

USB 1.1是open (OHCI),USB 2.0是enhanced (EHCI) USB 3.0是extensible (xHCI)主機控制器接口

,您可以訪問信息使用WMI(Windows Management Instrumentation)從C++設備管理器的設置。爲了找出使用什麼USB協議的版本,你要查詢的USB根集線器(Win32_USBHub class),見https://msdn.microsoft.com/en-us/library/aa394506(v=vs.85).aspx

[Dynamic, Provider("CIMWin32a"), UUID("{52E56374-B17E-41DC-00EC-FC3E6E8D8783}"), AMENDMENT] 
class Win32_USBHub : CIM_USBHub 
{ 
    uint16 Availability; 
    string Caption; 
    uint8 ClassCode; 
    boolean ConfigManagerUserConfig; 
    string CreationClassName; 
    uint8 CurrentAlternateSettings[]; 
    uint8 CurrentConfigValue; 
    string Description; 
    boolean ErrorCleared; 
    string ErrorDescription; 
    boolean GangSwitched; 
    datetime InstallDate; 
    uint32 LastErrorCode; 
    uint8 NumberOfConfigs; 
    uint8 NumberOfPorts; 
    string PNPDeviceID; 
    uint16 PowerManagementCapabilities[]; 
    boolean PowerManagementSupported; 
    uint8 ProtocolCode; 
    string Status; 
    uint16 StatusInfo; 
    uint8 SubclassCode; 
    string SystemCreationClassName; 
    string SystemName; 
    uint16 USBVersion; <------------------ 
    uint32 ConfigManagerErrorCode; 
    string DeviceID; 
    string Name; 
}; 

https://msdn.microsoft.com/en-us/library/dn449417(v=winembedded.82).aspx

How do I access information in Windows Device Manager in C++?