阅读:1240回复:3
无法获取设备描述符?
我写一个跟Cypress Thermometer类似的usb驱动。
采用DS开发,win2000平台。 还没开始写读写函数,想先实现安装。 现在呢,是在OnStartDevice函数出错,在KUsbLowerDevice::ActivateConfiguration(1)处返回了AC_FAILED_TO_GET_DESCRIPTOR。 这个函数就是为了处理配置设备的。但我却无法获取设备描述符。 NTSTATUS UsbDemoDevice::OnStartDevice(KIrp I) { NTSTATUS status = STATUS_UNSUCCESSFUL; AC_STATUS acStatus = AC_SUCCESS; I.Information() = 0; acStatus = m_Lower.ActivateConfiguration( 1); switch (acStatus) { case AC_SUCCESS: t << \"USB Configuration OK\\n\"; GetStringDescriptors(); status = STATUS_SUCCESS; break; case AC_FAILED_TO_GET_DESCRIPTOR: t << \"Failed to get devicedescriptor\\n\"; break; //出错!!! } } 再softice跟踪进去这个ActivateConfiguration函数, 出错在: status = GetDeviceDescriptor( &desc ); if ( !NT_SUCCESS(status) ) { acstatus = AC_FAILED_TO_GET_DESCRIPTOR; goto Exit; } 确实是这里获取设备描述符出错。 好烦,安装上驱动出现一个感叹号! 哪位提供一下建议,谢谢! 在前面的初始化声明是: m_Interface.Initialize( m_Lower, //KUsbLowerDevice 0, //InterfaceNumber 1, //ConfigurationValue 0 //Initial Interface Alternate Setting ); // Initialize each Pipe object m_Endpoint1IN.Initialize(m_Lower, 0x81, 8); 这些都没有问题啊。 用DDK里的usbview,运行测试了一下: Device Descriptor: bcdUSB: 0x0110 bDeviceClass: 0x00 bDeviceSubClass: 0x00 bDeviceProtocol: 0x00 bMaxPacketSize0: 0x08 (8) idVendor: 0x1111 idProduct: 0x2222 bcdDevice: 0x0001 iManufacturer: 0x01 iProduct: 0x02 iSerialNumber: 0x00 bNumConfigurations: 0x01 ConnectionStatus: DeviceConnected Current Config Value: 0x00 Device Bus Speed: Low Device Address: 0x02 Open Pipes: 0 打开的管道竟然是0个,难道是固件的问题?但是我已成功开发了linux下的驱动啊。 [编辑 - 12/12/03 by snow2moutain] |
|
沙发#
发布于:2003-12-13 13:32
自己顶一下。 :)
有人能说说这是哪里出了问题么? |
|
板凳#
发布于:2003-12-13 14:05
我写的那个根具体的芯片无关,纯粹的API而已,所以帮不了你
|
|
地板#
发布于:2003-12-13 21:34
搞定了,原来是自己安装顺序搞的不好。因为要屏蔽系统自带的驱动。
另外,最好别用DS自带的安装工具,我就是贪简便。 |
|