Liebe/-r Experte/-in,
ich möchte gern Eingaben an einem seriellen Port per bash script verarbeiten. An der seriellen Schnittstelle meines Linux PC (VIA C7 epia board 800 MHz mit reinem Konsolen linux EISFair) hängt ein Gerät, welches Textinformationen sendet. Die Übertragung erfolgt mit 9600 baud ohne Flusskontrolle.
Wenn ich minicom benutze, sieht der Datenstrom etwa wie folgt aus:
tdi ($110f $3102 $01) $00
tdi ($110f $3602 $00) $00
tdi (01.01.001 11/05/000 $03) $75 $07 $00
tdi (01.01.039 06/01/010 $01) $00
tdi (01.01.039 06/06/013 $00) $00
tdi (01.01.011 06/03/002 $02) $18 $F6
…usw.
Jede Zeile endet mit einem LFCR bzw. mit 0x0A 0x0D.
Nun möchte ich diesen Input zeilenweise per bash script verarbeiten. Dazu lese ich den Input in eine Variable ein. Der Scriptschnipsel sieht wie folgt aus:
#!/bin/bash
comdevice="/dev/ttyS0"
stty -F $comdevice 9600 -echo
while :
do
inputvar=`head $comdevice --lines=1`
echo $inputvar
done;
Das Ergebnis auf der Konsole sieht leider etwas verkrüppelt aus:
tdi ($110f $3102 $01) $00
$110f $3602 $00) $00
tdi (01.01.001 11/05/000 $03) $75 $07 $00
tdi (01.01.039 06/01/010 $01) $00
01.01.039 06/06/013 $00) $00
i (01.01.011 06/03/002 $02) $18 $F6
Es sieht so aus, als ob irgendwie Zeichen verloren gehen.
Ich habe auch schon versucht, die Zeichen mit dem Befehl
inputvar=`dd if=$comdevice count=1 2\>\>/dev/null`
einzulesen. Das Ergebnis war gleich.
Ich vermute, dass hier irgendwelche Parameter beim stty oder beim setserial für ein Besserung sorgen könnten, bin aber leider nicht wirklich durch die manpage durchgestiegen. Kannst Du mir vieleicht weiterhelfen?
Ich bin für jeden Hinweis dankbar, der es mir ermöglicht, die Zeile komplett in die Variable zu bekommen.
Vielen Dank im Voraus!