y_hyla
驱动牛犊
驱动牛犊
  • 注册日期2002-11-20
  • 最后登录2003-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1158回复:5

关于传输的问题

楼主#
更多 发布于:2003-05-08 00:46
如果有两个PIPE,请问如何从中选择一个来进行传输
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-08 10:39
你指的是那一边的啊!是否说得具体一点!
token
驱动牛犊
驱动牛犊
  • 注册日期2003-04-09
  • 最后登录2010-04-29
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-08 12:45
这要根据你的两个终端描述符(endpoint descriptor)的前后位置以及该端口(interface discriptor)模式下固件中所处描述符列表的位置而定,在使用通道时只要填入该端口模式下该管道的序号(从0开始顺序向下数所得的数)就能对其操作。你可找一些厂家框架核固件结合起来看就很容易明白了。
cogan
驱动牛犊
驱动牛犊
  • 注册日期2002-07-09
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望21点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-09 20:15
yes
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-09 22:42
最直接的方法是用softice调试一下源代码,只要有源程序,一般是在selectinterface函数,或者buildpipelist函数里处理的端点信息,每个端点会有个端点号,根据这个端点好可以找到相应的端点句柄。看下面这个函数:
NTSTATUS
D12_BuildPipeList(
    IN  PDEVICE_OBJECT DeviceObject
    )
{
    PDEVICE_EXTENSION deviceExtension;
    ULONG i;
    WCHAR Name[] = L\"\\\\PIPE00\";//端点名称
    PUSBD_INTERFACE_INFORMATION interface;//接口信息,里面包含有端点信息

    deviceExtension = DeviceObject->DeviceExtension;
    interface = deviceExtension->Interface;

    deviceExtension = DeviceObject->DeviceExtension;

    for (i=0; i<D12_MAX_PIPES; i++)//确定端点名字
    {

        Name[6] = \'X\';
        RtlCopyMemory(deviceExtension->PipeList.Name,
                      Name,
                      sizeof(Name));
    }

    //
    // build a list of pipe names based on the interface
    //

    for (i=0; i<interface->NumberOfPipes; i++) {

        Name[6] = \'0\' + (USHORT) i;
        RtlCopyMemory(deviceExtension->PipeList.Name,
                      Name,
                      sizeof(Name));

        deviceExtension->PipeList.PipeInfo =
            &interface->Pipes;//这里面存的就是端点的信息,包括句柄,端点类型最大包大小等

        deviceExtension->PipeList.Opened = FALSE;
    }

    return STATUS_SUCCESS;
}


里面的具体函数和结构msdn里都有,自己看一下就明白了。关键的有USBD_INTERFACE_INFORMATION和USBD_INTERFACE_LIST_ENTRY(上面没有)
y_hyla
驱动牛犊
驱动牛犊
  • 注册日期2002-11-20
  • 最后登录2003-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-10 02:07
thank you very much!
游客

返回顶部