liu_li75
驱动牛犊
驱动牛犊
  • 注册日期2002-11-21
  • 最后登录2003-05-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1605回复:8

在计算机的驱动程序中,怎么知道收到了USB设备的新数据?

楼主#
更多 发布于:2003-02-19 15:22
Windriver可以对USB的pipe进行读写,可对于主机方来说,怎么
确定什么时候收到了新数据?USB的各个pipe也没有标志,又怎么
知道这个pipe的数据是否已经读过?
希望做过USB驱动的高手给指点一下。谢谢啦。
stevehe
驱动牛犊
驱动牛犊
  • 注册日期2002-12-15
  • 最后登录2011-02-16
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望24点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-21 10:44
我也想知道
stevehe
驱动牛犊
驱动牛犊
  • 注册日期2002-12-15
  • 最后登录2011-02-16
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望24点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-25 14:25
没有人回答,顶一下
liu_li75
驱动牛犊
驱动牛犊
  • 注册日期2002-11-21
  • 最后登录2003-05-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-25 16:10
怎么没有人回答?
我看了几天Cypress和DDK的例子,现在似乎明白一些了。
是不是不断地用Deviceiocontrol来读pipe呀,发一次读回一帧的
数据吗?
但还不明白应用程序中的数据内存地址如何与驱动程序的缓存对应?
如果用同步方式传输,在应用程序中该怎么建立数据缓存呢?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-26 09:17
usb的pipe是由标志的,在你返回的端点描述符中指定了那个端点是输入那个是输出,当你要读一个端点或写一个端点时,ioctl函数中应该指定是那一个,比如cypress的2、4、6、8等。
liu_li75
驱动牛犊
驱动牛犊
  • 注册日期2002-11-21
  • 最后登录2003-05-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-26 13:47
我看了驱动程序,是可以指定对哪个pipe进行读写。但是读pipe时
怎么知道该pipe的数据是否读过?比如用同步方式时,需要不断的读,每一次读都要deviceiocontrol和readfile一下吗,如果一个
deviceiocontrol后跟多个readfile,是否每次读到的数据都是同一批数据?
另:FX2在同步方式时,能达到 3600Bytes/微帧 的速度吗?我要采集的是图象数据,每行1380个象素,14.3M的频率,用行为间隔来打
包的话,95us就有一个packet,而2.0的微帧是125us,可以用两个同步的pipe吗?大家给出出主意吧。
PJcwh
驱动牛犊
驱动牛犊
  • 注册日期2003-01-08
  • 最后登录2004-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-27 09:14
此问题很具体,实际,大家有知道的请贴出来
Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-06 10:16
  我随便说两句,有不对的地方帮我指出一下。
 开始我也是在应用程序中不断调用ReadFile来读pipe中的数据,但是我发现速度太慢,容易丢包。所以我现在是在驱动程序中开辟线程,提交URB读请求,不过现在还是丢包,让我怀疑是发送的问题了。不知道他们说的传输查询是不是就是我用的在线程中循环提交度的URB?
Tomorrow Never Die
drivermaster
驱动中牛
驱动中牛
  • 注册日期2003-02-26
  • 最后登录2004-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-06 17:46
readfile是相对于应用程序来说的,而deviceiocontrol是相对于驱动程序来说的,比较理想的方法是在应用程序中readfile读入一个大的数据文件,在驱动程序中read IRP线程会将该数据包分解为无数大小小于等于usb芯片端点的数据包,如d12 control out 为16bytes,
mainendpoint 为64bytes 或者128bytes。

不建议在应用程序中显露deviceiocontrol函数,除非有特殊要求。
菩提本无树,明镜亦非台, 本来无一物,何处染尘埃? 身似菩提树,心如明镜台, 愿将勤拂拭,勿使染尘埃。
游客

返回顶部