USB设备检测 – Windows&Linux(FT232R)

如何枚举和识别(获得PID,VID和串行)FT232R芯片在Windows和Linux。 我需要:1.在程序启动时枚举已插入的设备2.检测USB设备的插入3.获得PID,VID,串行

我需要在Windows和Linux中执行此操作。 我知道有Windows和Linux的libusb,但我没有那么多的USB使用经验。 代码示例将是最好的。

Solutions Collecting From Web of "USB设备检测 – Windows&Linux(FT232R)"

您应该使用Windows中的SetupAPI来获取设备信息,如硬件ID(包含vid和pid),并检测插入/拔出此链接中的示例注册设备通知

要使用SetupAPI,您可以使用下面的代码作为参考,并根据您的要求添加/修改。

#include "stdafx.h" #include <stdlib.h> #include <Windows.h> // Link to setapi.lib #include <setupapi.h> void GetDeviceInfo() { GUID gUSBGuid; DWORD ClassGuidListSize = 1; DWORD RequiredSize = NULL; //if device shown under "USB" node in Devmgr, else see inf for classname BOOL bres = SetupDiClassGuidsFromName((PCTSTR)"USB", &gUSBGuid,//GUID will get populated ClassGuidListSize, &RequiredSize); HDEVINFO hDevInfo = SetupDiGetClassDevs(&gUSBGuid,NULL,NULL,DIGCF_PRESENT); if (INVALID_HANDLE_VALUE != hDevInfo) { BOOL bResult = FALSE; SP_DEVICE_INTERFACE_DATA tDeviceInterfaceData; tDeviceInterfaceData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA); for (int nMemberIndex = 0; TRUE ; nMemberIndex++) { SP_DEVINFO_DATA tSpDevInfoData; tSpDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); //Get the tSpDevInfoData for the instance ID bResult = SetupDiEnumDeviceInfo(hDevInfo,nMemberIndex,&tSpDevInfoData); if(bResult) { TCHAR *szHardwareId = new TCHAR[128] ; DWORD dwtype = REG_SZ; SetupDiGetDeviceRegistryProperty(hDevInfo,&tSpDevInfoData,SPDRP_HARDWAREID ,&dwtype,(PBYTE szHardwareId,256,NULL); //code to process szHardwareId delete szHardwareId; break; } } } } 

我没有Linux的想法.. 🙁

希望这可以帮助..