Как получить дескриптор строки с устройства USB, которое находится в состоянии низкого энергопотребления? - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь написать приложение на C ++, в котором перечислены сведения, полученные с USB-устройства.Я следую за кодом утилиты USBView ( Github ) для него.

Когда устройство находится в состоянии питания D0 (полностью включено), я могу получить строковые дескрипторы, но когда устройство выходитв состояние низкого энергопотребления (D2), а я нет.

IOCTL IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION возвращается с ошибкой «Устройство, подключенное к системе, не работает».Утилита USBView показывает, что строковые дескрипторы недоступны, когда устройство находится в состоянии низкого энергопотребления.

enter image description here

Такое поведение является странным и нигде в спецификации USBя нашел ссылку на это.Я проверил с 2 устройствами, и я получаю такое же поведение.Я могу получить другие дескрипторы, такие как дескриптор устройства, дескриптор BOS и т. Д. Даже в состоянии D2.

Есть ли способ получить дескрипторы строк, когда устройство USB находится в состоянии низкого энергопотребления?Если нет, есть ли способ на мгновение перевести его в состояние питания D0?Вероятно, ACPI является ответом, но это API очень низкого уровня, который я нахожу подавляющим, чтобы понять.Предоставляет ли Windows какой-либо API высокого уровня для установки состояний питания?

1 Ответ

0 голосов
/ 25 июня 2018

Спецификация USB 2.0 определяет режим ожидания, состояние, когда на шине нет трафика, и устройства переходят в спящий режим для экономии энергии.Поскольку трафика нет, вы не можете запрашивать строковые дескрипторы с устройства в режиме ожидания.Вам придется разбудить его специальной сигнализацией, прежде чем вы сможете это сделать.

Единственное, о чем я могу подумать, это может помочь вам - отключить «Выборочную приостановку USB», функцию Windows, которая обычнопереводит устройства в режим ожидания, когда они не используются.Это довольно глубоко в части настроек электропитания панели управления, поэтому дайте мне знать, если у вас возникнут проблемы с его поиском.

Мне кажется, что вы должны быть в состоянии разбудить устройство, даже если оно находится вприостановить, чтобы вы могли получить информацию от него, но я не уверен, как именно это сделать, и это, вероятно, зависит от того, какие драйверы использует ваше устройство.

...