智能家居系统方案设计文档

上传人:仙*** 文档编号:32731902 上传时间:2021-10-15 格式:DOC 页数:123 大小:919.50KB
收藏 版权申诉 举报 下载
智能家居系统方案设计文档_第1页
第1页 / 共123页
智能家居系统方案设计文档_第2页
第2页 / 共123页
智能家居系统方案设计文档_第3页
第3页 / 共123页
资源描述:

《智能家居系统方案设计文档》由会员分享,可在线阅读,更多相关《智能家居系统方案设计文档(123页珍藏版)》请在装配图网上搜索。

1、智能家居系统 方案设计文档项目名称, 模块设计报告 机构名称,2002Page 2 of 123 目目目 录录录 0. 文档介绍文档介绍.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项目名称, 模块设计报告 机构名称,2002Page 3 of 1230. 文档介绍文档

2、介绍0.1 文档目的文档目的本文档旨在详细说明智能家居系统中门禁系统和 linux 下的模块程序开发过程,通过此文档 的描述,希望可以达到具有同等技术的开发人员按此介绍可以完全重现此技术。0.2 文档范围文档范围智能控制系统,嵌入式 linux 系统等。项目名称, 模块设计报告 机构名称,2002Page 4 of 1230.3 读者对象读者对象嵌入式系统开发人员0.4 参考文献参考文献无0.5 术语与缩写解释术语与缩写解释缩写、术缩写、术语语解解 释释CPLDCPLD 是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,

3、生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。项目名称, 模块设计报告 机构名称,2002Page 5 of 123WiegandWiegand 协议是国际上统一的标准,有很多格式,标准的 26-bit 应该是最常用的格式zigbee紫蜂技术项目名称, 模块设计报告 机构名称,2002Page 6 of 1231. 模块命名规则模块命名规则本文档模块名称与具体实现的功能函数采取一致的表示方法。2. 模块汇总模块汇总设备管理,策略管理,人员管理,定时管理,设备底层操作,串口设备层操作,串口底层操作库,配置文件解析,以及 UI 通讯等模块。同时包括门

4、禁控制系统模块,家居控制模块和环境探测模块以及人机交互界面设计模块。2.1 模块汇总表模块汇总表设备管理(dev.c)模块名称功能简述init_dev初始化设备根节点add_dev添加入网设备项目名称, 模块设计报告 机构名称,2002Page 7 of 123del_dev删除链表中设备init_dev_policy_table按照设备类新初始化策略表update_dev_policy_table按照各个设备类型,更新链表中的各个设备策略表get_dev_policy_table_size按照设备节点的类型返回对应设备类型的策略表大小策略管理(policy.c)模块名称功能简述tempmon

5、_policy_table_init初始化温度计类型设备的策略表。tempmon_policy_table_set_warn根据参数传过来的状态设置项目名称, 模块设计报告 机构名称,2002Page 8 of 123设备报警状态。tempmon_policy_table_update调用底层设备控制取得当前设备状态更新对应设备的策略表。设备底层操作接口 (devctl.c)tempmon_get_dev_stat取得温度计设备状态tempmon_get_cur_temp取得温度计设备温度tempmon_set_hi_level设置温度计最高报警温度tempmon_set_low_levl设置

6、温度计最低报警温度用户认证(auth.c)auth_user根据传来的用户名和密码,项目名称, 模块设计报告 机构名称,2002Page 9 of 123返回验证结果change_pass根据传来的用户名和密码,更改密码文件里对应项目。 )del_pass根据传来的用户名,删除密码文件中的对应用户行add_user根据传来的参数,在密码文件中加入对应用户行配置文件处理(parm.c)load_parm解析器的前端,根据解析器的结果,抛出对应得错误。do_paser根据传进来的项目名称, 模块设计报告 机构名称,2002Page 10 of 123文件描述符,将文件中相应的参数解析到参数结构体。

7、save_parm将参数结构体按照对应格式写入配置文件。getnline从文件中取得最大长度为 n一行,并将回车翻译为字符串结尾符trim刨去传入字符串开头和结尾的空格和 tab配置文件参数处理 (parm_handler.c)temp_hi_level设置参数结构体的项目名称, 模块设计报告 机构名称,2002Page 11 of 123temp_hi_level参数temp_low_level设置参数结构体的temp_low_level参数带头节点的双向链表 (list.c) 移植自 linux 内核list_add_node插入节点list_del_node删除节点is_empty_li

