智能家居系统方案设计.docx
《智能家居系统方案设计.docx》由会员分享,可在线阅读,更多相关《智能家居系统方案设计.docx(61页珍藏版)》请在冰豆网上搜索。
智能家居系统方案设计
智能家居系统
方案设计文档
0.文档介绍
0.1文档目的
本文档旨在详细说明智能家居系统中门禁系统和linux下的模块程序开发过程,通过此文档的描述,希望可以达到具有同等技术的开发人员按此介绍可以完全重现此技术。
0.2文档范围
智能控制系统,嵌入式linux系统等。
0.3读者对象
嵌入式系统开发人员
0.4参考文献
无
0.5术语与缩写解释
缩写、术语
解释
CPLD
CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。
其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。
Wiegand
Wiegand协议是国际上统一的标准,有很多格式,标准的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显示数据
GetTemFromCD
Led模块收取并解析温度数据
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
功能描述
将设备号填入到传