AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
阅读:1526回复:5

有关USB规范的讨论

楼主#
更多 发布于:2003-07-27 15:08
USB规范中提到:
1、endpoint0可以用于IN,OUT,而其他endpoint,如:endpointX要么是IN,要么是OUT。
2,endpoint0是规范缺省的,并且可用来传输数据。

那么如果如何通过endpoint0来传输数据呢?是不是需要fimeware解释每个命令,看是数据还是命令,或者叫需要自定义协议
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-27 18:59
自定义请求,叫做vendor request,就是厂商请求,和标准请求的格式是一样的,你可以让它有数据阶段也可以没有,如下:

   UsbBuildVendorRequest(urb, //ptr to urb
URB_FUNCTION_VENDOR_DEVICE,
(USHORT) siz, //siz of urb
0,
0x0, //reservedbits=bmRequestType
0x0C, //request = USBSCAN IOCTL_WRITE_REGISTER
wValue,
wIndex,
ioBlock->pbyData, //TransferBuffer
NULL, //mdl (unused)
length, //bufferlength
   NULL); //link
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-28 09:20
jinghuiren兄,在Windows驱动层我就是使用UsbBuildVendorRequest来生成vendor request的,DDK文档中这样对UsbBuildVendorRequest的第7个参数这样写到:
Value
Is a value, specific to Request, that becomes part of the USB-defined setup packet for the target. This value is defined by the creator of the code used in Request.
那么Value是否需要传递到硬件?如果是,起什么作用?
另外从文档可解释来看,数据应该放在TransferBuffer(或TransferBufferMDL )所指向的内存中,长度由TransferBufferLength 来表示,但是如果传输一个长度为n字节的数据,n大于硬件缓冲大小,那么怎样生成这个URB呢?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-28 09:48
一般来说这个value用来传输比较少的数据,比如你只有一个字节或者两个字节的数据的话可以直接放在value中传到设备方,这样数据阶段就不需要了

这个urb应该可以传输大于硬件端点缓冲区的数据量的,具体是多少我没有查证过,但我估计肯定会大于64字节的,你可以参考ddk或者msdn的帮助,你只要把数据放在TransferBuffer里,把长度放在TransferBufferLength 里即可,这个urb发送到usbd后被分成一个个的数据包发到设备方的,这个分包的过程不用你来控制。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-28 10:14
多谢jinghuiren兄的指点,不知老兄的QQ是多少?可告诉一下吗?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-28 10:24
你发mail给我吧
jinghuiren@163.com
游客

返回顶部