2012-08-28 17 views
6

w BusyBoxcommand dla Linuksa istnieje polecenie microcom komunikowania się z szeregowego Modem:Przekierowywanie AT Microcom polecenia pod Linuksem

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 

Zamiast stdin do wpisywania komend AT Chcę umieścić je insise plik tekstowy i przekierować zawartość tego pliku jako stdin dla powyższego polecenia. Na przykład mam pliku

/tmp/at.txt 

z poleceniem AT AT, które zwykle pobiera potwierdzona przez TTY z OK. Standardowa sesja z stdin wygląda następująco:

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

w którym ciąg at został wpisany bezpośrednio na klawiaturze. Aby użyć zawartości pliku /tmp/at.txt (zawiera tylko 'at \ n'). Aby to zrobić. Próbowałem następujące warianty:

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 

i żaden z nich nie pracował, to żaden z tych poleceń nie zwróci tekst „OK” na ekranie. Wnioskuję zatem, że istnieje pewien problem przekierowujący zawartość pliku /tmp/at.txt jako stdin dla polecenia microcom. Może ma to związek z interpretacją końca linii lub końcem pliku. Jeśli ktoś ma jakiś pomysł, byłbym wdzięczny za pomoc.

Dzięki,

Alex

+0

Co powłoki używasz? – tMC

Odpowiedz

5

Im wykonujący Microcom w BusyBox v1.18.4 pod SliTaz 4,0 & I duplikowane problem & następnie rozwiązać go. Jeśli zamierzasz emulować wejście klawiatury na tym poziomie, takefile musi mieć pełną CRLF po każdej linii, ponieważ klucz klawiatury transmituje^M (0x0D). Standard Linux 0x0A napisany przez większość edytorów ASCII nie jest wystarczający.

Jest wiele sposobów na zrobienie tego, ale właśnie utworzyłem takefile z dodatkowym bajtem na końcu każdej linii, a następnie użyłem programu ncurses-hexedit, aby zamienić bajt na 0x0D. Testowałem powyższe komendy & otrzymałem odpowiedź OK z danymi wejściowymi pobranymi z takiego pliku.

Mam nadzieję, że to pomoże.

5

Trzeba skończyć komend AT ze szczególnym charakterze \ r

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

Z \ n nie działa

Grettings

+0

jeśli obok busybox używasz prawdziwej powłoki, takiej jak bash, nie zapomnij podać flagi -e i -n do echa: 'echo -ne" AT + CSQ \ r \ n "| microcom -X -t 1000/dev/modem_at1' –

Powiązane problemy