




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用VC+實(shí)現(xiàn)USB接口讀寫數(shù)據(jù)的程序2009-08-15 11:55用VC+實(shí)現(xiàn)USB接口讀寫數(shù)據(jù)的程序使用一個(gè) GUIDguidHID_1查找并打開(kāi)一個(gè) USB設(shè)備extern C int PASCAL SearchUSBDevice()HANDLE hUsb;int nCount, i, j;/標(biāo)記同一設(shè)備個(gè)數(shù)HDEVINFO hDevInfoSet;BOOL bResult;PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail =NULL;memset(m_sysversion, 0, 20);GetSysVersion(m_sysversion);/檢索相關(guān)
2、GUID的USB設(shè)備總設(shè)備個(gè)數(shù)if (!GetUSBList()return 0;/取得一個(gè)該GUID相關(guān)的設(shè)備信息集句柄hDevInfoSet = :SetupDiGetClassDevs(LPGUID)&guidHID_1,/GUID_CLASS_USB_DEVICE, / class GUIDNULL, / 無(wú)關(guān)鍵字NULL, / 不指定父窗口句柄DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); / 目前存在的設(shè)備/ 失敗 .if (hDevInfoSet = INVALID_HANDLE_VALUE)return NULL;/ 申請(qǐng)?jiān)O(shè)備接口數(shù)據(jù)空間nCou
3、nt = 0;bResult = TRUE;for (i=0; icbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); bResult = SetupDiGetInterfaceDeviceDetail( hDevInfoSet, / 設(shè)備信息集句柄&ifdata, /設(shè)備接口信息pDetail, / 設(shè)備接口細(xì)節(jié)(設(shè)備路徑) predictedLength, /輸出緩沖區(qū)大小&requiredLength, /不需計(jì)算輸出緩沖區(qū)大小 ( 直接用設(shè)定值 )NULL); / 不需額外的設(shè)備描述if (bResult)/ 復(fù)制設(shè)備路徑到輸出緩沖區(qū)/:s
4、trcpy(pszDevicePathnCount, pDetail-DevicePath);if (strcmp(m_sysversion, winnt)=0)char ch18;for(i=0;iDevicePath+8+i);ch17=0;if (strcmp(ch,vid_0471&pid_0666)=0)/ 比較版本號(hào),防止意外出錯(cuò) memset( &READ_OS, 0, sizeof( OVERLAPPED ) ) ;memset( &WRITE_OS, 0, sizeof( OVERLAPPED ) ) ;READ_OS.hEvent = CreateEvent( NULL,
5、/ no securityTRUE, / explicit reset reqFALSE, / initial event resetNULL ) ; / no nameif (READ_OS.hEvent = NULL)break;WRITE_OS.hEvent = CreateEvent( NULL, / no securityTRUE, / explicit reset reqFALSE, / initial event resetNULL ) ; / no nameif (NULL = WRITE_OS.hEvent)CloseHandle( READ_OS.hEvent );brea
6、k;hUsb=CreateFile(pDetail-DevicePath,/&guidHID_1,/GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL/*|FILE_FLAG_OVERLAPPED*/,NULL);if (hUsb != NULL)/比較定位找到的USB在哪個(gè)USB PORTtchar id30; memset(id, 0, 30);i=0;do id=*(pDetail-DevicePath+26+i);i+; while(id
7、!=#);id = 0;for (j=0; jDevicePath); m_USBPositionMapnCount = j+1;break;CloseHandle(hUsb); nCount+;/ break;/ 比較驅(qū)動(dòng)版本/ 比較操作系統(tǒng)版本elsememset( &READ_OS, 0, sizeof( OVERLAPPED ) ) ; memset( &WRITE_OS, 0, sizeof( OVERLAPPED ) ) ;READ_OS.hEvent = CreateEvent( NULL, / no security TRUE, / explicit reset reqFALS
8、E, / initial event resetNULL ) ; / no nameif (READ_OS.hEvent = NULL) break;WRITE_OS.hEvent = CreateEvent( NULL, / no securityTRUE, / explicit reset reqFALSE, / initial event resetNULL ) ; / no nameif (NULL = WRITE_OS.hEvent)CloseHandle( READ_OS.hEvent );break;hUsb=CreateFile(pDetail-DevicePath,/&gui
9、dHID_1,/GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL/*|FILE_FLAG_OVERLAPPED*/,NULL);if (hUsb != NULL)if(strcmp(pDetail-DevicePath, m_USBListj)=0)sprintf(m_DeviceDescj+1, %s, pDetail-DevicePath);m_USBPositionMapnCount = j+1;break;CloseHandle(hUs
10、b);nCount+;/ break;/ 釋放設(shè)備接口數(shù)據(jù)空間:GlobalFree(pDetail);/ 關(guān)閉設(shè)備信息集句柄:SetupDiDestroyDeviceInfoList(hDevInfoSet);iDeviceCount = nCount;return nCount;/ 寫B(tài)OOL Writestr(char *buf,int buflen, int index)BOOL fWriteStat;DWORD dwErrorFlags;DWORD dwError;COMSTAT ComStat; char szError 10 ;DWORD ret; int len, i, j,
11、packet; div_t div_result;BYTE sendpacket65;BYTE xorcode=0x00;if (m_gphdComindex = NULL) / no usb device(jk100c) return -1;div_result = div(buflen, 58);if (div_result.rem = 0) packet = div_result.quot; else packet = div_result.quot+1;for (i=0; ipacket; i+) memset(sendpacket, 0, 65);if(i=packet-1)/ en
12、d packetif (div_result.rem = 0) len = 58; elselen = div_result.rem;else len = 58;sendpacket0 = 0x13;sendpacket1 = 3+len;sendpacket2 = 0x01;sendpacket3 = packet*16+i+1;memcpy(sendpacket+4, buf+(i*58), len);for(j=0;jlen+3;j+)xorcodeA=se ndpacketj+1;sendpacketlen+4 = (char)xorcode;sendpacketlen+5 = 0x2
13、3;PurgeComm(m_gphdComindex,PURGE_RXCLEAR|PURGE_TXCLEAR); / Sleep(10);fWriteStat = WriteFile(m_gphdComindex, sendpacket, len+6,&ret, NULL);if (!fWriteStat)if(GetLastError() = ERROR_IO_PENDING)dwError = GetLastError();/ an error occurred, try to recoverwsprintf( szError, nr , dwError ) ; OutputDebugSt
14、ring(szError);ClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat ) ;if (dwErrorFlags 0)wsprintf( szError, nr , dwErrorFlags ) ;OutputDebugString(szError);else/ some other error occurredClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat ) ;if (dwErrorFlags 0)wsprintf( szError, nr , dwErrorFla
15、gs ) ;OutputDebugString(szError);return FALSE;if (i != packet-1)/ should be receive ackif (ReceivePacketAnswer(index) != 0)return FALSE;return TRUE;/ 讀int Readstr(char *buf,int nMaxLength, int index)BOOL fReadStat ;COMSTAT ComStat;DWORD dwErrorFlags;DWORD dwLength;DWORD dwError;char szError 10 ;if (
16、fCOMMOpened=0)return FALSE; / 串口未打開(kāi)/ only try to read number of bytes in queue ClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat) ;/dwLength = min( (DWORD) nMaxLength, ComStat.cbInQue ) ;dwLength=nMaxLength;if (dwLength 0)if (olap=TRUE)fReadStat = ReadFile(m_gphdComindex,buf, dwLength, &dwLengt
17、h,&READ_OS) ; if (!fReadStat)if (GetLastError() = ERROR_IO_PENDING)OutputDebugString(nrIO Pending);while(!GetOverlappedResult(m_gphdComindex, &READ_OS, &dwLength, TRUE )dwError = GetLastError();if(dwError = ERROR_IO_INCOMPLETE) continue;else/ an error occurred, try to recoverClearCommError(m_gphdCom
18、index,&dwErrorFlags, &ComStat ) ; break;else / endif (GetLastError() = ERROR_IO_PENDING)/ some other error occurreddwLength = 0 ;ClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat ) ;if (dwErrorFlags 0)wsprintf( szError, nr , dwErrorFlags ) ; OutputDebugString(szError); / endif (!fReadStat) / endif (olap=TRUE)elsefReadStat = ReadFile( m_gphdComindex,buf
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 3 Wrapping Up the Topic-Project 教學(xué)設(shè)計(jì) 2024-2025學(xué)年仁愛(ài)科普版英語(yǔ)七年級(jí)上冊(cè)
- 2糖到哪里去了(教學(xué)設(shè)計(jì))-2023-2024學(xué)年一年級(jí)下冊(cè)科學(xué)冀人版
- 南方科技大學(xué)《環(huán)境資源法》2023-2024學(xué)年第二學(xué)期期末試卷
- 《7 校園綠化設(shè)計(jì)》(教學(xué)設(shè)計(jì))-2023-2024學(xué)年六年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)粵教版
- 冀中職業(yè)學(xué)院《書(shū)法藝術(shù)與欣賞》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘇州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院《安裝工程計(jì)量與計(jì)價(jià)》2023-2024學(xué)年第二學(xué)期期末試卷
- 教科版高中信息技術(shù)必修教學(xué)設(shè)計(jì)-5.1 音頻信息的采集與加工
- 四川化工職業(yè)技術(shù)學(xué)院《信號(hào)分析與處理C》2023-2024學(xué)年第二學(xué)期期末試卷
- 濮陽(yáng)醫(yī)學(xué)高等??茖W(xué)?!段⒉夹g(shù)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川外國(guó)語(yǔ)大學(xué)成都學(xué)院《兒科護(hù)理學(xué)(實(shí)驗(yàn))》2023-2024學(xué)年第二學(xué)期期末試卷
- 濟(jì)南2024年山東濟(jì)南廣播電視臺(tái)招聘14人筆試歷年參考題庫(kù)附帶答案詳解
- 海洋氣候預(yù)測(cè)模型創(chuàng)新研究-深度研究
- 《客戶服務(wù)基礎(chǔ)》教案及課件項(xiàng)
- 2025《醫(yī)藥企業(yè)防范商業(yè)賄賂風(fēng)險(xiǎn)合規(guī)指引》解讀課件
- 2025年湖南工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年丹參原藥材項(xiàng)目可行性研究報(bào)告
- 物理(A版)-安徽省合肥一中(省十聯(lián)考)2024-2025學(xué)年度高二年級(jí)上學(xué)期期末測(cè)試試題和答案
- 公路工程節(jié)后復(fù)工安全教育
- 人教版初中歷史與社會(huì)七年級(jí)下冊(cè) 6.3.3向西開(kāi)放的重要門戶-烏魯木齊 說(shuō)課稿
- 綜合材料繪畫(huà)課程設(shè)計(jì)
- 數(shù)學(xué)史簡(jiǎn)介課件
評(píng)論
0/150
提交評(píng)論