Сейчас реализовал через 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_DEVNODES_CHANGED
DBT_DEVNODES_CHANGED
DBT_DEVICEARRIVAL
DBT_DEVNODES_CHANGED
Если я сразу же после получения DBT_DEVICEARRIVAL пытаюсь выполнить FT_Open() или FT_GetDeviceInfoDetail(), получаю ошибку. Т.е. впечатление такое, что к этому моменту устройство ещё не готово и не пристуствует в системе. А вот если после получения DBT_DEVICEARRIVAL сделать задержку секунды в 4 - всё ок.
Собственно вопрос: есть ли какой-то способ однозначно определить что девайс подключен к ПК, присутствует в системе и готов к работе ? Или же использование задержки является вполне нормальным способом ? Всё вышесказанное пробовал пока только на WindowsXP. Возможно что на Семёрке и выше будет иначе
P.S. Как вариант можно ещё наверное сразу после получения сообщения DBT_DEVICEARRIVAL начать вызывать функцию FT_Open() до тех пор, пока не получу FT_OK.