Zigbee ZCL解讀

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章