ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:16.88KB ,
资源ID:673014      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/673014.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++ MFC界面读写USB HID设备数据程序.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、C+ MFC界面读写USB HID设备数据程序第一步:列举所有的HID设备:m_ctllHIDdevices.ResetContent(); /这是MFC里面一个list控件,用来显示所有的HID设备的,如果你没有界面,可以不需要此行UpdateData(FALSE); /更新界面CString temp;int Count = 0; /Total number of devices foundDWORD strSize=0,requiredSize=0;BOOL result1,result2;ULONG DeviceInterfaceDetailDataSize;/定义一些变量,以后会用到

2、SP_DEVINFO_DATA DeviceInfoData;SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;/PSP_DEVICE_INTERFACE_DETAIL_DATA test;/第一步:获取deviceIDGUID deviceId;HidD_GetHidGuid(&deviceId);/第二步:获取设备信息HDEVINFO handle;handle = SetupDiGetClassDevs(&deviceId, NUL

3、L, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT); /Get only HID devices/第三步:对所有的设备进行枚举/SetupDiEnumDeviceInterfaces();result1=false; /定义一些变量result2=false;CString temp11=;doDeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);result1 = SetupDiEnumDeviceInterfaces(handle,NULL, / IN PSP_DEVINFO_

4、DATA DeviceInfoData, OPTIONAL&deviceId,Count,&DeviceInterfaceData);/获得设备详细数据(初步)SetupDiGetDeviceInterfaceDetail(handle,&DeviceInterfaceData,NULL,0,&strSize,NULL);requiredSize=strSize;DeviceInterfaceDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredSize);DeviceInterfaceDetailData-cbSize=siz

5、eof(SP_DEVICE_INTERFACE_DETAIL_DATA);DeviceInfoData.cbSize=s第一步:列举所有的HID设备:m_ctllHIDdevices.ResetContent(); /这是MFC里面一个list控件,用来显示所有的HID设备的,如果你没有界面,可以不需要此行UpdateData(FALSE); /更新界面CString temp;int Count = 0; /Total number of devices foundDWORD strSize=0,requiredSize=0;BOOL result1,result2;ULONG Device

6、InterfaceDetailDataSize;/定义一些变量,以后会用到SP_DEVINFO_DATA DeviceInfoData;SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;/PSP_DEVICE_INTERFACE_DETAIL_DATA test;/第一步:获取deviceIDGUID deviceId;HidD_GetHidGuid(&deviceId);/第二步:获取设备信息HDEVINFO handle;handle

7、 = SetupDiGetClassDevs(&deviceId, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT); /Get only HID devices/第三步:对所有的设备进行枚举/SetupDiEnumDeviceInterfaces();result1=false; /定义一些变量result2=false;CString temp11=;doDeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);result1 = SetupDiEnumDeviceInte

8、rfaces(handle,NULL, / IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL&deviceId,Count,&DeviceInterfaceData);/获得设备详细数据(初步)SetupDiGetDeviceInterfaceDetail(handle,&DeviceInterfaceData,NULL,0,&strSize,NULL);requiredSize=strSize;DeviceInterfaceDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredSize)

9、;DeviceInterfaceDetailData-cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA);/再次获得详细数据result2=SetupDiGetDeviceInterfaceDetail(handle,&DeviceInterfaceData,DeviceInterfaceDetailData,strSize,&requiredSize,&DeviceInfoData);/获得设备路径(最重要的部分)temp=DeviceInterfaceDet

10、ailData-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=Dev

11、iceInterfaceDetailData-DevicePath;UpdateData(FALSE);m_ctllHIDdevices.AddString(temp);Count+; while (result1);UpdateData(false);第二步:循环读取HID设备数据(根据用户提供的HID的vendorID和productID),并且把字节解码成二进制,在MFC界面上用LED展示:为了不影响主线程的运行,我把读取数据的操作,放在一个子线程里!每隔50ms去读取一次数据!首先创建一个线程:HANDLE hThread1;bStopHID=false; /这个变量,以后用来停止线程

12、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;CString temp;CString DevicePath;temp=;int Count = 0; /Total number of d

13、evices foundDWORD strSize=0,requiredSize=0;BOOL result1,result2;ULONG DeviceInterfaceDetailDataSize;SP_DEVINFO_DATA DeviceInfoData;SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;/PSP_DEVICE_INTERFACE_DETAIL_DATA test;/1GUID deviceId;HidD_GetHi

14、dGuid(&deviceId);int venderID=p-v_eVendorID; /从窗口里获取用户输入的VendorID int productID=p-v_eProductID;/从窗口里获取用户输入的ProductIDunsigned char inbuffer2; /用来存放读取的数据,请在这里定义你自己需要的长度,我每次读一个字节进来unsigned long numBytesReturned;HIDD_ATTRIBUTES devAttr;PHIDP_PREPARSED_DATA PreparsedData;HIDP_CAPS Capabilities;int readVa

15、lue;bool LED;int flag=0;/2HDEVINFO handle;handle = SetupDiGetClassDevs(&deviceId, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT); /Get only HID devicesint i=0;int j=p-m_ctllHIDdevices.GetCount();for (i=0;im_ctllHIDdevices.GetCount();i+)p-m_ctllHIDdevices.GetText(i,temp);DevicePath=temp;/CreateFile是非常重要的一步,用来建立于HID通信的句柄HANDLE hCom = CreateFile (DevicePath,GENERIC_READ | GENERIC_WRITE

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

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