阅读:1694回复:7
虚拟串口一问
用 comtools 来测试写的虚拟串口驱动,发现这个软件是采用waitOnMask 的方式来读取数据的,下午却发现一个比较奇怪的问题,向大家请教。
我的 com2 是实际的串口,com3 是虚拟出来的。 当我从 com2 发数据给 com3 时,comtools先发了个getCommStatus 的IOCTL,然后我填好那个struct返回,接着就发了一个IRP_MJ_READ ,我是这样处理的:先调用 Mark Pengding ,然后放到 read 队列, 然后驱动程序就跑到处理 read队列的线程里了,往 Irp->AssociatedIrp.SystemBuffer 里写了数据,确实写进去了,:) 然后完成这个IRP。 这是处理的整个过程,我想是没有问题的。但是在 comtools 的文本框里却没有看到数据,这个软件也没有提示说收到数据,好奇怪的事情。 |
|
沙发#
发布于:2004-06-03 09:21
昨天忘了说,那个 CommStatus 的数据是这么写的:
amountInInQueue = 要 read 的字节数 amountInOutQueue = 要 write 的字节数 error = 0 eofReceived = FALSE waitForImmediate = FALSE HoldReasons = 0 可能这里有错吧? |
|
板凳#
发布于:2004-06-03 18:48
今天下午用微软的 TTY 测试了,读写完全没问题,十分正常。。。
又用另一个别人写的手机串口的测试了一下,也很正常。。。 我想会不会是 comtools 有 BUG 啊? 大家有碰到过这种怪事吗? |
|
地板#
发布于:2004-06-04 11:20
你可以用串口调试助手2.0来试试!
对了,想请教一下,要支持,事件读(waitOnMask)那种方式工作的驱动,是不是在驱动里添加(填充) IOCTL_SERIAL_SET_WAIT_MASK 和IOCTL_SERIAL_WAIT_ON_MASK 就可以了!还有什么讲究吗!?? 嘻嘻! |
|
|
地下室#
发布于:2004-06-04 14:09
差不多就这样,
当然你要在适当的时候complete mask Irp,这样 API 才会知道等待 的事件发生了。:) |
|
5楼#
发布于:2004-06-04 21:21
差不多就这样, 适当的时候,能不能说的浅显点,如何操作!?在哪里添加complete mask Irp。 另外,我研究了一下,icyfishy大虾的那个simserial虚拟串口例子,他里面也有两个IOCtrol,但是该虚拟串口却不能支持event触发读操作。因为我用串口调试助手测试过,结果会把调用他的程序搞死!请高手指点,是哪里的原因,如何纠正!?谢谢 |
|
|
6楼#
发布于:2004-06-11 18:00
请问能给我一个虚拟串口的源码吗?急!多谢!
airplay_007@163.com |
|
7楼#
发布于:2004-06-14 15:48
simSerial例子是用查询方式的,不支持mask通知方式。
我是在驱动里开一个系统线程来等待WaitOnMask的事件,然后完成mask Irp。 |
|