crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Отслеживание отключения usb-устройств
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


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

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

Как вариант, есть такая библиотека Qxt, типа расширение возможностей Qt. Я никогда не пользовался, но судя по документации можно использовать нативные для данной платформы возможности. Например, их клас QxtApplication позволяет устанавливать фильтры см. QxtNativeEventFilter

Может это тебе поможет
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?

При этом главное - сразу определить отключение именно НАШЕГО устройства, не проверяя реестры и прочие источники
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 2.10.2023, 5:18