在Linux下将AT命令重定向到microcom命令

时间:2012-08-28 14:17:18

标签: linux redirect pipe stdin tty

用于Linux的BusyBox command中的

存在命令microcom以与串行调制解调器通信:

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

我没有使用stdin来输入AT命令,而是将它们放在一个文本文件中,并将该文件的内容重定向为上述命令的stdin。例如,我有一个文件

/tmp/at.txt

使用AT命令AT,通常由TTY确认OK。与stdin的标准会话如下:

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

其中直接在键盘上输入字符串at。为了使用文件/tmp/at.txt的内容(仅包含'at \ n')。去做这个,。我尝试了以下变化:

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

并且它们都没有工作,即这些命令都没有在屏幕上返回“OK”文本。因此,我得出结论,将文件/tmp/at.txt的内容重定向为命令microcom的stdin存在一些问题。可能与如何解释行尾或文件结尾有关。如果有人有一些想法,我会很感激一些帮助。

谢谢,

亚历

2 个答案:

答案 0 :(得分:5)

我在SliTaz 4.0&amp; S下运行BusyBox v1.18.4中的microcom。我重复了这个问题&amp;然后解决了。如果要在此级别模拟键盘输入,则每个行之后必须具有完整的CRLF,因为键盘键会发送^ M(0x0D)。大多数ASCII编辑器编写的Linux标准0x0A是不够的。

有很多方法可以做到但我只是在每一行的末尾创建了一个带有额外字节的文件,然后使用ncurses-hexedit程序将字节切换为0x0D。我测试了上面的命令&amp;从这样的文件输入得到了一个OK响应。

希望这有帮助。

答案 1 :(得分:5)

您需要使用特殊字符结束 AT命令 \ r

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

\ n 无效

素不相识