Есть ли способ гарантировать, что устройство, подключенное к последовательному порту, который появляется в реестре, готово к использованию?

Я использую функцию, которая периодически запускается и получает список последовательных портов, используя функции SetupDiEnumDeviceInfo и SetupDiOpenDevRegKey.

Код можно найти здесь:
https://github.com/wjwwood/serial/blob/master/src/impl/list_ports/list_ports_win.cc

Иногда, когда я подключаю устройство и пытаюсь открыть порт, который появляется в списке (например, COM3), чтобы использовать его, я получаю сообщение об ошибке: «Указанный порт не существует». Это может произойти один или два раза, и тогда я смогу открыть порт и нормально использовать устройство.

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

Следует также упомянуть, что я указываю полный путь к устройству. Если «COM3» — это устройство, я указываю «\. \ COM3».

1

Решение

Я думаю, что вы делаете это неправильно (то есть чтение реестра не является хорошим / правильным способом обнаружения USB-устройств).

У меня была эта проблема (обнаружение того, что какой-то бренд MP3-плеера подключен к USB) около трех лет назад, и в итоге я использовал WMI. Eсть Пример приложения C ++ это иллюстрирует это.

WMI позволит вам использовать WQL (аналог SQL) для запросов к устройствам, затем фильтровать результаты и идентифицировать ваши интересные устройства.

0

Другие решения


По вопросам рекламы [email protected]