8、st判断链表是否为空is_last_node判断是否为最后一个节点offsetof宏取得结构体元素相对于结构体开始的偏移量container_of宏通过结构体元素的指针取得项目名称, 模块设计报告 机构名称,2002Page 12 of 123结构体的指针循环缓冲区(loop_buf.c) 移植自 linux 内核min宏返回两个数中的最小值init_loop_buf初始化循环缓冲区release_loop_buf释放循环缓冲区里的线程锁get_loop_buf从循环缓冲区中获取数据put_loop_buf向循环缓冲区中放置数据lock_buf循环缓冲区线程锁加锁unlock_buf循环缓冲区

9、中线程锁解锁loop_buf_reset循环缓冲区指针复位loop_buf_len返回循环缓冲项目名称, 模块设计报告 机构名称,2002Page 13 of 123区剩余长度串口设备层操作(uart.c)init_uart调用底层串口库初始化串口com_monitor串口监视线程,负责监视并接受串口上数据。pre_frame_proces对串口接受数据预处理,调用相应的操作函数read_uart_one_frame从串口读取完整一桢read_uart_buf从缓冲区读取数据,没有数据则休眠等待下次信号唤醒。项目名称, 模块设计报告 机构名称,2002Page 14 of 123串口操作库(u

10、art.c)open_uart打开相应串口设备文件read_uart读取串口数据。write_uart将数据写入串口set_uart_speed设置串口工作速度set_uart_parity设置串口的工作特性,例如停止位奇偶流控等。read_uart_timeout带有超时的串口读取操作处理。UI 通信(commui.c)init_commui初始化 ui 通信各个参数。项目名称, 模块设计报告 机构名称,2002Page 15 of 123commui_monitor套接字监视线程,监视套接字是否有命令数据到来。get_cmd_line从描述符中取得一行命令行warn_ui向 ui 发起报警

11、命令处理程序(cmd.c)run_cmd命令解析器,调用对应命令的处理程序。error根据错误码,将返回对应得错误信息。命令处理程序 handler(cmd_handler.c)xxx_comand_handler对应各个命令的处理程序。门禁控制模块ReadWiegand读取用户卡信项目名称, 模块设计报告 机构名称,2002Page 16 of 123息SendWiegand发送用户卡信息SendCmd发送控制指令家居控制系统和环境探测模块GetTem采集环境信息SendTem封包发送采集数据RecTem解析采集数据信息SendLedData发送 led 显示数据GetTemFromCDLe

12、d 模块收取并解析温度数据DisplayTem发送并显示信息OpenLamp打开继电器CloseLamp关闭继电器项目名称, 模块设计报告 机构名称,2002Page 17 of 1232.2 模块关系图模块关系图3.设备管理系统的模块设计设备管理系统的模块设计模块名称init_dev功能描述初始化设备根节点接口与属性void init_dev(void);数据结 struct dev 项目名称, 模块设计报告 机构名称,2002Page 18 of 123构与算法 pthread_mutex_lock mutex; unsigned int nr_dev; struct list list;

13、补充说明包含设备编号和链表的线程锁模块名称add_dev功能描述向设备链表中添加设备节点接口与属性int add_dev(char dev_type, char dev_no, char *ieee_addr);数据结构与算法structstruct dev_nodedev_node charchar dev_type;dev_type; charchar dev_no;dev_no; charchar ieee_addr8;ieee_addr8; charchar alive;alive;项目名称, 模块设计报告 机构名称,2002Page 19 of 123 charchar failed

14、;failed; voidvoid *policy_table;*policy_table; structstruct listlist list;list;补充说明根据传来的设备类型设备号及IEEE地址,分配新的设备节点,并填写相应的项目然后调用模块名称del_dev功能描述从设备链表中删除设备节点接口与属性int del_dev(char dev_type, char dev_no);数据结构与算法structstruct dev_nodedev_node charchar dev_type;dev_type; charchar dev_no;dev_no; charchar ieee_a

15、ddr8;ieee_addr8; charchar alive;alive;项目名称, 模块设计报告 机构名称,2002Page 20 of 123 charchar failed;failed; voidvoid *policy_table;*policy_table; structstruct listlist list;list;补充说明模块名称init_dev_policy_table功能描述初始化设备策略表接口与属性void init_dev_policy_table(struct dev_node *node);数据结构与算法同上同上补充说明项目名称, 模块设计报告 机构名称,20

