阅读:1138回复:0
采用USB D12 PHILIPS的进行通信,读取数据出现问题,请教各位朋友
我在项目开发中,采用USB D12 PHILIPS的进行通信,但是在开发过程中,发现读取数据出现问题,比如我应该读取2字节数据"AB",而读出的却是两字节都是0,采用重叠模型,同时返回的字节数是正确的,就是内容不正确.
我用Usb调试助手1.2工具,可以读出正确内容.用以下代码却不行,请各位朋友看看,代码那里出错了? // 1.变量声明 HANDLE m_hIDComDev; CString m_sDevPath; HANDLE hOut; OVERLAPPED m_OverlappedRead, m_OverlappedWrite; //2.打开设备 CString szPort; CString szDevPath; szPort.Format("\\PIPE%d",1); szDevPath = m_sDevPath + szPort ; m_hIDComDev = CreateFile( szDevPath.GetBuffer(szDevPath.GetLength()), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL ); if (m_hIDComDev == NULL) return FALSE; memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) ); memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) ); m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); m_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); // 3.读取USB接收缓冲数据 BOOL bStatus; DWORD dwBytesRead = 0; if(nSize <= 0) return 0; if(m_hIDComDev == NULL) return 0; bStatus = ReadFile( m_hIDComDev, buffer, nSize, &dwBytesRead, &m_OverlappedRead ); if(!bStatus) { if(GetLastError() == ERROR_IO_PENDING) { switch(WaitForSingleObject(m_OverlappedRead.hEvent, 20)) { case WAIT_OBJECT_0: if (!GetOverlappedResult(m_hIDComDev,&m_OverlappedRead,&dwBytesRead,TRUE)) { TRACE("GetLastError() return %d",GetLastError()); return 0; } m_OverlappedRead.Offset += dwBytesRead; break; case WAIT_TIMEOUT: CancelIo(m_hIDComDev); break; default: break; } } TRACE("GetLastError() return %d\n",GetLastError()); } |
|