阅读:1081回复:2
PC驱动能否根据USB的描述符动态配置端点?
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端驱动根据设备送上来的描述符动态配置端点,可以吗? |
|
沙发#
发布于:2007-06-27 09:31
up 一下
|
|
板凳#
发布于: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); |
|