阅读:1353回复:0
关于驱动对串口读操作ReadFile(……)处理的问题
…………
14 0.00000838 SerialApp.exe IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8 15 0.00000587 SerialApp.exe IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13 16 0.00000922 SerialApp.exe IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:1 Replace:40 XonLimit:2048 XoffLimit:512 17 0.00000587 SerialApp.exe IOCTL_SERIAL_SET_TIMEOUTS Serial0 SUCCESS RI:3 RM:3 RC:2 WM:3 WC:2 18 0.30328399 SerialApp.exe IRP_MJ_READ Serial0 TIMEOUT Length 0: 19 0.31030471 SerialApp.exe IRP_MJ_READ Serial0 TIMEOUT Length 0: 20 0.31032315 SerialApp.exe IRP_MJ_READ Serial0 TIMEOUT Length 0: 21 0.31030471 SerialApp.exe IRP_MJ_READ Serial0 TIMEOUT Length 0: …… …… 以上是用portman抓的iotrol,是对真实串口的过程,应用软件对串口进行查询式读写,但是跟超级终端又不同。 我想问的是,要在虚拟串口驱动里实现同上面类似的读功能,也就是说在调用 ReadFile(handlePort_, // handle of file to read inputData, // handle of file to read sizeBuffer, // number of bytes to read &length, // pointer to number of bytes NULL) 时,如果没有当前数据,就返回0字节的buffer,是如何实现的! 我用的是acidfish的simserial那个驱动。 我该了一些东西,但是当用它来让上面提到的应用程序调用该驱动的时候在读操作中卡在那里:状况如下: …… 2 0.00004442 ROCLink.exe IOCTL_SERIAL_PURGE SiSerial0 SUCCESS Purge: RXCLEAR 23 0.00002682 ROCLink.exe IOCTL_SERIAL_SET_RTS SiSerial0 SUCCESS 24 0.00017265 ROCLink.exe IRP_MJ_WRITE SiSerial0 SUCCESS Length 9: ......*5. 25 0.00004442 ROCLink.exe IOCTL_SERIAL_CLR_RTS SiSerial0 SUCCESS 26 0.00000000 ROCLink.exe IRP_MJ_READ SiSerial0 Length 100 …… 那个IRP_MJ_READ irp包卡在那里,使应用程序就傻在那里! 等着数据来。 应该是由timeout那个数据来控制的,到该时间还不来,就直接返回! 但是,由例子吗!?好像看实例!呜呜! |
|
|