16、02Page 21 of 123模块名称renew_dev_policy_table功能描述将全局参数表的参数对应节点的参数刷新到设备的策略表里接口与属性void renew_dev_policy_table(struct dev_node *node)数据结构与算法无无补充说明模块名称renew_all_dev_policy_table功能描述将全局参数表的参数刷新到所有设备的策略表里接口与属性void renew_all_dev_policy_table(struct dev_node *node)项目名称, 模块设计报告 机构名称,2002Page 22 of 123数据结构与算法无无补

17、充说明模块名称update_dev_policy_table功能描述通过调用设备控制层相关方法,取得设备对应状态,更新相应策略表接口与属性void update_dev_policy_table(struct dev_node *node)数据结构与算法structstruct dev_nodedev_node charchar dev_type;dev_type; charchar dev_no;dev_no; charchar ieee_addr8;ieee_addr8; charchar alive;alive; charchar failed;failed; voidvoid *pol

18、icy_table;*policy_table;项目名称, 模块设计报告 机构名称,2002Page 23 of 123 structstruct listlist list;list;补充说明模块名称update_all_dev_policy_table功能描述更新所有设备策略表接口与属性void update_all_dev_policy_table(struct dev_node *node);数据结构与算法同上同上补充说明模块名 check_dev_type项目名称, 模块设计报告 机构名称,2002Page 24 of 123称功能描述检查设备类型是否合法接口与属性int check

19、_dev_type(unsigned char dev_type)数据结构与算法同上同上补充说明模块名称is_dev_exist功能描述检查设备是否存在接口与属性int is_dev_exist(unsigned char dev_type, unsigned char dev_no)数据结构同上同上项目名称, 模块设计报告 机构名称,2002Page 25 of 123与算法补充说明模块名称get_dev_node功能描述根据设备类型和设备号返回设备节点指针接口与属性struct dev_node *get_dev_node(unsigned char dev_type, unsigned

20、char dev_no)数据结构与算法同上同上补充说明4. 策略管理模块设计策略管理模块设计模块 tempmon_policy_table_init项目名称, 模块设计报告 机构名称,2002Page 26 of 123名称功能描述温度计策略表初始化接口与属性voidvoid tempmon_policy_table_init(structtempmon_policy_table_init(struct dev_nodedev_node *node);*node);数据结构与算法struct _dev_table unsigned char dev_type;void (*policy_tab

21、le_init)(struct dev_node *);void (*policy_table_load_parm)(struct dev_node *);void (*policy_table_update)(struct dev_node *);void (*policy_table_warn)(struct dev_node *, char);void (*parm_table_save)(struct dev_parm *, FILE *fp);项目名称, 模块设计报告 机构名称,2002Page 27 of 123struct tempmon_policy char hi_level

22、; char low_level; char cur_temp; char temp_warn;补充说明为设备节点钟的策略表指针分配内存,并使用参数表中的值初始化对应得设备。模块名称tempmon_policy_table_update功能描述调用设备层温度计操作函数,更新温度计温度策略表接口与属性void tempmon_policy_table_update(struct dev_node *node);数据结同上项目名称, 模块设计报告 机构名称,2002Page 28 of 123构与算法补充说明模块名称tempmon_policy_table_set_warn功能描述根据传来的参数,

23、设置对应温度计设备的报警状态接口与属性void tempmon_policy_table_set_warn(struct dev_node *node, char stat);数同上同上项目名称, 模块设计报告 机构名称,2002Page 29 of 123据结构与算法补充说明模块名称tempmon_policy_table_load_parm功能描述将温度计参数表中的值填入策略表里项目名称, 模块设计报告 机构名称,2002Page 30 of 123接口与属性void tempmon_policy_table_load_parm(struct dev_node *node)数据结构与算法同

24、上同上补充说明模块tempmon_policy_table_load_default_parm项目名称, 模块设计报告 机构名称,2002Page 31 of 123名称功能描述将温度计默认的参数填入策略表里接口与属性void tempmon_policy_table_load_parm(struct dev_node *node)数据结构与算法同上同上补项目名称, 模块设计报告 机构名称,2002Page 32 of 123充说明5.设备底层操作接口模块设计设备底层操作接口模块设计模块名称tempmon_get_dev_stat功能描述取得温度计设备状态接口与属性char tempmon_g

