在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存在一些问题。也许这与如何解释行结束或文件结束有关。如果有人有什么想法,我会感激一些帮助。
谢谢你,
亚历克斯
3条答案
按热度按时间b4lqfgs41#
您需要以特殊字符**\r结束AT COMMANDS**
用**\n**它不起作用
格雷廷斯
5ssjco0h2#
我在SliTaz 4.0下运行BusyBox v1.18.4中的微通信,我复制了这个问题,然后解决了它。如果你要在这个级别上模拟键盘输入,takefile必须在每行之后都有一个完整的CRLF,因为键盘键传输了一个^M(0x 0 D)。大多数ASCII编辑器编写的Linux标准0x 0A是不够的。
有很多方法可以做到这一点,但我只是在每行末尾创建了一个额外的字节,然后使用ncurses-hexedit程序将字节转换为0x 0 D。我测试了上面的命令,得到了一个OK响应,输入来自这样一个文件。
希望这对你有帮助。
db2dz4w83#
回波自动测试设备|sudo socat - /dev/ttys5,crnl