8

在Linux 的命令中存在BusyBox 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

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

/tmp/at.txt

使用 AT 命令AT,通常由 TTY 使用OK. 使用标准输入的标准会话如下所示:

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。也许与如何解释行尾或文件结尾有关。如果有人有一些想法,我将不胜感激。

谢谢,

亚历克斯

4

2 回答 2

8

您需要以特殊字符\r结束AT COMMANDS

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

使用\n它不起作用

问候

于 2015-09-15T11:02:21.580 回答
5

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

有很多方法可以做到这一点,但我只是在每行末尾创建了一个额外的字节,然后使用 ncurses-hexedit 程序将字节转换为 0x0D。我测试了上述命令并得到了从此类文件中获取的输入的 OK 响应。

希望这可以帮助。

于 2012-10-06T14:02:29.437 回答