TLDR - Configurei onlcr
no meu terminal, mas não vejo o \r
sendo adicionado
Se conectar dois conversores seriais FTDI juntos e conectá-los ao meu computador, recebo duas portas chamadas /dev/ttyUSB0
e/dev/ttyUSB1
Se eu abrir os dois picocom
em terminais diferentes, posso garantir que estão conectados, corretamente, enviando mensagens para frente e para trás, e se eu parar de usá- C-A C-Q
lo, deixo as portas configuradas da seguinte forma:
$ stty -F /dev/ttyUSB0 -a
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc
-ixany -imaxbel -iutf8
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl
echoke -flusho -extproc
$ stty -F /dev/ttyUSB1 -a
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O;
min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
Agora se eu abrir dois terminais para ouvir as duas portas seriais:
$ cat -v /dev/ttyUSB0
$ cat -v /dev/ttyUSB1
(na verdade só vou precisar de um deles para este experimento específico, mas não custa nada ter os dois)
e então em um terceiro terminal, envie uma única linha como esta:
$ echo this is a test > /dev/ttyUSB1
e, em seguida, envie mais uma linha para provar que estou imprimindo retornos de carro:
$ echo -e 'this is another test\r' > /dev/ttyUSB1
então é isso que eu vejo:
$ cat -v /dev/ttyUSB0
this is a test
this is another test^M
Por que não vejo ^M
a linha 1 e ^M^M
a linha 2?
icrnl
está desligado em ambos os dispositivos, então não deveria ser convertido de volta, certo?
Por que isso está (ou não) acontecendo?
Seu stty mostra
-opost
qual desliga todo o processamento de saída, portanto,onlcr
não tem efeito.