【问题标题】:USB device detection - Windows & Linux (FT232R)USB 设备检测 - Windows 和 Linux (FT232R)
【发布时间】:2013-12-25 14:03:13
【问题描述】:

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

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

【问题讨论】:

    标签: linux windows usb


    【解决方案1】:

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

    希望这会有所帮助..

    【讨论】:

    • 这将有助于“识别”部分。检测何时插入了新的 USB 设备。
    • 我发布的“注册设备通知”链接解释了每当插入或移除设备时 WM_Devicechange 通知。您必须创建不可见的窗口并听取这些通知并根据您的要求对其进行操作。
    • 哦。对不起!没读好。我想我在一个主题中同时发布 linux 和 windows 问题时犯了一个错误。一旦我能够测试所有内容,我就会接受答案。节日快乐
    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多