Добрый день. Есть девайс на 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.gif

P.S. Как вариант можно ещё наверное сразу после получения сообщения DBT_DEVICEARRIVAL начать вызывать функцию FT_Open() до тех пор, пока не получу FT_OK.