Ответ: Насчет чтения из буфера. Если он пустой, программа действительно виснет, поэтому
PortStatus := Get_USB_Device_QueueStatus; // Получить статус
If PortStatus <> FT_OK then
Begin
Exit; // Выходим что-то с устройством
end
else
begin
if FT_Q_bytes<>2 then // FT_Q_bytes показывает сколько байт есть в буфере
begin
Exit; // Если приняли не 2 байт - выход
end;
Read_USB_Device_Buffer(FT_Q_Bytes); // Читаем 2 байта
Смысл в том что при чтении из буфера указывать FT_Q_bytes в качества параметра
Насчет записи могу только сказать что Write_USB_Device_Buffer возвращает число переданных байт... Хотя думаю это вам известно