Обновил свой tty_term

Nov 23, 2023 17:25

Давно уже надо было добавить всяких полезностей в терминальный клиент и пофиксить кое-какие баги. Основное - режимы ввода и отображения данных. При вводе доступны такие режимы.
  • TEXT - все, что ввели, отправляется; строки завершаются заданным в параметрах командной строки EOL. Непечатаемые символы можно через escape-последовательности вводить.
  • RAW - пробелы не учитываются; текст отправляется как текст; числа в пределах 0..255 распознаются в системах по основанию 2, 8, 10 и 16.
  • HEX - все числа трактуются как шестнадцатеричные; если число длинное, оно разбивается на пары, которые считаются одним байтом; пробелы игнорируются.
  • RTU RAW - тот же RAW, но каждый раз в конце посылки вставляется контрольная сумма.
  • RTU HEX - тот же HEX, но с контрольной суммой.
При выводе доступны режимы TEXT (непечатаемые символы выдаются как "0xXX"), RAW (в 16-й форме с разделением пробелами) и HEX (в формате hexdump -C).
Учитывая то, что в скором времени придут китайские частотники, с которыми надо будет экспериментировать (понимаю ли они широковещательный адрес, или придется каждый оснащать переходником CAN-modbus), очень даже вовремя я это все доделал.

И немножко картинок. Вот так выглядит экран в режиме вывода HEX:



По F1 можно посмотреть справку:



Заодно добавил возможность вывода сообщений об ошибках (черным на красном фоне поверх строки статуса) - буду пользоваться этим в дальнейшем развитии терминала.
А вот так он принимает в формате RTU HEX и добавляет контрольную сумму (чтобы принимать эхо, я воткнул в USB PL2303 с замкнутыми Rx-Tx):



Избавился от пары сегфолтов (бывает: для увеличения буфера char** на N штук, я увеличивал его на N байт), добавил обновление экрана в реальном времени (до этого wgetch у меня была блокирующей, поэтому после изменения размера экрана нужно было какую-нибудь кнопку нажать, чтобы это все дело отработало).
Вот я еще обратил внимание, что надо бы мне добавить возможность работы с обычным сокет-файлом, т.к. иначе для эмуляции работы с сокетами нужно или сервер какой-то простой рисовать, или пользоваться netcat'ом, socat'ом и подобными вещами.

linux, всячина, c

Previous post Next post
Up