在 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
而不是使用 stdin 键入 AT 命令,我想将它们放入一个文本文件并将该文件的内容重定向为上述命令的 stdin。例如,我有一个文件
/tmp/at.txt
使用 AT 命令 AT
,通常由 TTY 用 OK
确认。使用 stdin 的标准会话如下所示:
microcom -t 3000 -X /dev/ttyS5
at
OK
其中字符串at
直接在键盘上输入。为了使用文件的内容/tmp/at.txt
(仅包含"at"(。为此,。我尝试了以下变体:
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
的 stdin microcom
存在一些问题。也许与如何解释行尾或文件结尾有关。如果有人有一些想法,我将不胜感激。
谢谢
亚历克斯
你需要用特殊字符 AT 命令结束 \r
echo "AT+CIMIr" | microcom -t 2000 /dev/ttyS5
使用 它不起作用
格雷廷斯
我在SliTaz 4.0下在BusyBox v1.18.4中运行microcom,我复制了这个问题,然后解决了它。如果要在此级别模拟键盘输入,则 takefile 必须在每行后具有完整的 CRLF,因为键盘键传输 ^M (0x0D(。大多数 ASCII 编辑器编写的 Linux 标准0x0A是不够的。
有很多方法可以做到这一点,但我只是在每行末尾创建了一个带有额外字节的 takefile,然后使用 ncurses-hexedit 程序将字节分解为0x0D。我测试了上述命令,并使用从此类文件中获取的输入得到了OK响应。
希望这有帮助。