![](/img/trans.png)
[英]How do you get the raw descriptor data from a USB HID device in Windows?
[英]How to get string descriptor from a USB device which is in low power state?
我正在尝试用C ++编写一个应用程序,其中列出了从USB设备获取的信息。 我正在关注USBView( Github )实用程序的代码。
当设备处于D0
电源状态(完全供电)时,我能够获得字符串描述符,但是当设备进入低功耗状态(D2)
,我不是。
IOCTL IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION
返回错误“连接到系统的设备无法正常运行”。 USBView实用程序显示当设备处于低功耗状态时,字符串描述符不可用。
这种行为是奇怪的,在USB规范中没有找到它的参考。 我已经检查了2个设备,我得到了相同的行为。 即使在D2
状态下,我也可以获得其他描述符,例如设备描述符,BOS描述符等。
当USB设备处于低功耗状态时,有没有办法获取字符串描述符? 如果没有,有没有办法暂时将其转为D0电源状态? 可能ACPI就是答案,但它是一个非常低级别的API,我发现它无法理解。 Windows是否提供任何高级API来设置电源状态?
USB 2.0规范定义了挂起模式,即总线上没有流量且设备进入休眠以节省电量的状态。 由于没有流量,因此您无法在挂起模式下从设备请求字符串描述符。 在你做到这一点之前,你必须用特殊的信号唤醒它。
我能想到的唯一可以帮助你的是禁用“USB选择性挂起设置”,这是Windows的一项功能,通常会在不使用时将设备置于挂起模式。 它在控制面板的电源设置部分非常深入,所以如果您无法找到它,请告诉我。
在我看来,你应该能够唤醒设备,即使它处于选择性暂停状态,以便你可以从中获取信息,但我不确定如何做到这一点,这可能取决于你的设备驱动程序使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.