版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第一步:列舉所有的HID裝備:m_ctllHIDdevices.ResetContent();/這是MFC里面一個list控件,用來顯示所有的HID裝備的,假如你沒有界面,可以不須要此行UpdateData(FALSE);/更新界面CStringtemp;intCount=0;/TotalnumberofdevicesfoundDWORDstrSize=0,requiredSize=0;BOOLresult1,result2;ULONGDeviceInterfaceDetailDataSize;/界說一些變量,今后會用到SP_DEVINFO_DATADeviceInfoData;SP_DEVI
2、CE_INTERFACE_DATADeviceInterfaceData;PSP_DEVICE_INTERFACE_DETAIL_DATADeviceInterfaceDetailData;/PSP_DEVICE_INTERFACE_DETAIL_DATAest;第一步:獲取deviceIDGUIDdeviceId;HidD_GetHidGuid(&deviceId);/第二步:獲取裝備信息HDEVINFOhandle;handle=SetupDiGetClassDevs(&deviceId,NULL,NULL,DIGCF_DEVICEINTERFACE|DIGCF_PRESE
3、NT);/GetonlyHIDdevices/第三步:對所有的裝備進行列舉SetupDiEnumDeviceInterfaces();result1=false;/界說一些變量result2=false;CStringtemp11=""doDeviceInterfaceData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA);result1=SetupDiEnumDeviceInterfaces(handle,NULL,/INPSP_DEVINFO_DATADeviceInfoData,OPTIONAL&deviceId,Count,
4、&DeviceInterfaceData);/獲得裝備具體數(shù)據(jù)(初步)SetupDiGetDeviceInterfaceDetail(handle,&DeviceInterfaceData,NULL,0,&strSize,NULL);requiredSize=strSize;DeviceInterfaceDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredSize);DeviceInterfaceDetailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAI
5、L_DATA);DeviceInfoData.cbSize=s第一步:列舉所有的HID裝備:m_ctllHIDdevices.ResetContent();/這是MFC里面一個list控件,用來顯示所有的HID裝備的,假如你沒有界面,可以不須要此行UpdateData(FALSE);/更新界面CStringtemp;intCount=0;/TotalnumberofdevicesfoundDWORDstrSize=0,requiredSize=0;BOOLresult1,result2;ULONGDeviceInterfaceDetailDataSize;/界說一些變量,今后會用到SP_DEV
6、INFO_DATADeviceInfoData;SP_DEVICE_INTERFACE_DATADeviceInterfaceData;PSP_DEVICE_INTERFACE_DETAIL_DATADeviceInterfaceDetailData;/PSP_DEVICE_INTERFACE_DETAIL_DATAtest;/第一步:獲取deviceIDGUIDdeviceId;HidD_GetHidGuid(&deviceId);/第二步:獲取裝備信息HDEVINFOhandle;handle=SetupDiGetClassDevs(&deviceId,NULL,NULL,
7、DIGCF_DEVICEINTERFACE|DIGCF_PRESENT);/GetonlyHIDdevices/第三步:對所有的裝備進行列舉/SetupDiEnumDeviceInterfaces();result1=false;/界說一些變量result2=false;CStringtemp11=""doDeviceInterfaceData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA);result1=SetupDiEnumDeviceInterfaces(handle,NULL,/INPSP_DEVINFO_DATADeviceInf
8、oData,OPTIONAL&deviceId,Count,&DeviceInterfaceData);/獲得裝備具體數(shù)據(jù)(初步)SetupDiGetDeviceInterfaceDetail(handle,&DeviceInterfaceData,NULL,0,&strSize,NULL);requiredSize=strSize;DeviceInterfaceDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredSize);DeviceInterfaceDetailData->cbSiz
9、e=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA)/再次獲得具體數(shù)據(jù)result2=SetupDiGetDeviceInterfaceDetail(handle,&DeviceInterfaceData,DeviceInterfaceDetailData,strSize,&requiredSize,&DeviceInfoData);/獲得裝備路徑(最主要的部分)temp=DeviceInterfaceDetailData->DevicePat
10、h;UpdateData(FALSE);m_ctllHIDdevices.AddString(temp);Count+;while(result1);UpdateData(false);izeof(SP_DEVINFO_DATA/再次獲得具體數(shù)據(jù)result2=SetupDiGetDeviceInterfaceDetail(handle,&DeviceInterfaceData,DeviceInterfaceDetailData,strSize,&requiredSize,&DeviceInfoData);/獲得裝備路徑(最主要的部分)temp=DeviceInterf
11、aceDetailData->DevicePath;UpdateData(FALSE);m_ctllHIDdevices.AddString(temp);Count+;while(result1);UpdateData(false);第二步:輪回讀取HID裝備數(shù)據(jù)(依據(jù)用戶供給的HID的vendorlD和productID),并且把字節(jié)解碼成二進制,在MFCF面上用LED展現(xiàn):為了不影響主線程的運行,我把讀取數(shù)據(jù)的操縱,放在一個子線程里!每隔50ms去讀取一次數(shù)據(jù)!起首創(chuàng)建一個線程:HANDLEhThread1;bStopHID=false;/這個變量,今后用來停滯線程UpdateDat
12、a(true);/更新界面,獲取變量UpdateData(false);hThread1=CreateThread(NULL,0,Thread_Enable_Read,(LPVOID)this,NULL,NULL);在線程的程序里:CusbhidDlg*p=(CusbhidDlg*)pvParam;獲取主窗口的指針,用來挪用主窗口的變量和函數(shù)p->UpdateData(true);p->bStopHID=false;CStringtemp;CStringDevicePath;temp=""intCount=0;/Totalnumberofdevicesfound
13、DWORDstrSize=0,requiredSize=0;BOOLresult1,result2;ULONGDeviceInterfaceDetailDataSize;SP_DEVINFO_DATADeviceInfoData;SP_DEVICE_INTERFACE_DATADeviceInterfaceData;PSP_DEVICE_INTERFACE_DETAIL_DATADeviceInterfaceDetailData;PSP_DEVICE_INTERFACE_DETAIL_DATAtest;/1GUIDdeviceId;HidD_GetHidGuid(&deviceId);
14、intvenderID=p->v_eVendorID;/從窗口里獲取用戶輸入的VendorlDintproductID=p->v_eProductID;/從窗口里獲取用戶輸入的ProductIDunsignedcharinbuffer2;/用來存放讀取的數(shù)據(jù),請在這里界說你本身須要的長度,我每次讀一個字節(jié)進來unsignedlongnumBytesReturned;HIDD_ATTRIBUTESdevAttr;PHIDP_PREPARSED_DATAPreparsedData;HIDP_CAPSCapabilities;intreadValue;boolLED;intflag=0;
15、2HDEVINFOhandle;handle=SetupDiGetClassDevs(&deviceId,NULL,NULL,DIGCF_DEVICEINTERFACEDIGCF_PRESENT);/GetonlyHIDdevicesinti=0;intj=p->m_ctllHIDdevices.GetCount();for(i=0;i<p->m_ctllHIDdevices.GetCount();i+)p->m_ctllHIDdevices.GetText(i,temp);DevicePath=temp;/CreateFile是異常主要的一步,用來樹立于HID
16、通訊的句柄HANDLEhCom=CreateFile(DevicePath,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING0,NULL);if(hCom=INVALID_HANDLE_VALUE)AfxMessageBox("InvalideDeviceHID)return0;temp.Format("VendorID: %d, ProductPath)continue;devAttr.Size=sizeof(HIDD_ATTRIBUTES);if(!HidD_Ge
17、tAttributes(hCom,&devAttr)CloseHandle(hCom);AfxMessageBox("CannotgettheparametersoftheID:%d”,devAttr.VendorID,devAttr.ProductID);/ComparewiththeVendorIDandProductIDfromNakamura-sanAfxMessageBox(temp);if(!HidD_GetPreparsedData(hCom,&PreparsedData)CloseHandle(hCom);AfxMessageBox("Can
18、notgetthePreparsedData)return0;if(!HidP_GetCaps(PreparsedData,&Capabilities)CloseHandle(hCom);AfxMessageBox("CannotgettheCapData)return0;if(devAttr.VendorID=venderID&&devAttr.ProductID=productID)while(1)result1=ReadFile(hCom,&inbuffer0,Capabilities.InputReportByteLength,&num
19、BytesReturned,0);temp=inbuffer;p->m_eDataRead=CString(inbuffer);p->UpdateData(false);if(!result1)AfxMessageBox("CannotReadData)return0;readValue=inbuffer1;p->m_eDataRead.Format("%d",readValue);/下面是我把數(shù)據(jù)從10進制轉(zhuǎn)換成二進制,并且點亮LED(一個字節(jié)有8個bits,可以點亮8個LEDor(intk=0;k<8;k+)flag=readValue
20、%2;readValue=readValue/2;if(k=0)if(flag=0)p->m_sDynLED0.SwitchOff();elsep->m_sDynLED0.SwitchOn();elseif(k=1)if(flag=0)p->m_sDynLED1.SwitchOff();elsep->m_sDynLED1.SwitchOn();elseif(k=2)if(flag=0)p->m_sDynLED2.SwitchOff();elsep->m_sDynLED2.SwitchOn();elseif(k=3)if(flag=0)p->m_sDyn
21、LED3.SwitchOff();elsep->m_sDynLED3.SwitchOn();elseif(k=4)if(flag=0)p->m_sDynLED4.SwitchOff();elsep->m_sDynLED4.SwitchOn();elseif(k=5)if(flag=0)p->m_sDynLED5.SwitchOff();elsep->m_sDynLED5.SwitchOn();elseif(k=6)if(flag=0)p->m_sDynLED6.SwitchOff();elsep->m_sDynLED6.SwitchOn();elsei
22、f(k=7)if(flag=0)p->m_sDynLED7.SwitchOff();elsep->m_sDynLED7.SwitchOn();p->UpdateData(false);:Sleep(50);/斷定用戶是否點擊停滯按鈕若是,則退出if(p->bStopHID)AfxMessageBox("stopped");return0;if(i=j)AfxMessageBox("ThereisnosuchHIDdevice)return0;第三步:向HID裝備寫數(shù)據(jù)(依據(jù)用戶供給的HID的vendorID和productID),用戶輸入的
23、是二進制數(shù)據(jù):與讀的程序一樣,獨一差別就是紅色那部分!UpdateData(true);bStopHID=false;CStringtemp;CStringDevicePath;temp=""intCount=0;/TotalnumberofdevicesfoundDWORDstrSize=0,requiredSize=0;BOOLresult1,result2;ULONGDeviceInterfaceDetailDataSize;SP_DEVINFO_DATADeviceInfoData;SP_DEVICE_INTERFACE_DATADeviceInterfaceDat
24、a;PSP_DEVICE_INTERFACE_DETAIL_DATADeviceInterfaceDetailData;PSP_DEVICE_INTERFACE_DETAIL_DATAtest;/1GUIDdeviceId;HidD_GetHidGuid(&deviceId);intvenderID=v_eVendorID;intproductID=v_eProductID;unsignedcharinbuffer2;unsignedlongnumBytesReturned;HIDD_ATTRIBUTESdevAttr;PHIDP_PREPARSED_DATAPreparsedData
25、;HIDP_CAPSCapabilities;intreadValue;boolLED;intflag=0;inbuffer0=0;/把界面里的二進制轉(zhuǎn)換成10進制inbuffer1=m_eByte0*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);2HDEVINFOhandle;handle=SetupDiGetClassDevs(&deviceId,NULL,NULL,DIGCF
26、_DEVICEINTERFACEDIGCF_PRESENT);/GetonlyHIDdevicesinti=0;intj=m_ctllHIDdevices.GetCount();for(i=0;i<m_ctllHIDdevices.GetCount();i+)m_ctllHIDdevices.GetText(i,temp);DevicePath=temp;HANDLEhCom=CreateFile(DevicePath,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READFILE_SHARE_WRITE,NULL,OPEN_EXISTING0,NULL);if(hCom=INVALID_HANDLE_VALUE)AfxMessageBox("InvalideDevicePath)continue;devAttr.Size=sizeof(HIDD_ATTR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年郵政用信函和包裹分揀機項目合作計劃書
- 2024年低功率氣動閥島用控制閥項目發(fā)展計劃
- 南川無船承運業(yè)務合同范本
- 年產(chǎn)8000套新能源變壓器油箱項目可行性研究報告寫作模板-備案審批
- 2024年鼠抗病毒抗原單克隆抗體項目合作計劃書
- 美術(shù)課堂儀式感建設方案計劃
- 2024年高速在線檢測設備項目合作計劃書
- 產(chǎn)品生產(chǎn)加工合同三篇
- 車間燈具合同范本
- 跨學科生物項目研究方案計劃
- 民用建筑能效測評機構(gòu)條件
- 網(wǎng)球教練求職簡歷模板免費下載
- 個人喜好調(diào)查問卷
- 引發(fā)劑I分解(課堂PPT)
- 機電工程預留預埋質(zhì)量檢查表
- 設備對中技術(shù)PPT課件
- 分析工具(世紀大橋標準答案)
- 監(jiān)理取費標準670號文
- YS-T282-2000_鋁中間合金錠
- 第2章推銷自己PPT課件
- 學前教育-小班幼兒規(guī)則意識養(yǎng)成的現(xiàn)狀、問題及對策研究
評論
0/150
提交評論