USB HIDÉ豸¶Áд´úÂëʵÏÖc++£¨4£©
 
- UID
- 1029342
- ÐÔ±ð
- ÄÐ
|

USB HIDÉ豸¶Áд´úÂëʵÏÖc++£¨4£©
bool MCDHid::findMCDHid()
{
int vendorID = VENDOR_ID;
int productID = PRODUCT_ID;
DWORD required;
GUID hidGuid;
HDEVINFO hDevInfo;
SP_DEVICE_INTERFACE_DATA devInfoData;
int memberIndex = 0;
LONG result;
bool lastDevice = false;
DWORD length;
PSP_DEVICE_INTERFACE_DETAIL_DATA detailData = NULL;
bool deviceDetected = false;
HidD_GetHidGuid(&hidGuid);
hDevInfo = SetupDiGetClassDevs
(&hidGuid,
NULL,
NULL,
DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
//µ±Ó¦ÓóÌÐò²»ÔÙÐèҪʹÓÃSetupDiGetClassDevsº¯ÊýµÄ´«»ØÖµhDevInfoËùÖ¸µÄÊý×éʱ£¬Ó¦¸Ãµ÷ÓÃSetupDiDeStroyDeviceInfoListº¯ÊýÀ´ÊÍ·Å×ÊÔ´
if(hDevInfo == INVALID_HANDLE_VALUE)
{
//printf("Failed to open device handle!");
return false;
}
devInfoData.cbSize = sizeof(devInfoData);
do
{
result = SetupDiEnumDeviceInterfaces(
hDevInfo,
0,
&hidGuid,
memberIndex,
&devInfoData);
if (result != 0)
{
result = SetupDiGetDeviceInterfaceDetail(
hDevInfo,
&devInfoData,
NULL,
0,
&length,
NULL);
detailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(length);
if(!detailData)
{
//printf("Device information allacation failed!");
return false;
}
detailData -> cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
result = SetupDiGetDeviceInterfaceDetail(
hDevInfo,
&devInfoData,
detailData,
length,
&required,
NULL);
if(!result)
{
//printf("Device information reallocation failed!");
return false;
}
_hidDevice.HidDevice = CreateFile(
detailData->DevicePath,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
_hidDevice.Attributes.Size = sizeof(HIDD_ATTRIBUTES);
result = HidD_GetAttributes(
_hidDevice.HidDevice,
&_hidDevice.Attributes);
if ((_hidDevice.Attributes.VendorID == vendorID) && (_hidDevice.Attributes.ProductID == productID))
{
int status;
PHIDP_PREPARSED_DATA PreparsedData ;
deviceDetected = true;
//»ñÈ¡USBÉ豸µÄÔ¤½âÎöÊý¾Ý
result = HidD_GetPreparsedData(_hidDevice.HidDevice,&PreparsedData);
if(!result)
{
//printf("ÎÞ·¨»ñÈ¡USBÉ豸µÄÔ¤½âÎöÊý¾Ý!");
return false;
}
status= HidP_GetCaps(PreparsedData, &_hidDevice.Caps);
_fUsbCommRunning = true;
HidD_FreePreparsedData(PreparsedData);
PreparsedData = NULL;
}
else
{
//printf("ûÓÐÕÒµ½É豸!");
closeMCDHid();
}
free(detailData);
detailData = NULL;
}
else
{
lastDevice = true;
}
memberIndex = memberIndex + 1;
}while((lastDevice == false)&&(deviceDetected == false));
SetupDiDestroyDeviceInfoList(hDevInfo);
return deviceDetected;
} |
|
|
|
|
|