c – 如何从处于低功耗状态的USB设备获取字符串描述符?
作者:互联网
我正在尝试用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的一项功能,通常会在不使用时将设备置于挂起模式.它在控制面板的电源设置部分非常深入,所以如果您无法找到它,请告诉我.
在我看来,你应该能够唤醒设备,即使它处于选择性暂停状态,以便你可以从中获取信息,但我不确定如何做到这一点,这可能取决于你的设备驱动程序使用.
标签:ioctl,c,windows,usb,acpi 来源: https://codeday.me/bug/20190910/1801461.html