USB D12 PHILIPS 读取数据异常,求教各位朋友

taixinltd 2009-06-08 10:08:41
我在项目开发中,采用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());
}
...全文
74 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
taixinltd 2009-08-11
  • 打赏
  • 举报
回复
感谢各位,问题自己解决了,后来发现打开的端口搞错了;
feilang6882 2009-08-06
  • 打赏
  • 举报
回复
小弟刚开始MFC,现急需D12的驱动程序代码,将硬件的通信过程能够可视化,LZ可否发一份到邮箱,感激涕零!!!
feilang6882@163.com
taixinltd 2009-06-15
  • 打赏
  • 举报
回复
?
na_he 2009-06-09
  • 打赏
  • 举报
回复
http://www.pudn.com/downloads32/sourcecode/windows/comm/detail103610.html
download下来看一下了。
taixinltd 2009-06-09
  • 打赏
  • 举报
回复
还是不行哦
wfuyuan 2009-06-09
  • 打赏
  • 举报
回复
知道LZ的代码是用API写的
但刚在网上下的资料都是说多线程的,晕掉~
看了蛮久,找不出什么原因
不过既然LZ能接受数据,就不会是硬件的问题了
嗯,介绍一本书吧
《PDIUSBD12 USB固件编程与驱动开发》
看看第7章
愿LZ尽早解决吧,爱莫能助...
taixinltd 2009-06-08
  • 打赏
  • 举报
回复
有个字打错了,纠正:"同时返回的字节数是正确的,就是内容不正确."
wfuyuan 2009-06-08
  • 打赏
  • 举报
回复
曾用过重叠方式做过串口
感觉LZ在创建接口时,缺了点东西
个人愚见(就添个0):

//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,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL
);

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