web-dev-qa-db-ja.com

bashを介したシリアルデータの解釈

シリアルデバイスからのデータを解釈できるbashスクリプトを作成しようとしています。ポートをrawで構成すると、/ dev/ttyUSB0の単純なcatを実行してデータを確認できます。私の問題は、デバイスがbash変数で送信する1行のデータを取得して、自由に操作できるようにする方法です。

Pythonに進む前に、bashに入れておきたいので、すべてのLinuxマシンで動作することがわかっているスクリプトを常に持っています。

私が受け取るデータの形式は次のとおりです。STX<26x4ビット-ニブルはASCIIペイロード> ETXとしてコード化されています

理想的には、新しいデータ文字列を取得するたびに、新しいペイロードを(STXとETXなしで)Bash変数に格納するだけで済みます。

解決

@icarusの回答の助けを借りて、私は魅力のように機能するものを作り上げました。まず、STX値で割り込みを生成するようにシリアルポートを構成します。

stty/dev/ttyUSB0 115200 intr 0x02

次に、必要な情報を取得するために、次のループを使用します。

ETX = $ '\ 003'
-d "$ ETX"行の読み取り中。 $ lineをエコーし​​ます。完了</ dev/ttyUSB0

助けてくれてありがとう、このウェブサイトで本当に素晴らしい最初の経験。乾杯

2
rec0nf1g

テストされていません!

 #!/bin/bash
 ETX=$'\003'
 STX=$'\002'
 # Open /dev/ttyUSB0 open on FD9
 exec 9< /dev/ttyUSB0
 # do any stty stuff needed on fd9
 # e.g.
 # stty 9600 < /proc/self/fd/9 > /proc/self/fd/9
 # now loop, reading from the device,
 while IFS= read -rd "$ERX" -u 9 wibble
 do
    wibble=${wibble#"$STX"}
    printf 'Got %q\n' "$wibble"
    # Do something
 done

bashを使用すると、データにNULバイトが含まれている場合は機能しません。その場合は、代わりにzshを使用する必要があります。

0
icarus