_3m 4 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Возникла проблемка с последовательным портом в линукс. Не могу найти описание как организовать проверку ошибок принимаемых данных, таких как TTY_BREAK, TTY_FRAME, TTY_PARITY и TTY_OVERRUN. Изучение исходников драйвера tty/serial показало что в буфере драйвера имеется два массива - один для принятых данных, второй для флагов, т.е. драйвер хранит внутри пару байт+флаг, кроме того в драйвере имеются счетчики ошибок. Вся эта информация мне необходима в приложении для корректной обработки сбоев протокола связи а как ее получить - никакой вразумительной информации не нашел, гугл выдает слишком много мусора. Данные бинарные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 18 ноября, 2011 Опубликовано 18 ноября, 2011 · Жалоба никакой вразумительной информации не нашел, гугл выдает слишком много мусора. В консоли набрать: $ man 3 termios Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 4 18 ноября, 2011 Опубликовано 18 ноября, 2011 · Жалоба В консоли набрать: $ man 3 termios man termios зачитан до дыр. ответов на интересующие вопросы не найдено. Для начала простейшая задача: После открытия порта необходимо определить не находится ли RXD в состоянии break. Если break - ожидать прекращаение break. Состояние Break может быть непрерывным. Физически требуется мониторить один бит из регистра статуса UART. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 18 ноября, 2011 Опубликовано 18 ноября, 2011 · Жалоба Не могу найти описание как организовать проверку ошибок принимаемых данных, таких как TTY_BREAK, TTY_FRAME, TTY_PARITY и TTY_OVERRUN. ...... man termios зачитан до дыр. ответов на интересующие вопросы не найдено. Ответ на то что вы описали находится буквально в первых строчках мана IGNBRK Ignore BREAK condition on input. BRKINT If IGNBRK is set, a BREAK is ignored. If it is not set but BRKINT is set, then a BREAK causes the input and output queues to be flushed, and if the terminal is the controlling terminal of a foreground process group, it will cause a SIGINT to be sent to this foreground process group. When neither IGNBRK nor BRKINT are set, a BREAK reads as a null byte ('\0'), except when PARMRK is set, in which case it reads as the sequence \377 \0 \0. IGNPAR Ignore framing errors and parity errors. PARMRK If IGNPAR is not set, prefix a character with a parity error or framing error with \377 \0. If neither IGNPAR nor PARMRK is set, read a character with a parity error or framing error as \0. После открытия порта необходимо определить не находится ли RXD в состоянии break. Если break - ожидать прекращаение break. Состояние Break может быть непрерывным. Физически требуется мониторить один бит из регистра статуса UART. Мониторинг регистров - это для ногодрыгательной ОС, в нормальных ОС этим занимаются драйверы, в Linux можно кроме этого сделать 1 mmap регистров контроллера в юзерспейс (man mem, man mmap) 2 использовать UIO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 4 24 ноября, 2011 Опубликовано 24 ноября, 2011 · Жалоба Ответ на то что вы описали находится буквально в первых строчках мана... Вы тем что в мане написано пользоваться пробовали ? Очевидно что НЕТ потому что иначе написали бы несколько другое. Итог: Для осмысленной реакции на ошибки необходимо писать свою Line discipline. В стандартных все обрезано по самые гланды. Мониторинг регистров - это для ногодрыгательной ОС, в нормальных ОС этим занимаются драйверы, в Linux можно кроме этого сделать 1 mmap регистров контроллера в юзерспейс (man mem, man mmap) 2 использовать UIO. Стоящая прикладная ЗАДАЧА всегда первична и необсуждаема, ее нужно решать независимо от ее совместимости или несовместимости с идеологией линукс. Да, linux-way это когда в юзерспейсе невозможно сделать что либо нестандартное и на любой чих нужно править ядро. Увы :( mmap непортируемо. Подробности про BREAK: Статический BREAK детектировать невозможно в принципе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 24 ноября, 2011 Опубликовано 24 ноября, 2011 (изменено) · Жалоба Да, linux-way это когда в юзерспейсе невозможно сделать что либо нестандартное и на любой чих нужно править ядро. Это защита "от дурака" и в данном случае она отлично сработала :) Изменено 24 ноября, 2011 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться