轉載自: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功能的預編譯項。