版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《物业消防管理培训》课件
- 囚歌课件教学课件
- 书籍装订装置和机器办公设备产品入市调查研究报告
- 晒蓝图设备市场洞察报告
- 胸部叩诊器市场发展预测和趋势分析
- 基础护理说课课件教学课件教学课件教学
- 脚踏车车座产业运行及前景预测报告
- 《IC发展简史》课件
- 筛家用器具市场发展预测和趋势分析
- 桉叶油产业规划专项研究报告
- 2024年七年级历史上册 第12课《汉武帝巩固大一统王朝》教案 新人教版
- 【医麦客】:2023-2024类器官技术与应用发展白皮书
- 2024-2030年中国灭火行业市场发展趋势与前景展望战略分析报告
- 机械工程导论-基于智能制造(第2版) 第2章 机械工程的学科交叉
- 高中物理实验验证力的平行四边形定则学案
- 2024年中国电信贵州公司社会人才招聘41名高频考题难、易错点模拟试题(共500题)附带答案详解
- 陆上风电施工危险源辨识、评价、控制措施清单
- 《XX数据接口开发方案》
- 换电站(充电桩)安全风险告知
- 《功能性食品开发与应用》课件-维持血脂健康水平功能食品的开发与应用
- 急性冠脉综合征
评论
0/150
提交评论