欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

usb数据的接收和打印,除了问题,接收数据不全

发布时间:2025/5/22 编程问答 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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数据的接收和打印,除了问题,接收数据不全的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。