25、et_dev_stat(struct dev_node *node);数据结构与算法无无补充说明调用取得温度计温度判断是否有返回值,判断设备是否仍然有响应,如果设备没有响应,则将设备节点中的设备状态标记为设备已死并调项目名称, 模块设计报告 机构名称,2002Page 33 of 123用failed_dev_ctl使设备节点操作失败次数加1(考虑到网络延迟等情况,采用设备操作失败计数,当累计到操作失败到指定次数,则会调用del_dev将设备从设备链表中删除。而任何一次成功的设备操作则判定设备再次有响应,失败计数被清零) 。模块名称tempmon_get_dev_stat功能描述取得温度计当前

26、温度接口与属性char tempmon_get_cur_temp(struct dev_node *node);数据结构与算法structstruct gen_framegen_frame unsignedunsigned charchar head1;head1; unsignedunsigned charchar head2;head2; 项目名称, 模块设计报告 机构名称,2002Page 34 of 123/ alwaysalways 0 x550 x55 0 xAA0 xAA unsignedunsigned charchar type;type; / frameframe type

27、type WARNWARN unsignedunsigned charchar len;len; / frameframe lenlen unsignedunsigned charchar dev_type;dev_type; / devicedevice typetype unsignedunsigned charchar dev_no;dev_no; / devicedevice nono charchar status;status;补充说明按照协议,组装好设备的查询数据包,从串口发出,并等待串口回应。模块名称tempmon_set_hi_level功能描述设置当前温度计最高报警温度项目

28、名称, 模块设计报告 机构名称,2002Page 35 of 123接口与属性char tempmon_set_hi_level(struct dev_node *node, char high_level);数据结构与算法structstruct con_framecon_frame unsignedunsigned charchar head1;head1; unsignedunsigned charchar head2;head2; unsignedunsigned charchar type;type; unsignedunsigned charchar len;len; unsign

29、edunsigned charchar dev_type;dev_type; unsignedunsigned charchar dev_no;dev_no; unsignedunsigned charchar con_cmd;con_cmd; charchar con_value;con_value;补充说明按照协议,组装好设备的控制数据包,从串口发出,并调用取得设备温度,刷新设备状态。模块名tempmon_set_low_level项目名称, 模块设计报告 机构名称,2002Page 36 of 123称功能描述设置当前温度计最低报警温度接口与属性char tempmon_set_low_

30、level(struct dev_node *node, char high_level);数据结构与算法structstruct con_framecon_frame unsignedunsigned charchar head1;head1; unsignedunsigned charchar head2;head2; unsignedunsigned charchar type;type; unsignedunsigned charchar len;len; unsignedunsigned charchar dev_type;dev_type; unsignedunsigned cha

31、rchar dev_no;dev_no; unsignedunsigned charchar con_cmd;con_cmd; charchar con_value;con_value;补充说明按照协议,组装好设备的控制数据包,从串口发出,并调用取得设备项目名称, 模块设计报告 机构名称,2002Page 37 of 123温度,刷新设备状态。其他设备以此类类推。5.用户认证模块设计用户认证模块设计模块名称auth_user功能描述根据传来的用户名和密码返回验证结果接口与属性char auth_user(char *name,char *pass);数据结构与算法无无补充说明模块名称add_u

32、ser功能描根据传来的用户名和密码将用户添项目名称, 模块设计报告 机构名称,2002Page 38 of 123述加到密码文件中接口与属性char add_user(char *name,char *pass);数据结构与算法无无补充说明模块名称del_user功能描述根据传来的用户名将用户从密码文件中删除接口与属性char del_user(char *name);数据结构与算法无无补充说注意此处仅作用户存在性检查不做项目名称, 模块设计报告 机构名称,2002Page 39 of 123明用户检查,用户检查应该由UI发命令使用auth_user检查通过后再来调用此函数。功能性模块尽可能在

33、自己被调用时提供方法而不是策略。模块名称change_pass功能描述根据传来的用户名和密码将用户从密码文件中修改对应的记录接口与属性char change_pass(char *name,char *pass);数据结构与算法无无补充说明注意事项同上。用户配置文件格式为用户名和密码定长不足定长使用空格补足,分隔符为:防止频繁修项目名称, 模块设计报告 机构名称,2002Page 40 of 123改文件大小,加剧 Nand Fland 的读写。6.配置文件处理模块设计配置文件处理模块设计模块名称Load_parm功能描述解析器的前端,根据解析器的结果,抛出对应得错误接口与属性int load

