【问题标题】:how to deal with the serial port in android mobile?如何处理android手机中的串口?
【发布时间】:2014-06-20 06:32:49
【问题描述】:

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

echo -e "AT" > /dev/smd0

什么是 /dev/smd0 以及为什么有时将其替换为 /dev/ttyS0。

【问题讨论】:

  • Sending AT-Command to a serial port and getting the answer in android 可能重复 请勿重复发布您自己的问题
  • 感谢您的通知。是的,它们很接近,因为我正在做一个项目,而且它们都与这个项目有关。但是在这个问题中,我要求提供有关移动系统的信息,在链接问题中,我要求解决我在项目中遇到的问题。这要在问题中具体说明。但是,当您看到答案时,您会感觉到不同。

标签: android unix serial-port at-command


【解决方案1】:

/dev/smd0/dev/ttyS0device files。此类文件是virtual files,它提供了一个文件 I/O 操作接口,用于处理一些底层事物,例如串行端口、硬盘和内存等硬件资源,或处理信息、随机数输入、终端等非硬件资源画面输出等

设备文件有两种风格,字符和块。串口是字符设备,你可以验证cls -l输出的第一个字符:

$ 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
$

这样您将正确执行所有调制解调器通信。

【讨论】:

  • 如何在 android 上实现你的 c 代码。通过JNI移植C代码有用吗?
【解决方案2】:
  1. 使用 c4droid
  2. 打开 .c 文件
  3. 将第173行修改为printf("atinout version ...\n"); ...是版本号
  4. 现在在 c4droid 中编译您的代码
  5. 从 c4droid 目录 cp data/data/com.n0n3m4.droidc/files/temp /sdcard 中检索文件

【讨论】:

    猜你喜欢
    • 2012-05-13
    • 2021-02-28
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多