• 大小: 1.78MB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2023-08-11
  • 语言: C/C++
  • 标签: HID  USB  

资源简介

HID USB通信的动态库,根据ProductID和VendorID来识别设备,可以直接调用使用; 压缩包包含源代码,VC++开发,应用于Window系统中程序和HID设备通信;

资源截图

代码片段和文件信息

// HIDUSB.cpp : 定义 DLL 应用程序的入口点。
//

#include “stdafx.h“
#include “hidusb.h“
extern “C“ {
// Declare the C libraries used
#include “setupapi.h“ // Must link in setupapi.lib
#include “hidsdi.h“ // Must link in hid.lib
}

#ifdef _MANAGED
#pragma managed(push off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule
                       DWORD  ul_reason_for_call
                       LPVOID lpReserved
 )
{
    return TRUE;
}

BOOL __stdcall DLLAPI SearchHIDDev(unsigned short nVendorID unsigned short nProductID int * piDevNum char * acInfo){
struct _GUID GUID;
int iRetErr;
SP_INTERFACE_DEVICE_DATA DeviceInterfaceData;
HANDLE PnPHandle=NULLHIDHandle=NULL;
struct {
DWORD cbSize; 
char DevicePath[256];
} FunctionClassDeviceData;
HIDD_ATTRIBUTES HIDAttributes;
SECURITY_ATTRIBUTES SecurityAttributes;
int Device;
ULONG BytesReturned;
bool Success;
* piDevNum = 0;
    
// Initialize the GUID array and setup the security attributes for Win2000
HidD_GetHidGuid(&GUID);
SecurityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES); 
SecurityAttributes.lpSecurityDescriptor = NULL; 
SecurityAttributes.bInheritHandle = false; 

// Get a handle for the Plug and Play node and request currently active devices
PnPHandle = SetupDiGetClassDevs(&GUID NULL NULL DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
if (int(PnPHandle) == -1) {
strcpy(acInfo“Could not attach to PnP node.“);//printf(“Could not attach to PnP node“); 
iRetErr = GetLastError();
return iRetErr; 
}

// Lets look for a maximum of 22 Devices
for (Device = 0; Device < 22; Device++) {
// Initialize our data
DeviceInterfaceData.cbSize = sizeof(DeviceInterfaceData);
// Is there a device at this table entry
Success = SetupDiEnumDeviceInterfaces(PnPHandle NULL &GUID Device &DeviceInterfaceData);
if (Success) {
// There is a device here get it‘s name
FunctionClassDeviceData.cbSize = 5;
Success = SetupDiGetDeviceInterfaceDetail(PnPHandle &DeviceInterfaceData 
(PSP_INTERFACE_DEVICE_DETAIL_DATA)&FunctionClassDeviceData 256 &BytesReturned NULL);
if (!Success) {
strcpy(acInfo“Could not find the system name for this device.“);
iRetErr = GetLastError();
if(PnPHandle)
                SetupDiDestroyDeviceInfoList(PnPHandle);
return iRetErr; 
}
// Can now open this device
HIDHandle = CreateFile(FunctionClassDeviceData.DevicePath GENERIC_READ|GENERIC_WRITE 
FILE_SHARE_READ|FILE_SHARE_WRITE &SecurityAttributes OPEN_EXISTING 0 NULL);
if (HIDHandle == INVALID_HANDLE_VALUE) 
sprintf(acInfo“Could not open HID #%d Errorcode = %d\n“ Device GetLastError());
else {
// Get the information about this HID
Success = HidD_GetAttributes(HIDHandle &HIDAttributes);
if (!Success) { 
strcpy(acInfo“Could not get HID attributes.“); 
iRetErr = GetLastError();
if(PnPHandle)
                SetupDiDestroyDeviceInfoList(PnPHa

评论

共有 条评论