阅读:36291回复:122
虚拟串口设备驱动程序
断断续续做了大半年。块到春节了,马上要走一趟长线旅游。没时间做了。发给大家。仅供参考。
做的比较粗糙,很多需要完善改进的地方。 请大牛们多提意见。 祝大家新年快乐 |
|
|
沙发#
发布于:2004-01-16 11:53
多谢acidfish!!
真是及时雨. 能和你交流么: QQ:59063276 另外, 有没有详细说明文档,请发: wwb81@sohu.com 再次感谢!!! |
|
板凳#
发布于:2004-01-16 15:15
原理大体都写了。工作机制也讲了。再详细的说明文档,目前还没有时间写。等回来以后再写了。
具体的实现细节可以看代码里边。都是很简单的。很难懂的代码我也写不出来。 :D |
|
地板#
发布于:2004-01-17 13:06
很好!!
跟用null-modem cable没分别. |
|
地下室#
发布于:2004-01-17 13:43
呵呵,总算看到反馈的声音了。 :D
仿造的原型是 http://www.eltima.com/products/virtual_drivers/ 试用版有14天的试用期。 (ft,半年前还是3.0呢,今天再去看看,已经出到4.0版本了) |
|
5楼#
发布于:2004-01-17 14:07
Eltima的Serial Splitter是real<-->virtual,你的是virtual<-->virtual,界面当然是Eltima好 :D
可否在Device Manager 上显示 com20 and com21 ?? [编辑 - 1/17/04 by KMK] |
|
6楼#
发布于:2004-01-17 14:46
我倒是还没有注意到eltima的real<->virtual这个功能。我原来用的3.0只有virtual<--->virtual的功能。
这个应该是一个发展方向。 目前我的这个虚拟串口程序也可以显示两个设备。只不过设备名是“Bitee VSerial Toaster DeviceDesc” |
|
7楼#
发布于:2004-01-24 06:25
用SetupDiSetDeviceRegistryProperty加上FriendlyName後可显示
Bitee VSerial Toaster DeviceDesc (COM20) Bitee VSerial Toaster DeviceDesc (COM21) 另一有趣问题 在同时用dbgview.exe的情况下,pnp.c里下面这句出错 BSOD !! DebugPrint((\"SymbolicLinkName: %ws\\n\", deviceExtension->SymbolicLinkName )); 祗是这句,两台机都是,很奇怪 !! |
|
8楼#
发布于:2004-01-25 14:04
SetupDiSetDeviceRegistryProperty加上FriendlyName後
我还真没有用过这个函数。回头调用一下看看。谢谢kmk老兄指点。 DebugPrint()的问题,可能是%ws的问题。 |
|
9楼#
发布于:2004-01-25 14:52
DebugPrint()的问题:
这%ws是我改的,在Sysinternals 及 osr的debug monitor下一样死机. 其他人有同样问题吗 ?? [编辑 - 1/27/04 by KMK] |
|
10楼#
发布于:2004-02-07 12:04
有
|
|
11楼#
发布于:2004-02-09 17:22
楼主,我编译了你的程序,却有如下问题:
http://www.driverdevelop.com/forum/html_60163.html?1076318359, 请指教!! |
|
12楼#
发布于:2004-02-10 13:31
我测试 了这个程序。发现,若一个端口用超级终端打开,另一个用WaitCommEvent 的工作方式,先用SetCommMask( RX_CHAR). driver 不能正常工作。
我认为driver没有处理好 IOCTR_SEIAL_WAIT_ON_MASK request. 我不知道在driver中如何设置 串口等待的event (如RX_CHAR),否则就能解决这一个问题。 请大家不吝赐教。 [编辑 - 6/20/04 by dennis761222] |
|
13楼#
发布于:2004-02-10 14:37
在这个驱动开发过程中,我主要是用filter driver对别人的虚拟串口驱动进行了监视。当时采用的win32app只有超级终端。没有自己编写一个使用WaitCommEvent 工作方式的app。所以可能对于IOCTR_SEIAL_WAIT_ON_MASK 可能支持的不太好。
我记得当时对于如何设置串口等待的event (如RX_CHAR),也曾经面临过这个问题。但是过了一段时间以后改变了想法,没有在试图对串口等待的event 进行处理。现在咋一想有点想不起来了。回头再看看。 |
|
14楼#
发布于:2004-02-10 14:48
我正在做一个usb转串口的 driver.
我看了你的虚拟串口后,就把你的内容加入我的usb driver. 现在,能用超级终端打开usb设备,也能从虚拟串口发数据usb设备。 但我不知道,在usb转串口中如何实现读usb数据,再用event 通知打开虚拟串口的应用程序。 希望你能指点。 [编辑 - 6/20/04 by dennis761222] |
|
15楼#
发布于:2004-02-10 15:19
我使用超级终端打开虚拟串口的时候发现:ReadFile是不断的发送下去的。当上一个ReadFile返回数据以后超级终端又调用了ReadFile来接收下一个数据。这当中并没有用到event。
|
|
16楼#
发布于:2004-02-10 15:39
你说得没错。
读于com端口, 目前,我知道 应用程序有两种方式可以获得串口数据。 1) 采用查询的方式,超级终端就是的。 2) 采用event 的方式, 只有,设定的event发生, 才读串口的数据。这中方式, 就要处理IOCTL_SERIAL_WAIT_ON_MASK. 我现正想办法处理这个热REQUEST. 有什么好的意见和想法,请通知我。 谢谢!! |
|
17楼#
发布于:2004-02-10 15:58
win32app的event传给driver,然后driver进行触发有比较成熟的例子。这个论坛上搜一下就有了。因为我手头上没有调试环境和比较正确的串口事件触发式接收程序(win32app),所以不方便进行开发。
我觉得首先应该确定IOCTL_SERIAL_WAIT_ON_MASK和IOCTL_SERIAL_SET_WAIT_MASK传给driver的参数。哪一个是event,然后再做进一步的处理。 过一段时间我在进行这方面的完善。 |
|
18楼#
发布于:2004-02-11 09:38
前面的大侠,我对usb转串口的东东很感兴趣,不知可否发一份给我,大家一起研究.glqg@21cn.com
|
|
19楼#
发布于:2004-02-11 14:28
目前正在调试中。。。
对于usb转串口的driver 读USB数据 的想法: 我打算用一个定时器,定时的产生 读usb设备数据的请求包。 把读到的数据,保存到buffer, 再完成IOCTL_SERIAL_WIAT_ON_MASK 请求包,并设置 有(RX_CHAR) 标志。 我现在的问题是: 1)在 没有 应用程序IRP_MJ_READ 请求的情况下, driver应怎样产生 读usb设备数据的请求包。 2)若用IoAllocateIrp() 创建一个Irp, MDL 应如何创建? 3)该Irp的参数应如何填充? 不知道我的想法是否可行。 还请大家指点。 做过usb转串口和 串口转TCP/IP的高人,请赐教!! |
|
上一页
下一页