阅读:1605回复:8
在计算机的驱动程序中,怎么知道收到了USB设备的新数据?
Windriver可以对USB的pipe进行读写,可对于主机方来说,怎么
确定什么时候收到了新数据?USB的各个pipe也没有标志,又怎么 知道这个pipe的数据是否已经读过? 希望做过USB驱动的高手给指点一下。谢谢啦。 |
|
沙发#
发布于:2003-02-21 10:44
我也想知道
|
|
板凳#
发布于:2003-02-25 14:25
没有人回答,顶一下
|
|
地板#
发布于:2003-02-25 16:10
怎么没有人回答?
我看了几天Cypress和DDK的例子,现在似乎明白一些了。 是不是不断地用Deviceiocontrol来读pipe呀,发一次读回一帧的 数据吗? 但还不明白应用程序中的数据内存地址如何与驱动程序的缓存对应? 如果用同步方式传输,在应用程序中该怎么建立数据缓存呢? |
|
地下室#
发布于:2003-02-26 09:17
usb的pipe是由标志的,在你返回的端点描述符中指定了那个端点是输入那个是输出,当你要读一个端点或写一个端点时,ioctl函数中应该指定是那一个,比如cypress的2、4、6、8等。
|
|
5楼#
发布于:2003-02-26 13:47
我看了驱动程序,是可以指定对哪个pipe进行读写。但是读pipe时
怎么知道该pipe的数据是否读过?比如用同步方式时,需要不断的读,每一次读都要deviceiocontrol和readfile一下吗,如果一个 deviceiocontrol后跟多个readfile,是否每次读到的数据都是同一批数据? 另:FX2在同步方式时,能达到 3600Bytes/微帧 的速度吗?我要采集的是图象数据,每行1380个象素,14.3M的频率,用行为间隔来打 包的话,95us就有一个packet,而2.0的微帧是125us,可以用两个同步的pipe吗?大家给出出主意吧。 |
|
6楼#
发布于:2003-02-27 09:14
此问题很具体,实际,大家有知道的请贴出来
|
|
7楼#
发布于:2003-03-06 10:16
我随便说两句,有不对的地方帮我指出一下。
开始我也是在应用程序中不断调用ReadFile来读pipe中的数据,但是我发现速度太慢,容易丢包。所以我现在是在驱动程序中开辟线程,提交URB读请求,不过现在还是丢包,让我怀疑是发送的问题了。不知道他们说的传输查询是不是就是我用的在线程中循环提交度的URB? |
|
|
8楼#
发布于:2003-03-06 17:46
readfile是相对于应用程序来说的,而deviceiocontrol是相对于驱动程序来说的,比较理想的方法是在应用程序中readfile读入一个大的数据文件,在驱动程序中read IRP线程会将该数据包分解为无数大小小于等于usb芯片端点的数据包,如d12 control out 为16bytes,
mainendpoint 为64bytes 或者128bytes。 不建议在应用程序中显露deviceiocontrol函数,除非有特殊要求。 |
|
|