zoukankan      html  css  js  c++  java
  • USB设备读取的相关问题

    读取USB设备失败可能的原因:

    1.GUID不对,使用HidD_GetHidGuid获取HID的GUID。

    2.参数索引没有赋值。

    3.SP_INTERFACE_DEVICE_DATA变量没有初始化

    4.PSP_INTERFACE_DEVICE_DETAIL_DATA 变量没有初始化。

    下面是完整的打开设备代码:

    代码
     1 BOOL OpenDevice(HANDLE& handle, WORD wVID, WORD wPID)
     2 {
     3     BOOL bRet = false;
     4     ::GUID hidGuid;
     5     ::HDEVINFO hardwareDeviceInfo;
     6     ::SP_INTERFACE_DEVICE_DATA deviceInfoData;
     7     ::PSP_INTERFACE_DEVICE_DETAIL_DATA functionClassDeviceData = NULL;
     8     ::ULONG predictedLength = 0;
     9     ::ULONG requiredLength = 0;
    10 
    11     handle = INVALID_HANDLE_VALUE;
    12 
    13     deviceInfoData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);
    14     ::HidD_GetHidGuid(&hidGuid);
    15     hardwareDeviceInfo = ::SetupDiGetClassDevs(&hidGuid,NULL,NULL,(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));
    16 
    17     if(hardwareDeviceInfo == INVALID_HANDLE_VALUE) 
    18     { 
    19         //Insert error handling here. 
    20         return   0
    21     }
    22 
    23     //枚举当前USB设备,与VID,PID对比找到当前设备
    24     for(int i=0;i<128;i++)
    25     {
    26         if (!SetupDiEnumDeviceInterfaces(hardwareDeviceInfo, 0&hidGuid, i, &deviceInfoData)) 
    27             continue;
    28 
    29         SetupDiGetDeviceInterfaceDetail(hardwareDeviceInfo, &deviceInfoData, NULL, 0&requiredLength, NULL);
    30         predictedLength = requiredLength;
    31         functionClassDeviceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(predictedLength);
    32 
    33         if (!functionClassDeviceData) 
    34             continue;
    35         functionClassDeviceData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
    36         if (!SetupDiGetDeviceInterfaceDetail (hardwareDeviceInfo, &deviceInfoData, functionClassDeviceData, predictedLength, &requiredLength, NULL)) 
    37             break;
    38 
    39         handle = CreateFile(functionClassDeviceData->DevicePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    40 
    41         if (handle != INVALID_HANDLE_VALUE)
    42         {
    43             HIDD_ATTRIBUTES attri;
    44             HidD_GetAttributes(handle, &attri);
    45             
    46             if ((attri.VendorID == wVID) && (attri.ProductID == wPID))
    47             {
    48                 AfxMessageBox(_T("Find"));
    49                 bRet = TRUE;
    50                 break;
    51             }
    52         }
    53     }
    54     SetupDiDestroyDeviceInfoList(hardwareDeviceInfo);
    55     return bRet;
    56 }
  • 相关阅读:
    欧拉函数 || [SDOI2008]仪仗队 || BZOJ 2190 || Luogu P2158
    欧拉函数 || Calculation 2 || HDU 3501
    并查集+时光倒流 || [JSOI2008]星球大战starwar || BZOJ 1015 || Luogu P1197
    并查集+启发式合并+LCA思想 || 冷战 || BZOJ 4668
    并查集+优先队列+启发式合并 || 罗马游戏 || BZOJ 1455 || Luogu p2713
    BZOJ-USACO被虐记
    #1
    BZOJ2441: [中山市选2011]小W的问题
    BZOJ2726: [SDOI2012]任务安排
    BZOJ1492: [NOI2007]货币兑换Cash
  • 原文地址:https://www.cnblogs.com/frischzenger/p/1878771.html
Copyright © 2011-2022 走看看