基于Android的串口聊天室 (基于tiny4412) 一
一、平台介绍
硬件平台: tiny4412ADK + S700 4GB Flash
Android版本:Android-5.0.2
Linux版本: Linux-3.0.86
Bootloader:Superboot
作者:彭东林
邮箱:pengdonglin137@163.com

二、代码目录
下面的例子是基于Andrioid源码中自带的一个串口应用SerialChat,Android已经把与之相关的Freamwork、JNI代码实现了,其中直接在JNI中调用了Linux的系统调用,没有遵循Android的HAL架构,根本就没有提供HAL。
下面是相关的代码路径:
APP:
frameworks/base/tests/SerialChat/
SerialManager:
frameworks/base/core/java/android/hardware/SerialManager.java
SerialService:
frameworks/base/services/core/java/com/android/server/SerialService.java
SerialPort:
frameworks/base/core/java/android/hardware/SerialPort.java
JNI:
frameworks/base/services/core/jni/com_android_server_SerialService.cpp
frameworks/base/core/jni/android_hardware_SerialPort.cpp
AIDL:
frameworks/base/core/java/android/hardware/ISerialManager.aidl
三、编译运行
编译
root@ubuntu:~/tiny4412_android5/android-5.0.# . setenv
including device/lge/mako/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/friendly-arm/tiny4412/vendorsetup.sh
including device/moto/shamu/vendorsetup.sh
including device/samsung/manta/vendorsetup.sh
including device/asus/deb/vendorsetup.sh
including device/asus/fugu/vendorsetup.sh
including device/asus/tilapia/vendorsetup.sh
including device/asus/grouper/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including sdk/bash_completion/adb.bash root@ubuntu:~/tiny4412_android5/android-5.0.# mmm frameworks/base/tests/SerialChat/
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=5.0.
TARGET_PRODUCT=full_tiny4412
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=cortex-a9
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.--generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=LRX22G
OUT_DIR=out
============================================
make: Entering directory `/root/tiny4412_android5/android-5.0.'
target Java: SerialChat (out/target/common/obj/APPS/SerialChat_intermediates/classes)
Copying: out/target/common/obj/APPS/SerialChat_intermediates/classes-jarjar.jar
Copying: out/target/common/obj/APPS/SerialChat_intermediates/emma_out/lib/classes-jarjar.jar
Copying: out/target/common/obj/APPS/SerialChat_intermediates/classes.jar
Proguard: out/target/common/obj/APPS/SerialChat_intermediates/proguard.classes.jar
ProGuard, version 4.10
Reading program jar [/root/tiny4412_android5/android-5.0./out/target/common/obj/APPS/SerialChat_intermediates/classes.jar]
Reading library jar [/root/tiny4412_android5/android-5.0./out/target/common/obj/JAVA_LIBRARIES/core-junit_intermediates/classes.jar]
Reading library jar [/root/tiny4412_android5/android-5.0./out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/classes.jar]
Reading library jar [/root/tiny4412_android5/android-5.0./out/target/common/obj/JAVA_LIBRARIES/ext_intermediates/classes.jar]
Reading library jar [/root/tiny4412_android5/android-5.0./out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar]
Preparing output jar [/root/tiny4412_android5/android-5.0./out/target/common/obj/APPS/SerialChat_intermediates/proguard.classes.jar]
Copying resources from program jar [/root/tiny4412_android5/android-5.0./out/target/common/obj/APPS/SerialChat_intermediates/classes.jar]
target Dex: SerialChat
Copying: out/target/common/obj/APPS/SerialChat_intermediates/classes.dex
target Package: SerialChat (out/target/product/tiny4412/obj/APPS/SerialChat_intermediates/package.apk)
Install: out/target/product/tiny4412/data/app/SerialChat/SerialChat.apk
make: Leaving directory `/root/tiny4412_android5/android-5.0.' #### make completed successfully ( seconds) ####
安装和修改
adb install –r out/target/product/tiny4412/data/app/SerialChat/SerialChat.apk
点击运行,会出错退出。
现在作如下修改:
1、frameworks/base/tests/SerialChat/Android.mk
#
# Copyright (C) The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := tests LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := SerialChat LOCAL_CERTIFICATE := platform include $(BUILD_PACKAGE)
2、frameworks/base/tests/SerialChat/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
--> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.serialchat"
android:sharedUserId="android.uid.system"> <uses-permission android:name="android.permission.SERIAL_PORT"/> <application android:label="Serial Chat">
<activity android:name="SerialChat" android:label="Serial Chat">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
3、frameworks/base/core/res/res/values/config.xml
为什么要修改这个文件呢?在这个文件中配置那些设备节点作为串口设备,在tiny4412平台一共有四个串口,COM0和COM3在底板上用DB9引了出来,对应的设备节点是/dev/ttySAC0、/dev/ttySAC1、/dev/ttySAC2、/dev/ttySAC3,所以修改如下:
<!-- List of paths to serial ports that are available to the serial manager.
for example, /dev/ttyUSB0
-->
<string-array translatable="false" name="config_serialPorts">
<item>"/dev/ttySAC0"</item>
<item>"/dev/ttySAC1"</item>
<item>"/dev/ttySAC2"</item>
<item>"/dev/ttySAC3"</item>
</string-array>
4、frameworks/base/tests/SerialChat/src/com/android/serialchat/SerialChat.java
在frameworks/base/tests/SerialChat/src/com/android/serialchat/SerialChat.java中:
@Override
public void onResume() {
super.onResume(); String[] ports = mSerialManager.getSerialPorts();
if (ports != null && ports.length > ) {
try {
mSerialPort = mSerialManager.openSerialPort(ports[0], );
if (mSerialPort != null) {
new Thread(this).start();
}
} catch (IOException e) {
}
}
}
从上面的代码可以发现,调用getSerialPorts返回的就是在config.xml中配置的串口设备,这里ports[0]就是”/dev/ttySAC0”,在这里我们使用COM3,对应的是ports[3],也就是/dev/ttySAC3,所以这里作如下修改:
mSerialPort = mSerialManager.openSerialPort(ports[3], );
重新编译:
mmm frameworks/base/core/res/ # 编译出来的是framework-res.apk,替换/system/framework下的framework-res.apk
mmm frameworks/base/tests/SerialChat/ # 先卸载,在安装 (卸载 adb uninstall com.android.serialchat)
四、测试
下面是测试结果:
- 这个是串口调试助手,运行在PC机上。

