《智能家居架构分析.pptx》由会员分享,可在线阅读,更多相关《智能家居架构分析.pptx(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、项目背景第1页/共28页什么是Android Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。第2页/共28页平台优势挣脱运营商束缚Google应用丰富的硬件无限制的开发开放性第3页/共28页发展趋势目前,Android智能手机正处于快速增长期,2011年7月末,Android智能手机在国内的占有率达到34.8%,在半年之内超过了iPhone手机,仅次于Symbian智能手机.2011.7 各类操作系统智能手机中
2、国占有率第4页/共28页价格优势第5页/共28页系统概述第6页/共28页两大模块智能家居M0+A8智能居平台测试A8第7页/共28页智能家居1处理显示M0数据并控制M0前端数据中心-A82Zigbee无线传输传输模块3采集房间信息发至前端,并响应前端的命令终端采集中心-M04Zigbee无线传输传输模块第8页/共28页设计思想房间温度房间湿度房间光照房间电压房间防盗来宾登记温度控制风扇模拟光照控制LED模拟报警控制蜂鸣器模拟A8M0第9页/共28页个人职责第10页/共28页个人职责系统架构分析A8平台Android底层设计详细文档撰写系统整合第11页/共28页Android架构第12页/共28
3、页层次接口表第13页/共28页流程图(1)(1)初始化加载JNI的库第14页/共28页流程图(2)(2)JNI层实现对App层的方法第15页/共28页流程图(3)(3)HAL层实现对JNI层的函数接口第16页/共28页流程图(4)(4)HAL层调用驱动层的函数接口第17页/共28页App-framework层在Android应用层中的程序或组件都是用Java语言开发的,这些Java代码编译后变成Dex格式的字节码,由Dalvik虚拟机执行,在执行过程中需要调用本地库时,由虚拟机载入这些本地库,然后让Java函数调用库中的函数,虚拟机相当于一座桥梁,让Java与本地库能够透过标准的JNI界面互相
4、沟通。应用程序在虚拟机里执行,通过函数System.loadLibrary()通知虚拟机载入指定的库,例如在Java代码中包含代码如:System.loadLibrary(“libuart_runtime.so”);虚拟机就会在Android文件系统的“/system/lib/”目录中查找llibuart_runtime.so库文件,虚拟机载入libuart_runtime.so后,Java代码就可以与库文件结合起来一起执行。framework 入口第18页/共28页JNI层/*当第一次加载此库时,调用此函数注册本地方法*/jintJNI_OnLoad(JavaVM*vm,void*reser
5、ved)JNIEnv*env=NULL;jintresult=-1;LOGI(JNI_OnLoad);if(vm-GetEnv(void*)&env,JNI_VERSION_1_4)!=JNI_OK)LOGE(ERROR:GetEnvfailedn);gotofail;/获取当前的VM的环境,保存在env变量中assert(env!=NULL);if(registerMethods(env)!=0)LOGE(ERROR:PlatformLibrarynativeregistrationfailedn);gotofail;/自己写的函数,向当前JAVA环境中注册接口result=JNI_VERS
6、ION_1_4;fail:returnresult;/*JNI_OnLoad()函数完成:(1)把虚拟机环境信息保存到本地库的一个结构体“JNIEnv”的实例中;(2)建立一个应用层中的UART控制服务与本地库的JNI函数表;(3)返回虚拟机本地库使用的JNI版本。*/JNI入口第19页/共28页HAL-StubHALstub是一种代理人(proxy)的概念,stub虽然仍是以*.so的形式存在,但HAL已经将*.so档隐藏起来了。Stub向HAL提供操作函数(operations),而runtime则是向HAL取得特定模块(stub)的operations,再callback这些操作函数。这
7、种以indirectfunctioncall的架构,让HALstub变成是一种包含关系,即HAL里包含了许许多多的stub(代理人)。Runtime只要说明类型,即moduleID,就可以取得操作函数。对于目前的HAL,可以认为Android定义了HAL层结构框架,通过几个接口访问硬件从而统一了调用方式。第20页/共28页HAL层conststructuart_module_tHAL_MODULE_INFO_SYM=common:tag:HARDWARE_MODULE_TAG version_major:1,version_minor:0,id:UART_HARDWARE_MODULE_ID,
8、/模块ID,上层的Service通过这个ID应用当前Stubname:uartHALmodule,author:farsight,methods:&uart_module_methods,/入口函数管理结构体HAL_MODULE_INFO_SYM变量是andriodHAL模块通用的入口地址,且必须为这个名字,这样编译器才会将这个结构体的导出符号变为“HMI”,这样这个结构体才能在使用库时被dlsym函数找到,进而返回给hw_get_module函数HAL入口第21页/共28页权限的问题由于Android应用程序无权限操作底层设备(如打开、读写等),而我们需要通过读写USB转成的串口的设备节点t
9、tyUSB0,来读写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.sh,通过setprop ctl.start chmod4uart获得root 权限,再chmod即可。第22页/共28页作品展示安全智能科技潮流第23页/共28页开机界面当有房间监控启动时,界面上自动添加结点第24页/共28页主控界面信息显示动态保镖随M0三轴信息跳动控制按钮风扇电灯警铃数码管返回第25页/共28页团队介绍第26页/共28页专业的力量“AcEteamR第27页/共28页感谢您的观看!第28页/共28页