LINUX.ORG.RU

Мультиплексирование USART

 ,


0

1

Есть устройство управляемое через последовательное соединение (ttyACM*,rfcomm*), с помощью CLI. Сделал там возможность вывода телеметрии, чтобы строить интересующие меня графики. Но это происходит синхронно, то есть работа CLI блокируется на время вывода. Делаю вот так в двух терминалах.

$ picocom -l ... /dev/rfcomm0
(sh) ...
(sh) tel_flush_sync
123,123,23,123, ...
345,345,22,234, ...
... # большой блок, выводится ~10 секунд

$ cat /dev/rfcomm0 | my_plot_tool

А хочется, чтобы через одно соединение и CLI и телеметрия непрерывно шла. Со стороны устройства могу выдать все, что понадобится. Но как это принять? Делать прослойку мультиплексор тоже плохо, убивается возможность работать напрямую через простой текстовый эмулятор терминала. Тогда можно сразу делать GUI с бинарным протоколом. А сейчас нет доступа к CLI пока выводится телеметрия, выводить хочется не кусками в всегда.

Как бы просто и красиво решить проблему.

★★

Сделать в устройстве отдельный порт для телеметрии. (Как в усб модемах некоторых)

В общем, «быстро, дёшево, качественно. Выбери любые два» :)

aol ★★★★★ ()

Ну так поставь мультиплексор на синхроимпульсы и Tx господина, а Rx господина тупо соедини через Шоттки с Tx рабов. В чем проблема?

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

Тьфу, дальше названия не дочитал.

ТС, ты какой-то тупняк хочешь. Да еще и путаешь USART и RS-232 (который, есличо, базируется на UART, и мультиплексировать его по причине асинхронности ну никак нельзя!).

anonymous ()

Шли одни данные с включённым битом чётности, другие с выключенным. Конфигурируй оба терминала так, чтобы один принимал только чётность=1, другой только чётность=0.

На железке можно сэмулировать чётность как 9-битное слово.

anonymous ()

Почему нельзя слать телеметрию в одном потоке? Просто будет создаваться новая строка, обрамленная эскейп-символами, ну будет засорять терминал конечно...

Например, чтобы телеметрия высылала сообщения и тут же их стирала. Программа терминал это получит ввиде мелькания, а программа телеметрии ничего не упустит

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от anonymous

Конфигурируй оба терминала так, чтобы один принимал только чётность=1, другой только чётность=0

А кстати, мысль то хорошая. На месте ТС я бы присмотрелся к ней, вроде всё логично, и обычный терминал схавает.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Для этого надо читать в двух разных процессах. Сейчас cat перехватывает чтение и в терминале я вывода не вижу. Можно наверно с помощью socat сделать разветвитель на несколько процессов.

Пока перевешивает вариант «оставить все как есть». И может быть добавить отправку команд в устройство вслепую (пока выводится телеметрия) без эхо.

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

А хочется, чтобы через одно соединение и CLI и телеметрия непрерывно шла.

$ man picocom
...
       --send-cmd | -s
          Specifies the external program (and any arguments to it) that will be used for transmitting files.

          Default: "sz -vv"
...

$ man sz
...
/tmp/szlog stores debugging output (sz -vv)
...

Не пробовал /tmp/szlog поглядеть?

Deleted ()

Если ты в своем устройстве сделал поддержку USB ACM, то просто расширь дескрипторы на составное устройство и добавь еще один ACM. В этом случае через один терминал будешь телеметрию получать, а через другой - управлять.

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

Да, просто я думал можно аппаратно два приемных порта сделать.

Я такие задачи решал простым python-скриптом, он как надо принимал и куда надо раскидывал. socat можно, если уметь его настраивать, а мне оказалось проще на питошке накатать скриптик

I-Love-Microsoft ★★★★★ ()