阅读:5919回复:59
讨论:usb接到pc后显示为串口的驱动
物理设备通过usb连接到pc,然后在pc上显示为虚拟的串口,并且可以用串口操作的软件来操作读、写......
想了几天,有个粗略的想法是这样的: 总共写3个驱动,底下的是usb的驱动,中间是一层过滤的驱动,最上面的是虚拟串口的驱动。 因为是第一次做这个,不知道这样行不行?还有没有更简单的办法? 欢迎大家讨论 |
|
最新喜欢:![]() |
沙发#
发布于:2004-04-13 17:28
查了一些资料,现在虚拟串口好像可以用超级终端打开了。
我想把中间层和usb的驱动写在一起,不知道这样可不可以? 另外,怎样使这两层驱动之间进行“通信”?有做过这方面的东东的 大虾,能不能介绍点经验?给个链接也行啊!! |
|
板凳#
发布于:2004-04-15 13:13
我也想了解这方面的内容,望知道的大虾指点迷津。顶一下!
|
|
|
地板#
发布于:2004-04-16 12:04
怎么没有几个人进来讨论啊?
现在我觉得框架应该是这样的:usb驱动+虚拟串口驱动, 在usb驱动里注册一个interface,然后在虚拟串口驱动通过这个guid来与usb驱动“通信”,在虚拟串口层做各种irp处理。 |
|
地下室#
发布于:2004-04-21 13:01
我是把usb和串口做成了一个驱动。
一般的串口程序能工作。但是,对于串口以中断方式读取串口还存在一些问题。 有兴趣的话, 我们可以一起研究,sourcecode 也可以给你。 [编辑 - 4/26/04 by dennis761222] |
|
5楼#
发布于:2004-04-22 14:48
嗯,好啊,好啊。。。。
一起讨论,共同进步啊!! 我现在分别写了usb层和虚拟串口层的驱动, 设想是通过内部ioctl来通信,具体就是虚拟串口层收到一个标准的ioctl的时候,比如ioctl_serial_set_baud_rate,在串口层处理一下,得到divisor,然后往usb下层驱动发,再在usb层处理,打包往下发。 这样可以的吗?好像比较麻烦,大概要处理7个这样的请求。 |
|
6楼#
发布于:2004-04-22 14:58
我是把usb和串口做成了一个驱动。 我的邮箱:shentu@263.net,学习一下,谢谢啊! |
|
7楼#
发布于:2004-04-22 15:05
可以的。
这样, 应该对ioctrl command 有个 编号,对应的在usb设备要实现ioctol的处理。 你能把你的usb设备功能说说吗? |
|
8楼#
发布于:2004-04-22 19:23
也不是usb设备。
其实是这样的,pc的usb口->usb ip核->dw_16550芯片->别的东东(modem等),大概就是这样子了。 |
|
9楼#
发布于:2004-04-22 19:51
我有个疑惑就是:
怎样才能在上层驱动的fdo加到与下层驱动通信的设备栈中? ntddk的例程里,一般都是在AddDevice的时候,把fdo加到pdo。 是不是要在IOCallDriver之前,用IOGetDeviceObjectPoint打开下层 的驱动,然后把irp发下去?还是在addDevice的时候就建好设备栈? |
|
10楼#
发布于:2004-04-23 13:53
不好意思,重新看了wdm的那本电子书,把上面的问题搞清楚了。
其实,那是两种方法,都是可以的。。。 另外,我想在usb客户程序里每隔1ms就poll一次中断传输得到的数据。资料上说中断传输的polling是由usb类驱动程序实现的,那么, 我怎样才能改变它的时间间隔?在我的驱动程序里,是不是要每隔 1ms就调用某个程序去读取数据? |
|
11楼#
发布于:2004-04-23 14:10
我给你的soucecode中,实现了interrupt endpoint polling data from usb devcie. 在intRead.c文件中。
中断端点是由系统 poll在usb 设备的数据。 ,只有系统收到usb设备数据是, 对中断端点的读操作才会完成。 在usb 驱动中, 我觉得和bulk没多大区别。 |
|
12楼#
发布于:2004-04-23 14:42
刚刚看了,应该是你这样就可以实现了的。
硬件工程师告诉我,是在枚举设备的时候告诉系统要1ms查询一次。 |
|
13楼#
发布于:2004-04-26 11:45
我也在写一个类似的驱动。
我的设备是:usb接口的hid设备连接到pc,用虚拟com来和hid设备通讯。 因为windows中有自带的usb接口的hid设备的驱动程序,所以我不必写usb那一层的驱动,只是在虚拟串口的驱动中直接读写usb设备。 感觉处理虚拟串口的众多ioctl很麻烦!! 有个问题: 这个虚拟串口驱动在超级终端下可以正常工作,但是在一个使用mscomm这个控件与com通讯的程序中,我对一个read irp调用了 completeirp,但是在应用程序端调用mscomm.input时他里面没有数据,这是怎么回事? 各位可以解释一下吗,谢谢! |
|
14楼#
发布于:2004-04-26 15:05
mscom和Hyperterminal采用了不同的方式读取数据。
mscom用事件通知的方式, 在虚拟串口驱动中要处理mask IO_CTRL. Hyperterminal用查询的方式。 |
|
15楼#
发布于:2004-04-26 15:40
我有返回mask,但因为是虚拟的串口,对于象
SERIAL_EV_DSR,SERIAL_EV_CTS,SERIAL_EV_RLSD,SERIAL_EV_BREAK 我不知道该怎样设置,我就全部返回给应用程序了。 dennis761222 能否解释一下事件通知和查询方式有什么不同? 我对串口的有些细节好像还是不太了解,可以提供个资料看看吗? |
|
16楼#
发布于:2004-04-26 17:01
mscom和Hyperterminal采用了不同的方式读取数据。 to dennis: 你的驱动做得很不错了。而且要比搂主提供的思路要简单的多。有机会也向大家报告一下嘛。 to hover: 多搜一搜网上的资料。串口的很多细节的确不太好把握。多做一些实验,应该会有更多的体会的。 |
|
17楼#
发布于:2004-04-26 17:30
多介绍些资料网站好么?
弄来弄去就找到这里一个中文的 呵呵 |
|
18楼#
发布于:2004-05-25 10:07
我是把usb和串口做成了一个驱动。 我也做了和你一 |
|
19楼#
发布于:2004-08-17 16:41
我是把usb和串口做成了一个驱动。 我也想作一个这样的驱动,可是刚开始学不懂的东西很多,不知道能不能得到一份sourcecode哪? kb219@sina.com.cn |
|
上一页
下一页