34、_parm(char *fname)数据结构与算法无无补充说明无模块名称do_parser功解析器主体,根据传进来的文件指针,将文件中项目名称, 模块设计报告 机构名称,2002Page 41 of 123能描述相应的参数解析到全局参数表。接口与属性int do_parser(FILE *fp);数据结构与算法structstruct temp_parmtemp_parm intint temp_hi_level;temp_hi_level;intint temp_low_level;temp_low_level;unionunion parmparm structstruct temp_pa

35、rmtemp_parm temp_parm;temp_parm;structstruct dev_parmdev_parm charchar dev_type;dev_type;项目名称, 模块设计报告 机构名称,2002Page 42 of 123charchar dev_no;dev_no;unionunion parmparm parm;parm;structstruct parm_tableparm_table unsignedunsigned intint nr_parm;nr_parm;structstruct dev_parmdev_parm dev_parmNR_MAX_PAR

36、M;dev_parmNR_MAX_PARM;structstruct parm_actionparm_action charchar nameMAX_PARM_NAME_LEN;nameMAX_PARM_NAME_LEN;voidvoid (*func)(struct(*func)(struct dev_parm*,dev_parm*, charchar *);*);示例:示例:structstruct parm_actionparm_action parm_actionPARM_ACTION_LEN=parm_actionPARM_ACTION_LEN=dev_type,load_dev_t

37、ype,dev_type,load_dev_type,dev_no,load_dev_no,dev_no,load_dev_no,项目名称, 模块设计报告 机构名称,2002Page 43 of 123temp_hi_level,load_temp_hi_level,temp_hi_level,load_temp_hi_level,temp_low_level,load_temp_low_level,temp_low_level,load_temp_low_level,;补充说明模块名称save_parm功能描述根据传进来的文件名,将全局参数表存储到配置文件中。接口与属性int save_pa

38、rm(char *fname);数据结构与算法同上同上补充说明项目名称, 模块设计报告 机构名称,2002Page 44 of 123模块名称get_dev_parm功能描述根据传来的设备类型和设备号,返回对应设备的参数指针接口与属性struct dev_parm *get_dev_parm(char dev_type, char dev_no);数据结构与算法同上同上补充说明模块名称getnline功能描述根据传进来的文件指针,从中取得一行,此行最大长度为count。接口与size_t getnline(char *buf, 项目名称, 模块设计报告 机构名称,2002Page 45 of

39、123属性size_t count, FILE *fp);数据结构与算法无无补充说明会将行尾的回车符替换为字符串结束的尾零,并且遇到EOF时停止。返回值为实际取得的字符数(含尾零/回车) 。模块名称trim功能描述将传进来的字符串头尾的空格以及制表符砍去,然后将结果复制到dst。接口与属性char *trim(char *dst, const char *src);数据结构与算法无无项目名称, 模块设计报告 机构名称,2002Page 46 of 123补充说明各个参数的 handler:模块名称load_dev_type功能描述将设备类型填入到传入的dev_parm。接口与属性void lo

40、ad_dev_type(struct dev_parm *dev_parm, char *value);数据结构与算法无无补充说明模块名称load_dev_no项目名称, 模块设计报告 机构名称,2002Page 47 of 123功能描述将设备号填入到传入的dev_parm。接口与属性void load_dev_type(struct dev_parm *dev_parm, char *value);数据结构与算法无无补充说明模块名称load_temp_hi_level功能描述将温度计最高报警温度填入到传入的dev_parm。接口与属性void load_temp_hi_level(stru

41、ct dev_parm *dev_parm, char *value)数据结无无项目名称, 模块设计报告 机构名称,2002Page 48 of 123构与算法补充说明模块名称load_temp_low_level功能描述将温度计最低报警温度填入到传入的dev_parm接口与属性void load_temp_low_level(struct dev_parm *dev_parm, char *value)数据结构与算法无无补充说明模块名temp_parm_save项目名称, 模块设计报告 机构名称,2002Page 49 of 123称功能描述将传入的温度计的dev_parm按照格式写入到文件

42、指针里接口与属性void temp_parm_save(struct dev_parm *dev_parm, FILE *fp)数据结构与算法无无补充说明7.带头节点双向链表模块设计带头节点双向链表模块设计模块名称init_list功能描述初始化链表头节点接口与属性void init_list(struct list *list);数据结structstruct listlist 项目名称, 模块设计报告 机构名称,2002Page 50 of 123构与算法 structstruct listlist *prev,*next;*prev,*next;补充说明模块名称list_add_node