- 下面是tiny4412上运行SerialChat,输入完毕点击
即可发送。

下载地址: http://pan.baidu.com/s/1nWHP0
完。
基于Android的串口聊天室 (基于tiny4412) 一的更多相关文章
- 分享基于 websocket 网页端聊天室
博客地址:https://ainyi.com/67 有一个月没有写博客了,也是因为年前需求多.回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!! 主题 基于 websock ...
- 基于flask的网页聊天室(四)
基于flask的网页聊天室(四) 前言 接前天的内容,今天完成了消息的处理 具体内容 上次使用了flask_login做用户登录,但是直接访问login_requare装饰的函数会报401错误,这里可 ...
- 基于flask的网页聊天室(三)
基于flask的网页聊天室(三) 前言 继续上一次的内容,今天完成了csrf防御的添加,用户头像的存储以及用户的登录状态 具体内容 首先是添加csrf的防御,为整个app添加防御: from flas ...
- 基于flask的网页聊天室(二)
基于flask的网页聊天室(二) 前言 接上一次的内容继续完善,今天完成的内容不是很多,只是简单的用户注册登录,内容具体如下 具体内容 这次要加入与数据哭交互的操作,所以首先要建立相关表结构,这里使用 ...
- 基于flask的网页聊天室(一)
基于flask的网页聊天室(一) 基本目标 基于flask实现的web聊天室,具有基本的登录注册,多人发送消息,接受消息 扩展目标 除基本目标外添加当前在线人数,消息回复,markdown支持,历史消 ...
- workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)
workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...
- 基于springboot的websocket聊天室
WebSocket入门 1.概述 1.1 Http #http简介 HTTP是一个应用层协议,无状态的,端口号为80.主要的版本有1.0/1.1/2.0. #http1.0/1.1/2.0 1.HTT ...
- C#基于Socket的简单聊天室实践
序:实现一个基于Socket的简易的聊天室,实现的思路如下: 程序的结构:多个客户端+一个服务端,客户端都是向服务端发送消息,然后服务端转发给所有的客户端,这样形成一个简单的聊天室功能. 实现的细节: ...
- 基于TCP协议的聊天室控制台版
我之前写过一篇博客,主要是基于TCP协议实现的聊天室swing版,在此再写一个基于TCP协议实现的聊天室控制台版,便于学习和比较. package 聊天室console版.utils; import ...
随机推荐
- HTML5应用:setCustomValidity(message)接口
本文转自http://tid.tenpay.com/?p=3592 HTML5表单验证给前端人员带来了便利,但是在用户体验上存在一些缺陷,默认的提示对用户很不友好,无法准确的获取想要的信息.好在大牛们 ...
- Linux 网卡特性配置ethtool详解
近期遇到一个自定义报文传输性能问题,解决过程中借助了ethtool这个工具,因此发掘一下与此工具相关的网卡的一些特性. ethtool 常用命令如下,比如对eth0的操作: ethtool eth0 ...
- hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览
对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...
- ACM-The Coco-Cola Store
题目: Once upon a time, there is a special coco-cola store. If you return three empty bottles to the s ...
- 转一下网上找来的tortoise git不用每次都输入邮箱和密码的方法。备查看
每次git clone 和push 都要输入用户名和密码.虽然安全,但在本机上每次都输有些麻烦,如何记住用户名和密码呢? 当你配置好git后,在C:\Documents and Settings\Ad ...
- github单独现在一个文件夹
项目地址:https://github.com/src-kun/webshell/但根据需要只想下载其中一个文件夹https://github.com/src-kun/webshell/tree/ma ...
- c中结构体的4种定义
1.常规的标准方式: 1 #include <stdio.h> 2 3 struct student{ 4 int age; 5 float score; 6 ...
- 流畅的python第九章笔记 python风格的python
9.1对象表示形式 __repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员. 我们打印下面的A是默认输出这个对象的类型,我们对B进行了修改_ ...
- jQuery的动画方法
/* animate参数: 参数一:要改变的样式属性值,写成字典的形式 参数二:动画持续的时间,单位为毫秒,一般不写单位 参数三:动画曲线,默认为‘swing’,缓冲运动,还可以设置为‘linear’ ...
- Fiddler抓包8-打断点(bpu)【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/fiddler/ 前言 先给大家讲一则小故事,在我们很小的时候是没有手机的,那时候跟女神 ...