lumber
驱动牛犊
驱动牛犊
  • 注册日期2006-07-01
  • 最后登录2008-07-17
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望8点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1080回复:2

PC驱动能否根据USB的描述符动态配置端点?

楼主#
更多 发布于:2007-06-25 15:50
pc 驱动用driver studio 自动生成,假设一个IN端点一个OUT端点
一般端点1为IN端点,端点2为OUT端点,在设备的初始化函数中会设置端点,代码如下

m_Endpoint1IN.Initialize(m_Lower, 0x81, 65536);
m_Endpoint2OUT.Initialize(m_Lower, 0x02, 65536);


这样的话,设备端的端点配置也定死了,必须是 “端点1为IN端点,端点2为OUT端点”。


我想做得灵活一点,PC端驱动根据设备送上来的描述符动态配置端点,可以吗?
lumber
驱动牛犊
驱动牛犊
  • 注册日期2006-07-01
  • 最后登录2008-07-17
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望8点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-27 09:31
up 一下
lumber
驱动牛犊
驱动牛犊
  • 注册日期2006-07-01
  • 最后登录2008-07-17
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望8点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-03 08:31
找到方法了
在对KUSBPIPE对象做Initialize操作之前,先发送两个URB请求
第一个URB请求活动DescriptorRequest的长度
第二个URB请求得到Descriptor中断端点长度.

参考代码如下:

    NTSTATUS status;
    URB urb;
    USB_CONFIGURATION_DESCRIPTOR tcd;
    UsbBuildGetDescriptorRequest(&urb,
                 sizeof(_URB_CONTROL_DESCRIPTOR_REQUEST),
                 USB_CONFIGURATION_DESCRIPTOR_TYPE,
                 0,
                 0,
                 &tcd,
                 NULL,
                 sizeof(tcd),
                 NULL);

    status = m_Lower.SubmitUrb(&urb);


    ULONG size = tcd.wTotalLength;
    PUSB_CONFIGURATION_DESCRIPTOR pcd = (PUSB_CONFIGURATION_DESCRIPTOR) ExAllocatePool(NonPagedPool, size);
    UsbBuildGetDescriptorRequest(&urb,
                 sizeof(_URB_CONTROL_DESCRIPTOR_REQUEST),
                 USB_CONFIGURATION_DESCRIPTOR_TYPE,
                 0,
                 0,
                 pcd,
                 NULL,
                 size,
                 NULL);

    status = m_Lower.SubmitUrb(&urb);
游客

返回顶部