如何在安卓手机上处理串口?

3

实际上我对串口一无所知。但我看到一个发送at命令的例子:

echo -e "AT" > /dev/smd0

/dev/smd0 是一种设备文件,用于与移动通信模块进行通信。有时,由于不同硬件供应商的差异,/dev/smd0 可能会被替换为 /dev/ttyS0。

可能是重复的问题:在Android中发送AT命令到串口并获取答案。请勿发布重复的问题。 - Chris Stratton
谢谢您的关注。是的,它们很接近,因为我正在进行一个项目,它们都与这个项目有关。但在这个问题中,我是在询问关于移动系统的信息,在链接的问题中,我是在寻求解决我在项目中遇到的问题的方法。这就是在问题中具体说明的区别。不过,当您看到答案时,您会感受到这种差异。 - Mohammad Alshaar
2个回答

5

/dev/smd0/dev/ttyS0设备文件。这些文件是虚拟文件,提供了一个文件I/O操作接口,用于处理一些底层的东西,比如硬件资源,例如串口、硬盘和内存,或者非硬件资源,例如进程信息、随机数输入、终端屏幕输出等。

设备文件有两种类型,字符设备和块设备。串口是字符设备,你可以通过ls -l命令的输出中第一个字符为c来验证:

$ ls -l /dev/ttyS0
crw-rw----. 1 root dialout 4, 64 Apr  7 00:25 /dev/ttyS0
$

/dev/ttyS0是Linux桌面计算机上用于串口的设备名称,对应于DOS/Windows中的COM1(在Linux的非常早期,/dev/cua也被使用过,你可能偶尔会遇到相关引用)。对于移动电话的虚拟USB串行接口,使用/dev/ttyACM0/dev/ttyACM1。一些其他设备使用/dev/ttyUSB0。对于Android,有几个不同的设备文件名在使用,其中/dev/smd0是其中之一。您的手机可能使用另一个设备文件名,因此您必须检查特定于您的手机应该使用什么。


命令echo -e "AT" > /dev/smd0没有意义。选项-e启用对反斜杠转义字符的解释,但由于以下字符串不包含这样的字符,因此等效于只有echo "AT" > /dev/smd0

然而,当向调制解调器发送AT命令时,命令行应该仅以\r结尾,没有其他内容。这是V.250规定的。

因此,向调制解调器发送命令“AT”的正确命令应该是

echo -n -e "AT\r" > /dev/smd0

但是,即使成功正确地向调制解调器发送AT命令,在读取调制解调器的响应时,也必须要注意。在此期间多次打开和关闭设备文件(通过运行一系列shell命令)不是一个好方法,因此我建议您使用我的程序atinout,该程序专门用于命令行AT命令通信:

$ echo AT | atinout - /dev/smd0 -
AT
OK
$

或者

$ echo AT > input.txt
$ atinout input.txt /dev/smd0 output.txt
$ cat output.txt
AT
OK
$

通过这种方式,您将正确执行所有调制解调器通信。


我该如何在安卓上实现你的C代码?通过JNI移植C代码是否是一个有效的方法? - Mohammad Alshaar

0
  1. 使用c4droid
  2. 打开.c文件
  3. 修改第173行为printf("atinout版本号为...\n"); ...是版本号
  4. 现在在c4droid中编译您的代码
  5. 从c4droid目录中检索文件cp data/data/com.n0n3m4.droidc/files/temp /sdcard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接