Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
阅读:5228回复:23

虚拟串口怎样才能支持modem上网?

楼主#
更多 发布于:2004-07-02 14:14

现在已经可以通过modem拨打电话,但是拨号上网却不行,
需要处理什么?

最新喜欢:

kb219kb219
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-02 17:22
既然是Modem,有必要写虚拟串口程序吗?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-03 09:59
是这样的,一个USB-to-UART16550的转接芯片,usb接到pc,另外那头接modem。PC那头要虚拟出串口,这样modem才能接上。
现在就是碰到了上面那个问题。
拨号过程是这样的:拨出ATDT96169的时候,modem 的 OH 灯亮,过一会 DCD 抖了,CD 灯亮,然而这个时候,拨号软件就认为出错了,
purge 了 RX,TX,然后挂断。
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-03 12:26
查到问题了,DCD 改变后,modem 就已经连接到串口了,然后拨号软件就发一个 IOCTL_SERIAL_PURGE (mask: 0xE0) 来 purge RxAbort,
RxClear, TxClear,这时返回的状态错了(0xc0000037 port not connect),点解?
用 softice 跟踪,驱动里返回的是 success 啊,苦恼~~~
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-03 16:37
查到问题了,DCD 改变后,modem 就已经连接到串口了,然后拨号软件就发一个 IOCTL_SERIAL_PURGE (mask: 0xE0) 来 purge RxAbort,
RxClear, TxClear,这时返回的状态错了(0xc0000037 port not connect),点解?
用 softice 跟踪,驱动里返回的是 success 啊,苦恼~~~

IOCTL_SERIAL_PURGE怎么处理的?
mask是0xE0吗?就是Irp->AssociatedIrp.SystemBuffer的4字节为0xE0咯,这个恐怕不太对吧。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-03 17:14
试了一下用超级终端打开虚拟串口直接拨号96169,就可以连上,要我输入用户名和密码,ok。
那么,我想应该是modem驱动和虚拟串口驱动交互的时候出问题,不知道哪里有关于modem驱动和API的资料?

对于IOCTL_SERIAL_PURGE的处理应该是没有问题的,主要是modem得到的返回状态错了,它认为modem没有连接到com口了,咋回事呢?
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-08 16:47
今天终于可以使用modem上网了。

其实只要完全根据 ddk 的 serial src 来处理各种irp就可以了。

感谢acidfish和qinxg两位大哥的宝贵意见。
pipipen
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2005-12-08
  • 粉丝0
  • 关注0
  • 积分-1分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-11-11 17:17
这位大哥,GET_MODEMSTATUS和WAIT_ON_MASK两个request您是怎么实现的?虚拟串口可没有modemstatus寄存器呀。

windows的拨号程序对RLSD的检查让我很摸不着头脑。肯请指教。
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-11-12 11:21
我的设备里有一个uart16550的芯片,所以可以通过读它的寄存器来得到modemstatus.
至于wait_on_mask的IRP的处理,这里也说不清楚,参考ddk的serial例子,对照着改就行了。
只要这些都处理好了,不用管拨号程序怎么对RLSD检查,拨号程序其实也就是做两件事,一是检查状态变化,通过wait_on_mask,一是读写数据。
kb219
驱动牛犊
驱动牛犊
  • 注册日期2004-08-17
  • 最后登录2008-06-19
  • 粉丝0
  • 关注0
  • 积分208分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-04-06 11:14
老大,你的驱动能在搜索硬件时提示安装modem吗?

IRP_MN_QUERY_DEVICE_RELATIONS 需要做什么处理吗?

为什么我的在add new divice 后是 unknown modem 啊?
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-04-08 13:42
好久没有上来看看了,呵呵~~
你要有个安装modem的inf文件才能找到modem啊,或者直接选一个MS的标准modem......

我做的东西只是一个串口,modem是另一个设备,所以肯定不能自动提示安装modem了。。。

[编辑 -  4/8/05 by  Shentu]
kb219
驱动牛犊
驱动牛犊
  • 注册日期2004-08-17
  • 最后登录2008-06-19
  • 粉丝0
  • 关注0
  • 积分208分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-04-25 13:13
我的设备里有一个uart16550的芯片,所以可以通过读它的寄存器来得到modemstatus.
至于wait_on_mask的IRP的处理,这里也说不清楚,参考ddk的serial例子,对照着改就行了。
只要这些都处理好了,不用管拨号程序怎么对RLSD检查,拨号程序其实也就是做两件事,一是检查状态变化,通过wait_on_mask,一是读写数据。


我调试的时候,modem和拨号程序的“握手”步骤老是不合拍,收发几包数据就断了。郁闷死!

顺便问一下:IOCTL_SERIAL_GET_STATS

这个IO请求也必须处理吗?
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-04-25 19:27

我调试的时候,modem和拨号程序的“握手”步骤老是不合拍,收发几包数据就断了。郁闷死!

顺便问一下:IOCTL_SERIAL_GET_STATS

这个IO请求也必须处理吗?


是的,必须处理。具体参考ddk的serial例子。
kb219
驱动牛犊
驱动牛犊
  • 注册日期2004-08-17
  • 最后登录2008-06-19
  • 粉丝0
  • 关注0
  • 积分208分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-04-27 08:08
多谢老大帮忙!
kb219
驱动牛犊
驱动牛犊
  • 注册日期2004-08-17
  • 最后登录2008-06-19
  • 粉丝0
  • 关注0
  • 积分208分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-05-13 12:40
断开网络的时候需要什么特殊处理吗?为什么我把应有的mask都返回了,2000 拨号程序也读取了 CD 变低情况,但却不发AT指令结束通信哪?






Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-05-13 14:07
断开网络的时候需要什么特殊处理吗?为什么我把应有的mask都返回了,2000 拨号程序也读取了 CD 变低情况,但却不发AT指令结束通信哪?


我没有碰到过这种情况,所以只有一个土办法啦,对照着真正的串口modem比较你的驱动跟微软驱动不一样的地方......
kb219
驱动牛犊
驱动牛犊
  • 注册日期2004-08-17
  • 最后登录2008-06-19
  • 粉丝0
  • 关注0
  • 积分208分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-05-15 14:41
最初写的时候,都是用Dbgview、PORTMON对比以及监视的。

现在拨号的情况下,PORTMON也打印不出信息。

不知道是我的用法不对,还是PORTMON本身就不支持。
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-05-16 10:09
portmon是串口过滤,所以通过串口的包都会被监视到的。现在还有一种工具就是ds3.2里的wdmsnif,这个也可以把所有的IRP都抓到。一定要最新版的DriverStudio才有这个工具。公网可以到零度地带下载。
kb219
驱动牛犊
驱动牛犊
  • 注册日期2004-08-17
  • 最后登录2008-06-19
  • 粉丝0
  • 关注0
  • 积分208分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-06-06 09:19
现在基本了解断开的步骤了,和拨号中途Cancel是一样的。唯一不同的就是Cancel时完成pending wait on mask的Set wait mask可以被发下来,而挂断拨号时不可以。

Set mask
wait mask
purge

--->:这里应该继续 有Set wait mask的。

set mask
wait mask
purge

getmodem。。。

难道问题不是出在 set wait mask;wait on mask;purge上?在拨号时候就埋下了后面bug的种子?
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-06-06 11:15
我觉得是,应该就是没有处理好mask的那些动作~~
上一页
游客

返回顶部