智能家居系统方案设计_第1页
智能家居系统方案设计_第2页
智能家居系统方案设计_第3页
智能家居系统方案设计_第4页
智能家居系统方案设计_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目名称,《模块设计报告》机构名称,2002PagePAGE46ofNUMPAGES46智能家居系统方案设计文档目录TOC\o"1-3"\h\z0.文档介绍 40.1文档目的 40.2文档范围 40.3读者对象 40.4参考文献 40.5术语与缩写解释 41.模块命名规则 52.模块汇总 52.1模块汇总表 52.2模块关系图 53.子系统A的模块设计 63.n模块A-n 64.子系统B的模块设计 64.n模块B-n 65.其他 6

0.文档介绍0.1文档目的本文档旨在详细说明智能家居系统中门禁系统和linux下的模块程序开发过程,通过此文档的描述,希望可以达到具有同等技术的开发人员按此介绍可以完全重现此技术。0.2文档范围智能控制系统,嵌入式linux系统等。0.3读者对象嵌入式系统开发人员0.4参考文献无0.5术语与缩写解释缩写、术语解释CPLDCPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。WiegandWiegand协议是国际上统一的标准,有很多格式,标准的26-bit应该是最常用的格式zigbee紫蜂技术1.模块命名规则本文档模块名称与具体实现的功能函数采取一致的表示方法。2.模块汇总设备管理,策略管理,人员管理,定时管理,设备底层操作,串口设备层操作,串口底层操作库,配置文件解析,以及UI通讯等模块。同时包括门禁控制系统模块,家居控制模块和环境探测模块以及人机交互界面设计模块。2.1模块汇总表设备管理(dev.c)模块名称功能简述init_dev初始化设备根节点add_dev添加入网设备del_dev删除链表中设备init_dev_policy_table按照设备类新初始化策略表update_dev_policy_table按照各个设备类型,更新链表中的各个设备策略表get_dev_policy_table_size按照设备节点的类型返回对应设备类型的策略表大小策略管理(policy.c)模块名称功能简述tempmon_policy_table_init初始化温度计类型设备的策略表。tempmon_policy_table_set_warn根据参数传过来的状态设置设备报警状态。tempmon_policy_table_update调用底层设备控制取得当前设备状态更新对应设备的策略表。设备底层操作接口(devctl.c)tempmon_get_dev_stat取得温度计设备状态tempmon_get_cur_temp取得温度计设备温度tempmon_set_hi_level设置温度计最高报警温度tempmon_set_low_levl设置温度计最低报警温度用户认证(auth.c)auth_user根据传来的用户名和密码,返回验证结果change_pass根据传来的用户名和密码,更改密码文件里对应项目。)del_pass根据传来的用户名,删除密码文件中的对应用户行add_user根据传来的参数,在密码文件中加入对应用户行配置文件处理(parm.c)load_parm解析器的前端,根据解析器的结果,抛出对应得错误。do_paser根据传进来的文件描述符,将文件中相应的参数解析到参数结构体。save_parm将参数结构体按照对应格式写入配置文件。getnline从文件中取得最大长度为n一行,并将回车翻译为字符串结尾符trim刨去传入字符串开头和结尾的空格和tab配置文件参数处理(parm_handler.c)temp_hi_level设置参数结构体的temp_hi_level参数temp_low_level设置参数结构体的temp_low_level参数带头节点的双向链表(list.c)移植自linux内核list_add_node插入节点list_del_node删除节点is_empty_list判断链表是否为空is_last_node判断是否为最后一个节点offsetof宏取得结构体元素相对于结构体开始的偏移量container_of宏通过结构体元素的指针取得结构体的指针循环缓冲区(loop_buf.c)移植自linux内核min宏返回两个数中的最小值init_loop_buf初始化循环缓冲区release_loop_buf释放循环缓冲区里的线程锁get_loop_buf从循环缓冲区中获取数据put_loop_buf向循环缓冲区中放置数据lock_buf循环缓冲区线程锁加锁unlock_buf循环缓冲区中线程锁解锁loop_buf_reset循环缓冲区指针复位loop_buf_len返回循环缓冲区剩余长度串口设备层操作(uart.c)init_uart调用底层串口库初始化串口com_monitor串口监视线程,负责监视并接受串口上数据。pre_frame_proces对串口接受数据预处理,调用相应的操作函数read_uart_one_frame从串口读取完整一桢read_uart_buf从缓冲区读取数据,没有数据则休眠等待下次信号唤醒。串口操作库(uart.c)open_uart打开相应串口设备文件read_uart读取串口数据。write_uart将数据写入串口set_uart_speed设置串口工作速度set_uart_parity设置串口的工作特性,例如停止位奇偶流控等。read_uart_timeout带有超时的串口读取操作处理。UI通信(commui.c)init_commui初始化ui通信各个参数。commui_monitor套接字监视线程,监视套接字是否有命令数据到来。get_cmd_line从描述符中取得一行命令行warn_ui向ui发起报警命令处理程序(cmd.c)run_cmd命令解析器,调用对应命令的处理程序。error根据错误码,将返回对应得错误信息。命令处理程序handler(cmd_handler.c)xxx_comand_handler对应各个命令的处理程序。门禁控制模块ReadWiegand读取用户卡信息SendWiegand发送用户卡信息SendCmd发送控制指令家居控制系统和环境探测模块GetTem采集环境信息SendTem封包发送采集数据RecTem解析采集数据信息SendLedData发送led显示数据GetTemFromCDLed模块收取并解析温度数据DisplayTem发送并显示信息OpenLamp打开继电器CloseLamp关闭继电器2.2模块关系图3.设备管理系统的模块设计模块名称init_dev功能描述初始化设备根节点接口与属性voidinit_dev(void);数据结构与算法structdev{pthread_mutex_lockmutex;unsignedintnr_dev;structlistlist;};补充说明包含设备编号和链表的线程锁模块名称add_dev功能描述向设备链表中添加设备节点接口与属性intadd_dev(chardev_type,chardev_no,char*ieee_addr);数据结构与算法structdev_node{chardev_type;chardev_no;charieee_addr[8];charalive;charfailed;void*policy_table;structlistlist;};补充说明根据传来的设备类型设备号及IEEE地址,分配新的设备节点,并填写相应的项目然后调用模块名称del_dev功能描述从设备链表中删除设备节点接口与属性intdel_dev(chardev_type,chardev_no);数据结构与算法structdev_node{chardev_type;chardev_no;charieee_addr[8];charalive;charfailed;void*policy_table;structlistlist;};补充说明模块名称init_dev_policy_table功能描述初始化设备策略表接口与属性voidinit_dev_policy_table(structdev_node*node);数据结构与算法同上补充说明模块名称renew_dev_policy_table功能描述将全局参数表的参数对应节点的参数刷新到设备的策略表里接口与属性voidrenew_dev_policy_table(structdev_node*node)数据结构与算法无补充说明模块名称renew_all_dev_policy_table功能描述将全局参数表的参数刷新到所有设备的策略表里接口与属性voidrenew_all_dev_policy_table(structdev_node*node)数据结构与算法无补充说明模块名称update_dev_policy_table功能描述通过调用设备控制层相关方法,取得设备对应状态,更新相应策略表接口与属性voidupdate_dev_policy_table(structdev_node*node)数据结构与算法structdev_node{chardev_type;chardev_no;charieee_addr[8];charalive;charfailed;void*policy_table;structlistlist;};补充说明模块名称update_all_dev_policy_table功能描述更新所有设备策略表接口与属性voidupdate_all_dev_policy_table(structdev_node*node);数据结构与算法同上补充说明模块名称check_dev_type功能描述检查设备类型是否合法接口与属性intcheck_dev_type(unsignedchardev_type)数据结构与算法同上补充说明模块名称is_dev_exist功能描述检查设备是否存在接口与属性intis_dev_exist(unsignedchardev_type,unsignedchardev_no)数据结构与算法同上补充说明模块名称get_dev_node功能描述根据设备类型和设备号返回设备节点指针接口与属性structdev_node*get_dev_node(unsignedchardev_type,unsignedchardev_no)数据结构与算法同上补充说明4.策略管理模块设计模块名称tempmon_policy_table_init功能描述温度计策略表初始化接口与属性voidtempmon_policy_table_init(structdev_node*node);数据结构与算法struct__dev_table{ unsignedchardev_type; void(*policy_table_init)(structdev_node*); void(*policy_table_load_parm)(structdev_node*); void(*policy_table_update)(structdev_node*); void(*policy_table_warn)(structdev_node*,char); void(*parm_table_save)(structdev_parm*,FILE*fp);};structtempmon_policy{charhi_level;charlow_level;charcur_temp;chartemp_warn;};补充说明为设备节点钟的策略表指针分配内存,并使用参数表中的值初始化对应得设备。模块名称tempmon_policy_table_update功能描述调用设备层温度计操作函数,更新温度计温度策略表接口与属性voidtempmon_policy_table_update(structdev_node*node);数据结构与算法同上补充说明模块名称tempmon_policy_table_set_warn功能描述根据传来的参数,设置对应温度计设备的报警状态接口与属性voidtempmon_policy_table_set_warn(structdev_node*node,charstat);数据结构与算法同上补充说明模块名称tempmon_policy_table_load_parm功能描述将温度计参数表中的值填入策略表里接口与属性voidtempmon_policy_table_load_parm(structdev_node*node)数据结构与算法同上补充说明模块名称tempmon_policy_table_load_default_parm功能描述将温度计默认的参数填入策略表里接口与属性voidtempmon_policy_table_load_parm(structdev_node*node)数据结构与算法同上补充说明5.设备底层操作接口模块设计模块名称tempmon_get_dev_stat功能描述取得温度计设备状态接口与属性chartempmon_get_dev_stat(structdev_node*node);数据结构与算法无补充说明调用取得温度计温度判断是否有返回值,判断设备是否仍然有响应,如果设备没有响应,则将设备节点中的设备状态标记为设备已死并调用failed_dev_ctl使设备节点操作失败次数加1(考虑到网络延迟等情况,采用设备操作失败计数,当累计到操作失败到指定次数,则会调用del_dev将设备从设备链表中删除。而任何一次成功的设备操作则判定设备再次有响应,失败计数被清零)。模块名称tempmon_get_dev_stat功能描述取得温度计当前温度接口与属性chartempmon_get_cur_temp(structdev_node*node);数据结构与算法structgen_frame{unsignedcharhead1;unsignedcharhead2;//always0x550xAAunsignedchartype;//frametypeWARNunsignedcharlen;//framelenunsignedchardev_type;//devicetypeunsignedchardev_no;//devicenocharstatus;};补充说明按照协议,组装好设备的查询数据包,从串口发出,并等待串口回应。模块名称tempmon_set_hi_level功能描述设置当前温度计最高报警温度接口与属性chartempmon_set_hi_level(structdev_node*node,charhigh_level);数据结构与算法structcon_frame{unsignedcharhead1;unsignedcharhead2;unsignedchartype;unsignedcharlen;unsignedchardev_type;unsignedchardev_no;unsignedcharcon_cmd;charcon_value;};补充说明按照协议,组装好设备的控制数据包,从串口发出,并调用取得设备温度,刷新设备状态。模块名称tempmon_set_low_level功能描述设置当前温度计最低报警温度接口与属性chartempmon_set_low_level(structdev_node*node,charhigh_level);数据结构与算法structcon_frame{unsignedcharhead1;unsignedcharhead2;unsignedchartype;unsignedcharlen;unsignedchardev_type;unsignedchardev_no;unsignedcharcon_cmd;charcon_value;};补充说明按照协议,组装好设备的控制数据包,从串口发出,并调用取得设备温度,刷新设备状态。其他设备以此类类推。5.用户认证模块设计模块名称auth_user功能描述根据传来的用户名和密码返回验证结果接口与属性charauth_user(char*name,char*pass);数据结构与算法无补充说明模块名称add_user功能描述根据传来的用户名和密码将用户添加到密码文件中接口与属性charadd_user(char*name,char*pass);数据结构与算法无补充说明模块名称del_user功能描述根据传来的用户名将用户从密码文件中删除接口与属性chardel_user(char*name);数据结构与算法无补充说明注意此处仅作用户存在性检查不做用户检查,用户检查应该由UI发命令使用auth_user检查通过后再来调用此函数。功能性模块尽可能在自己被调用时提供方法而不是策略。模块名称change_pass功能描述根据传来的用户名和密码将用户从密码文件中修改对应的记录接口与属性charchange_pass(char*name,char*pass);数据结构与算法无补充说明注意事项同上。用户配置文件格式为用户名和密码定长不足定长使用空格补足,分隔符为:防止频繁修改文件大小,加剧NandFland的读写。6.配置文件处理模块设计模块名称Load_parm功能描述解析器的前端,根据解析器的结果,抛出对应得错误接口与属性intload_parm(char*fname)数据结构与算法无补充说明无模块名称do_parser功能描述解析器主体,根据传进来的文件指针,将文件中相应的参数解析到全局参数表。接口与属性intdo_parser(FILE*fp);数据结构与算法structtemp_parm{ inttemp_hi_level; inttemp_low_level;};unionparm{ structtemp_parmtemp_parm;};structdev_parm{ chardev_type; chardev_no; unionparmparm;};structparm_table{ unsignedintnr_parm; structdev_parmdev_parm[NR_MAX_PARM];};structparm_action{ charname[MAX_PARM_NAME_LEN]; void(*func)(structdev_parm*,char*);};示例:structparm_actionparm_action[PARM_ACTION_LEN]={ {"dev_type",load_dev_type}, {"dev_no",load_dev_no}, {"temp_hi_level",load_temp_hi_level}, {"temp_low_level",load_temp_low_level},};补充说明模块名称save_parm功能描述根据传进来的文件名,将全局参数表存储到配置文件中。接口与属性intsave_parm(char*fname);数据结构与算法同上补充说明模块名称get_dev_parm功能描述根据传来的设备类型和设备号,返回对应设备的参数指针接口与属性structdev_parm*get_dev_parm(chardev_type,chardev_no);数据结构与算法同上补充说明模块名称getnline功能描述根据传进来的文件指针,从中取得一行,此行最大长度为count。接口与属性size_tgetnline(char*buf,size_tcount,FILE*fp);数据结构与算法无补充说明会将行尾的回车符替换为字符串结束的尾零,并且遇到EOF时停止。返回值为实际取得的字符数(含尾零/回车)。模块名称trim功能描述将传进来的字符串头尾的空格以及制表符砍去,然后将结果复制到dst。接口与属性char*trim(char*dst,constchar*src);数据结构与算法无补充说明各个参数的handler:模块名称load_dev_type功能描述将设备类型填入到传入的dev_parm。接口与属性voidload_dev_type(structdev_parm*dev_parm,char*value);数据结构与算法无补充说明模块名称load_dev_no功能描述将设备号填入到传入的dev_parm。接口与属性voidload_dev_type(structdev_parm*dev_parm,char*value);数据结构与算法无补充说明模块名称load_temp_hi_level功能描述将温度计最高报警温度填入到传入的dev_parm。接口与属性voidload_temp_hi_level(structdev_parm*dev_parm,char*value)数据结构与算法无补充说明模块名称load_temp_low_level功能描述将温度计最低报警温度填入到传入的dev_parm接口与属性voidload_temp_low_level(structdev_parm*dev_parm,char*value)数据结构与算法无补充说明模块名称temp_parm_save功能描述将传入的温度计的dev_parm按照格式写入到文件指针里接口与属性voidtemp_parm_save(structdev_parm*dev_parm,FILE*fp)数据结构与算法无补充说明7.带头节点双向链表模块设计模块名称init_list功能描述初始化链表头节点接口与属性voidinit_list(structlist*list);数据结构与算法structlist{structlist*prev,*next;};补充说明模块名称list_add_node功能描述将节点加入链表。接口与属性voidlist_add_node(structlist*new,structlist*node,intlocation);数据结构与算法同上补充说明可以使用location标志指定插入node制定节点的左边还是右边,如果node指向头节点,那么左边及为链表尾部,右边是链表头。模块名称list_del_node功能描述将节点从量表中删除接口与属性voidlist_del_node(structlist*node);数据结构与算法无补充说明模块名称is_last_node功能描述判断节点是否是链表的尾节点接口与属性intis_last_node(structlist*list,structlist*node);数据结构与算法无补充说明真为尾节点模块名称is_empty_list功能描述返回链表是否为空链表接口与属性intis_empty_list(structlist*list);数据结构与算法无补充说明真为空链表模块名称offsetof宏功能描述返回成员在结构体中的偏移接口与属性offsetof(TYPE,MEMBER);数据结构与算法无补充说明TYPE为对应结构体的类型,MEMBER为成员在结构体中的名字模块名称get_node_owner宏功能描述传入指向结构体中成员的指针,返回指向结构体的指针。接口与属性get_node_owner(ptr,type,member);数据结构与算法无补充说明type,member定义同offsetof,ptr为指向结构体中成员的指针。模块名称each_node_in_list宏功能描述使用pos指针遍历结构体。接口与属性each_node_in_list(pos,head);数据结构与算法#defineeach_node_in_list(pos,head)\for(pos=(head)->next;pos!=(head);pos=pos->next)补充说明注意不要在循环中修改pos指针。模块名称each_owner_in_list宏功能描述使用pos指针遍历结构体,但是此pos的指针类型是链表宿主的,head节点类型是链表类型。接口与属性each_owner_in_list(pos,type,member);数据结构与算法#defineeach_owner_in_list(pos,head,member)\for(pos=get_node_owner((head)->next,typeof(*pos),member);\&pos->member!=(head);\pos=get_node_owner(pos->member.next,typeof(*pos),member))补充说明同上。8.循环缓冲区模块设计模块名称init_loop_buf功能描述初始化循环缓冲区。接口与属性intinit_loop_buf(structloop_buf*buf);数据结构与算法structloop_buf{pthread_mutex_tmutex;unsignedcharbuffer[LOOP_BUF_LEN];unsignedintin;unsignedintout;};补充说明注意缓冲区大小必须为2的平方。模块名称release_loop_buf功能描述释放循环缓冲区。接口与属性voidrelease_loop_buf(structloop_buf*buf);数据结构与算法同上补充说明释放结构体中的线程锁,同时复位缓冲区模块名称put_loop_buf功能描述将数据放入循环缓冲区接口与属性unsignedintput_loop_buf(structloop_buf*buf,unsignedchar*buffer,unsignedintlen);数据结构与算法同上补充说明空间不足则只放入能放入的,返回值为实际放入数据长度。模块名称get_loop_buf功能描述使用pos指针遍历结构体,但是此pos的指针类型是链表宿主的,head节点类型是链表类型。接口与属性unsignedintget_loop_buf(structloop_buf*buf,unsignedchar*buffer,unsignedintlen);数据结构与算法同上补充说明同上。模块名称lock_buf(structloop_buf*buf);功能描述锁定循环缓冲区接口与属性voidlock_buf(structloop_buf*buf);数据结构与算法无补充说明无。模块名称unlock_buf功能描述解锁循环缓冲区接口与属性voidunlock_buf(structloop_buf*buf);数据结构与算法无补充说明无。模块名称loop_buf_reset功能描述循环缓冲区复位接口与属性voidloop_buf_reset(structloop_buf*buf);数据结构与算法无补充说明无。模块名称loop_buf_len功能描述返回循环缓冲区长度接口与属性unsignedintloop_buf_len(structloop_buf*buf);数据结构与算法无补充说明无。9.串口操作层模块设计模块名称init_uart功能描述按照本程序的需要调用串口库初始化串口,并开启监听线程接口与属性voidinit_uart(void);数据结构与算法无补充说明无。模块名称com_monitor功能描述串口监听线程实例接口与属性void*com_monitor(void*arg);数据结构与算法无补充说明首先调用read_uart_one_frame收到完整一桢,然后调用process_frame_buf处理由协调器主动发起的添加设备桢和报警桢根据返回值判断是否已经处理,直接进入下一个循环还是放入缓冲区,供发起查询的函数取得回应包。模块名称read_uart_one_frame功能描述从串口中取得完整一桢接口与属性ssize_tread_uart_one_frame(intfd,unsignedchar*buf);数据结构与算法无补充说明调用read_uart_timeout取得完整桢头,然后进行一系列桢检查,非法桢直接丢弃返回0,合法桢则放入buf。模块名称read_uart_buf功能描述从缓冲区读取数据,没有数据则休眠等待下次信号唤醒接口与属性voidunlock_buf(structloop_buf*buf);数据结构与算法无补充说明无。10.串口操作库模块设计模块名称open_uart功能描述打开串口接口与属性intopen_uart(char*fname);数据结构与算法无补充说明无。模块名称set_uart_speed功能描述设置串口速度接口与属性intset_uart_speed(intfd,intspeed);数据结构与算法无补充说明无。模块名称set_uart_parity功能描述设置串口各种工作属性接口与属性intset_uart_parity(intfd,intdatabits,intstopbits,intparity);数据结构与算法无补充说明无。模块名称read_uart_timeout功能描述在timeout规定的时间内读取指定的count字符个数接口与属性ssize_tread_uart_timeout(intfd,void*buf,size_tcount,inttimeout);数据结构与算法无补充说明无。11.UI通信模块设计模块名称init_commui功能描述创建与UI通信的线程初始化working信号量接口与属性voidinit_commui(void);数据结构与算法structcommui_slot{ pthread_mutex_tworking; intlink_sd; FILE*link_fp;};补充说明无。模块名称commui_monitor功能描述负责与UI通信的线程接口与属性void*commui_monitor(void*arg);数据结构与算法无补充说明创建并初始化unix域套接字,监听套接字连接。收到连接后使用get_cmd_line取得一行命令,将命令及套接字连接描述符(用于命令处理handler返回执行结果)一同传给run_cmd,解析并运行命令做出相应的查询/设置。模块名称get_cmd_line功能描述从文件指针取得一行命令接口与属性intget_cmd_line(FILE*fp,char*buf);数据结构与算法无补充说明将结束符转换为字符串结束符方便后面的处理模块名称warn_ui功能描述向ui报警接口与属性voidwarn_ui(chardev_type,chardev_no,charstat);数据结构与算法无补充说明如果槽里的连接描述符可以,则使用槽里面的连接描述符向UI发送报警返回结果。写连接描述符以前加锁,避免与命令返回值相冲突。12.命令处理部分设计模块名称run_cmd功能描述运行传来的命令,使用提供的连接返回命令执行结果。接口与属性intrun_cmd(intfd,char*cmd)数据结构与算法structcmd_action_table{ charname[MAX_CMD_LEN]; void(*func)(FILE*fp,char*sep);};示例:structcmd_action_tablecmd_action_table[]={ {"GET",do_get}, {"SET",do_set}, {"USER",do_user}, {"SAVE",do_save},};补充说明会复制新的描述符传给下面的handler,所以handler中关闭描述符生成的文件指针不会关闭当前连接。模块名称error功能描述根据传进来的错误号,将出错信息按照标准信息返回格式,返回到描述符上。接口与属性voiderror(FILE*fp,interrorno);数据结构与算法无补充说明不会关闭传入的文件指针。主Handler部分:模块名称do_get功能描述解析get动词接口与属性voiddo_get(FILE*fp,char*sep);数据结构与算法structsub_cmd_action_table{ charname[MAX_CMD_LEN]; void(*get)(FILE*fp,char*sep); void(*set)(FILE*fp,char*sep);}示例:structsub_cmd_action_tablesub_cmd_action_table[]={ {"CONFIG",cmd_conf_get,cmd_conf_set},//getconfigfilename {"TEMP",cmd_temp_get,cmd_temp_set},};补充说明根据取得接下来的命令目标,将剩余拆解的字符串传给目sub_cmd_action_table中对应目标的get函数指针所指向的函数。模块名称do_set功能描述解析set动词接口与属性voiddo_set(FILE*fp,char*sep);数据结构与算法同上补充说明根据取得接下来的命令目标,将剩余拆解的字符串传给目sub_cmd_action_table中对应目标的set函数指针所指向的函数。模块名称do_user功能描述解析user动词接口与属性voiddo_user(FILE*fp,char*sep)数据结构与算法同上补充说明根据接下来的命令动词,对用户认证的各个功能做出响应,然后将返回的结果写入到传入的文件指针上。模块名称do_save功能描述解析save动词接口与属性voiddo_save(FILE*fp,char*sep)数据结构与算法同上补充说明根据接下来的命令动词,将当前的全局参数表格存到对应的文件里,如不指定文件名,则存储到默认的文件里,并将结果按照返回格式返回到传入的文件指针。子handler:模块名称cmd_conf_get功能描述解析到GETCONFIG后面的目标,遍历CONFIG文件夹,将其中的配置文件名按照对应的格式,返回到传入的文件指针。接口与属性voidcmd_conf_get(FILE*fp,char*sep);数据结构与算法无补充说明模块名称cmd_conf_set功能描述解析到SETCONFIG后面的目标,调用load_parm解析对应的配置文件,并renew策略表,将结果返回到传入的文件指针。接口与属性voidcmd_conf_get(FILE*fp,char*sep);数据结构与算法同上补充说明模块名称cmd_temp_get功能描述解析到GETTEMP后面的设备号,按照返回格式,返回温度计当前状态(策略表中),如果后面没有跟设备号,则根据返回格式,返回当前网络中所有温度计设备号。接口与属性voidcmd_conf_get(FILE*fp,char*sep);数据结构与算法同上补充说明模块名称cmd_temp_set功能描述解析到SETTEMP后面的参数,按照命令格式,取得当前命令中想要设置的最高值和最低值,并且使用修改全局参数表,如果全局参数表中没有此设备的参数则创建设备的参数。接口与属性voidcmd_temp_set(FILE*fp,char*sep)数据结构与算法同上补充说明附命令通信协议:设备操作相关:取得设备DEV_NO:UI发送:GET<分隔符><DEV_TYPE><结束符>UI接收:<状态值><分隔符><DEV_NO><分隔符><DEV_NO><分隔符>……<DEV_NO><分隔符><结束符>状态值DEV_NO_START返还设备号开始注意结束符前有一分隔符,如果无此类型的设备,则返回格式类似下面:<状态值><分隔符><分隔符><结束符>温度计相关命令:#defineMAX_TEMP125#defineMIN_TEMP-125#defineTEMP_POSION126//如果取到这个温度则代表温度获取失败取得状态:UI发送:GET<分隔符><DEV_TYPE><分隔符><DEV_NO><结束符>UI收到:<状态值><分隔符><DEV_TYPE><分隔符><DEV_NO><分隔符><当前温度><分隔符><最高温度><分隔符><最低温度><结束符>状态值成功SUCCESS可能失败的状态值ERROR_CMD_NOT_FOUND命令不完整ERROR_DEV_NOT_FOUND设备不存在设置状态:SET<分隔符><DEV_TYPE><分隔符><DEV_NO><分隔符><最高温度><分隔符><最低温度><结束符>UI接收到:<状态值><分隔符><MESSAGE><结束符>成功SUCCESS可能失败的状态值ERROR_CMD_NOT_FOUND命令不完整ERROR_DEV_NOT_FOUND设备不存在配置文件相关命令:1.取得可用配置文件UI发送:GET<分隔符>CONFIG<结束符>UI接收:<状态值><分隔符><FILENAME><分隔符>……<FILENAME><分隔符><结束符>成功状态值为CONF_NAME_START777可能的失败状态ERROR_CONF_DIR_NOT_FOUND板上配置文件目录打开失败注意结束符前有一分隔符,如果无此类型的设备,则返回格式类似下面:<状态值><分隔符><分隔符><结束符>2.载入指定配置文件UI发送SET<分隔符>CONFIG<分隔符><文件名><结束符>UI接收:<状态值><分隔符><Message><结束符>成功状态值为SUCCESS可能失败的状态值ERROR_CMD_CONFIG_NOT_FOUND配置文件载入失败3.保存配置文件UI发送SAVE<分隔符>CONFIG<分隔符>[文件名]<结束符>如不指定文件名则配置将保存到默认配置文件defalut中UI返回<状态值><分隔符><Message><结束符>成功状态值SUCCESS可能失败的状态值:ERROR_SAVE_CONF保存配置文件失败用户认证相关命令:用户认证:UI发送:USER<分隔符>AUTH<分隔符><USERNAME><分隔符><PASSWORD><结束符>UI接收:<状态值><分隔符><MESSAGE><结束符>成功状态值为USER_AUTH_PASS或USER_AUTH_FAILED可能失败的状态ERROR_USER_AUTH密码文件打开失败用户添加:UI发送:USER<分隔符>ADD<分隔符><USERNAME><分隔符><PASSWORD><结束符>UI接收:<状态值><分隔符><MESSAGE><结束符>成功状态值为SUCCESS可能失败的状态ERROR_USER_ADD添加用户失败用户删除:UI发送:USER<分隔符>DEL<用户名><结束符>UI接收:<状态值><分隔符><MESSAGE><结束符>成功状态值为SUCCESS可能失败的状态ERROR_USER_DEL删除用户失败用户改密UI发送:USER<分隔符>PASS<用户名><分隔符><新密码><结束符>UI接收:<状态值><分隔符><MESSAGE><结束符>成功状态值SUCCESS可能失败的状态ERROR_USER_CHANGE_PASS用户改密失败、参数:#defineMAX_CMD_LEN10//单个命令部分最长值#defineMAX_CMD_LINE_LEN128//命令行最长值#defineCMD_DELIM""//分隔符#defineCMD_END"\r\n"//结束符#defineSOCKKET_ADDR"/tmp/homecore-socket"socket地址状态值列表:#defineSUCCESS0//成功#defineERROR_CMD_NOT_FOUND1//#defineERROR_CMD_PARM_INVAILD2#defineERROR_DEV_NOT_FOUND3#defineCONF_NAME_START4#defineERROR_CMD_CONFIG_NOT_FOUND5#defineERROR_CONF_DIR_NOT_FOUND6#defineUSER_AUTH_PASS7#defineUSER_AUTH_FAILED8#defineERROR_USER_AUTH9#defineERROR_USER_ADD10#defineERROR_USER_DEL11#defineERROR_USER_CHANGE_PASS12#defineERROR_SAVE_CONF13#defineWARN_START14#defineDEV_NO_START1513.驱动程序设计1.门禁驱动程序设计根据门禁控制系统文档,修改Linux内核源代码arch/arm下开发板相关文件(根据内核版本不同,此处可能为mach-smdk2410或者是mach-s3c2410)中的CPLD内存物理地址映射到的虚拟地址。驱动程序设计初步实现read方法用于用户态程序取得门禁控制系统返回的卡号,ioctl方法用于用户态程序实现门的打开和关闭,一个中断处理程序,负责响应门禁控制系统的中断。2.LCD驱动移植根据LCD手册,将合适的参数填入到s3c2410fb_mach_info类型的结构体中并在.int_machine所制定的初始化函数中将结构体传给platform_data(不同内核版本此处调用不同),供驱动程序加载。3.触摸屏驱动实现Open,read,release,fasync,poll方法,probe中设置对应GPIO引脚,注册中断并在devfs中建立对应设备节点,read方法中从循环缓冲区中取得捕获的数据返回个用户态程序。在adc和触摸屏的中断中捕获屏幕的坐标,将其放入循环缓冲区。4.音频驱动程序Probe中初始化GPIO引脚功能,申请IRQ注册,同时初始化uda1341,注册声卡dsp和mixer的操作方法,open方法打开时初始化循环缓冲区,并且初始化iis总线的收发。在dsp的ioctl方法中实现音频流各种参数的处理,在mixer的ioctl方法中实现声音设备音量等处理。14.门禁控制系统设计教学用门禁子板接口说明:

韦根读卡器接口,DATA0、DATA1、GND和5V0,共4个读卡器,占用CPLD8个I/O,分别为Wiegand1、Wiegand2、Wiegand3、Wiegand4;

4个按键输入,占用CPLD4个I/O,为KeyIN2个门状态反馈输入,占用CPLD2个I/O,为DoorSta;

2个继电器控制输出,占用CPLD2个I/O,为ConOut1和ConOut2;

1个中断请求输出,占用CPLD1个I/O,为INTR;

1个片选输入占用CPLD1个I/O,为CS5个地址线,占用CPLD5个I/O,为Addr(0,4)16个地址线,占用CPLD16个I/O,为Data(0,15)1个读信号,占用CPLD1个I/O,为RD1个写信号,占用CPLD1个I/O,为WR1个复位信号,占用CPLD1个I/O,为RESET框图如下图所示:B和ARM板接口信号说明下图为ARM板接口信号示意图 连接描述如下: DATA0~DATA15连接到Data(0,15) ADDR0~ADDR4连接到Addr(0,4) nOE连接到RD,变低表示开始读 nWE连接到WR,变低表示开始写 nGCS2连接到CS,ARM输出低电平,表示选中CPLD GPA15连接到RESET,ARM输出低电平,表示复位CPLD,工作状态一直保持高电平 EINT3连接到INTR,为ARM中断输入信号,低电平工作过程描述数据流程如框图所示:如果有事件发生(事件可能是四个读卡器接口有数据输入或门状态异常),CPLD向ARM发中断请求,请求处理。ARM响应后发读数据命令,CPLD把数据传送给ARM,ARM判断数据后,再把指令送给CPLD,CPLD根据指令是否执行开关门操作。 还有一种状况是ARM直接发指令,让门打开或关闭。关于韦根协议说明关于韦根协议说明:Wiegand协议是国际上统一的标准,有很多格式,标准的26-bit应该是最常用的格式。此外,还有34-bit、37-bit等格式。标准26位Wiegand通讯协议标准韦根输出是由26位二进制数组成,每一位的含义如下:129102526XXXXXXXXXXXXXXXXXXXXXXXXXX二进制 第1位为2—13位的偶校验位第2—9位对应与电子卡HID码的低8位第10-25位对应电子卡的PID号码第26位为14-25位的奇校验位这26位数据在读出器的韦根输出线D0,D1上输出。数据输出高位在前。所以CPLD支持各种协议的Wiegand协议,依靠标准协议来判断是多少bit的格式,所以CPLD接收的Wiegan数据寄存器设计成最大48bit,为区别各个协议在每组数据包的最后三位置成标志码,所以最大支持45bit数据。000表示26-bit标准协议001表示27-bit协议010表示32-bit协议011表示34-bit协仪100表示36-bit协议101表示37-bit协议实现方案在ARM复位后,发复位信号,置GPA15为低,CPLD进入工作状态。如果有事件发生,CPLD发出中断请求,把EINT3置高,ARM响应中断后读CPLD中的数据,具体的地址分配如下(reader对应图一的Wiegand),数据宽度为16bit:Addr[4:0]AccessMode描述Wiegand1接口数据地址00000ReadonlyReader1datalow00001ReadonlyReader1datamid00010ReadonlyReader1datahighWiegand2接口数据地址00011Reader2datalow00100Reader2datamid00101Reader2datahighWiegand3接口数据地址00110Reader3datalow00111Reader3datamid01000Reader3datahighWiegand4接口数据地址01001Reader4datalow01010Reader4datamid01011Reader4datahigh状态寄存器01100Readonly控制寄存器(门控制等信息)01101WriteonlyControlDoor由于公用一条中断请求,所以ARM分不出是哪个中断请求,所以ARM每次读的时候把00000~01011地址的数据全部读出,从而做出开关门判断。如果有一组数据为全0,表示这一组没有卡号输入。读出数据后,ARM写控制寄存器命令即向地址01101写入相关数据。Wiegand1和Wiegand2共同对应ConOut1(1#door),Wiegand3和Wiegand4共同对应ConOut2(2#door),状态寄存器的详细描述Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8KS4KS3Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0KS2KS1WS4WS3WS2WS1DS2DS1DS1:1#doorstatus(0=正常1=异常)DS2:2#doorstatus(0=正常1=异常)WS1:Wiegand1status1号韦根对卡器状况(0=读卡器正常,1=读卡器异常)WS2:Wiegand2status2号韦根对卡器状况WS3:Wiegand3status3号韦根对卡器状况WS4:Wiegand4status4号韦根对卡器状况KS1:1#Keystatus1号键状态(0=未按键,1=有按键)KS2:2#Keystatus2号键状态(0=未按键,1=有按键)KS3:3#Keystatus3号键状态(0=未按键,1=有按键)KS4:4#Keystatus4号键状态(0=未按键,1=有按键)控制寄存器的详细描述Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0DO2DO1DO11#dooropen0=关1=开DO22#dooropen0=关1=开六:具体模块主要函数说明模块名称ReadWiegand功能描述从读卡器读取用户信息,并提供后续处理接口与属性BoolReadWiegand(void)补充说明当读取成功的时候,函数返回非0值,失败返回-1模块名称SendWiegand功能描述向用户接口发送数据,接口与属性UnsignedcharSendWiegand(unsignedchar*data,unsignedcharlen)补充说明此函数发送成功,返回发送的字节数模块名称SendCmd功能描述直接发送控制门的开和关接口与属性VoidSendCmd(unsignedchardoor,unsignedcharstate)补充说明此函数指定控制几号门(door)和门的状态(开或关)15.家居控制系统和环境探测模块环境探测采用zigbee无线通讯技术,通过温度传感器采集环境温度,上报到家庭网关,网关解析温度数据,实时的显示温度到led显示屏幕,其结构图如下:家居控制主要涉及对继电器的控制,通过继电器的通或者断来控制照明设备的开或者关。模块主要涉及的功能函数说明如下:模块名称GetTem功能描述负责温度采集接口与属性VoidGetTem(unsignedchar*tmp)补充说明此功能函数负责采集温度数据并封装采集数据温度值用两个字节来存储模块名称SendTem功能描述上报采集温度数据接口与属性VoidSendTem(unsignedinttem)补充说明此函数利用zigbee无线网络传递温度信息到家庭网关处理模块名称RecTem功能描述网关解析温度数据包接口与属性VoidRecTem(void)补充说明此函数解析接收包含了温度值的无线数据包模块名称SendLedData功能描述网关封装温度数据帧并发送温度显示命令到led显示模块接口与属性UnsignedcharSendLedData(unsignedchar*leddata,unsignedcharlen)补充说明无模块名称GetTemFromCD功能描述LED显示模块接收并解析温度数据帧接口与属性VoidGetTemFromCD(VOID)补充说明无模块名称DisplayTem功能描述Led显示模块控制led屏幕显示温度值接口与属性UnsignedcharDisplayTem(unsignedchartem[],unsignedcharlen)补充说明函数执行成功返回非0值,失败返回-1模块名称OpenLamp功能描述打开继电器控制照明设备接口与属性VoidOpenLamp(void)补充说明实现照明设备的打开模块名称CloseLamp功能描述关闭继电器控制照明设备接口与属性VoidCloseLamp(void)补充说明实现照明设备的关断16.人机交互界面模块设计人机交互模块采用基于Armlinux下的GUI-Qt应用程序开发来完成,用户通过在LCD上显示的软件界面,辅助触摸屏来完成各项操作,其结构图如下:主界面主界面煤气子界面火警子界面门窗磁子界面开关子界面模式子界面温度计子界面遥控器子界面主界面的视图;煤气煤气报警信息显示温度计窗磁开关门磁火警模式遥控器退出主界面中所有对象的功能和操作方式;煤气煤气名称:煤气监测器按钮功能;当有煤气监测设备报警信息传来时,此按钮显示“煤气报警!!”文字,并且在报警信息显示栏显示报警信息,当点击此按钮时,进入煤气监测设备界面。当煤气浓度正常时,此按钮文字显示“煤气”。操作方式:点击进入煤气监测设备界面。火警火警名称:火警监测器按钮功能;当有火警监测设备报警信息传来时,此按钮显示“火警报警!!”文字,并且在报警信息显示栏显示报警信息,当点击此按钮时,进入火警监测设备界面。当无火警时,此按钮文字显示为“火警”。操作方式:点击进入火警监测设备界面。门磁窗磁门磁窗磁名称:窗磁按钮/门磁功能;当有防盗监测设备报警信息传来时,此按钮显示“门磁报警!!”或“窗磁报警”文字,并且在报警信息显示栏显示报警信息,当点击此按钮时,进入防盗监测设备界面。当一切正常时,此按钮文字显示为“门磁”或“窗磁”。操作方式:点击进入防盗监测设备界面。模式模式名称:模式开关按钮功能:点击此按钮进入模式开关设置界面,可以选择设置智能家居系统运行模式。此按钮文字一直显示为“模式”。操作方式:点击进入模式设备界面。遥控器遥控器名称:遥控器按钮功能:点击此按钮进入遥控器设置界面。用户可以设置温度计的临界温度;设置火灾监测器报警的临界烟雾浓度;设置煤气监测器报警的临界煤气浓度;设置工作模式。工作模式包括:外出模式、归来模式。操作方式:点击进入遥控器设置界面。温度计温度计名称:温度计按钮功能;当室内温度高过临界温度时,此按钮显示“温度报警!!”字样,并且在报警信息显示栏显示报警信息,当点击此按钮时,进入温度计界面。当室内正常时,此按钮为绿色。操作方式:点击进入温度计界面。报警信息显示报警信息显示名称:报警信息显示框功能:当家居网关接收到各外围设备发来的报警信息时,将把详细的报警信息显示在此文本框内操作:无子界面绘制子界的视图;煤气界面:报警或查询信息在此显示返回报警或查询信息在此显示返回查询浓度煤气状态:当指示灯红色时为有报警,绿色时为正常子界面中所有对象的功能和操作方式;名称:煤气监测设备状态灯功能:当煤气监测器监测到室内煤气浓度超过警戒值时便向家居网关发出报警,此时画面中状态灯为红色。当煤气浓度正常时,此状态灯为绿色。操作:无查询查询名称:查询按钮功能:当点击此按钮时,用户可以向煤气监测器发出查询指令,煤气监测器收到查询指令后,会将室内的煤气浓度发送到家居网关,此时,在画面右侧的文本框会显示出煤气浓度信息。操作:无报警/查询信息显示报警/查询信息显示名称:报警/查询信息显示框功能:当煤气报警发送到家居网关时,报警信息会显示在此文本框内。当用户点击查询按钮时,查询到的室内煤气浓度信息会显示在此文本框内。操作:无返回返回名称:返回按钮功能:当用户点击此按钮时,家居网关显示界面会切换到主界面操作:点击火警界面报警或查询信息在此显示返回报警或查询信息在此显示返回查询浓度火警状态:当指示灯红色时为有报警,绿色时为正常名称:火警监测设备状态灯功能:当火灾预警设备监测到室内烟雾浓度超过警戒值时便向家居网关发出报警,此时画面中状态灯为红色。当烟雾浓度正常时,此状态灯为绿色。操作:无查询查询名称:查询按钮功能:当点击此按钮时,用户可以向火灾监测器发出查询指令,火灾监测器收到查询指令后,会将室内的烟雾浓度发送到家居网关,此时,在画面右侧的文本框会显示出烟雾浓度信息。操作:点击智能开关界面开关反馈信息在此显示开关反馈信息在此显示返回输入框打开浓度关闭浓度请输入要打开或关闭灯具的编号输入框输入框名称:用户输入框功能:用户在此输入要打开或关闭灯具的设备编号,然后点击‘打开’或‘关闭’按钮,家居网关会向智能开关发出相应指令,打开或关闭用户指定的灯具设备。操作:用户输入关闭打开关闭打开名称:‘打开’按钮/‘关闭’按钮功能:用户在输入框输入要打开灯具的设备编号,然后点击‘打开’或‘关闭’按钮,家居网关会向智能开关发出相应指令,打开或关闭用户指定的灯具设备。操作:点击开关反馈信息在此显示开关反馈信息在此显示名称:信息显示文本框功能:当用户手动关闭开关后,智能开关将反馈关闭信息到家居网关,信息在文本框内显示操作:无窗磁界面报警或查询信息在此显示报警或查询信息在此显示返回查询浓度窗磁状态:当指示灯红色时为有报警,绿色时为正常名称:窗磁状态灯功能:当窗磁传感器监测到窗户有开启行为时便向家居网关发出报警,此时画面中状态灯为红色。当窗磁无开启时,此状态灯为绿色。操作:无报警报警/查询信息显示名称:信息显示文本框功能:当窗磁传感器监测到窗户有开启行为时便向家居网关发出报警,此时此文本框内便显示报警信息。当用户点击查询按钮时,窗磁传感器将窗磁状态发送到家居网关,窗磁状态信息显示在此文本框内。操作:无查询查询名称:查询信息功能:当用户点击此按钮时,家居网关将查询命令传送到窗磁传感器,窗磁传感器将窗磁状态发送到家居网关,窗磁信息被显示在文本框内。操作:点击门磁界面报警或查询信息在此显示报警或查询信息在此显示返回查询浓度门磁状态:当指示灯红色时为有报警,绿色时为正常界面中的对象同窗磁界面模式控制器界面返回返回设置浓度外出模式请选择正确的模式并点击设置按钮归来模式外出模式归来模式名称:模式单选框功能:用户可以点击此单选框,可以选择外出模式或者归来模式。操作:点击设置设置名称:设置按钮功能:用户点击单选框选择外出或者归来模式后,点击设置按钮,将使用户选择的模式生效操作:点击遥控器界面返回返回设置浓度临界煤气浓度临界烟雾浓度低温报警界限高温报警界限输入框输入框名称:用户输入框。功能:用户可以在相应的输入框内输入要设置的临界煤气报警浓度、临界烟雾报警浓度或者临界报警温度,然后可以点击设置按钮,使设置生效。操作:输入。设置设置名称:设置按钮功能:用户在相应的输入框内输入要设置的临界数值后,点击此按钮,可以使设置生效。操作:点击温度计界面报警或查询信息在此显示报警或查询信息在此显示退出查询浓度温度状态:当指示灯红色时为有报警,绿色时为正常同煤气设备报警界面屏保界面名称:屏保界面功能:系统每隔固定时间间隔启动此屏保界面,界面动态显示闪烁彩色文字“HELLOHARBOUR”。用户点击界面后,此屏保界面关闭,重新显示当前工作界面。操作:点击。附注:以上各功能模块的实际开发过程中,需要书写《项目进展报告.doc》在小组例会的时候要由小组长对整个项目组做报告、《模块测试报告.doc》由测试人提交给小组长,小组长根据测试结果采取不同的措施处理。同时要书写《编程文档.doc》来规范并会后续工作打下良好的文字记录,里面主要涉及模块的函数功能实现和代码的算法流程说明。基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论