MicroDiP 1 18 апреля, 2014 Опубликовано 18 апреля, 2014 · Жалоба Добрый день. Есть девайс на FT232R. Работает с ПК (Windows XP) в режиме D2XX. Необходимо чтобы приложение автоматически определяло когда девайс подсоединяется к ПК и далее выполняло уже такие функции как FT_Open() и т.д. Сейчас реализовал через messages (WM_DEVICECHANGE). В аппликэйшенах на FTDI есть документ "AN_152_How To Detect The Connection And Removal Of USB Devices On A System", в котором говорится что девайс считается доступным после получения сообщения DBT_DEVICEARRIVAL: при подключении USB-устройства сперва ОС шлёт приложению сообщение DBT_DEVNODES_CHANGED. А затем уже DBT_DEVICEARRIVAL. Но по факту получается что при подключении устройства ОС шлёт три сообщения DBT_DEVNODES_CHANGED, потом одно DBT_DEVICEARRIVAL и затем ещё одно DBT_DEVNODES_CHANGED. Т.е. вот так: DBT_DEVNODES_CHANGED DBT_DEVNODES_CHANGED DBT_DEVNODES_CHANGED DBT_DEVICEARRIVAL DBT_DEVNODES_CHANGED Если я сразу же после получения DBT_DEVICEARRIVAL пытаюсь выполнить FT_Open() или FT_GetDeviceInfoDetail(), получаю ошибку. Т.е. впечатление такое, что к этому моменту устройство ещё не готово и не пристуствует в системе. А вот если после получения DBT_DEVICEARRIVAL сделать задержку секунды в 4 - всё ок. Собственно вопрос: есть ли какой-то способ однозначно определить что девайс подключен к ПК, присутствует в системе и готов к работе ? Или же использование задержки является вполне нормальным способом ? Всё вышесказанное пробовал пока только на WindowsXP. Возможно что на Семёрке и выше будет иначе :blink: P.S. Как вариант можно ещё наверное сразу после получения сообщения DBT_DEVICEARRIVAL начать вызывать функцию FT_Open() до тех пор, пока не получу FT_OK. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться