在Android上访问本机串口

6

我希望能让Android应用/服务访问原生串口(UART RS-232)。当我说原生时,我的意思是真正的UART而不是USB转串口适配器。我可以从终端看到它们(连接到四个原生串口之一)。这表明内核已经处理了底层的事情。

# ls -l /dev 
crw-rw-rw- system   system   204,  67 2010-01-01 07:00 s3c2410_serial3
crw-rw-rw- system   system   204,  66 2010-01-01 07:00 s3c2410_serial2
crw-rw-rw- system   radio    204,  65 2010-01-01 07:00 s3c2410_serial1
crw-rw-rw- system   system   204,  64 2010-01-01 07:00 s3c2410_serial0 

我使用的是Gingerbread操作系统。我在我的平台上将Android移植了,该平台配备了S5PV210处理器。我对内核和权限有完全的控制,已经对很多东西进行了修改(手机、触摸屏、液晶面板大小等),包括init.rc文件。
如何从Android APK与这些设备通讯?正如您所看到的,“s3c2410_serial1”来自用户“radio”,因为我取自Gingerbread源代码的原始系统在该串行端口上安装了GPRS模块。这在init.rc中很容易更改。但这只是证明我们至少可以在Android系统上访问本地串行端口。
应用程序或服务不需要通过APK控制波特率或其他花哨的东西。我只想发送和接收字符。内核可以设置默认波特率,我对此感到满意。我甚至不需要控制RTS/CTS。
任何指示都会被赞赏。

刚才听一个朋友建议用JAVA中的文件打开,关闭等操作来处理它。我还从谷歌搜索中发现了一些源代码,放在Github上:https://github.com/liquidware/android_serialmonitor,看起来很接近我想要做的事情。我会仔细看一下,并在确定是否为好的解决方案后发布。 - Sylvain Huard
Liquidware的代码需要导入“com.liquidware.amberserial.app.R”,但我找不到它的任何位置。看起来它是他们的Android平台的一部分,但不是标准的。我无法在任何地方找到它或者我可能错过了什么。 - Sylvain Huard
1个回答

4
我找到了一种方法,它似乎适用于任何类型的设备,因为它只是将设备作为文件进行访问。请查看此链接:android-serialport-api。它适用于任何类型的/dev/...。在我的情况下,我必须安装NDK并通过所有设置才能使其正常工作。有一段用C编写的代码可以设置波特率。实际上,打开和关闭都是用C实现的,其余部分都是标准的Android Java。

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