Перейти к содержанию
    

d2xx и FT245R

Возникла следующая проблема - не генерируется событие, указанное с помощью 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 работает нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поднимаю тему.

 

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

 

 

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

 

Успехов!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...