if (tcsetattr(UART[Port], TCSANOW, &UART_cfg[Port])<0) return 4;
fcntl(UART[Port], F_SETFL, FNDELAY);
return 0;
}
При такой комбинации
UART_cfg[Port].c_iflag |= INPCK;
UART_cfg[Port].c_iflag &= ~(IGNPAR);
Все байты с правильной чётностью доходят,
а с неправильной linux проглатывает, а мне не отдаёт
А если так UART_cfg[Port].c_iflag |= INPCK|PARMRK;
то вместо ошибочного байта в массив пишется 255, а сам байт всё равно я не получаю.
А устройство шлёт в 9 битном режиме 1 байт с битом паритета=1, а дальше с битом 9 = 0,
Если PARENB=0, то я вообще ничего не получаю.
Хочу чтобы linux выдавал мне все байты подряд не обращая внимания на ошибку-несоответствие бита паритета
UART_cfg[Port].c_iflag &= ~(IGNPAR|INPCK); - так байты тоже проглатываются linux-ом
Впечатление странное :
Передаётся байт = 2 с ошибкой чётности
при UART_cfg[Port].c_iflag |= INPCK|IGNPAR; этот байт действительно проглатывается и длина на принятого на 1 меньше
при UART_cfg[Port].c_iflag &= ~IGNPAR; длина правильная, но на месте байта с ошибкой 0.
Если PARMRK=1, то получаем 255 0 0, хотя должно быть 255 0 2.
То есть ошибочный байт где то в linux подменяется на 0, хотя на осциллографе отчётливо видно что это 2.