Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
USB设备检测-Windows&;Linux(FT232R)_Linux_Windows_Usb - Fatal编程技术网

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

USB设备检测-Windows&;Linux(FT232R),linux,windows,usb,Linux,Windows,Usb,如何在windows和linux中枚举和识别(获取pid、vid和串行)FT232R芯片。我需要: 1.在程序开始时,枚举已插入的设备 2.检测usb设备的插拔 3.获取PID、VID、串行 我需要在windows和linux中这样做。我知道windows和linux都有libusb,但我对USB没有太多经验。代码示例最好。您应该在Windows中使用SetupAPI来获取设备信息,如硬件id(同时包含vid和pid),并检测插拔情况。请参见此链接中的示例 要使用SetupAPI,您可以使用以

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


我需要在windows和linux中这样做。我知道windows和linux都有libusb,但我对USB没有太多经验。代码示例最好。

您应该在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;
          }

    }

  }
}
#包括“stdafx.h”
#包括
#包括
//链接到setapi.lib
#包括
void GetDeviceInfo()
{
GUID gUSBGuid;
DWORD ClassGuidListSize=1;
DWORD RequiredSize=NULL;
//如果设备显示在Devmgr中的“USB”节点下,则请参阅inf以获取类名
BOOL-bres=SetupDiClassGuidsFromName((PCTSTR)“USB”,
&gUSBGuid,//将填充GUID
ClassGuidListSize,
&所需尺寸);
HDEVINFO HDEVINFO=SetupDiGetClassDevs(&gUSBGuid,NULL,NULL,DIGCF_PRESENT);
if(无效的句柄值!=hDevInfo)
{
BOOL-bResult=FALSE;
SP_设备_接口_数据tDeviceInterface数据;
tDeviceInterfaceData.cbSize=sizeof(SP_接口_设备_数据);
for(int-nMemberIndex=0;TRUE;nMemberIndex++)
{
SP_DEVINFO_数据TSPDevInfo数据;
tspdevinfo.cbSize=sizeof(SP_DEVINFO_数据);
//获取实例ID的tspdevinfo数据
bResult=SetupDiEnumDeviceInfo(hDevInfo、nMemberIndex和tspdevinfo数据);
if(bResult)
{
TCHAR*szHardwareId=新的TCHAR[128];
DWORD dwtype=REG_SZ;
SetupDiGetDeviceRegistrProperty(HDeInfo和TSPDeInfo数据、SPDRP_硬件ID
,&dwtype,(PBYTE szHardwareId,256,NULL);
//处理szHardwareId的代码
删除szHardwareId;
打破
}
}
}
}
我对Linux没有任何想法..:(


希望这有帮助。

这将有助于“识别”部分。如何检测何时插入新的USB设备。我发布的链接“注册设备通知”exlplains WM_Devicechange通知无论何时插入或删除设备。您必须创建不可见窗口,并根据您的要求收听这些通知并采取行动。噢。对不起!读得不太好。我猜我在一个主题中发布linux和windows问题时犯了一个错误。一旦我能够测试所有内容,我将接受新年快乐