Код: Выделить всё
function getModemAnswer(FTHandle)
--clear scanning flag
RFMfound = false;
--setting RX and TX timeouts, set latency timer
result1 = modem:SetTimeouts(FTHandle,50,50);
result2 = modem:SetLTimer(FTHandle,10);
result3 = modem:SetRTS(FTHandle, false);
if (result1 == 0 and result2 == 0 and result3 == 0) then
--transmit 2 bytes (0x58,0x58) mean EXIT
result1 = modem:WriteFrame(FTHandle,{88,88},2);
if (result1 == 2) then
Dialog.Message("Notice", FTLibraryVer, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); -- delay 1
--reset RX,TX buffers
temptable3 = modem:FTReset(FTHandle,false,false,true,true);
if (temptable3[3] == 0 and temptable3[4] == 0) then
--enter RFM configure mode
result1 = modem:SetRTS(FTHandle, true);
result2 = modem:SetRTS(FTHandle, false);
if (result1 == 0 and result2 == 0) then
--transmit 2 bytes (0x58,0x58) mean EXIT
result1 = modem:WriteFrame(FTHandle,{88,88},2);
if (result1 == 2) then
Dialog.Message("Notice", FTLibraryVer, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); -- delay 2
--reading answer (0x3E), if possible
temptable3 = modem:ReadFrame(FTHandle,1);
temptable4 = temptable3[3];
if (temptable3[1] == 0 and temptable3[2] > 0 and temptable4[1] == 62) then
RFMfound = true;
end
end
end
end
end
end
return RFMfound
end
SetTimeouts(FTHandle,50,50) - эт я устанавливаю таймауты для RX и TX
SetLTimer(FTHandle,10) - эт равносильно FT_SetLatencyTimer
SetRTS(FTHandle, false), SetRTS(FTHandle, true) - сброс/установка сигнала RTS
WriteFrame(FTHandle,{88,88},2) - посылка массива из двух элементов
FTReset(FTHandle,false,false,true,true) - универсальная функция сброса, сброс: порта, устройства, RX буффера, TX буффера (в данном случае 2 последних сбрасываю)
ReadFrame(FTHandle,1) - функция чтения из буффера, возвращает массив, 1й элемент - код ошибки (если были), 2й - кол-во принятых байт, 3й - содержит массив, собственно полученные данные
Я конечно догадываюсь, что мой выход из ситуации - это работать по таймерам внутри своей программы под винду, НО. ЗАЧЕМ ВСЕ ЭТИ ТАЙМАУТЫ предоставляемые библиотекой ftd2xx.dll? Может я неправильно понимаю логику их работы?


