LINUX.ORG.RU

отправка ESC последовательностей в vt102


0

1

Есть проблема с отправкой ESC последовательностей на vt102.

В двух словах задача:
Проксировать ttyUSB. Решение должно позволять прерывать сессию пользователя и выполнять ряд служебных команд на железке подключенной к /dev/ttyUSB.

Решение которое было использовано:
Запускается демон, который открывает 2 pts и читая с одного из них транслирует все в ttyUSB.
Когда приходит запрос со второго терминала, сессия первого приостанавливается, выполняются команды со второго терминала и продолжается сессия первого.

Проблема:
Все работает отлично за исключением такой казалось бы мелочи как клавиши перемещения курсора. Up, Down, Left, Right. Вижу что minicom пытается слать последовательности вида 'ESC [ A' (для Up) но в командной строке железки все тихо. Точнее даже не совсем так, если несколько раз нажать Up то на консоли происходит реакция как при нескольких нажатиях ESC. Есть подозрение что почему то не считываются символы идущие за ESC. Демон который роутит потоки с терминалов работает абсолютно прозрачно. Т.е. что получил с терминала то заслал в ttyUSB. Чтение и запись идут побайтно. Аналогичная проблема если на железке открыть файл в vi. Вижу что minicom меняет режим, начинает слать 'ESC O A' но курсор не двигается.

Если minicom открывает напрямую ttyUSB то все работает корректно. В чем может быть дело?
На железке терминал VT102 (согласно тому что записано в $TERM). скорост ttyUSB 115200.

Может быть есть какая-то тонкость в отправке именно ESC последовательностей?


>Чтение и запись идут побайтно
может дело как раз в этом? попробуйте увеличить размер буфера, чтобы отправлять esc-последовательность целиком за раз. тем более, что это USB.

xydo ★★ ()
Ответ на: комментарий от xydo

Кажется понял где грабли. Я читаю в неблокирующем режиме. Таким образом получается что 2 read не успевают сработать потому что с клавиатуры пришел только 1b а еще два байта в пути. Поэтому после этого на терминал улетает 1b + 2 байта мусора а нужные два байта отправляются последовательно друг за другом. Попробую побороть эту беду через while. Менять режим файла что-то не хочется, хотя не уверен что затратнее

bobych ()
Ответ на: комментарий от bobych

Да, грабли были именно там. Теперь все работает.

bobych ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.