wangjd123
驱动牛犊
驱动牛犊
  • 注册日期2009-06-08
  • 最后登录2012-06-25
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1138回复:0

采用USB D12 PHILIPS的进行通信,读取数据出现问题,请教各位朋友

楼主#
更多 发布于:2009-06-08 10:32
我在项目开发中,采用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());
}
游客

返回顶部