acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:36350回复:122

虚拟串口设备驱动程序

楼主#
更多 发布于:2004-01-16 10:42
断断续续做了大半年。块到春节了,马上要走一趟长线旅游。没时间做了。发给大家。仅供参考。
做的比较粗糙,很多需要完善改进的地方。
请大牛们多提意见。

祝大家新年快乐
附件名称/大小 下载次数 最后更新
2004-01-16_SimSerial.rar (228KB)  1607

最新喜欢:

dawnsongdawnso... 笑傲糨糊笑傲糨糊
Hover
驱动牛犊
驱动牛犊
  • 注册日期2003-02-04
  • 最后登录2004-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-16 11:53
多谢acidfish!!
真是及时雨.

能和你交流么:
QQ:59063276

另外, 有没有详细说明文档,请发:
wwb81@sohu.com

再次感谢!!!
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-16 15:15
原理大体都写了。工作机制也讲了。再详细的说明文档,目前还没有时间写。等回来以后再写了。
具体的实现细节可以看代码里边。都是很简单的。很难懂的代码我也写不出来。 :D
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
地板#
发布于:2004-01-17 13:06
很好!!
跟用null-modem cable没分别.
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-17 13:43
呵呵,总算看到反馈的声音了。 :D
仿造的原型是
http://www.eltima.com/products/virtual_drivers/
试用版有14天的试用期。
(ft,半年前还是3.0呢,今天再去看看,已经出到4.0版本了)
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
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]
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-17 14:46
我倒是还没有注意到eltima的real<->virtual这个功能。我原来用的3.0只有virtual<--->virtual的功能。
这个应该是一个发展方向。

目前我的这个虚拟串口程序也可以显示两个设备。只不过设备名是“Bitee VSerial Toaster DeviceDesc”
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
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 ));

祗是这句,两台机都是,很奇怪 !!
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-01-25 14:04
SetupDiSetDeviceRegistryProperty加上FriendlyName後
我还真没有用过这个函数。回头调用一下看看。谢谢kmk老兄指点。

DebugPrint()的问题,可能是%ws的问题。
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
9楼#
发布于:2004-01-25 14:52
DebugPrint()的问题:
这%ws是我改的,在Sysinternals 及 osr的debug monitor下一样死机.
其他人有同样问题吗 ??


[编辑 -  1/27/04 by  KMK]
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
10楼#
发布于:2004-02-07 12:04
Hover
驱动牛犊
驱动牛犊
  • 注册日期2003-02-04
  • 最后登录2004-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-02-09 17:22
楼主,我编译了你的程序,却有如下问题:
http://www.driverdevelop.com/forum/html_60163.html?1076318359,
请指教!!
dennis761222
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2006-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-02-10 14:37
在这个驱动开发过程中,我主要是用filter driver对别人的虚拟串口驱动进行了监视。当时采用的win32app只有超级终端。没有自己编写一个使用WaitCommEvent 工作方式的app。所以可能对于IOCTR_SEIAL_WAIT_ON_MASK 可能支持的不太好。

我记得当时对于如何设置串口等待的event (如RX_CHAR),也曾经面临过这个问题。但是过了一段时间以后改变了想法,没有在试图对串口等待的event 进行处理。现在咋一想有点想不起来了。回头再看看。
dennis761222
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2006-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-02-10 14:48
我正在做一个usb转串口的 driver.

我看了你的虚拟串口后,就把你的内容加入我的usb driver.

 现在,能用超级终端打开usb设备,也能从虚拟串口发数据usb设备。 但我不知道,在usb转串口中如何实现读usb数据,再用event
通知打开虚拟串口的应用程序。

希望你能指点。




[编辑 -  6/20/04 by  dennis761222]
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-02-10 15:19
我使用超级终端打开虚拟串口的时候发现:ReadFile是不断的发送下去的。当上一个ReadFile返回数据以后超级终端又调用了ReadFile来接收下一个数据。这当中并没有用到event。
dennis761222
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2006-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-02-10 15:39
你说得没错。

读于com端口, 目前,我知道 应用程序有两种方式可以获得串口数据。
  1) 采用查询的方式,超级终端就是的。
  2) 采用event 的方式, 只有,设定的event发生, 才读串口的数据。这中方式, 就要处理IOCTL_SERIAL_WAIT_ON_MASK.  
  我现正想办法处理这个热REQUEST.

有什么好的意见和想法,请通知我。

 谢谢!!

acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-02-10 15:58
win32app的event传给driver,然后driver进行触发有比较成熟的例子。这个论坛上搜一下就有了。因为我手头上没有调试环境和比较正确的串口事件触发式接收程序(win32app),所以不方便进行开发。
我觉得首先应该确定IOCTL_SERIAL_WAIT_ON_MASK和IOCTL_SERIAL_SET_WAIT_MASK传给driver的参数。哪一个是event,然后再做进一步的处理。
过一段时间我在进行这方面的完善。
glqgglq
驱动小牛
驱动小牛
  • 注册日期2001-04-16
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-02-11 09:38
前面的大侠,我对usb转串口的东东很感兴趣,不知可否发一份给我,大家一起研究.glqg@21cn.com
dennis761222
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2006-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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的高人,请赐教!!
上一页
游客

返回顶部