智能家居架构分析_第1页
智能家居架构分析_第2页
智能家居架构分析_第3页
智能家居架构分析_第4页
智能家居架构分析_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于Android的智能家居项目背景什么是Android Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。平台优势挣脱运营商束缚Google应用丰富的硬件无限制的开发开放性发展趋势目前,Android智能手机正处于快速增长期,2011年7月末,Android智能手机在国内的占有率达到34.8%,在半年之内超过了iPhone手机,仅次于Symbian智能手机 .2011.7 各类操作系统智能手机中国占有率价格优势

2、系统概述两大模块智能家居M0+A8智能居平台测试A8智能家居1处理显示M0数据并控制M0前端数据中心-A82Zigbee无线传输传输模块3采集房间信息发至前端,并响应前端的命令终端采集中心-M04Zigbee无线传输传输模块设计思想房间温度房间湿度房间光照房间电压房间防盗来宾登记温度控制风扇模拟光照控制LED模拟报警控制蜂鸣器模拟A8M0个人职责个人职责系统架构分析A8平台Android底层设计详细文档撰写系统整合Android架构层次接口表流程图(1) (1)初始化加载JNI的库流程图(2) (2)JNI层实现对App层的方法流程图(3) (3)HAL层实现对JNI层的函数接口流程图(4)

3、(4)HAL层调用驱动层的函数接口App-framework层在Android应用层中的程序或组件都是用Java语言开发的,这些Java代码编译后变成Dex格式的字节码,由Dalvik虚拟机执行,在执行过程中需要调用本地库时,由虚拟机载入这些本地库,然后让Java函数调用库中的函数,虚拟机相当于一座桥梁,让Java与本地库能够透过标准的JNI界面互相沟通。应用程序在虚拟机里执行,通过函数System.loadLibrary( )通知虚拟机载入指定的库,例如在Java代码中包含代码如:System.loadLibrary(“libuart_runtime.so”);虚拟机就会在Android文件

4、系统的“/system/lib/”目录中查找l libuart_runtime.so库文件,虚拟机载入libuart_runtime.so后,Java代码就可以与库文件结合起来一起执行。framework入口JNI层/* * 当第一次加载此库时,调用此函数注册本地方法 */jint JNI_OnLoad(JavaVM* vm, void* reserved) JNIEnv* env = NULL;jint result = -1;LOGI(JNI_OnLoad);if (vm-GetEnv(void*) &env, JNI_VERSION_1_4) != JNI_OK) LOGE(ER

5、ROR: GetEnv failedn);goto fail; /获取当前的VM的环境,保存在env变量中assert(env != NULL);if (registerMethods(env) != 0) LOGE(ERROR: PlatformLibrary native registration failedn);goto fail; /自己写的函数,向当前JAVA环境中注册接口result = JNI_VERSION_1_4;fail:return result;/* JNI_OnLoad()函数完成:(1) 把虚拟机环境信息保存到本地库的一个结构体“JNIEnv”的实例中;(2) 建

6、立一个应用层中的UART控制服务与本地库的JNI函数表;(3) 返回虚拟机本地库使用的JNI版本。*/JNI入口HAL-StubHAL stub 是一种代理人(proxy)的概念,stub 虽然仍是以 *.so的形式存在,但HAL已经将 *.so 档隐藏起来了。Stub 向 HAL提供操作函数(operations),而 runtime则是向 HAL 取得特定模块(stub)的 operations,再 callback 这些操作函数。这种以 indirect function call 的架构,让HAL stub 变成是一种包含关系,即 HAL 里包含了许许多多的 stub(代理人)。Run

7、time 只要说明类型,即 module ID,就可以取得操作函数。对于目前的HAL,可以认为Android定义了HAL层结构框架,通过几个接口访问硬件从而统一了调用方式。HAL层const struct uart_module_t HAL_MODULE_INFO_SYM = common: tag: HARDWARE_MODULE_TAG version_major: 1, version_minor: 0, id: UART_HARDWARE_MODULE_ID, /模块ID,上层的Service通过这个ID应用当前Stub name: uart HAL module, author: f

8、arsight, methods: &uart_module_methods, /入口函数管理结构体HAL_MODULE_INFO_SYM变量是andriod HAL模块通用的入口地址,且必须为这个名字,这样编译器才会将这个结构体的导出符号变为“HMI”,这样这个结构体才能在使用库时被dlsym函数找到,进而返回给hw_get_module函数HAL入口权限的问题由于Android应用程序无权限操作底层设备(如打开、读写等),而我们需要通过读写USB转成的串口的设备节点ttyUSB0,来读写Zigbee模块,所以我们需要修改设备权限为777最高权限。一种简单的方法是在system/core/rootdir下的uevent.rc脚本里加入/dev/ttyUSB0 0777 root root即可,但是我们2.1版本里无此脚本。最初想法是在init.rc脚本里添加chmod 0777 /dev/ttyUSB0来修改,但是这样有一个致命的缺陷。即Zigbee模块必须在开机前就已连接在板上,若是开机时未识别到,还需把掉再插一次,但脚本已经执行过了,所以放弃此方法。我们采取的方法: 1.通过给APK签名,赋予应用程序system的权限。 2.在init.rc中注册service chmod4uart,去执行chmod4uart.sh 3.编写chmod4uart.s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论