43、功能描述将节点加入链表。接口与属性void list_add_node(struct list *new, struct list *node, int location);数据结构与算法同上同上补充说明可以使用location标志指定插入node制定节点的左边还是右边,如果node指向头节点,那么左边及为链表尾部,右边是链表头。项目名称, 模块设计报告 机构名称,2002Page 51 of 123模块名称list_del_node功能描述将节点从量表中删除接口与属性void list_del_node(struct list *node);数据结构与算法无无补充说明模块名称is_last_

44、node功能描述判断节点是否是链表的尾节点接口与属性int is_last_node(struct list *list, struct list *node);数据结无无项目名称, 模块设计报告 机构名称,2002Page 52 of 123构与算法补充说明真为尾节点模块名称is_empty_list功能描述返回链表是否为空链表接口与属性int is_empty_list(struct list *list);数据结构与算法无无补充说明真为空链表模块名称offsetof 宏项目名称, 模块设计报告 机构名称,2002Page 53 of 123功能描述返回成员在结构体中的偏移接口与属性off

45、setof(TYPE, MEMBER);数据结构与算法无无补充说明TYPE为对应结构体的类型,MEMBER为成员在结构体中的名字模块名称get_node_owner 宏功能描述传入指向结构体中成员的指针,返回指向结构体的指针。接口与属性get_node_owner(ptr, type, member);数据结构与算法无无项目名称, 模块设计报告 机构名称,2002Page 54 of 123补充说明type,member定义同offsetof,ptr为指向结构体中成员的指针。模块名称each_node_in_list 宏功能描述使用pos指针遍历结构体。接口与属性each_node_in_li

46、st(pos, head);数据结构与算法#define#define each_node_in_list(pos,each_node_in_list(pos, head)head) forfor (pos(pos = = (head)-next;(head)-next; pospos !=!= (head);(head); pospos = = pos-next)pos-next)补充说明注意不要在循环中修改pos指针。模块名称each_owner_in_list 宏项目名称, 模块设计报告 机构名称,2002Page 55 of 123功能描述使用pos指针遍历结构体,但是此pos的指针类

47、型是链表宿主的,head节点类型是链表类型。接口与属性each_owner_in_list (pos, type, member);数据结构与算法#define#define each_owner_in_list(pos,each_owner_in_list(pos, head,member)head,member) forfor (pos(pos = = get_node_owner(head)-next,get_node_owner(head)-next, typeof(*pos),typeof(*pos), member);member); &pos-member&pos-member

48、!=!= (head);(head); pospos = = get_node_owner(pos-get_node_owner(pos-member.next,member.next, typeof(*pos),typeof(*pos), member)member)补充说明同上。项目名称, 模块设计报告 机构名称,2002Page 56 of 1238.循环缓冲区模块设计循环缓冲区模块设计模块名称init_loop_buf功能描述初始化循环缓冲区。接口与属性int init_loop_buf(struct loop_buf *buf);数据结构与算法structstruct loop_bu

49、floop_buf pthread_mutex_tpthread_mutex_t mutex;mutex; unsignedunsigned charchar bufferLOOP_BUF_LEN;bufferLOOP_BUF_LEN; unsignedunsigned intint in;in; unsignedunsigned intint out;out;补充说明注意缓冲区大小必须为2的平方。模块名称release_loop_buf项目名称, 模块设计报告 机构名称,2002Page 57 of 123功能描述释放循环缓冲区。接口与属性void release_loop_buf(stru

50、ct loop_buf *buf);数据结构与算法同上同上补充说明释放结构体中的线程锁,同时复位缓冲区模块名称put_loop_buf功能描述将数据放入循环缓冲区接口与属性unsigned int put_loop_buf(struct loop_buf *buf, unsigned char *buffer, unsigned int len);数据结同上同上项目名称, 模块设计报告 机构名称,2002Page 58 of 123构与算法补充说明空间不足则只放入能放入的,返回值为实际放入数据长度。模块名称get_loop_buf功能描述使用pos指针遍历结构体,但是此pos的指针类型是链表宿

51、主的,head节点类型是链表类型。接口与属性unsigned int get_loop_buf(struct loop_buf *buf, unsigned char *buffer, unsigned int len);数据结构与算法同上同上补充说明同上。项目名称, 模块设计报告 机构名称,2002Page 59 of 123模块名称lock_buf(struct loop_buf *buf);功能描述锁定循环缓冲区接口与属性void lock_buf(struct loop_buf *buf);数据结构与算法无无补充说明无。模块名称unlock_buf功能描述解锁循环缓冲区接口与属性voi

