>>так как ОС позволяют ошибку игнорировать, опускать или заменять нулем
В Windows можно только игнорировать, заменять нулем, блокировать операции чтения/записи (судя по MSDN),
а вот опускать/пропускать не получится наверное.
Эти опции устанавливаются в DCB:
StopReceivingfAbortOnError
If this member is TRUE, the driver terminates all read and write operations with an error status if an error occurs. The driver will not accept any further communications operations until the application has acknowledged the error by calling the ClearCommError function.
PassZerofErrorChar
Indicates whether bytes received with parity errors are replaced with the character specified by the ErrorChar member. If this member is TRUE and the fParity member is TRUE, replacement occurs.
ErrorChar
The value of the character used to replace bytes received with a parity error.
Но! Все эти опции в винде работают через Ж.. .
К примеру, если устанавливаю PassZero, то WaitCommEvent не генерирует событий на приход некоторых символов (например '6'),
и если набрав/жмакнув несколько раз '6666' а потом '7' - то событие появляется и класс читает все 5 символов (замененных нулями).
Если устанавливаю StopReceiving - то не получается остановить чтение, т.к.
перед тем как прочитать данные в классе вызывается метод bytesAvailable(), который содержит ClearCommError(), который
сбрасывает ошибку и разрешает чтение/запись. Поэтому чтение данных не останавливается (я так предполагаю).
В общем, в Windows много непонятных моментов ещё. И как ухитриться прикрутить её особенности к логике SerialPort для меня еще та загадка.
>>В этом случае все режимы реакции на ошибки эмулируются очень просто.
Не хотельсь бы заморачиваться с эмуляцией, т.к. это трата проц. времени и увеличение вычислительных ресурсов + замедление работы.
Хотельсь бы всё сделать нативными средствами.
Но посмотрим что получится.
-----
b-s-a, ок, делай что планировал, идеи в принципе понятны.