[an error occurred while processing this directive]
|
{D8:=1}
GetCommState(PortH, CntBlk);
CntBlk.Parity := MARKPARITY;
SetCommState(PortH, CntBlk);
{передать первый байт}
WriteByte(OutBuf[0]); {WriteFile... плюс анализ ERROR_IO_PENDING и ERROR_IO_INCOMPLETE}
{D8:=0}
SLEEP(10); {"Грязное" решение проблемы}
CntBlk.Parity := SPACEPARITY;
SetCommState(PortH, CntBlk);
WriteByte(OutBuf[0]);
При переключении с MARKPARITY на SPACEPARITY, это переключение влияет и на байт, который уже начал передаваться. В результате даже первый байт приходит с D8=0. В принципе, помогает тупая задержка на время заведомо больше времени передачи байта. Но это какое-то "грязное" решение вопроса. Хотелось бы идентифицировать момент завершения передачи байта (А НЕ ПРОСТО ПЕРЕЗАПИСИ ЕГО В БУФЕР) и только тогда переключать PARITY. Анализ ERROR_IO_PENDING и ERROR_IO_INCOMPLETE информирует только о ПЕРЕЗАПИСИ ЕГО В БУФЕР.
Подскажите, если кто знает! И, если можно, в мыло.
E-mail: info@telesys.ru