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

时间:2013-12-25 14:03:13

标签: linux windows usb

如何在Windows和Linux中枚举和识别(获取pid,vid和串行)FT232R芯片。我需要: 1.在程序开始时枚举已插入的设备 2.检测usb设备的插入 3.获取PID,VID,串行

我需要在Windows和Linux中这样做。我知道有libusb用于windows和linux,但我没有那么多的USB经验。代码示例最好。

1 个答案:

答案 0 :(得分:0)

您应该使用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没有想法.. :(

希望这会有所帮助..