Zigbee ZCL解读

来源:互联网 发布:淘宝不能货到付款 编辑:程序博客网 时间:2024/05/29 08:36

转载自:http://www.61ic.com/Technology/Communicate/201104/31783.html

Zigbee Cluster Library(ZCL)(Zigbee簇群库)[Z-Stack ZCL API_F8W-2006-0020_.pdf]

         ZCL是Zigbee 1.1(Zigbee2006)协议版本中增加的一个重要的部分。在Zigbee中,一个簇群就是一个容器,在容器中以命令结构体包含了一个或多个属于某个应用剖面的属性/消息,不管应用剖面如何,相同的设备(比如开关)拥有相同的定义和功能。属性是设备的变量或特性,能够设置或获得。比如设置自动调温器的加热点。ZCL提供了一种机制,利用这种机制设备能够将变化异步地报告给属性(attribute),比如当空气变热时自动控温器服务器就将室温改变报告给他的客户端,这个过程不需要客户端发起请求。

   ZCL采用客户端/服务器模块的模式,一般储存簇属性的作为服务器,影响或操作属性的作为客户端。然而如果需要,属性也可以呈现在客户端上。例如,设备通过读写属性的命令来操作属性,这些命令从客户端设备发送到服务器设备;对这些命令的应答从服务器设备发送到客户端设备;但是报告属性命令是从服务器发送到客户端。

cluster ID是每个簇的标志,由剖面分配,在内部使用的是逻辑簇ID,所以还有一个Cluster ID转换表。

typedef struct

{

uint16 attrId; // Attribute ID

uint8 dataType; // Data Type - defined in AF.h

uint8 accessControl; // Read/write - bit field

void *dataPtr; // Pointer to data field

} zclAttribute_t;


typedef struct

{

uint16 clusterID; // Real cluster ID

zclAttribute_t attr;

} zclAttrRec_t;


typedef struct

{

zclGCB_BasicReset_t pfnBasicReset; // Basic Reset

zclGCB_Identify_t pfnIdentify; // Identify Response

zclGCB_IdentifyQueryRsp_t pfnIdentifyQueryRsp; // Identify Query Rsp

zclGCB_OnOff_t pfnOnOff; // On/Off cluster

zclGCB_LevelControlMoveToLevel_t pfnLevelControlMoveToLevel; // MoveToLevel

zclGCB_LevelControlMove_t pfnLevelControlMove; // Move

zclGCB_LevelControlStep_t pfnLevelControlStep; // Step

zclGCB_LevelControlStop_t pfnLevelControlStop; // Stop

zclGCB_GroupRsp_t pfnGroupRsp; // Group Response

zclGCB_SceneStoreReq_t pfnSceneStoreReq; // Scene Store Request

zclGCB_SceneRecallReq_t pfnSceneRecallReq; // Scene Recall Request

zclGCB_SceneRsp_t pfnSceneRsp; // Scene Response

zclGCB_Alarm_t pfnAlarm; // Alarm Req & Rsp

zclGCB_Location_t pfnLocation; // RSSI Location

zclGCB_LocationRsp_t pfnLocationRsp; // RSSI Location Rsp

} zclGeneral_AppCallbacks_t;


创建一个ZCL应用至少需要创建4个模块:

· zcl_<appname>.h 应用的定义,应用的终端也定义在此

· zcl_<appname>_data.c 数据定义和声明,包含以下内容:

应用支持的所有簇属性;

属性表中每个属性包含一个zclAttrRec_t类型的入口;

分别包含应用指定的输入和输出cluster ID的输入cluster ID表和输出cluster ID表,这些表将和简单描述表一起使用;

SimpleDescriptionFormat_t[AF.h]类型的简单描述表。

· zcl_<appname>.c

endPointDesc_t[AF.h]类型的应用终端表声明;

创建用以处理来自ZCL簇的命令的命令回调函数,这些函数和命令回调表一起使用;

ZCL功能域(functional domains)的应用命令回调表声明。通用功能域的表类型为:zclGeneral_AppCallbacks_t[zcl_general.h];

为应用任务创建应用初始化函数void zcl<AppName>_Init( byte task_id );此函数应该注册:

1、相应功能域的命令回调表,zclGeneral_RegisterCmdCallbacks()[zcl_general.c]用来注册通用簇命令回调;

2、用zcl_registerAttrList()[zcl.c]注册应用属性列表;

3、用afRegister()[AF.h]注册应用终端;

4、用RegisterForKeys()[OnBoard.c]注册所有处理按键事件的应用任务;

5、用zclHA_Init()[zcl_ha.c]注册HA剖面层的应用简单描述。

创建用于接收和处理消息以及应用任务队列中关键事件的函数uint16 zcl<AppName>_event_loop( uint8 task_id, uint16 events )。

· OSAL_<AppName>.c

此模块应该包含void osalAddTasks( void )函数,此函数包含添加到任务列表中的应用所需的任务和应用任务本身。使用osalTaskAdd()[OSAL_Tasks.c]来完成任务的添加。在此展示一个最小的任务列表,他们的添加顺序是一个简单ZCL应用所需的:

1. HAL

2. MAC

3. Network

4. APS

5. ZD Application

6. ZCL

7. ZCL Application


通用功能域包含以下簇:

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

Discover attributes

Discover attributes

通用功能域包含以下簇:

Basic

Power Configuration

Device Temperature Configuration

Identity

Groups

Scenes

On/Off

On/Off Switch Configuration

Level Control

Alarms

Time

RSSI Indication


在文档的最后给出了ZCL的编译选项,也就是控制使用哪些ZCL功能的预编译项。


0 0
原创粉丝点击