Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
阅读:1694回复:7

虚拟串口一问

楼主#
更多 发布于:2004-06-02 20:19
用 comtools 来测试写的虚拟串口驱动,发现这个软件是采用waitOnMask 的方式来读取数据的,下午却发现一个比较奇怪的问题,向大家请教。
我的 com2 是实际的串口,com3 是虚拟出来的。
当我从 com2 发数据给 com3 时,comtools先发了个getCommStatus
的IOCTL,然后我填好那个struct返回,接着就发了一个IRP_MJ_READ
,我是这样处理的:先调用 Mark Pengding ,然后放到 read 队列,
然后驱动程序就跑到处理 read队列的线程里了,往 Irp->AssociatedIrp.SystemBuffer 里写了数据,确实写进去了,:)
然后完成这个IRP。
这是处理的整个过程,我想是没有问题的。但是在 comtools 的文本框里却没有看到数据,这个软件也没有提示说收到数据,好奇怪的事情。
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-03 09:21
昨天忘了说,那个 CommStatus 的数据是这么写的:
amountInInQueue = 要 read 的字节数
amountInOutQueue = 要 write 的字节数
error = 0
eofReceived = FALSE
waitForImmediate = FALSE
HoldReasons = 0

可能这里有错吧?
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-03 18:48
今天下午用微软的 TTY 测试了,读写完全没问题,十分正常。。。
又用另一个别人写的手机串口的测试了一下,也很正常。。。
我想会不会是 comtools 有 BUG 啊?
大家有碰到过这种怪事吗?
jickknight
驱动牛犊
驱动牛犊
  • 注册日期2004-05-03
  • 最后登录2005-12-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-04 11:20
你可以用串口调试助手2.0来试试!

对了,想请教一下,要支持,事件读(waitOnMask)那种方式工作的驱动,是不是在驱动里添加(填充)
IOCTL_SERIAL_SET_WAIT_MASK
和IOCTL_SERIAL_WAIT_ON_MASK
 就可以了!还有什么讲究吗!??
嘻嘻!
Chasing my dreams!
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-04 14:09
差不多就这样,
当然你要在适当的时候complete mask Irp,这样 API 才会知道等待
的事件发生了。:)
jickknight
驱动牛犊
驱动牛犊
  • 注册日期2004-05-03
  • 最后登录2005-12-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-04 21:21
差不多就这样,
当然你要在适当的时候complete mask Irp,这样 API 才会知道等待
的事件发生了。:)
 


适当的时候,能不能说的浅显点,如何操作!?在哪里添加complete
mask Irp。

另外,我研究了一下,icyfishy大虾的那个simserial虚拟串口例子,他里面也有两个IOCtrol,但是该虚拟串口却不能支持event触发读操作。因为我用串口调试助手测试过,结果会把调用他的程序搞死!请高手指点,是哪里的原因,如何纠正!?谢谢
Chasing my dreams!
sunny8226
驱动牛犊
驱动牛犊
  • 注册日期2004-06-11
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-11 18:00
请问能给我一个虚拟串口的源码吗?急!多谢!
airplay_007@163.com
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-06-14 15:48
simSerial例子是用查询方式的,不支持mask通知方式。
我是在驱动里开一个系统线程来等待WaitOnMask的事件,然后完成mask Irp。
游客

返回顶部