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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論