【发布时间】:2013-12-25 14:03:13
【问题描述】:
如何在 windows 和 linux 中枚举和识别(获取 pid、vid 和串行)FT232R 芯片。我需要: 1.在程序开始时枚举已经插入的设备 2.检测USB设备的插入 3. 获取PID、VID、Serial
我需要在 windows 和 linux 中这样做。我知道有适用于 Windows 和 linux 的 libusb,但我对 USB 没有太多经验。最好是代码示例。
【问题讨论】:
如何在 windows 和 linux 中枚举和识别(获取 pid、vid 和串行)FT232R 芯片。我需要: 1.在程序开始时枚举已经插入的设备 2.检测USB设备的插入 3. 获取PID、VID、Serial
我需要在 windows 和 linux 中这样做。我知道有适用于 Windows 和 linux 的 libusb,但我对 USB 没有太多经验。最好是代码示例。
【问题讨论】:
您应该使用 Windows 中的 SetupAPI 来获取硬件 ID 等设备信息(同时包含 vid 和 pid)并检测插入/拔出,请参阅此链接中的示例 Registering for Device Notification
要使用 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..:(
希望这会有所帮助..
【讨论】: