asslittle
驱动牛犊
驱动牛犊
  • 注册日期2003-12-18
  • 最后登录2004-09-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1305回复:9

driverstudio中如何得到pipe0的实例?

楼主#
更多 发布于:2004-03-02 15:08
我想通过pipe0传几个字节到EP0BUF中去,如何找到pipe0?

ds中,可以用kusbpipe定义自己的pipe,但pipe0呢?
我怎么进行pipe0的传输?

最新喜欢:

r2109twr2109t...
asslittle
驱动牛犊
驱动牛犊
  • 注册日期2003-12-18
  • 最后登录2004-09-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-03 09:05
是用DS开发的人太少,还是我问的问题太菜呢?

顶一下,希望有人能给讲讲,谢谢!

[编辑 -  3/3/04 by  asslittle]
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-03 10:05
控制端点不提倡直接使用你所说的这种通信方式。如果你去看usb1.1文档的话,会得到这样的信息:根据第5章(5.4, 5.5)第8章(8.5.2)和第9章的内容,控制端点与其他端点不同,它的传输是由USB组织定义好了一部分(主要是setup packet)。也就是在transaction上一层也作了定义。这在其他端点上是没有的。所以,如果你想利用端点0传自己的数据,该协议也给了你机会,就是使用Vendor commands。对于你使用的DS来说,就是使用IOCTL_XXX_XXXX之类的东西就可以了。对于新作的程序,在wizard阶段会给你添加的机会的。

应该说,对于一个能够完成自举的系统来说,管道或端点的非对称性是一个简单的选择。
A strong man can save himself. A great man can save another.
asslittle
驱动牛犊
驱动牛犊
  • 注册日期2003-12-18
  • 最后登录2004-09-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-03 15:52
总算有人说话了,谢谢~
我也看过一些文档,好象不建议再定义一个控制传输的pipe.
usb1.1的没接触过,现在是直接做的2.0。

我就是自己定义的VendorRequest,应用程序的函数是这样调用的:
WriteFile(hDevice, buf, 64, &nWritten, NULL);
//创建64字节的buf,然后写几个东东到buf里

驱动程序中的write函数是这样的:
KUsbLowerDevice     m_Lower;
KIrp                I;
pUrb = m_Lower.BuildVendorRequest(
(PUCHAR)I.BufferedWriteSource(),
           // transfer buffer
I.WriteSize(), // transfer buffer size
0, // request reserved bits
0xF0, // 我自己定义的request
EP0BUF, // Value
FALSE, // out
TRUE, // Short Ok
NULL, // link urb
0,        // index
URB_FUNCTION_VENDOR_ENDPOINT // function
);
status = m_Lower.SubmitUrb(pUrb);

我用keil调试我的固件程序,发现ep0buf里的东西就没有改变,不知道是哪个地方的问题?
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-03 23:45
你的vendor request index怎么会是0xf0 ??? 太大了吧,应该在0~0x0f吧。
A strong man can save himself. A great man can save another.
asslittle
驱动牛犊
驱动牛犊
  • 注册日期2003-12-18
  • 最后登录2004-09-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-03-04 09:13
这个Request是一个8bit的值,除了标准的请求与cypress保留的请求外,00-FF都可以由你自己定义,来实现自己的应用程序的请求.

昨天又看了一下资料,这个参数用的不对:
(PUCHAR)I.BufferedWriteSource(),
// transfer buffer

由于我创建设备的时候,使用的是do_driect_io的标志,后面应该用mdl来访问应用程序的缓冲区.
改为:
KMemory M(I.Mdl());
用这个M就可以了.

但还是很郁闷,我改了之后,发现ep0buf里还是没有变化:(
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-04 09:57
我个人认为还是Request的问题。
Stand Request & Vendor Request 是在Request Type上面进行区分的。所以Request的值不必为之保留。

如果你的固件使用如下代码:
code void (*StdRequestHandler[16])(void) =
{
OnStdGetStatus,
OnStdClearFeature,
StdReservedHandler,
OnStdSetFeature,
StdReservedHandler,
OnStdSetAddress,
OnStdGetDescriptor,
StdReservedHandler,
OnStdGetConfigration,
OnStdSetConfigration,
OnStdGetInterface,
OnStdSetInterface,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler
};

//用户厂商请求
code void (*VendorDeviceRequest[])(void) =
{
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler,
read_write_register,
StdReservedHandler,
StdReservedHandler,
StdReservedHandler
};

void control_handler()
{
unsigned char type, req;

type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;

// help_devreq(type, req); //显示设备请求

if (type == USB_STANDARD_REQUEST)
{
HandleStdRequest(req);
// (*StandardDeviceRequest[req])();//调用标准请求
}
else if (type == USB_VENDOR_REQUEST)
(*VendorDeviceRequest[req])();//调用厂商请求
else
stall_ep0();
}

则Request的值不能超过函数指针数组的最大索引。
难道你的函数指针数组会大到0xf0吗?

希望能够帮到你。
A strong man can save himself. A great man can save another.
asslittle
驱动牛犊
驱动牛犊
  • 注册日期2003-12-18
  • 最后登录2004-09-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-04 10:49
搞定!确实如你所说,我改成0F就ok了!!!

我找了半天也没找到这个VendorDeviceRequest的指针数组,
我看过68013的手册,对于留给自己定义的request,它没有给出范围,
究竟在什么地方定义的这个范围?

看你不停的给人回帖,呵呵,真是辛苦了~

zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-03-05 23:07
光说辛苦,也不给点分,hehe,人心不古啊。
A strong man can save himself. A great man can save another.
asslittle
驱动牛犊
驱动牛犊
  • 注册日期2003-12-18
  • 最后登录2004-09-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-03-07 14:05
呵呵,我不知道你这么在乎给分,我对这个分不分的不感兴趣,
不过真的很谢谢你!分已经给你了^_^
游客

返回顶部