主题 : 编写串口助手,4串口同时收发(源代码) 复制链接 | 浏览器收藏 | 打印
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
楼主  发表于: 2012-08-16 17:25

 编写串口助手,4串口同时收发(源代码)

管理提醒: 本帖被 xoom 执行加亮操作(2012-10-02)
效果图:
横屏


竖屏



说明:
1. 使用了http://code.google.com/p/android-serialport-api/的项目的serialport api和jni;
2. 支持4串口同时收发,有定时自动发送功能,收发模式可选Txt或Hex模式;
3. n,8,1,没得选;
4. 为减轻界面卡顿的情况,接收区的刷新采用单独的线程进行定时刷新;
5. 发送区的数据以及一些设置项,在程序关闭时会自动保存,打开时自动载入;
6. jni使用最新的NDKr8b重新编译了一下

简单编写步骤:
1.新建一个项目,自己起个名字
2.直接复制serialport api和jni文件夹到新建的工程,如果不想自己编译jni,就连libs文件夹也一起复制
3.去android官方网站下载NDK,解压,在CMD中转到jni目录,并执行 绝对路径\ndk-build
4.自己再封装一个工具类或直接使用SerialPort类都行,举个直接使用的例:
直接剽窃原项目的SerialPortActivity.java,并稍微改一下,重点改这里
mSerialPort = mApplication.getSerialPort();
这里可以改成
new SerialPort(new File("/dev/s3c2410_serial0"), 9600, 0);//COM0,波特率9600
5. SerialPortFinder的使用就没什么好讲的了,实例化后用.getAllDevicesPath()就能获取到所有设备了。
6.每个串口的读取需要一个线程、循环发送需要一个线程,4个串口共4个读取线程、4个循环发送线程。
7.为防止界面卡顿,再加一个线程用于刷新显示。
其它如数据转换等请参考源码

写得较匆忙,有点乱,稍微测试了一下,但不知还有没有bug。
如果碰到权限问题,请Root系统后再使用

安装文件在此
V1.0
ComAssistantV1.0apk.rar (49 K) 下载次数:640
V1.1
ComAssistant.rar (64 K) 下载次数:1071
V1.1只是增加设置菜单,可以设置刷新时间和串口数量

源代码,仅供参考。
本部分内容设定了隐藏,需要回复后才能看到
[ 此帖被benjaminwan在2012-09-08 17:52重新编辑 ]
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
1楼  发表于: 2012-08-17 11:54
用的是友善的Tiny6410板子。。。。。
不过这纯粹是应用层的软件,理论上是通用的。
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
2楼  发表于: 2012-08-17 19:04

 回 4楼(whl123993) 的帖子

打开串口后就在接收区一直有数据显示吗?
还是打开串口后,就一直向外发送数据?
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
3楼  发表于: 2012-08-18 16:44
引用第6楼whl123993于2012-08-17 22:29发表的  :
我有个疑问,串口0不是系统自留的串口么?是收不到数据的,串口一也是有问题收不到数据的。请问楼主怎么解决的??谢谢

串口的作用可以自己定义,COM0的做为调试输出,在android应用开发不是必须的,android靠的是miniusb口或网口,这个可以在烧写配置文件里更改。
GPS占用串口1,也是可以在init.rc中更改,我是直接把调试口改成了COM1,反正都用不着。
我自己精简了内核的一些驱动,如蓝牙之类的,而且也把系统的gps和蓝牙服务去掉了,可能有关系吧。
我自己测试的时候,是把所有的串口的2脚和3脚对接,然后自发自收来测试的。
[ 此帖被benjaminwan在2012-08-18 18:30重新编辑 ]
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
4楼  发表于: 2012-08-18 16:46
引用第7楼kazaya于2012-08-17 23:15发表的  :
是否可以用於其它平台,例如s3c6410/tiny6410/mini6410?s3c210/tiny210/mini210?

我在android手机上装了,只是没有串口设备可以操作。
友善的开发板应该都能支持,碰到权限问题,最好先root系统。
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
5楼  发表于: 2012-09-25 11:36
引用第23楼hayvane于2012-09-25 10:57发表的  :
jni 没有源码??

jni有源码,一起放在项目文件里了
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
6楼  发表于: 2012-10-09 15:55
引用第35楼anthon于2012-10-09 15:32发表的  :
我下载了源码编译后安装,提示解析包错误!急求解答

能否截个图?
难道和我的adt版本比较新有关?
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
7楼  发表于: 2012-10-16 19:40

 Re:回 8楼(benjaminwan) 的帖子

引用第42楼hayvane于2012-10-16 11:46发表的 回 8楼(benjaminwan) 的帖子 :
请问 楼主 什么怎么 精简 蓝牙 gps 的那些 服务的。 现在我的系统 启动后,gps.mini6410。so  一直在读取 串口 1 。怎么 启动后 不去读取 呢

在init.rc中把不需要的service用#注释掉,有含bluetooth都是。
内核中的相关支持可以去掉,也可以不去掉。