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

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4148353.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;/CreateFi

16、le是异常主要的一步,用来树立于HID通讯的句柄HANDLE hCom = CreateFile (DevicePath,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING, 0,NULL);if (hCom = INVALID_HANDLE_VALUE)/AfxMessageBox(Invalide Device Path.);continue;devAttr.Size=sizeof(HIDD_ATTRIBUTES);if (!HidD_GetAttributes(hCom,&d

17、evAttr)CloseHandle(hCom);AfxMessageBox(Cannot get the parameters of the HID.);return 0;/temp.Format(Vendor ID: %d, Product ID:%d,devAttr.VendorID,devAttr.ProductID); /Compare with the Vendor ID and Product ID from Nakamura-san/AfxMessageBox(temp);if (!HidD_GetPreparsedData(hCom,&PreparsedData)CloseH

18、andle(hCom);AfxMessageBox(Cannot get the Preparsed Data.);return 0;if(!HidP_GetCaps(PreparsedData,&Capabilities)CloseHandle(hCom);AfxMessageBox(Cannot get the Cap Data.);return 0;if (devAttr.VendorID = venderID & devAttr.ProductID = productID)while(1)result1 = ReadFile(hCom, &inbuffer0, Capabilities

19、.InputReportByteLength, &numBytesReturned, 0);temp=inbuffer;/p-m_eDataRead=CString(inbuffer);/p-UpdateData(false);if(!result1)AfxMessageBox(Cannot Read Data.);return 0;readValue=inbuffer1;p-m_eDataRead.Format(%d,readValue);/下面是我把数据从10进制转换成二进制,并且点亮LED (一个字节有8个bits,可以点亮8个LEDfor (int k=0;km_sDynLED0.Sw

20、itchOff();elsep-m_sDynLED0.SwitchOn();else if (k=1)if (flag=0)p-m_sDynLED1.SwitchOff();elsep-m_sDynLED1.SwitchOn();else if (k=2)if (flag=0)p-m_sDynLED2.SwitchOff();elsep-m_sDynLED2.SwitchOn();else if (k=3)if (flag=0)p-m_sDynLED3.SwitchOff();elsep-m_sDynLED3.SwitchOn();else if (k=4)if (flag=0)p-m_sDy

21、nLED4.SwitchOff();elsep-m_sDynLED4.SwitchOn();else if (k=5)if (flag=0)p-m_sDynLED5.SwitchOff();elsep-m_sDynLED5.SwitchOn();else if (k=6)if (flag=0)p-m_sDynLED6.SwitchOff();elsep-m_sDynLED6.SwitchOn();else if (k=7)if (flag=0)p-m_sDynLED7.SwitchOff();elsep-m_sDynLED7.SwitchOn();p-UpdateData(false);:Sl

22、eep(50);/断定用户是否点击停滞按钮,若是,则退出if(p-bStopHID)AfxMessageBox(stopped.);return 0;if (i=j)AfxMessageBox(There is no such HID device.);return 0;第三步:向HID装备写数据(依据用户供给的HID的vendorID和productID),用户输入的是二进制数据:与读的程序一样,独一差别就是红色那部分!UpdateData(true);bStopHID=false;CString temp;CString DevicePath;temp=;int Count = 0; /T

23、otal number of devices 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 dev

24、iceId;HidD_GetHidGuid(&deviceId);int venderID=v_eVendorID;int productID=v_eProductID;unsigned char inbuffer2;unsigned long numBytesReturned;HIDD_ATTRIBUTES devAttr;PHIDP_PREPARSED_DATA PreparsedData;HIDP_CAPS Capabilities;int readValue;bool LED;int flag=0;inbuffer0=0; /把界面里的二进制转换成10进制inbuffer1=m_eBy

25、te0*1+m_eByte1*2+m_eByte2*4+m_eByte3*8+m_eByte4*16+m_eByte5*32+m_eByte6*64+m_eByte7*128;v_eDataToWrite=inbuffer1;UpdateData(false);/2HDEVINFO handle;handle = SetupDiGetClassDevs(&deviceId, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT); /Get only HID devicesint i=0;int j=m_ctllHIDdevices.GetCount();for (i=0;im_eDataRead=CString(inbuffer);/p-UpdateData(false);if(!result1)AfxMessageBox(Cannot Write Data.);return;AfxMessageBox(Suncess.);break;if (i=j)AfxMessageBox(There is no such HID device.);return;

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

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