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获取当前路径,并且创建文件
- 下一篇: string 与char *的区别