2012-08-28 53 views
6

trong BusyBoxcommand cho Linux tồn tại lệnh microcom để giao tiếp với một modem nối tiếp:chuyển hướng AT lệnh để MICROCOM lệnh trong 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 

Thay vì sử dụng stdin để gõ các lệnh AT Tôi muốn đặt chúng insise một tệp văn bản và chuyển hướng nội dung của tệp đó dưới dạng stdin cho lệnh trên. Ví dụ, tôi có một tập tin

/tmp/at.txt 

với lệnh AT AT, mà thường được xác nhận bởi TTY với một OK. Phiên chuẩn với stdin trông giống như:

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

trong đó chuỗi at được nhập trực tiếp trên bàn phím. Để sử dụng nội dung của tệp /tmp/at.txt (chỉ chứa 'tại \ n'). Để làm điều này,. Tôi đã thử các biến thể sau:

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 

và không có ai trong số chúng hoạt động, tức là không có lệnh nào trả lại văn bản 'OK' trên màn hình. Do đó, tôi kết luận rằng có một số vấn đề chuyển hướng nội dung của tệp /tmp/at.txt làm stdin cho lệnh microcom. Có lẽ là phải làm thế nào để giải thích kết thúc của dòng hoặc cuối tập tin. Nếu ai đó có một số ý tưởng, tôi sẽ đánh giá cao một số trợ giúp.

Cảm ơn,

Alex

+0

vỏ Những gì bạn đang sử dụng? – tMC

Trả lời

5

Im chạy Microcom trong BusyBox v1.18.4 dưới SliTaz 4,0 & Tôi lặp lại vấn đề & sau đó giải quyết nó. Nếu bạn muốn mô phỏng đầu vào bàn phím ở cấp độ này, tệp nhận dạng phải có CRLF đầy đủ sau mỗi dòng vì khóa bàn phím truyền^M (0x0D). Chuẩn 0x0A của Linux được viết bởi hầu hết các biên tập viên ASCII là không đủ.

Có nhiều cách để làm điều đó nhưng tôi vừa tạo ra tệp dữ liệu với một byte phụ ở cuối mỗi dòng sau đó sử dụng chương trình ncurses-hexedit để zap byte thành 0x0D. Tôi đã kiểm tra các lệnh trên & nhận phản hồi OK với đầu vào được lấy từ một tệp như vậy.

Hy vọng điều này sẽ hữu ích.

5

Bạn cần kết thúc AT LỆNH với ký tự đặc biệt \ r

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

Với \ n nó không hoạt động

Grettings

+0

nếu bên cạnh busybox bạn sử dụng một shell thực, như bash, đừng quên specifiy cờ -e và -n để echo: 'echo -ne" AT + CSQ \ r \ n "| microcom -X -t 1000/dev/modem_at1' –

Các vấn đề liên quan