阅读:5230回复:23
虚拟串口怎样才能支持modem上网?现在已经可以通过modem拨打电话,但是拨号上网却不行, 需要处理什么? |
|
最新喜欢:kb219 |
沙发#
发布于:2004-07-02 17:22
既然是Modem,有必要写虚拟串口程序吗?
|
|
|
板凳#
发布于:2004-07-03 09:59
是这样的,一个USB-to-UART16550的转接芯片,usb接到pc,另外那头接modem。PC那头要虚拟出串口,这样modem才能接上。
现在就是碰到了上面那个问题。 拨号过程是这样的:拨出ATDT96169的时候,modem 的 OH 灯亮,过一会 DCD 抖了,CD 灯亮,然而这个时候,拨号软件就认为出错了, purge 了 RX,TX,然后挂断。 |
|
地板#
发布于:2004-07-03 12:26
查到问题了,DCD 改变后,modem 就已经连接到串口了,然后拨号软件就发一个 IOCTL_SERIAL_PURGE (mask: 0xE0) 来 purge RxAbort,
RxClear, TxClear,这时返回的状态错了(0xc0000037 port not connect),点解? 用 softice 跟踪,驱动里返回的是 success 啊,苦恼~~~ |
|
地下室#
发布于:2004-07-03 16:37
查到问题了,DCD 改变后,modem 就已经连接到串口了,然后拨号软件就发一个 IOCTL_SERIAL_PURGE (mask: 0xE0) 来 purge RxAbort, IOCTL_SERIAL_PURGE怎么处理的? mask是0xE0吗?就是Irp->AssociatedIrp.SystemBuffer的4字节为0xE0咯,这个恐怕不太对吧。 |
|
|
5楼#
发布于:2004-07-03 17:14
试了一下用超级终端打开虚拟串口直接拨号96169,就可以连上,要我输入用户名和密码,ok。
那么,我想应该是modem驱动和虚拟串口驱动交互的时候出问题,不知道哪里有关于modem驱动和API的资料? 对于IOCTL_SERIAL_PURGE的处理应该是没有问题的,主要是modem得到的返回状态错了,它认为modem没有连接到com口了,咋回事呢? |
|
6楼#
发布于:2004-07-08 16:47
今天终于可以使用modem上网了。
其实只要完全根据 ddk 的 serial src 来处理各种irp就可以了。 感谢acidfish和qinxg两位大哥的宝贵意见。 |
|
7楼#
发布于:2004-11-11 17:17
这位大哥,GET_MODEMSTATUS和WAIT_ON_MASK两个request您是怎么实现的?虚拟串口可没有modemstatus寄存器呀。
windows的拨号程序对RLSD的检查让我很摸不着头脑。肯请指教。 |
|
8楼#
发布于:2004-11-12 11:21
我的设备里有一个uart16550的芯片,所以可以通过读它的寄存器来得到modemstatus.
至于wait_on_mask的IRP的处理,这里也说不清楚,参考ddk的serial例子,对照着改就行了。 只要这些都处理好了,不用管拨号程序怎么对RLSD检查,拨号程序其实也就是做两件事,一是检查状态变化,通过wait_on_mask,一是读写数据。 |
|
9楼#
发布于:2005-04-06 11:14
老大,你的驱动能在搜索硬件时提示安装modem吗?
IRP_MN_QUERY_DEVICE_RELATIONS 需要做什么处理吗? 为什么我的在add new divice 后是 unknown modem 啊? |
|
10楼#
发布于:2005-04-08 13:42
好久没有上来看看了,呵呵~~
你要有个安装modem的inf文件才能找到modem啊,或者直接选一个MS的标准modem...... 我做的东西只是一个串口,modem是另一个设备,所以肯定不能自动提示安装modem了。。。 [编辑 - 4/8/05 by Shentu] |
|
11楼#
发布于:2005-04-25 13:13
我的设备里有一个uart16550的芯片,所以可以通过读它的寄存器来得到modemstatus. 我调试的时候,modem和拨号程序的“握手”步骤老是不合拍,收发几包数据就断了。郁闷死! 顺便问一下:IOCTL_SERIAL_GET_STATS 这个IO请求也必须处理吗? |
|
12楼#
发布于:2005-04-25 19:27
是的,必须处理。具体参考ddk的serial例子。 |
|
13楼#
发布于:2005-04-27 08:08
多谢老大帮忙!
|
|
14楼#
发布于:2005-05-13 12:40
断开网络的时候需要什么特殊处理吗?为什么我把应有的mask都返回了,2000 拨号程序也读取了 CD 变低情况,但却不发AT指令结束通信哪?
|
|
15楼#
发布于:2005-05-13 14:07
断开网络的时候需要什么特殊处理吗?为什么我把应有的mask都返回了,2000 拨号程序也读取了 CD 变低情况,但却不发AT指令结束通信哪? 我没有碰到过这种情况,所以只有一个土办法啦,对照着真正的串口modem比较你的驱动跟微软驱动不一样的地方...... |
|
16楼#
发布于:2005-05-15 14:41
最初写的时候,都是用Dbgview、PORTMON对比以及监视的。
现在拨号的情况下,PORTMON也打印不出信息。 不知道是我的用法不对,还是PORTMON本身就不支持。 |
|
17楼#
发布于:2005-05-16 10:09
portmon是串口过滤,所以通过串口的包都会被监视到的。现在还有一种工具就是ds3.2里的wdmsnif,这个也可以把所有的IRP都抓到。一定要最新版的DriverStudio才有这个工具。公网可以到零度地带下载。
|
|
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的种子? |
|
19楼#
发布于:2005-06-06 11:15
我觉得是,应该就是没有处理好mask的那些动作~~
|
|
上一页
下一页