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

下载本文档

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

文档简介

{管理信息化物联网}智能家居系统方案设计智能家居系统方案设计文档目录0.文档介绍40.1文档目的40.2文档范围40.3读者对象40.4参考文献40.5术语与缩写解释41.模块命名规则52.模块汇总52.1模块汇总表52.2模块关系图53.子系统A的模块设计63.N模块A-N64.子系统B的模块设计64.N模块B-N65.其他60.文档介绍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调用底层串口库初始化串口_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通信(mui.c)init_mui初始化ui通信各个参数。mui_monitor套接字监视线程,监视套接字是否有命感谢阅读令数据到来。get_cmd_line从描述符中取得一行命令行warn_ui向ui发起报警命令处理程序(cmd.c)run_cmd命令解析器,调用对应命令的处理程序。谢谢阅读error根据错误码,将返回对应得错误信息。命令处理程序handler(cmd_handler.c)精品文档放心下载xxx_and_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;//always0x550xAA谢谢阅读unsignedchartype;//frametypeWARN谢谢阅读unsignedcharlen;//framelen谢谢阅读unsignedchardev_type;//devicetype感谢阅读unsignedchardev_no;//deviceno谢谢阅读charstatus;};补充说明按照协议,组装好设备的查询数据包,从串口发出,并等待串谢谢阅读口回应。模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,intlocat精品文档放心下载属性ion);数据结同上构与算法补充说可以使用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->,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);谢谢阅读数据结构与无算法补充说明无。模块名称_monitor功能描述串口监听线程实例接口与属性void*_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,intp精品文档放心下载arity);数据结构与无算法补充说明无。模read_uart_timeout块名称功在timeout规定的时间内读取指定的count字符个数谢谢阅读能描述接ssize_tread_uart_timeout(intfd,void*buf,size_tcount,inttimeo感谢阅读口ut);与属性数无据结构与算法补无。充说明11.UI通信模块设计模块名称init_mui功能描述创建与UI通信的线程初始化working信号量精品文档放心下载接口与属性voidinit_mui(void);数据结构与structmui_slot{算法pthread_mutex_tworking;精品文档放心下载intlink_sd;FILE*link_fp;};补充说明无。模块名称mui_monitor功能描述负责与UI通信的线程接口与属性void*mui_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"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.门禁控制系统设计一、教学用门禁子板接口说明:二、韦根读卡器接口,DATA0DATA1GND和5V04CPLD8感谢阅读个I/O,分别为Wiegand1、Wiegand2、Wiegand3、Wiegand4;精品文档放心下载三、4个按键输入,占用CPLD4个I/O,为KeyIN谢谢阅读2个门状态反馈输入,占用CPLD2个I/O,为DoorSta;精品文档放心下载2个继电器控制输出,占用CPLD2个I/O,为ConOut1和ConOut2;感谢阅读1个中断请求输出,占用CPLD1个I/O,为INTR;谢谢阅读1个片选输入占用CPLD1个I/O,为CS感谢阅读5个地址线,占用CPLD5个I/O,为Addr(0,4)谢谢阅读16个地址线,占用CPLD16个I/O,为Data(0,15)谢谢阅读1个读信号,占用CPLD1个I/O,为RD感谢阅读1个写信号,占用CPLD1个I/O,为WR精品文档放心下载1个复位信号,占用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连接到RESETARM输出低电平,表示复位CPLD,工作状态一直保持高感谢阅读电平EINT3连接到INTR,为ARM中断输入信号,低电平感谢阅读五、工作过程描述数据流程如框图所示:如果有事件发生(事件可能是四个读卡器接口有数据输入或门状态异常),精品文档放心下载CPLD向ARM发中断请求,请求处理。ARM响应后发读数据命令,CPLD把数据精品文档放心下载传送给ARM,ARM判断数据后,再把指令送给CPLD,CPLD根据指令是否执行感谢阅读开关门操作。还有一种状况是ARM直接发指令,让门打开或关闭。谢谢阅读六、关于韦根协议说明关于韦根协议说明:Wiegand协议是国际上统一的标准,有很多格式,标准的谢谢阅读26-bit应该是最常用的格式。此外,还有34-bit、37-bit等格式。感谢阅读标准26位Wiegand通讯协议标准韦根输出是由26位二进制数组成,每一位的含义如下:精品文档放心下载26XXXXXXXXXXXXXXXXXXXXXXXXXX二进制感谢阅读第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协议七、实现方案1.在ARM复位后,发复位信号,置GPA15为低,CPLD进入工作状态。感谢阅读2.如果有事件发生,CPLD发出中断请求,把EINT3置高,ARM响应中断精品文档放心下载后读CPLD中的数据,具体的地址分配如下(reader对应图一的Wiegand)谢谢阅读据宽度为16bit:Addr[4:0]AccessMode描述Wiegand1接口数据地址00000ReadonlyReader1datalow感谢阅读00001ReadonlyReader1datamid精品文档放心下载00010ReadonlyReader1datahigh精品文档放心下载Wiegand2接口数据地址00011Reader2datalow00100Reader2datamid00101Reader2datahighWiegand3接口数据地址00110Reader3datalow00111Reader3datamid01000Reader3datahighWiegand4接口数据地址01001Reader4datalow01010Reader4datamid01011Reader4datahigh状态寄存器01100Readonly控制寄存器(门控制等信息)01101WriteonlyControlDoor谢谢阅读由于公用一条中断请求,所以ARM分不出是哪个中断请求,所以ARM每次读谢谢阅读的时候把00000~01011地址的数据全部读出,从而做出开关门判断。如果有感谢阅读一组数据为全0,表示这一组没有卡号输入。读出数据后,ARM写控制寄存器精品文档放心下载命令即向地址01101写入相关数据。Wiegand1和Wiegand2共同对应ConOut1(1#doorWiegand3和Wiegand4谢谢阅读共同对应ConOut2(2#door状态寄存器的详细描述Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8精品文档放心下载KS4KS3Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0感谢阅读KS2KS1WS4WS3WS2WS1DS2DS1精品文档放心下载DS1: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=有按键)谢谢阅读控制寄存器的详细描述Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8谢谢阅读Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0感谢阅读DO2DO1DO1-----1#dooropen0=关1=开DO2-----2#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上显示的软件界面,辅助触摸屏来完成各项操作,其结构图如下:谢谢阅读主界面的视图;煤气火警报警信息显示窗磁开关门磁模式遥控器温度计退出主界面中所有对象的功能和操作方式;煤气名称:煤气监测器按钮

温馨提示

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

评论

0/150

提交评论