52、d unlock_buf(struct loop_buf *buf);数据结无无项目名称, 模块设计报告 机构名称,2002Page 60 of 123构与算法补充说明无。模块名称loop_buf_reset功能描述循环缓冲区复位接口与属性void loop_buf_reset(struct loop_buf *buf);数据结构与算法无无补充说明无。模块名称loop_buf_len项目名称, 模块设计报告 机构名称,2002Page 61 of 123功能描述返回循环缓冲区长度接口与属性unsigned int loop_buf_len(struct loop_buf *buf);数据结构与

53、算法无无补充说明无。9.串口操作层模块设计串口操作层模块设计模块名称init_uart功能描述按照本程序的需要调用串口库初始化串口,并开启监听线程接口与属性void init_uart(void);数据结无无项目名称, 模块设计报告 机构名称,2002Page 62 of 123构与算法补充说明无。模块名称com_monitor功能描述串口监听线程实例接口与属性void *com_monitor(void *arg);数据结构与算法无无补充说明首先调用read_uart_one_frame收到完整一桢,然后调用process_frame_buf处理由协调器主动发起的添加设备桢和报警桢根据返回值

54、判断是否已经处理直接进入项目名称, 模块设计报告 机构名称,2002Page 63 of 123下一个循环还是放入缓冲区,供发起查询的函数取得回应包。模块名称read_uart_one_frame功能描述从串口中取得完整一桢接口与属性ssize_t read_uart_one_frame(int fd, unsigned char *buf);数据结构与算法无无补充说明调用read_uart_timeout取得完整桢头,然后进行一系列桢检查,非法桢直接丢弃返回0,合法桢则放入buf。模块名称read_uart_buf项目名称, 模块设计报告 机构名称,2002Page 64 of 123功能描

55、述从缓冲区读取数据,没有数据则休眠等待下次信号唤醒接口与属性void unlock_buf(struct loop_buf *buf);数据结构与算法无无补充说明无。10.串口操作库模块设计串口操作库模块设计模块名称open_uart功能描述打开串口接口与属性int open_uart(char *fname);数据结无无项目名称, 模块设计报告 机构名称,2002Page 65 of 123构与算法补充说明无。模块名称set_uart_speed功能描述设置串口速度接口与属性int set_uart_speed(int fd, int speed);数据结构与算法无无补充说明无。模块名称se

56、t_uart_parity项目名称, 模块设计报告 机构名称,2002Page 66 of 123功能描述设置串口各种工作属性接口与属性int set_uart_parity(int fd, int databits, int stopbits, int parity);数据结构与算法无无补充说明无。模块名称read_uart_timeout功能描述在timeout规定的时间内读取指定的count字符个数接口与属性ssize_t read_uart_timeout(int fd, void *buf, size_t count, int timeout);数据结无无项目名称, 模块设计报告 机

57、构名称,2002Page 67 of 123构与算法补充说明无。11.UI 通信模块设计通信模块设计模块名称init_commui功能描述创建与UI通信的线程初始化working信号量接口与属性void init_commui(void);数据结构与算法structstruct commui_slotcommui_slot pthread_mutex_tpthread_mutex_t working;working;intint link_sd;link_sd;FILEFILE *link_fp;*link_fp;补充说明无。项目名称, 模块设计报告 机构名称,2002Page 68 of 1

58、23模块名称commui_monitor功能描述负责与UI通信的线程接口与属性void *commui_monitor(void *arg);数据结构与算法无无补充说明创建并初始化unix域套接字,监听套接字连接。收到连接后使用get_cmd_line取得一行命令,将命令及套接字连接描述符(用于命令处理handler返回执行结果)一同传给run_cmd,解析并运行命令做出相应的查询/设置。模块名称get_cmd_line项目名称, 模块设计报告 机构名称,2002Page 69 of 123功能描述从文件指针取得一行命令接口与属性int get_cmd_line(FILE *fp, char

59、*buf);数据结构与算法无无补充说明将结束符转换为字符串结束符方便后面的处理模块名称warn_ui功能描述向ui报警接口与属性void warn_ui(char dev_type, char dev_no, char stat);数据结构与算法无无项目名称, 模块设计报告 机构名称,2002Page 70 of 123补充说明如果槽里的连接描述符可以,则使用槽里面的连接描述符向UI发送报警返回结果。写连接描述符以前加锁,避免与命令返回值相冲突。12.命令处理部分设计命令处理部分设计模块名称run_cmd功能描述运行传来的命令,使用提供的连接返回命令执行结果。接口与属性int run_cmd(

60、int fd, char *cmd)数据结构与算法structstruct cmd_action_tablecmd_action_table charchar nameMAX_CMD_LEN;nameMAX_CMD_LEN;voidvoid (*func)(FILE(*func)(FILE *fp,*fp, charchar *sep);*sep);示例:示例:项目名称, 模块设计报告 机构名称,2002Page 71 of 123structstruct cmd_action_tablecmd_action_table cmd_action_tablecmd_action_table = =

