私はscreen:を使用してシリアルポートに接続していますscreen /dev/cu.usbserial-A703XAOG
。もう一方の端にあるデバイスは、個々の行にのみキャリッジリターンを送信します。スクリーンは、キャリッジリターンが受信されたときに行の先頭でのみ始まり、行の下には降りません。したがって、出力の最後の行は次の出力行で上書きされます。
シリアルポートの設定を変更できicrnl
、キャリッジリターンを改行に変換します。これで、次の出力行を書き込む前に画面が1行下に移動しますが、改行のみを受信した場合は最初から再開しません。
Ctrl-A、+を使用してCtrl.termcapファイルをダンプしました.。私はtermcapを読んで、次のことを学びました。
端末に次の行の最初の列に移動するコマンドがある場合は、そのコマンドをnw(newline)として指定できます。
これは私の現在の~/.screenrc
ファイルです。
termcap SC nw=^M
これはSC
ダンプされた.termcapファイルの名前と一致します。
これは私が期待した効果をもたらさなかった。たぶんtermcap
コマンドは正しい方法ではありませんか?
シリアルデバイスからCRのみを受信したときに画面を1行下に下げて最初から始めるにはどうすればよいですか?
編集する:
sudo stty -f /dev/cu.usbserial-A703XAOG -a
画面がシリアルポートに接続されたときの出力は次のとおりです。
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;
編集する:
この問題を解決できるソフトウェアがあることを知っています。パテ「各CRの暗黙のLF」設定を有効にして追加する必要があります。連続物「独立CRをCRLFとして解釈する」を有効にする必要があります。しかし、私の質問は、特にscreen
これが私が現在のシリアルポートに接続するために使用するソフトウェアなので、これについてです。
編集する:
Screenは制御シーケンス(源泉)。 「単語改行モード」(とも呼ばれる)を設定する必要があります。新しいラインモデル)。これは、パラメータ値が20の設定モード制御シーケンスを使用して実行する必要がありますESC [ 20 h
。
この制御シーケンスを画面にどのように渡すことができますか?
答え1
私にとって効果があるように見えるのは、見つかった改行モードのエスケープシーケンスを画面に送信し、キャリッジリターンを改行に変換するsttyコマンドを提供して、画面上の擬似ttyを操作することです。 ptyを見つけるにはps a
:
16947 pts/4 Ss+ 0:00 screen -S myscreen /dev/ttyS0
その後、コマンドを発行します。
pty=/dev/pts/4
stty -F $pty ocrnl
echo -en '\e[20h' >$pty