C++ MFC界面读写USB HID设备数据程序.docx

上传人:b****3 文档编号:673014 上传时间:2022-10-12 格式:DOCX 页数:14 大小:16.88KB
下载 相关 举报
C++ MFC界面读写USB HID设备数据程序.docx_第1页
第1页 / 共14页
C++ MFC界面读写USB HID设备数据程序.docx_第2页
第2页 / 共14页
C++ MFC界面读写USB HID设备数据程序.docx_第3页
第3页 / 共14页
C++ MFC界面读写USB HID设备数据程序.docx_第4页
第4页 / 共14页
C++ MFC界面读写USB HID设备数据程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C++ MFC界面读写USB HID设备数据程序.docx

《C++ MFC界面读写USB HID设备数据程序.docx》由会员分享,可在线阅读,更多相关《C++ MFC界面读写USB HID设备数据程序.docx(14页珍藏版)》请在冰豆网上搜索。

C++ MFC界面读写USB HID设备数据程序.docx

C++MFC界面读写USBHID设备数据程序

第一步:

列举所有的HID设备:

m_ctllHIDdevices.ResetContent();//这是MFC里面一个list控件,用来显示所有的HID设备的,如果你没有界面,可以不需要此行

UpdateData(FALSE);//更新界面

CStringtemp;

intCount=0;//Totalnumberofdevicesfound

DWORDstrSize=0,requiredSize=0;

BOOLresult1,result2;

ULONGDeviceInterfaceDetailDataSize;

//定义一些变量,以后会用到

SP_DEVINFO_DATADeviceInfoData;

SP_DEVICE_INTERFACE_DATADeviceInterfaceData;

PSP_DEVICE_INTERFACE_DETAIL_DATADeviceInterfaceDetailData;

//PSP_DEVICE_INTERFACE_DETAIL_DATAtest;

//第一步:

获取deviceID

GUIDdeviceId;

HidD_GetHidGuid(&deviceId);

//第二步:

获取设备信息

HDEVINFOhandle;

handle=SetupDiGetClassDevs(&deviceId,NULL,NULL,DIGCF_DEVICEINTERFACE|DIGCF_PRESENT);//GetonlyHIDdevices

//第三步:

对所有的设备进行枚举

//SetupDiEnumDeviceInterfaces();

result1=false;//定义一些变量

result2=false;

CStringtemp11="";

do

{

DeviceInterfaceData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA);

result1=SetupDiEnumDeviceInterfaces(

handle,

NULL,//INPSP_DEVINFO_DATADeviceInfoData,OPTIONAL

&deviceId,

Count,

&DeviceInterfaceData

);

//获得设备详细数据(初步)

SetupDiGetDeviceInterfaceDetail(handle,

&DeviceInterfaceData,

NULL,

0,

&strSize,

NULL);

requiredSize=strSize;

DeviceInterfaceDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredSize);

DeviceInterfaceDetailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);

DeviceInfoData.cbSize=s第一步:

列举所有的HID设备:

m_ctllHIDdevices.ResetContent();//这是MFC里面一个list控件,用来显示所有的HID设备的,如果你没有界面,可以不需要此行

UpdateData(FALSE);//更新界面

CStringtemp;

intCount=0;//Totalnumberofdevicesfound

DWORDstrSize=0,requiredSize=0;

BOOLresult1,result2;

ULONGDeviceInterfaceDetailDataSize;

//定义一些变量,以后会用到

SP_DEVINFO_DATADeviceInfoData;

SP_DEVICE_INTERFACE_DATADeviceInterfaceData;

PSP_DEVICE_INTERFACE_DETAIL_DATADeviceInterfaceDetailData;

//PSP_DEVICE_INTERFACE_DETAIL_DATAtest;

//第一步:

获取deviceID

GUIDdeviceId;

HidD_GetHidGuid(&deviceId);

//第二步:

获取设备信息

HDEVINFOhandle;

handle=SetupDiGetClassDevs(&deviceId,NULL,NULL,DIGCF_DEVICEINTERFACE|DIGCF_PRESENT);//GetonlyHIDdevices

//第三步:

对所有的设备进行枚举

//SetupDiEnumDeviceInterfaces();