61、 GET,do_get,GET,do_get,SET,do_set,SET,do_set,USER,do_user,USER,do_user,SAVE,do_save,SAVE,do_save,;补充说明会复制新的描述符传给下面的handler,所以handler中关闭描述符生成的文件指针不会关闭当前连接。模块名称error功能描述根据传进来的错误号,将出错信息按照标准信息返回格式,返回到描述符上。接口与属性void error(FILE *fp, int errorno);项目名称, 模块设计报告 机构名称,2002Page 72 of 123数据结构与算法无无补充说明不会关闭传入的文件指针

62、。主 Handler 部分:模块名称do_get功能描述解析get动词接口与void do_get(FILE *fp, char *sep);项目名称, 模块设计报告 机构名称,2002Page 73 of 123属性数据结构与算法structstruct sub_cmd_action_tablesub_cmd_action_table charchar nameMAX_CMD_LEN;nameMAX_CMD_LEN;voidvoid (*get)(FILE(*get)(FILE *fp,*fp, charchar *sep);*sep);voidvoid (*set)(FILE(*set)(

63、FILE *fp,*fp, charchar *sep);*sep); 示例:示例:structstruct sub_cmd_action_tablesub_cmd_action_table sub_cmd_action_table=sub_cmd_action_table=CONFIG,cmd_conf_get,cmd_conf_set,CONFIG,cmd_conf_get,cmd_conf_set, /get/get configconfig filefile namenameTEMP,cmd_temp_get,cmd_temp_set,TEMP,cmd_temp_get,cmd_tem

64、p_set,;补充说明根据取得接下来的命令目标,将剩余拆解的字符串传给目sub_cmd_action_table中对应目标的get函数指针所指向的函数。项目名称, 模块设计报告 机构名称,2002Page 74 of 123模块名称do_set功能描述解析set动词接口与属性void do_set(FILE *fp, char *sep);数据结构与算法同上同上补充说明根据取得接下来的命令目标,将剩余拆解的字符串传给目sub_cmd_action_table中对应目标的set函数指针所指向的函数。模块名称do_user功能描述解析user动词接口与void do_user(FILE *fp,

65、char 项目名称, 模块设计报告 机构名称,2002Page 75 of 123属性*sep)数据结构与算法同上同上补充说明根据接下来的命令动词,对用户认证的各个功能做出响应,然后将返回的结果写入到传入的文件指针上。模块名称do_save功能描述解析save动词接口与属性void do_save(FILE *fp, char *sep)数据结构与算法同上同上补充说根据接下来的命令动词,将当前的项目名称, 模块设计报告 机构名称,2002Page 76 of 123明全局参数表格存到对应的文件里,如不指定文件名,则存储到默认的文件里,并将结果按照返回格式返回到传入的文件指针。子 handler

66、:模块名称cmd_conf_get功能描述解析到GET CONFIG后面的目标,遍历CONFIG文件夹,将其中的配置文件名按照对应的格式,返回到传入的文件指针。接口与属性void cmd_conf_get(FILE *fp, char *sep);数据结构与算法无无补充说明项目名称, 模块设计报告 机构名称,2002Page 77 of 123模块名称cmd_conf_set功能描述解析到SET CONFIG后面的目标,调用load_parm解析对应的配置文件,并renew策略表,将结果返回到传入的文件指针。接口与属性void cmd_conf_get(FILE *fp, char *sep);数据结构与算法同上同上补充说明模块名称cmd_temp_get功能描述解析到GET TEMP后面的设备号,按照返回格式,返回温度计当前状态(策略表中) ,如果后面没有跟设项目名称, 模块设计报告 机构名称,2002Page 78 of 123备号,则根据返回格式,返回当前网络中所有温度计设备号。接口与属性void cmd_conf_get(FILE *fp, char *sep);数据结构与算法

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!