每一个ZigBee设备都与一个特定模板相关联,多是公共模板或私有模板。这些模板定义了设备的应用环境、设备类型以及用于设备间通讯的簇。采用公共模板,能够确保不一样供应商的设备在相同应用领域的互操做。数组
一个ZigBee设备中,能够定义多个应用对象,每一个对象经过一个端点链接到ZigBee堆栈。不一样ZigBee设备之间的通信,具体下来,归根为应用程序之间端点的通信,这由一种称之为簇的数据结构来承载。安全
端点定义描述:endPoint为端点号,0号端点为ZDO保留使用,用于配置整个ZigBee设备。255号端点为广播端点,241~254为保留端点,其余为用户自定义端点。网络
其中,profile ID位于SimpleDescriptionFormat_t中,结构以下:数据结构
簇分为输入簇和输出簇,对于不一样的命令方向,在绑定时须要注意。簇是一组命令代码的数组,每个条目表明一个命令。两个设备间的簇要相互通讯的话,方向要不一样,簇ID要一致。app
端点(应用层)经过注册使用应用支持子层(APS)提供的服务,APS经过网络层和安全服务层与端点相链接,并为数据传送、安全和绑定提供服务。APS使用网络层(NWK)提供的服务,NWK负责设备到设备的通信,并负责网络中设备初始化、消息路由以及网络发现。MAC层负责相邻设备之间单跳数据通信,它负责创建与网络的同步,支持关联和去关联以及MAC层安全,提供两个设备之间的可靠链接。ide
ZigBee Cluster Library(又称为Zigbee簇群库).一个族群就是一个容器,其中函数
使用时,先经过zclHA_Init函数,将zcl应用的端点设置为应用程序的端点,这样的话,发向应用程序的端点数据都会先通过ZCL应用。3d
而后,注册ZCL通用功能簇库回调函数(zclGeneral_RegisterCmdCallbacks),从应用程序的指定端点来的数据,若是符合ZCL通用请求,会调用相应的回调函数来处理。下图为ZCL通用profile的回调函数表,指明了对应命令的响应函数。在实际应用中,根据须要进行实现,其余未实现的设置为NULL便可。 orm
例以下图,只实现了前4个命令的响应函数。对象
有了命令响应函数,簇须要操做的内容为内部的属性,接着,须要注册应用的属性列表(zcl_registerAttrList),每一个属性由两部分组成,属性附属的簇ID,属性具体的值。一个簇能够对于多个属性值,这种状况下,属性须要有属性ID来区分。
注册完属性列表后,ZCL应用基本上初始化完成了。那些非ZCL规定的命令,就须要应用程序来处理了,调用
zcl_registerForMsg来注册非ZCL命令处理事件,RegisterForKeys来注册按键时间,ZDO_RegisterForZDOMsg来注册ZDO的命令请求,afRegister注册一个应用终端。
ZCL消息的处理,在SYS_EVENT_MSG下的ZCL_INCOMING_MSG里面,对不一样的ZCL命令请求,进行不一样的响应。
有如下ZCL命令
Read attributes
Read attributes response
Write attributes
Write attributes undivided
Write attributes response
Write attributes no response
Configure reporting
Configure reporting response
Read reporting configuration
Read reporting configuration response
Report attributes
Default response
Discover attributes
Discover attributes response
建立一个ZCL应用,须要创建四个模块,xxxx为app名称。
zcl_xxxx.h 定义应用和应用的终端
zcl_xxxx.c
zcl_xxxx_data.c 数据定义和声明,包括应用支持的全部簇属性
OSAL_xxxx.c 应用与OSAL系统的接口
安全机制由安全服务层提供,系统的总体安全性由profle定义。每一层、MAC、网络或则应用层均可以被保护,它们能够分享安全密钥。SSP是经过ZDO进行初始化和配置。
标准安全 高度安全
ZCL通用簇库