usb数据的接收和打印,除了问题,接收数据不全
生活随笔
收集整理的這篇文章主要介紹了
usb数据的接收和打印,除了问题,接收数据不全
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先調用
usb.input(bRecvBuf+iRecvLen, 8192,100,iRet);//數據接收函數
int Cusb::input(PSTR pRspData, DWORD nMaxRspDataSize, DWORD milliseconds) {DWORD dwNumberOfBytesTransffered = 0 ;int nRet = -1 ;DWORD dwRet = 0 ;int nRetFlag = 0 ; DWORD dwOffset = 0 ;char szLog[1024] = { 0 } ;char szReadBlock[1024] = { 0 } ;DWORD dwError = 0 ;while(1){OVERLAPPED overlapped ;memset(&overlapped, 0, sizeof(overlapped));overlapped.hEvent = m_hReadEvent ;ZeroMemory(szReadBlock,sizeof(szReadBlock)) ;dwNumberOfBytesTransffered = 0 ;if(!::ReadFile(m_hReadHandle, szReadBlock, sizeof(szReadBlock), &dwNumberOfBytesTransffered, &overlapped)){dwError = GetLastError() ;if(dwError == ERROR_IO_PENDING){ dwRet = WaitForSingleObject(overlapped.hEvent, 10);switch(dwRet){case WAIT_OBJECT_0:if(GetOverlappedResult(m_hReadHandle, &overlapped, &dwNumberOfBytesTransffered, FALSE)){if(dwNumberOfBytesTransffered>65){char szBuf[256] = { 0 } ;sprintf(szBuf, "%d", dwNumberOfBytesTransffered) ;}for(int i=0; i<(dwNumberOfBytesTransffered/65); i++){memcpy(pRspData+dwOffset, szReadBlock+i*65+1, 64) ;dwOffset += 64 ;}}else{//OutputDebugString("讀取數據失敗!");dwError = GetLastError() ;if (ERROR_IO_INCOMPLETE != dwError){//關閉設備 // OutputDebugString("讀取數據失敗!");CancelIo(m_hReadHandle);nRetFlag = 0 ;}}break;case WAIT_TIMEOUT:if(dwOffset>0){nRetFlag = 0 ;}else{//OutputDebugString("等待讀事件超時!");nRetFlag = 0 ;}CancelIo(m_hReadHandle);break ;default:dwNumberOfBytesTransffered = 0 ;break;}}}else{for(int i=0; i<dwNumberOfBytesTransffered/65; i++){memcpy(pRspData+dwOffset, szReadBlock+i*65+1, 64) ;dwOffset += 64 ;}}if(nRetFlag <= 0)break ;}return dwOffset ; }總結
以上是生活随笔為你收集整理的usb数据的接收和打印,除了问题,接收数据不全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vc获取当前路径,并且创建文件
- 下一篇: 用VC++实现USB接口读写数据的程序