智能家居架構(gòu)分析_第1頁
智能家居架構(gòu)分析_第2頁
智能家居架構(gòu)分析_第3頁
智能家居架構(gòu)分析_第4頁
智能家居架構(gòu)分析_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 基于Android的智能家居項目背景什么是Android Android一詞的本義指“機器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個為移動終端打造的真正開放和完整的移動軟件。平臺優(yōu)勢掙脫運營商束縛Google應(yīng)用豐富的硬件無限制的開發(fā)開放性發(fā)展趨勢目前,Android智能手機正處于快速增長期,2011年7月末,Android智能手機在國內(nèi)的占有率達到34.8%,在半年之內(nèi)超過了iPhone手機,僅次于Symbian智能手機 .2011.7 各類操作系統(tǒng)智能手機中國占有率價格優(yōu)勢

2、系統(tǒng)概述兩大模塊智能家居M0+A8智能居平臺測試A8智能家居1處理顯示M0數(shù)據(jù)并控制M0前端數(shù)據(jù)中心-A82Zigbee無線傳輸傳輸模塊3采集房間信息發(fā)至前端,并響應(yīng)前端的命令終端采集中心-M04Zigbee無線傳輸傳輸模塊設(shè)計思想房間溫度房間濕度房間光照房間電壓房間防盜來賓登記溫度控制風扇模擬光照控制LED模擬報警控制蜂鳴器模擬A8M0個人職責個人職責系統(tǒng)架構(gòu)分析A8平臺Android底層設(shè)計詳細文檔撰寫系統(tǒng)整合Android架構(gòu)層次接口表流程圖(1) (1)初始化加載JNI的庫流程圖(2) (2)JNI層實現(xiàn)對App層的方法流程圖(3) (3)HAL層實現(xiàn)對JNI層的函數(shù)接口流程圖(4)

3、(4)HAL層調(diào)用驅(qū)動層的函數(shù)接口App-framework層在Android應(yīng)用層中的程序或組件都是用Java語言開發(fā)的,這些Java代碼編譯后變成Dex格式的字節(jié)碼,由Dalvik虛擬機執(zhí)行,在執(zhí)行過程中需要調(diào)用本地庫時,由虛擬機載入這些本地庫,然后讓Java函數(shù)調(diào)用庫中的函數(shù),虛擬機相當于一座橋梁,讓Java與本地庫能夠透過標準的JNI界面互相溝通。應(yīng)用程序在虛擬機里執(zhí)行,通過函數(shù)System.loadLibrary( )通知虛擬機載入指定的庫,例如在Java代碼中包含代碼如:System.loadLibrary(“l(fā)ibuart_runtime.so”);虛擬機就會在Android文件

4、系統(tǒng)的“/system/lib/”目錄中查找l libuart_runtime.so庫文件,虛擬機載入libuart_runtime.so后,Java代碼就可以與庫文件結(jié)合起來一起執(zhí)行。framework入口JNI層/* * 當?shù)谝淮渭虞d此庫時,調(diào)用此函數(shù)注冊本地方法 */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的環(huán)境,保存在env變量中assert(env != NULL);if (registerMethods(env) != 0) LOGE(ERROR: PlatformLibrary native registration failedn);goto fail; /自己寫的函數(shù),向當前JAVA環(huán)境中注冊接口result = JNI_VERSION_1_4;fail:return result;/* JNI_OnLoad()函數(shù)完成:(1) 把虛擬機環(huán)境信息保存到本地庫的一個結(jié)構(gòu)體“JNIEnv”的實例中;(2) 建

6、立一個應(yīng)用層中的UART控制服務(wù)與本地庫的JNI函數(shù)表;(3) 返回虛擬機本地庫使用的JNI版本。*/JNI入口HAL-StubHAL stub 是一種代理人(proxy)的概念,stub 雖然仍是以 *.so的形式存在,但HAL已經(jīng)將 *.so 檔隱藏起來了。Stub 向 HAL提供操作函數(shù)(operations),而 runtime則是向 HAL 取得特定模塊(stub)的 operations,再 callback 這些操作函數(shù)。這種以 indirect function call 的架構(gòu),讓HAL stub 變成是一種包含關(guān)系,即 HAL 里包含了許許多多的 stub(代理人)。Run

7、time 只要說明類型,即 module ID,就可以取得操作函數(shù)。對于目前的HAL,可以認為Android定義了HAL層結(jié)構(gòu)框架,通過幾個接口訪問硬件從而統(tǒng)一了調(diào)用方式。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應(yīng)用當前Stub name: uart HAL module, author: f

8、arsight, methods: &uart_module_methods, /入口函數(shù)管理結(jié)構(gòu)體HAL_MODULE_INFO_SYM變量是andriod HAL模塊通用的入口地址,且必須為這個名字,這樣編譯器才會將這個結(jié)構(gòu)體的導出符號變?yōu)椤癏MI”,這樣這個結(jié)構(gòu)體才能在使用庫時被dlsym函數(shù)找到,進而返回給hw_get_module函數(shù)HAL入口權(quán)限的問題由于Android應(yīng)用程序無權(quán)限操作底層設(shè)備(如打開、讀寫等),而我們需要通過讀寫USB轉(zhuǎn)成的串口的設(shè)備節(jié)點ttyUSB0,來讀寫Zigbee模塊,所以我們需要修改設(shè)備權(quán)限為777最高權(quán)限。一種簡單的方法是在system/core/rootdir下的uevent.rc腳本里加入/dev/ttyUSB0 0777 root root即可,但是我們2.1版本里無此腳本。最初想法是在init.rc腳本里添加chmod 0777 /dev/ttyUSB0來修改,但是這樣有一個致命的缺陷。即Zigbee模塊必須在開機前就已連接在板上,若是開機時未識別到,還需把掉再插一次,但腳本已經(jīng)執(zhí)行過了,所以放棄此方法。我們采取的方法: 1.通過給APK簽名,賦予應(yīng)用程序system的權(quán)限。 2.在init.rc中注冊service chmod4uart,去執(zhí)行chmod4uart.sh 3.編寫chmod4uart.s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論