《Android智能家居》設(shè)計說明書_第1頁
《Android智能家居》設(shè)計說明書_第2頁
《Android智能家居》設(shè)計說明書_第3頁
《Android智能家居》設(shè)計說明書_第4頁
《Android智能家居》設(shè)計說明書_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于Android的智能家居 1 1 2 3 3 3 4 4 5 5 5 6 74.1A8-ANDROIDA 7 74.1.2Application層詳細設(shè)計與實現(xiàn) 94.2A8-數(shù)據(jù)傳遞架構(gòu)模塊 4.3.1A8接收數(shù)據(jù)格式 第1章項目概述以數(shù)字錄像設(shè)備為核心的視頻監(jiān)控系統(tǒng),另一種是以嵌入操作系統(tǒng)。攝像頭采集到的圖片信息經(jīng)過壓縮,通過服務(wù)器,網(wǎng)絡(luò)上的用戶可以直接用瀏覽器觀看web服務(wù)圖像。由于把圖片采集和web功能集中到一個體積很小管理。嵌入式web服務(wù)器實際上是基于嵌入式微處理機(Smartphone),是指“像個人電腦一樣,具有獨立的操真正開放和完整的移動軟件。隨著Android應(yīng)Android:Android是一種以Linux為基礎(chǔ)的開放源碼操作系統(tǒng),主要使用于A8:ARMCortex-A8處理器是第一款基于ARMv7架構(gòu)的應(yīng)用處第2章技術(shù)方案進行監(jiān)控、控制。A8即可作為移動終端設(shè)備(如phone、pad等),亦可作中Android文件系統(tǒng)第3章前端數(shù)據(jù)中心(A8)總體設(shè)計NodeInfoActivity循環(huán)NodeWriteThreadHandlerNodeInfoActivity循環(huán)NodeWriteThreadHandlerSmartHomeActivityMainHandlerThreadMainReadThreaddevControlUartSendCmd uartsendcmdUartSendCmd uartsendcmdUartDataUpdateFrameWorkLayerMyUartService uartdataupdate2.NodeInfoActivity,3.MainReadThread,讀數(shù)據(jù)主線程,該線程只負責對通3.NodeInfo,定義設(shè)備的所有采集信息,控制器狀態(tài)和WatchDog。第4章前端A8模塊設(shè)計ZigbeeNewNodeZigbeeCortex-M0ZigbeeNewNodeZigbeeCortex-M0MainReadThreadMainHandlerThreadnCortex-A8NEWNODE數(shù)據(jù)格式MainReadThread線程讀取到SmartHomeActivity判斷鏈表是否已經(jīng)存在Zigbee NodeInfo ZigbeeCortex-M0Zigbee NodeInfo ZigbeeCortex-M0MainReadThreadMainHandlerThreadiCortex-A8NODEINFO數(shù)據(jù)MainReadThread線程讀取到ZigbeeNodeInfoZigbeeCortex-M0ZigbeeNodeInfoZigbeeCortex-M0MainReadThreadMainHandlerThreadrCortex-A8MainReadThread線程讀取到MainHandlerThread對RFID進行校驗,判斷是否合法送Handler消息交由SmartHomeActi序列化時保持版本的兼容性,即在版本升級時反boolean使用枚舉將命令聲明一組命名的常數(shù),方便函數(shù)readNode序列化時保持版本的兼容性,即在版本升級時反x存儲節(jié)點對象的三軸加速度x值yzfunbeepnextNodeInfowatchDogNodeInfoNodeInfoNodeInfoNodeInfoledOfffunOffbeepOnbeepOffnixietubeOnnixietubeOffheadNodeInfoNodeInfoNodeInfoNodeInfoNodeInfoNodeInfonodeIsNotExistedboolean所有設(shè)備節(jié)點看門狗減一NodeInfo當啟動MainReadThread線MainHandlerThread處理線程是否創(chuàng)建,未創(chuàng)建則創(chuàng)建并將讀出的數(shù)據(jù)傳給readNoderunnewMainHandlerThreadFalsebeginreadNoderunnewMainHandlerThreadFalsebegin<>ningTure<>FalsemhtIsExistTrue<>TuregetDataTypeisValidData<>TuregetDataTypeRNRNRundevControlf)設(shè)置選項被單擊的監(jiān)聽器,setOnItemClic)關(guān)閉主界面Activity,this.finish。b)判斷是否有節(jié)點看門狗死亡,findNodeDogDie。如果存在a)從節(jié)點列表刪除從界面返回的節(jié)點的原對象,nodeListb)向節(jié)點列表插入從界面返回的新節(jié)點對象f)將主界面獲取的nodeInfo對象反饋到界面,sprimarykeyautoincrementNullNull3.通過調(diào)用本地方法實現(xiàn)java方法UartDataUpdateUartSendCmdUartDataUpdateUartSendCmdNewMyUartService_uart_uart_send_cmd_init_uart_data_updateUart_Uart_initUart_readUart_writeUart_device_openUart_read_halUart_write_halUart_read_drvUart_write_drvNEWfd口structuart_control_uart_read_haluart_write_hal讀上層讀串口Uart_read_drv()Read()Read()是否有數(shù)據(jù)N是否有數(shù)據(jù)NY是否為開始位Y開始接收是否結(jié)束YCRC檢驗是否正確NNNY是否為開始位Y開始接收是否結(jié)束YCRC檢驗是否正確NNNY填充讀buf寫上層寫串口Uart_write_drv()將數(shù)據(jù)打包,加入CRC校驗Write()NN成功成功uart_control_device_t*保存通過調(diào)用stub中的open接口后uart_module_t*JNI層主要實現(xiàn)了Java與c/c++之間的過渡,不涉及復(fù)雜的邏輯,只根據(jù)規(guī)publicclassMyUartServipublicintUartSendCmd(void*)uart_write}{"_init","()Z",(void*)uart_iniUartSendCmd()//公有方法,向串口發(fā)送命令MyUartService(){_init()}//構(gòu)造串口服務(wù)時調(diào)用初始化函數(shù)Uart_write()sUartDevice->uart_read_hal(void*)uart_write}{"_init","()Z",(void*)uart_iniUartSendCmd()//公有方法,向串口發(fā)送命令MyUartService(){_init()}//構(gòu)造串口服務(wù)時調(diào)用初始化函數(shù)Uart_write()sUartDevice->uart_read_hal(sUartDevice,s_buf,sizeof(s_buf));//調(diào)用hal層注冊的讀方法sUartDevice->uart_write_hal(sUartDevice,command);//調(diào)用hal層注冊的寫方法MyUartService{}System.load("/system/lib/libuart_runtime.so");//加載jni的動態(tài)庫}JNI_OnLoad()//Framework層加載jni庫時調(diào)用registerMethods()//注冊自己的JNINativeMethod{"_uart_data_update","()Ljava/lang/String;",(void*)uart_read}Env->RegisterNatives()//注冊上述方法,至此裝載JNI庫工作完成UartDataUpdate()//公有方法,讀取串口數(shù)據(jù)根據(jù)Method找到對應(yīng)的JNI層接口Uart_read()Hw_get_module()//根據(jù)LED_HARDWARE_MODULE_ID找到hw_module_tUart_control_open()module->methods->open(module,LED_HARDWARE_MODULE_ID,(structhw_device_t**)device);//這個過程非常重要,jni通過LED_HARDWARE_MODULE_ID找到對應(yīng)的stubconststructuart_module_tHAL_MODULE_INFO_SYMcommon:{Id:UART_HARDWARE_MODULE_ID,//模塊ID,上層的Service通過這個ID應(yīng)用當前Stubmethods:&led_module_methods,//入口函數(shù)管理結(jié)構(gòu)體}//向系統(tǒng)注冊了一個ID為UART_HARDWARE_MODULE_ID的stubJNI層調(diào)hal層的Uart_JNI層調(diào)hal層的Uart_read_halJNI層調(diào)hal層的openUart_read_drv()Uart_write_drv()staticstructhw_module_methods_tuart_module_methods={Open:uart_device_open;}定一個hw_module_methods_t結(jié)構(gòu)體,關(guān)聯(lián)入口函數(shù)JNI層調(diào)hal層的Uart_read_halUart_device_open()初始化上層傳入的device變量,并關(guān)聯(lián)操作接口{Dev.uart_read_hal=uart_read_drv;Dev.uart_write_hal=uart_write_drv;*device=&dev->common;}真正調(diào)用驅(qū)動接Open真正調(diào)用驅(qū)動接Open()真正調(diào)用驅(qū)動接write()真正調(diào)用驅(qū)動接特率等打開成功Strings=myUartService.UartDataUpdate();//更新采集數(shù)據(jù)myUartService.UartSendCmd(1,LE/*System.loadLibrary(}}/*Strings=_uart_data_update();returns;vpublicintUartSendCmd(intn,intc){_uart_send_cmd(n,cprivatestaticnativeint_uart_send_cmd(intn,intc);//自定義的一個針對Uart控制的結(jié)構(gòu),包含hw_device_t和支持的APJNINativeMethod是jni層注冊的方法,F(xiàn)ramework層可以使用這些方法/*lookuptheclass*/clazz=env->FindClass(kClas}{LOGE("Failedregister}//向類中注冊本SO中Native的}/*#include<cutils/log.chardev_no;chartemp[2];charadc[2];characc[3];//CRC16的校驗函數(shù),查表法,表在crc1{unsignedcharucCRCHi=0x0;unsignedcharucCRCLo=0x0;intiIndex;}}staticintuart_device_close(structhw_device_t*{}}{chardata_buf[40]={0charch;ssize_tr_size=0;//數(shù)據(jù)類型//數(shù)據(jù)段頭intdev_no;//設(shè)備號//用于CRC校驗的頭{timeout--;//由于采用輪詢讀的方法,如果沒消息則}}}}//傳遞到上層傳下的buf}//傳遞到上層傳下的buf}}{ssize_tw_size=0;LOGE("writeerro,write}LOGI("Halwrite%dbytescmd:%s",w_size,cmd_buf);}{memset(dev,0,sizeof(*dev));dev->common.close=uart_device_close//實例化支持的操作//將實例化后的uart_control_device_t{}//初始化串口options.c_cflag&=~CRTSCTS;//不使用數(shù)據(jù)options.c_cflag&=~CSTOPB;//無結(jié)束位/*網(wǎng)上許多流行的linux串口編程的版本中都沒對c_iflag(termios成員變量)這樣傳送ASCII碼時沒什么問題,但傳送二進制數(shù)據(jù)時遇到0x0d,0x11和0x13不用說也知道,這幾個肯定是特殊字符,被用作特殊控制了。關(guān)掉ICRNL和}//定一個hw_module_methods_t結(jié)構(gòu)體,關(guān)聯(lián)入口staticstructhw_module_methods_tuart_module_methods={//定義Stub入口//模塊ID,上層的Service通過這個ID應(yīng)用當前Stubmethods:&uart_modulbuf[0]buf[1]buf[2]buf[3]{charlength;//數(shù)據(jù)的長度溫濕度數(shù)據(jù)長度為characc[3];//三軸加速x,y,z據(jù)位XYZ{charhead;//數(shù)據(jù)包頭‘S’chartype_data;//數(shù)據(jù)類型為‘c’charlength;//數(shù)據(jù)charcmd;//命令溫濕度數(shù)據(jù)長度為第5章終端M0模塊設(shè)計GPIO7LEDTEMP/HUMLIGHTRFIDMODULESPI0I2CGPIO7LEDTEMP/HUMLIGHTRFIDMODULESPI0I2CLED/FAN/SPEKERLPC11C143-AXIXSENSORZigBeeMODULE3-AXIXSENSORZigBeeMODULEUART-SPIM0上電復(fù)位系統(tǒng)初始化、啟動系統(tǒng)滴答定時器發(fā)送new消息采集、發(fā)送傳感信息采集、發(fā)送傳感信息couonter1=0counter1>4scounter1>4s<><>counte有喂狗counter2counte有喂狗counter2=0r2>3s有操作命令?有操作命令?執(zhí)行相應(yīng)的命令發(fā)送卡號信息卡?發(fā)送卡號信息DHT10數(shù)字溫濕度傳感器是是一款含有已校準數(shù)字信號輸出的1)DHT11上電后(DHT11上電后要等待1SZigBee模塊采用的是周立功公司代理的ZICM2410模塊M0SPIUARTSC16IS752UARTSC16IS752ZigBee寄存器(RHR),并將讀取出來的數(shù)據(jù)保讀取IIR中斷標識寄存器是否為RHR中斷是否為RHR中斷N讀取RHR寄存器,消除中斷Y讀取RHR寄存器,消除中斷讀取并入隊RHR數(shù)據(jù),SPI752_rbuf1ip++NYSPINYSPI752_rbuf1ip>=MAXSPI752_rbuf1ip=0結(jié)束<><>Y<><>YNN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論