result1=false;//定义一些变量

result2=false;

CStringtemp11="";

do

{

DeviceInterfaceData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA);

result1=SetupDiEnumDeviceInterfaces(

handle,

NULL,//INPSP_DEVINFO_DATADeviceInfoData,OPTIONAL

&deviceId,

Count,

&DeviceInterfaceData

);

//获得设备详细数据(初步)

SetupDiGetDeviceInterfaceDetail(handle,

&DeviceInterfaceData,

NULL,

0,

&strSize,

NULL);

requiredSize=strSize;

DeviceInterfaceDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredSize);

DeviceInterfaceDetailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);

DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA);

//再次获得详细数据

result2=SetupDiGetDeviceInterfaceDetail(handle,

&DeviceInterfaceData,

DeviceInterfaceDetailData,

strSize,

&requiredSize,

&DeviceInfoData);

//获得设备路径(最重要的部分)

temp=DeviceInterfaceDetailData->DevicePath;

UpdateData(FALSE);

m_ctllHIDdevices.AddString(temp);

Count++;

}while(result1);

UpdateData(false);izeof(SP_DEVINFO_DATA);

//再次获得详细数据

result2=SetupDiGetDeviceInterfaceDetail(handle,

&DeviceInterfaceData,

DeviceInterfaceDetailData,

strSize,

&requiredSize,

&DeviceInfoData);

//获得设备路径(最重要的部分)

temp=DeviceInterfaceDetailData->DevicePath;

UpdateData(FALSE);

m_ctllHIDdevices.AddString(temp);

Count++;

}while(result1);

UpdateData(false);

第二步:

循环读取HID设备数据(根据用户提供的HID的vendorID和productID),并且把字节解码成二进制,在MFC界面上用LED展示:

为了不影响主线程的运行,我把读取数据的操作,放在一个子线程里!

每隔50ms去读取一次数据!

首先创建一个线程:

HANDLEhThread1;

bStopHID=false;//这个变量,以后用来停止线程

UpdateData(true);//更新界面,获取变量

UpdateData(false);

hThread1=CreateThread(NULL,0,Thread_Enable_Read,(LPVOID)this,NULL,NULL);

在线程的程序里:

CusbhidDlg*p=(CusbhidDlg*)pvParam;//获取主窗口的指针,用来调用主窗口的变量和函数

p->UpdateData(true);

p->bStopHID=false;

CStringtemp;

CStringDevicePath;

temp="";

intCount=0;//Totalnumberofdevicesfound

DWORDstrSize=0,requiredSize=0;

BOOLresult1,result2;

ULONGDeviceInterfaceDetailDataSize;

SP_DEVINFO_DATADeviceInfoData;

SP_DEVICE_INTERFACE_DATADeviceInterfaceData;

PSP_DEVICE_INTERFACE_DETAIL_DATADeviceInterfaceDetailData;

//PSP_DEVICE_INTERFACE_DETAIL_DATAtest;

//1

GUIDdeviceId;

HidD_GetHidGuid(&deviceId);

intvenderID=p->v_eVendorID;//从窗口里获取用户输入的VendorID

intproductID=p->v_eProductID;//从窗口里获取用户输入的ProductID

unsignedcharinbuffer[2];//用来存放读取的数据,请在这里定义你自己需要的长度,我每次读一个字节进来

unsignedlongnumBytesReturned;

HIDD_ATTRIBUTESdevAttr;

PHIDP_PREPARSED_DATAPreparsedData;

HIDP_CAPSCapabilities;

intreadValue;

boolLED;

intflag=0;

//2

HDEVINFOhandle;

handle=SetupDiGetClassDevs(&deviceId,NULL,NULL,DIGCF_DEVICEINTERFACE|DIGCF_PRESENT);//GetonlyHIDdevices

inti=0;

intj=p->m_ctllHIDdevices.GetCount();

for(i=0;im_ctllHIDdevices.GetCount();i++)

{

p->m_ctllHIDdevices.GetText(i,temp);

DevicePath=temp;

//CreateFile是非常重要的一步,用来建立于HID通信的句柄

HANDLEhCom=CreateFile(

DevicePath,

GENERIC_READ|GENERIC_WRITE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1