Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ Отслеживание отключения usb-устройств

Автор: gf59ru 29.9.2009, 17:30

Всем доброго времени суток!

Ситуация следующая:
Имеется устройство USB-Serial, пишем под него программу
Когда прога получает сообщение WM_DEVICECHANGE (приходит только с wParam=DBT_DEVNODES_CHANGED), сразу проверяет реестр (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbser - список подключенных usb-serial устройств и HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<****> - описание устройства)

Если устройство пропадает из реестра, значит, пора отключаться от виртуального ком-порта
Это срабатывает, кроме случая, когда usb-шнурок выдернуть и сразу воткнуть
Похоже, реестр просто не успевает обновляться, и отключения от ком-порта не происходит (а без переподключения дальше с ним работа не идёт)

Можно ли как-то определить момент отключения нашего устройства, минуя реестр?
Например, подписаться на сообщение WM_DEVICECHANGE с параметром DBT_DEVICEREMOVECOMPLETE?

При этом главное - сразу определить отключение именно НАШЕГО устройства, не проверяя реестры и прочие источники

Автор: Litkevich Yuriy 29.9.2009, 17:51

Цитата(gf59ru @ 29.9.2009, 21:30) *
а без переподключения дальше с ним работа не идёт
преобразователи интерфейса разные есть.
Я пользуюсь только теми, что на основе микросхем фирмы FTDI chip.
Использую для работы QexSerialPort.
Дак вот эта связка всегда железно выдаёт отрицательное значение количиства принятых байт, когда порт вдруг отваливается. Я при такой ситуации порт закрываю и затем периодически пытаюсь открыть.

Прога работает с полгода, работает без нареканий.

Как вариант, есть такая библиотека Qxt, типа расширение возможностей Qt. Я никогда не пользовался, но судя по документации можно использовать нативные для данной платформы возможности. Например, их клас http://docs.libqxt.org/0.5.0/classQxtApplication.html позволяет устанавливать фильтры см. http://docs.libqxt.org/0.5.0/classQxtNativeEventFilter.html

Может это тебе поможет

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)