阅读:1621回复:3
虚拟串口IOCTROL 编程指教 给分
我在调simseial 的虚拟串口程序时,发现如果用串口调试程序测试,结合portmon监听发现
下面几个IOCtrol有问题, 第一个是 IOCTL_SERIAL_SET_CHAR 的 返回参数出现 EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13 特别是EVT,在测试实串口时,返回的值是EVT:71 不过有时候,有正确,我不太明白 第二个地方是IOCTL_SERIAL_SET_HANDFLOW 指示 INVALID PARAMETER,说明这个IOCtrol处理不当,请教大虾, 如何修改!? 跟ddk提供的Serial的ioctl.c比较后,发觉没有什么大的差别。 指教,给分 |
|
|
沙发#
发布于:2004-06-10 22:24
做过虚拟串口的大侠们,指点一把,我用同样的驱动程序,来用超级终端使用虚拟串口时,用portmon监听到的
IOCTL_SERIAL_SET_CHAR IOCTL_SERIAL_SET_HANDFLOW 返回的值都正常, 14 0.00003855 hypertrm.exe IOCTL_SERIAL_SET_CHAR SiSerial0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:71 XON:11 XOFF:13 15 0.00003352 hypertrm.exe IOCTL_SERIAL_SET_HANDFLOW SiSerial0 SUCCESS Shake:80000009 Replace:80000080 XonLimit:80 但是当用一个事件读写的app程序使用该虚拟串口时,就出现 16 0.00003771 ROCLink.exe IOCTL_SERIAL_SET_CHAR SiSerial0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13 17 0.00003604 ROCLink.exe IOCTL_SERIAL_SET_HANDFLOW SiSerial0 INVALID PARAMETER Shake:80000000 Replace:0 XonLimit:4096 XoffLimit:1024 大侠们指点一把吧! 到底是那一步错了!? 出错的时候,出现的一堆IOCtrol如下: 2 0.00003436 ROCLink.exe IRP_MJ_CREATE SiSerial0 SUCCESS Options: Open 3 0.00007291 ROCLink.exe IOCTL_SERIAL_PURGE SiSerial0 SUCCESS Purge: TXABORT RXABORT TXCLEAR RXCLEAR 4 0.00004526 ROCLink.exe IOCTL_SERIAL_GET_BAUD_RATE SiSerial0 SUCCESS 5 0.00004023 ROCLink.exe IOCTL_SERIAL_GET_LINE_CONTROL SiSerial0 SUCCESS 6 0.00003939 ROCLink.exe IOCTL_SERIAL_GET_CHARS SiSerial0 SUCCESS 7 0.00004442 ROCLink.exe IOCTL_SERIAL_GET_HANDFLOW SiSerial0 SUCCESS 8 0.00004442 ROCLink.exe IOCTL_SERIAL_GET_BAUD_RATE SiSerial0 SUCCESS 9 0.00003939 ROCLink.exe IOCTL_SERIAL_GET_LINE_CONTROL SiSerial0 SUCCESS 10 0.00003855 ROCLink.exe IOCTL_SERIAL_GET_CHARS SiSerial0 SUCCESS 11 0.00004190 ROCLink.exe IOCTL_SERIAL_GET_HANDFLOW SiSerial0 SUCCESS 12 0.00003939 ROCLink.exe IOCTL_SERIAL_SET_BAUD_RATE SiSerial0 SUCCESS Rate: 9600 13 0.00003520 ROCLink.exe IOCTL_SERIAL_CLR_RTS SiSerial0 INVALID DEVICE REQUEST 14 0.00002682 ROCLink.exe IOCTL_SERIAL_CLR_DTR SiSerial0 SUCCESS 15 0.00004023 ROCLink.exe IOCTL_SERIAL_SET_LINE_CONTROL SiSerial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8 16 0.00003855 ROCLink.exe IOCTL_SERIAL_SET_CHAR SiSerial0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13 17 0.00003688 ROCLink.exe IOCTL_SERIAL_SET_HANDFLOW SiSerial0 INVALID PARAMETER Shake:80000000 Replace:0 XonLimit:4096 XoffLimit:1024 18 0.00004442 ROCLink.exe IOCTL_SERIAL_GET_BAUD_RATE SiSerial0 SUCCESS 19 0.00003939 ROCLink.exe IOCTL_SERIAL_GET_LINE_CONTROL SiSerial0 SUCCESS 20 0.00003771 ROCLink.exe IOCTL_SERIAL_GET_CHARS SiSerial0 SUCCESS 21 0.00004274 ROCLink.exe IOCTL_SERIAL_GET_HANDFLOW SiSerial0 SUCCESS 22 0.00003855 ROCLink.exe IOCTL_SERIAL_SET_BAUD_RATE SiSerial0 SUCCESS Rate: 1200 23 0.00002766 ROCLink.exe IOCTL_SERIAL_SET_RTS SiSerial0 SUCCESS 24 0.00002682 ROCLink.exe IOCTL_SERIAL_SET_DTR SiSerial0 SUCCESS 25 0.00003939 ROCLink.exe IOCTL_SERIAL_SET_LINE_CONTROL SiSerial0 SUCCESS StopBits: 1.52 Parity: NONE WordLength: 8 26 0.00003688 ROCLink.exe IOCTL_SERIAL_SET_CHAR SiSerial0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13 27 0.00003520 ROCLink.exe IOCTL_SERIAL_SET_HANDFLOW SiSerial0 INVALID PARAMETER Shake:1 Replace:40 XonLimit:4096 循环下去了 |
|
|
板凳#
发布于:2004-06-15 21:20
上面的那两个IOCTL_SERIAL_SET_CHAR
IOCTL_SERIAL_SET_HANDFLOW问题,解决了一点,但是还是没有完全解决。暂且不说 下面是新问题,真希望告诉指点一二。 我在测试我改自acidfish虚拟串口时,用我的win32串口读写程序测试时,发现如下错误: 用portmon测得 16 0.00007794 ROCLink.exe IOCTL_SERIAL_GET_WAIT_MASK SiSerial2 INVALID DEVICE REQUEST 感觉好像就是这个ioctrl处理不当。我处理的方式为: case IOCTL_SERIAL_GET_WAIT_MASK: { if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength <sizeof(ULONG)) { status = STATUS_BUFFER_TOO_SMALL; break; } Irp->IoStatus.Information = sizeof(ULONG); *((ULONG *)Irp->AssociatedIrp.SystemBuffer) = deviceExtension->WaitMask; DebugPrint(("-- IOCTL_SERIAL_GET_WAIT_MASK --n")); break; } 大致是参考ddk中源码 src->kernel->serial中的处理方式的 请问有什么问题吗!? 谢谢! 该iotrol到底要求返回什么东西!? |
|
|
地板#
发布于:2004-06-15 23:10
还没开始写,我也帮不了你。 :o
|
|