📄 usb.cpp
字号:
//////////////////////////////////////////////////////////////////////
//
// USBDevice1.cpp: implementation of the USBDevice class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "USB.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
static USBDevice Device;
USBDevice::USBDevice()
{
}
USBDevice::~USBDevice()
{
}
extern "C"__declspec(dllexport) bool InputReport(unsigned char report[])
{
unsigned char i;
unsigned char Devicereport[15];
unsigned long BytesWritten;
for(i = 0; i < 15;i++)
Devicereport[i] = 0;
//Devicereport[2] = 0xff;
//Devicereport[3] = 0xff;
if(Device.GetDeviceHandler())
{
if(Device.ReadReportFromDevice(Device.Device_Report))
{
for(i = 0; i < 15; i++)
report[i] = Device.Device_Report[i];
//WriteFile(Device.DeviceHandler,Devicereport,15,&BytesWritten,NULL);
CloseHandle(Device.DeviceHandler);
return true;
}
else
{
CloseHandle(Device.DeviceHandler);
return FALSE;
}
}
else
{
CloseHandle(Device.DeviceHandler);
return false;
}
}
extern "C"__declspec(dllexport) bool OutputReport(unsigned char report[])
{
unsigned char Devicereport[15],i;
unsigned long BytesWritten;
for(i = 0; i < 15; i++)
Devicereport[i + 1] = report[i];
Devicereport[0] = 0;
Devicereport[1] = 0;
if(Device.GetDeviceHandler())
{
WriteFile(Device.DeviceHandler,Devicereport,15,&BytesWritten,NULL);
CloseHandle(Device.DeviceHandler);
return true;
}
else
{
CloseHandle(Device.DeviceHandler);
return false;
}
}
bool USBDevice::ReadReportFromDevice(unsigned char *p_Report)
{
unsigned long BytesRead;
if(ReadFile(DeviceHandler,p_Report,15,&BytesRead,NULL))
return TRUE;
else
return FALSE;
}
PCHAR USBDevice::GetDeviceHandler(void)
{
GUID guidHID;
HidD_GetHidGuid(&guidHID);
SP_DEVICE_INTERFACE_DATA strtInterfaceData;
strtInterfaceData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA);
BOOL bSuccess ;
DWORD index=0;
for(int i=0;i<10;i++)
{
HDEVINFO hDevInfo = SetupDiGetClassDevs(&guidHID,NULL,0,
DIGCF_PRESENT|DIGCF_DEVICEINTERFACE ); //获得设备信息群的地址
if(hDevInfo==INVALID_HANDLE_VALUE)
{
SetupDiDestroyDeviceInfoList(hDevInfo);
return NULL;
}
bSuccess= SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&guidHID,index,
&strtInterfaceData); //获得设备信息群内的一个设备
if (!bSuccess) //("查找USB设备出错!");
{
SetupDiDestroyDeviceInfoList(hDevInfo);
return NULL;
}
else
{
if(strtInterfaceData.Flags == SPINT_ACTIVE )
if(VerifyDeviceID(hDevInfo,strtInterfaceData))
{
SetupDiDestroyDeviceInfoList(hDevInfo);
return PCHAR(0xff);
}
SetupDiDestroyDeviceInfoList(hDevInfo);
}
index++;
}
return NULL;
}
PCHAR USBDevice::VerifyDeviceID(HDEVINFO hDevInfo, SP_DEVICE_INTERFACE_DATA strtInterfaceData)
{
PSP_DEVICE_INTERFACE_DETAIL_DATA strtDetailData;
DWORD strSzie=0,requiesize=0;
SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,NULL,0,&strSzie,NULL);
requiesize=strSzie;
strtDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiesize);
strtDetailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
SP_DEVINFO_DATA infodata;
infodata.cbSize=sizeof(SP_DEVINFO_DATA);
if (!SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,
strtDetailData,strSzie,&requiesize,NULL))
{
//ShowMessage("查找设备路径时出错!");
SetupDiDestroyDeviceInfoList(hDevInfo);
free(strtDetailData);
return NULL;
}
HANDLE hCom = CreateFile (
strtDetailData->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING, 0,
NULL);
if (hCom == INVALID_HANDLE_VALUE)
{
//无法打开通信端口。不能读取设备信息!
SetupDiDestroyDeviceInfoList(hDevInfo);
free(strtDetailData);
return NULL;
}
//打开通信端口成功!
HIDD_ATTRIBUTES strtAttrib;
//读取设备的标识...
strtAttrib.Size=sizeof(HIDD_ATTRIBUTES);
if (!HidD_GetAttributes(hCom,&strtAttrib))
{
//"查询设备状态时出错!
CloseHandle(hCom);
free(strtDetailData);
return NULL;
}
if((strtAttrib.VendorID == 0x925) && (strtAttrib.ProductID== 0x4321))
{
DeviceHandler = hCom;
free(strtDetailData);
return PCHAR(0xff);
}
else
{
free(strtDetailData);
return NULL;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -