Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: d2xx и FT245R
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Denis Kuptsov
Возникла следующая проблема - не генерируется событие, указанное с помощью 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
Поднимаю тему.

Проблема оказалась в том что программисты из 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);


Порнография конечно, но вроде работает.

Успехов!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.