我需要從C++程序檢查運行程序的系統上可用的USB端口版本。
現在我需要它在Windows上,但Linux將是下一個。如何檢查可用USB端口的版本?
是否有如下簡單功能:int GetUsbVersion()
?
我不需要像libusb那樣複雜的任何東西,但爲了防止它使用哪些函數?
我需要從C++程序檢查運行程序的系統上可用的USB端口版本。
現在我需要它在Windows上,但Linux將是下一個。如何檢查可用USB端口的版本?
是否有如下簡單功能:int GetUsbVersion()
?
我不需要像libusb那樣複雜的任何東西,但爲了防止它使用哪些函數?
在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 controllers
下Device 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/aa394506(v=vs.85).aspx
http://www.powertheshell.com/reference/wmireference/root/cimv2/win32_usbhub/
https://gallery.technet.microsoft.com/scriptcenter/5e2b2a59-84ec-4df2-a61d-70a6bf739578 - 腳本USB列表中心信息
https://blogs.msdn.microsoft.com/powershell/2007/02/24/displaying-usb-devices-using-wmi/
https://msdn.microsoft.com/en-us/library/dn449417(v=winembedded.82).aspx
How do I access information in Windows Device Manager in C++?
https://stackoverflow.com/questions/42160635/how-to-determine-usb-port-version-on- windows – sailfish009
@ sailfish009:他們提出了USBView,它是一個完整的GUI應用程序。我正在尋找從C++程序調用的低級函數。 – Pietro
https://github.com/Microsoft/Windows-driver-samples/tree/master/usb/usbview在鏈接中,有一個功能。 – sailfish009