60楼#
发布于:2004-05-25 10:34
开始、程序、附件、通讯、超级终端
|
|
|
61楼#
发布于:2004-05-25 10:44
我在测试acidfish大侠的那个虚拟串口时,发现如果用大虾的驱动模拟出来的虚拟串口,经test.exe连接后 COM3<-->COM4 后 虚拟串口对event相应方式的读写不支持!你说得没错。这个虚拟传口驱动还尚未对超时,读写等进行完善。所以用一些异步读写传口的应用程序调试的话会出错。修改的话,就靠大家了。我最近比较忙,没有时间考虑这个项目了。等以后不忙了,会在进行完善的。 com->tcp的话,直接 app->ComX->tcp->net |
|
62楼#
发布于:2004-05-25 10:49
虚拟串口对event相应方式的读写不支持!你说得没错。这个虚拟传口驱动还尚未对超时,读写等进行完善。所以用一些异步读写传口的应用程序调试的话会出错。修改的话,就靠大家了。我最近比较忙,没有时间考虑这个项目了。等以后不忙了,会在进行完善的。
com->tcp的话,直接 app->ComX->tcp->net [/quote] 我把serial(sample in ddk)改成virtual com<->usb,也是在坐 |
|
63楼#
发布于:2004-05-25 11:04
[quote]
我把serial(sample in ddk)改成virtual com<->usb,也是在坐 |
|
64楼#
发布于:2004-05-25 11:22
那如此我就要做 |
|
65楼#
发布于:2004-05-25 12:21
差不多是这个意思。
|
|
66楼#
发布于:2004-05-25 17:26
acidfish大侠,我给你发了短信,麻烦您回答一下我的问题,谢谢
|
|
|
67楼#
发布于:2004-05-27 16:29
在device接上以後..CreateFile之前
|
|
68楼#
发布于:2004-05-27 16:55
[quote]在device接上以後..CreateFile之前
|
|
69楼#
发布于:2004-05-27 17:57
你使用的是超级终端吧?超级终端是采用的poll模式轮询进行ReadFile操作。除非IoMarkPending( Irp ) 我的程序里边就是这样做的。然后把Irp放在队列。等到跟这个端口连接的另外一个端口有数据发送的时候,在把这个Irp complete 例如:com10 <-> com11 当Read com 10 的时候,把read irp放在queue中。 当write com11 的时候,把com10 queue中的read irp complete [/quote] 我想到我有叫用了pnpports.dll |
|
70楼#
发布于:2004-05-27 17:59
[quote]
我想到我有叫用了pnpports.dll |
|
71楼#
发布于:2004-06-15 16:01
对usb设备读写,那么这样的话最少就要两个thread了,因为read阻塞的时候要保证write可以运行的。我观察到,开了超过1个thread后,只要读写操作了,最后就不能正常终止这个thread,非常的慢,大概要10分钟,即使那个thread已经没有IRP在处理了,也是这样, 就会导致不能热插拔,不知道如何解决? |
|
72楼#
发布于:2004-06-15 21:14
我在测试我改自acidfish虚拟串口时,用我的win32串口读写程序测试时,发现如下错误:
用portmon测得 16 0.00007794 ROCLink.exe IOCTL_SERIAL_GET_WAIT_MASK SiSerial2 INVALID DEVICE REQUEST 感觉好像就是这个ioctrl处理不当。我处理的方式为: case IOCTL_SERIAL_GET_WAIT_MASK: { if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength <sizeof(ULONG)) { status = STATUS_BUFFER_TOO_SMALL; break; } Irp->IoStatus.Information = sizeof(ULONG); *((ULONG *)Irp->AssociatedIrp.SystemBuffer) = deviceExtension->WaitMask; DebugPrint(("-- IOCTL_SERIAL_GET_WAIT_MASK --\n")); break; } 大致是参考ddk中源码 src->kernel->serial中的处理方式的 请问有什么问题吗!? 谢谢! 该iotrol到底要求返回什么东西!? |
|
|
73楼#
发布于:2004-06-15 23:36
我在测试我改自acidfish虚拟串口时,用我的win32串口读写程序测试时,发现如下错误: 修改为这样: case IOCTL_SERIAL_GET_WAIT_MASK: if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength <sizeof(ULONG)) { status = STATUS_BUFFER_TOO_SMALL; break; } status = STATUS_SUCCESS ; Irp->IoStatus.Status = status ; Irp->IoStatus.Information = sizeof(ULONG); *((ULONG *)Irp->AssociatedIrp.SystemBuffer) = deviceExtension->WaitMask; DebugPrint(("-- IOCTL_SERIAL_GET_WAIT_MASK --n")); break; 测试一下 |
|
|
74楼#
发布于:2004-06-19 14:43
呵呵,果然好使!谢谢
接下去要添加tcp部分了! 用TDI,慢慢学! |
|
|
75楼#
发布于:2004-06-19 22:09
呵呵,果然好使!谢谢 你现在在什么地方工作,我很希望认识更多的高手,如果方便请和我联系,我在深圳,msn是:mfczmh@sina.com |
|
|
76楼#
发布于:2004-07-08 10:02
非常感谢!
|
|
77楼#
发布于:2004-07-17 21:22
断断续续做了大半年。块到春节了,马上要走一趟长线旅游。没时间做了。发给大家。仅供参考。 问一个比较弱的问题, 请问,acidfish大侠提供的那个simserial里面连接COM口用的 test 项目,编译的时候,如果选择release版本的话出现如下错误 : Test.obj : error LNK2001: unresolved external symbol __imp__SetupDiDestroyDeviceInfoList@4 Test.obj : error LNK2001: unresolved external symbol __imp__SetupDiGetDeviceInterfaceDetailA@24 Test.obj : error LNK2001: unresolved external symbol __imp__SetupDiEnumDeviceInterfaces@20 Test.obj : error LNK2001: unresolved external symbol __imp__SetupDiGetClassDevsA@16 不知道如何该,btw,debug是好的! 要编译release版的话,在project setting里还要修改什么参数!? 我看 那些 SetupDiGetDeviceInterfaceDetail函数似乎是 ddk里面的函数! 请教大侠们! 3x QQ:6238204 |
|
|
78楼#
发布于:2004-07-19 08:47
link的时候加上Setupapi.lib 就行了。 |
|
79楼#
发布于:2004-08-05 09:25
请问各位大侠:
虚拟串口驱动程序的编写模式是属于WDM框架的吗?还是属于虚拟设备驱动一类的?这两种的开发模式是不是有很大差别呢?我看几乎所有的资料、书籍都在介绍WDM开发,而虚拟设备的开发却很少有人提。我也要做一个虚拟串口转网口的驱动程序,连本介绍“什么是虚拟串口”的最基本的入门书籍都找不到,更别说指导怎么开发了。看来只有通过多向各位请教来完成这个任务了,请大家多多赐教。 先谢了。 |
|