2012-08-28 12 views
6

im BusyBoxcommand MICROCOM für Linux den Befehl microcom existiert mit einem seriellen Modem zu kommunizieren:Umleiten von AT-Befehle Befehl unter Linux

BusyBox v1.13.2 (2012-05-10 17:13:08 CEST) multi-call binary 

Usage: microcom [-d DELAY] [-t TIMEOUT] [-s SPEED] [-X] TTY 

Copy bytes for stdin to TTY and from TTY to stdout 

Options:  
     -d Wait up to DELAY ms for TTY output before sending every next byte to it 
     -t Exit if both stdin and TTY are silent for TIMEOUT ms 
     -s Set serial line to SPEED 
     -X Disable special meaning of NUL and Ctrl-X from stdin 

Statt stdin der Verwendung der AT-Befehle Ich möchte legen Sie sie insise eingeben eine Textdatei und leite den Inhalt dieser Datei als stdin für den obigen Befehl um. Zum Beispiel habe ich eine Datei

/tmp/at.txt 

mit dem AT-Befehl AT, die in der Regel durch die TTY mit einem OK bestätigt werden. Eine Standard-Sitzung mit stdin wie folgt aussieht:

microcom -t 3000 -X /dev/ttyS5         
at 
OK 

, in dem die Zeichenfolge at wurde direkt auf der Tastatur eingegeben. Um den Inhalt der Datei zu verwenden /tmp/at.txt (enthält nur 'at \ n'). Um dies zu tun,. Ich habe die folgenden Variationen versucht:

microcom -t 3000 -X /dev/ttyS5 < /tmp/at.txt 
microcom -t 3000 /dev/ttyS5 < /tmp/at.txt 
cat /tmp/at.txt | microcom -t 3000 /dev/ttyS5 
tail -f /tmp/at.txt | microcom -t 3000 /dev/ttyS5 
cat /tmp/at.txt | microcom -t 3000 /dev/ttyS5 -X 
tail -f /tmp/at.txt | microcom -t 3000 /dev/ttyS5 -X 

und keiner von ihnen gearbeitet, das heißt keiner dieser Befehle hat den Text ‚OK‘ auf dem Bildschirm zurückzukehren. Ich folge daher, dass ein Problem darin besteht, den Inhalt der Datei /tmp/at.txt als stdin für den Befehl microcom umzuleiten. Vielleicht hat es damit zu tun, wie das Zeilenende interpretiert wird oder das Ende der Datei. Wenn jemand eine Idee hat, würde ich mich über Hilfe freuen.

Danke,

Alex

+0

Welche Shell Sie verwenden funktioniert? – tMC

Antwort

5

Im den microcom in BusyBox v1.18.4 unter SliTaz 4.0 & ich dupliziert das Problem läuft & löste es dann. Wenn Sie die Tastatureingabe auf dieser Ebene emulieren möchten, muss die Takefile nach jeder Zeile eine vollständige CRLF haben, da die Tastaturtaste ein^M (0x0D) überträgt. Der von den meisten ASCII-Editoren geschriebene Linux-Standard 0x0A reicht nicht aus.

Es gibt viele Möglichkeiten, es zu tun, aber ich habe nur die Takefile mit einem zusätzlichen Byte am Ende jeder Zeile erstellt und dann das Programm ncurses-hexedit verwendet, um das Byte auf eine 0x0D zu zappen. Ich habe die obigen Befehle getestet & habe eine OK-Antwort mit der Eingabe aus einer solchen Datei erhalten.

Hoffe, das hilft.

5

Sie benötigen AT-Befehle mit Sonderzeichen \ r Ende

echo "AT+CIMI\r" | microcom -t 2000 /dev/ttyS5 

Mit \ n es nicht

Grettings

+0

Wenn du neben busybox eine echte Shell verwendest, wie bash, vergiss nicht die -e und -n Flag zu echo: 'echo -ne" AT + CSQ \ r \ n "| microcom -X -t 1000/dev/modem_at1' –