2012-08-28 13 views
6

nella BusyBoxcommand per Linux esiste il comando microcom per comunicare con un modem seriale:Redirecting AT per MICROCOM comando sotto 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 

Invece di usare stdin per digitare i comandi AT voglio metterli insise un file di testo e reindirizzare il contenuto di quel file come stdin per il comando precedente. Ad esempio, ho un file

/tmp/at.txt 

con il comando AT AT, che di solito viene confermata dal TTY con una OK. Una sessione di serie con stdin assomiglia:

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

in cui la stringa di at è stato immesso direttamente sulla tastiera. Per utilizzare il contenuto del file /tmp/at.txt (contiene solo 'at \ n'). Per fare questo,. Ho provato le seguenti variazioni:

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 

e nessuno di loro ha lavorato, cioè nessuno di questi comandi ha fatto tornare il testo 'OK' sullo schermo. Concludo pertanto che c'è qualche problema nel reindirizzare il contenuto del file /tmp/at.txt come stdin per il comando microcom. Forse ha a che fare con come viene interpretato il fine linea o la fine del file. Se qualcuno ha qualche idea, gradirei un aiuto.

Grazie,

Alex

+0

Cosa guscio stai usando? – tMC

risposta

5

Im che eseguono il microcom in BusyBox v1.18.4 sotto SliTaz 4.0 & ho duplicato il problema & poi risolto esso. Se vuoi emulare l'input da tastiera a questo livello, il takefile deve avere un CRLF completo dopo ogni riga perché il tasto della tastiera trasmette un^M (0x0D). Lo standard Linux 0x0A scritto dalla maggior parte degli editor ASCII non è sufficiente.

Ci sono molti modi per farlo ma ho appena creato il takefile con un byte extra alla fine di ogni riga, quindi ho usato il programma ncurses-hexedit per zappare il byte in 0x0D. Ho provato i comandi precedenti & ottenuto una risposta OK con l'input preso da un tale file.

Spero che questo aiuti.

5

È necessario porre fine comandi AT con carattere speciale \ r

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

Con \ n non funziona

Grettings

+0

se accanto a busybox si utilizza una shell reale, come bash, non dimenticare la specifica il flag -e e -n su echo: 'echo -ne" AT + CSQ \ r \ n "| microcom -X -t 1000/dev/modem_at1' –