Estou me conectando a uma porta serial usando a tela: screen /dev/cu.usbserial-A703XAOG
. O dispositivo na outra extremidade envia apenas um retorno de carro para linhas separadas. A tela só começa no início da linha ao receber um retorno de carro e não desce uma linha e, portanto, substitui a última linha de saída pela próxima linha de saída.
Eu posso alterar a icrnl
configuração da porta serial e ela converterá o retorno de carro em um avanço de linha. Embora a tela agora desça uma linha antes de escrever a próxima linha de saída, ela não inicia no início ao receber apenas uma alimentação de linha.
Eu despejei o arquivo .termcap usando o Ctrl-A, Ctrl+ .. Eu li sobre termcap e aprendi que:
Se o terminal tiver um comando que se mova para a primeira coluna da próxima linha, esse comando pode ser dado como nw (nova linha).
Então este é o meu ~/.screenrc
arquivo atual:
termcap SC nw=^M
Onde SC
corresponde ao nome no arquivo .termcap despejado.
Isso não dá o efeito que eu esperava. Talvez o termcap
comando não seja o caminho a seguir?
Como posso fazer a tela descer uma linha E começar no início ao receber apenas CR de um dispositivo serial?
Editar:
Aqui está a saída de sudo stty -f /dev/cu.usbserial-A703XAOG -a
quando a tela está conectada à porta serial:
speed 9600 baud; 0 rows; 0 columns;
lflags: -icanon -isig iexten -echo echoe echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho -pendin -nokerninfo
-extproc
iflags: -istrip -icrnl -inlcr -igncr -ixon -ixoff -ixany -imaxbel -iutf8
-ignbrk brkint -inpck ignpar -parmrk
oflags: -opost -onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd -hupcl clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
erase = ^?; intr = ^C; kill = ^H; lnext = ^V; min = 100;
quit = ^\; reprint = ^R; start = ^Q; status = ^T; stop = ^S;
susp = ^Z; time = 2; werase = ^W;
Editar:
Eu entendo que alguns softwares podem resolver isso, por exemplo, no PuTTY eu precisaria habilitar a configuração "LF implícito em cada CR" e no Serial eu precisaria habilitar "Interpret Standalone CR as CRLF". Mas minha pergunta é especificamente sobre screen
, porque esse é o software que estou usando atualmente para conectar à porta serial.
Editar:
A tela emula o terminal VT100 e deve reconhecer as sequências de controle ( source ). Eu preciso definir "Modo de alimentação automática de linha" (também conhecido como modo de nova linha ). Isso deve ser feito usando a sequência de controle do modo definido com o valor do parâmetro 20: ESC [ 20 h
.
Como posso passar essa sequência de controle para a tela?
Algo que pareceu funcionar para mim foi manipular o pseudo-tty que a tela possui enviando a sequência de escape do modo de nova linha que você encontrou e também dando a ele um comando stty para converter o retorno de carro em uma nova linha. Use
ps a
para encontrar o pty:e depois dê os comandos