iskraufa 0 9 июля, 2007 Опубликовано 9 июля, 2007 · Жалоба Возникла следующая проблема - не генерируется событие, указанное с помощью FT_SetEventNotification - данные приходят, если проверять через FT_GetStatus по таймеру или вручную (по кнопке) - можно считать. Но ожидание события в отдельном потоке не срабатывает. Вот код (из процедур, завернутых в функции Дельфи, модуль находится на сайте FTDI http://www.ftdichip.com/Projects/CodeExamp...hi/D2XXUnit.zip FT_Event_Handle := CreateEvent(nil, false, True, 'FDTIEvent'); Set_USB_Device_Event_Notification(FT_EVENT_RXCHAR); Затем в отдельном потоке ожидание repeat if WaitForSingleObject(FT_Event_Handle,1000)=WAIT_OBJECT_0 then begin Get_USB_Device_Status; if FT_Event_Status=FT_EVENT_RXCHAR then begin //чтение данных end; end; until False; WaitForSingleObject всегда возвращает WAIT_TIMEOUT, если поставить INFINITE - просто начинается бесконечное ожидание. Может быть, кто-то сталкивался со схожей проблемой? Почему может не генерироваться событие? p.s. В режиме VCP работает нормально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jartsev 0 5 августа, 2009 Опубликовано 5 августа, 2009 · Жалоба Поднимаю тему. Проблема оказалась в том что программисты из FTDI написали косячную функцию Set_USB_Device_Event_Notification. Если в исходники вглядеться, то можно увидеть что в FT_SetEventNotification пихают неверные параметры. Поэтому вместо Set_USB_Device_Event_Notification пишем: PortStatus:=FT_SetEventNotification(FT_Handle,FT_EVENT_RXCHAR or FT_EVENT_MODEM_STATUS,hEvent); Но это еще не всё, похоже что при обработке процедуры потока сбрасывается указатель на событие hEvent. Вследствие этого процедура обработки потока выполняется один раз (правда бывает о раза к разу и несколько раз). Для лечения этого глюка в конце процедуры потока пишем еще раз: PortStatus:=FT_SetEventNotification(FT_Handle,FT_EVENT_RXCHAR or FT_EVENT_MODEM_STATUS,hEvent); Порнография конечно, но вроде работает. Успехов! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться