主题 : 编写串口助手,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: 58655
精华: 0
发帖: 129
金钱: 645 两
威望: 130 点
贡献值: 0 点
综合积分: 258 分
注册时间: 2011-11-11
最后登录: 2017-09-13
1楼  发表于: 2012-08-16 18:32
看看学习下
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
2楼  发表于: 2012-08-17 10:28
厉害,用的什么板子?
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
3楼  发表于: 2012-08-17 11:54
用的是友善的Tiny6410板子。。。。。
不过这纯粹是应用层的软件,理论上是通用的。
级别: 新手上路
UID: 75790
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2012-08-13
最后登录: 2012-10-27
4楼  发表于: 2012-08-17 14:53
我安装了这个程序后,我的板子串口一直都有数据发出,为什么呢?
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
5楼  发表于: 2012-08-17 19:04

 回 4楼(whl123993) 的帖子

打开串口后就在接收区一直有数据显示吗?
还是打开串口后,就一直向外发送数据?
级别: 新手上路
UID: 75790
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2012-08-13
最后登录: 2012-10-27
6楼  发表于: 2012-08-17 22:29
我有个疑问,串口0不是系统自留的串口么?是收不到数据的,串口一也是有问题收不到数据的。请问楼主怎么解决的??谢谢
级别: 圣骑士
UID: 44407
精华: 0
发帖: 386
金钱: 1945 两
威望: 389 点
贡献值: 0 点
综合积分: 772 分
注册时间: 2011-04-25
最后登录: 2014-08-25
7楼  发表于: 2012-08-17 23:15
是否可以用於其它平台,例如s3c6410/tiny6410/mini6410?s3c210/tiny210/mini210?
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
8楼  发表于: 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
9楼  发表于: 2012-08-18 16:46
引用第7楼kazaya于2012-08-17 23:15发表的  :
是否可以用於其它平台,例如s3c6410/tiny6410/mini6410?s3c210/tiny210/mini210?

我在android手机上装了,只是没有串口设备可以操作。
友善的开发板应该都能支持,碰到权限问题,最好先root系统。