zigbee scene and group


一般來說流程是這樣的:先將一些節點分到一個組裏,然後可以在節點上建立場景。但也可以在沒有組的情況下建立場景,該種情況下是隻支持單播的group是將一些節點分到一個羣組中;

在節點分到一個羣組之後,就可以在節點上建立scene;在建立scene的時候group ID是一個參數,所以必須先有group纔能有scene。
ZCL中,scene有add,recall,remove等管理函數,比如你給一個節點發送一個命令讓他add到一個scene中,你在scene的回調函數中就需要填一下存的是哪些個atrribute,然後在recall的回調函數中根據add時候的attribute來設置你被控節點的狀態。
 
APS組表是由分配的RAM【osal_mem_alloc()】定義得鏈表,因此當組表增加時,OSAL堆也將增加。表定義在nwk_globals.c,通過調整APS_MAX_GROUPS【f8wConfig.cfg】來改變組表的最大大小。用這些API需要包含aps_groups.h頭文件。 

組:組是用來將一系列節點集合到一個單地址實體的方式。一個數據請求能夠到達組中的每個節點。在Zigbee協議中組是可選配置,但是在某些剖面中是必選的,比如家庭自動化剖面。組關注的是一系列設備同時執行一個行爲。 

組表結構體 
typedef struct 

uint16 ID; // Unique to this table 
uint8 name【APS_GROUP_NAME_LEN】; // Human readable name of group 
} aps_Group_t; 
ID -16位的組ID 
name -文本組名(人類語言)APS_GROUP_NAME_LEN爲16且不可更改。 
組表入口-apsGroupItem_t 

組表記錄(入口) 
typedef struct apsGroupItem 

struct apsGroupItem *next; 
uint8 endpoint; 
aps_Group_t group; 
} apsGroupItem_t; 
next -指向組表的下一個入口(組表爲鏈表結構),推薦使用組表查找和維護函數來遍歷組表。 
endpoint -接受消息的終端 
group -組ID和組名 


組表維護函數 
ZStatus_t aps_AddGroup( uint8 endpoint, aps_Group_t *group ); 
往組表中添加一個組。先定義aps_Group_t,然後填充這個結構,最後調用此函數來添加。若NV_RESTORE使能,則函數將更新保存到非易失性儲存。 
返回值:成功則返回ZSuccess,否則返回錯誤,錯誤可以是:ZApsDuplicateEntry,ZApsTableFull,ZMemError【ZComDef.h】 


uint8 aps_RemoveGroup( uint8 endpoint, uint16 groupID ); 
移除一個組,若NV_RESTORE使能,則函數將更新保存到非易失性儲存。 


void aps_RemoveAllGroup( uint8 endpoint ); 
按給定的參數,移除終端的所有組。 


組表查詢函數 
aps_Group_t *aps_FindGroup( uint8 endpoint, uint16 groupID ); 
endpoint -將接收消息的終端 
返回值:指向組元件的指針 


uint8 aps_FindGroupForEndpoint( uint16 groupID, uint8 lastEP ); 
從組ID中查找終端,這個函數用來跳過終端,然後返回下一個終端。 
lastEP -返回的終端前要跳過的終端。用APS_GROUPS_FIND_FIRST來指定要查找的第一個終端。 
返回終端,或者APS_GROUPS_EP_NOT_FOUND(沒有找到或者找到多個) 


uint8 aps_FindAllGroupsForEndpoint( uint8 endpoint, uint16 *groupList ); 
得到一個屬於一個組的所有終端。 
endpoint -要查找的終端 
groupList -指向存放終端所有表的空間 


uint8 aps_CountGroups( uint8 endpoint ); 
uint8 aps_CountAllGroups( void ); 


組表的非易失性儲存 
若定義了編譯選項NV_RESTORE,則當組發生改變時會自動儲存。組表的NV初始化和恢復在器件啓動時自動執行。若用戶應用改變了組表的入口,則必須直接調用Aps_GroupsWriteNV() 
void aps_GroupsWriteNV( void ) 

若是通過正常的組添加、移除函數的調用來更改組表,則不必調用此函數。

APS組表是由分配的RAM【osal_mem_alloc()】定義得鏈表,因此當組表增加時,OSAL堆也將增加。表定義在nwk_globals.c,通過調整APS_MAX_GROUPS【f8wConfig.cfg】來改變組表的最大大小。用這些API需要包含aps_groups.h頭文件。 


組:組是用來將一系列節點集合到一個單地址實體的方式。一個數據請求能夠到達組中的每個節點。在Zigbee協議中組是可選配置,但是在某些剖面中是必選的,比如家庭自動化剖面。組關注的是一系列設備同時執行一個行爲。 

 

組表結構體 

typedef struct 

uint16 ID; // Unique to this table 
uint8 name【APS_GROUP_NAME_LEN】; // Human readable name of group 
} aps_Group_t; 
ID -16位的組ID 
name -文本組名(人類語言)APS_GROUP_NAME_LEN爲16且不可更改                           

組表入口-apsGroupItem_t 


組表記錄(入口) 
typedef struct apsGroupItem 

struct apsGroupItem *next; 
uint8 endpoint; 
aps_Group_t group; 
} apsGroupItem_t; 
next -指向組表的下一個入口(組表爲鏈表結構),推薦使用組表查找和維護函數來遍歷組表。 
endpoint -接受消息的終端 
group -組ID和組名 

 

組表維護函數 
ZStatus_t aps_AddGroup( uint8 endpoint, aps_Group_t *group ); 
往組表中添加一個組。先定義aps_Group_t,然後填充這個結構,最後調用此函數來添加。若NV_RESTORE使能,則函數將更新保存到非易失性儲存。 
返回值:成功則返回ZSuccess,否則返回錯誤,錯誤可以是:ZApsDuplicateEntry,ZApsTableFull,ZMemError【ZComDef.h】 

uint8 aps_RemoveGroup( uint8 endpoint, uint16 groupID ); 
移除一個組,若NV_RESTORE使能,則函數將更新保存到非易失性儲存。 

void aps_RemoveAllGroup( uint8 endpoint ); 
按給定的參數,移除終端的所有組。

 

組表查詢函數 
aps_Group_t *aps_FindGroup( uint8 endpoint, uint16 groupID ); 
endpoint -將接收消息的終端 
返回值:指向組元件的指針 

uint8 aps_FindGroupForEndpoint( uint16 groupID, uint8 lastEP ); 
從組ID中查找終端,這個函數用來跳過終端,然後返回下一個終端。 
lastEP -返回的終端前要跳過的終端。用APS_GROUPS_FIND_FIRST來指定要查找的第一個終端。 返回終端,或者APS_GROUPS_EP_NOT_FOUND(沒有找到或者找到多個) 

uint8 aps_FindAllGroupsForEndpoint( uint8 endpoint, uint16 *groupList ); 
得到一個屬於一個組的所有終端。 endpoint -要查找的終端
groupList -指向存放終端所有表的空間 

uint8 aps_CountGroups( uint8 endpoint ); 
uint8 aps_CountAllGroups( void ); 

 

組表的非易失性儲存 
若定義了編譯選項NV_RESTORE,則當組發生改變時會自動儲存。組表的NV初始化和恢復在器件啓動時自動執行。若用戶應用改變了組表的入口,則必須直接調用Aps_GroupsWriteNV() 
void aps_GroupsWriteNV( void ) 
若是通過正常的組添加、移除函數的調用來更改組表,則不必調用此函數。

發佈了67 篇原創文章 · 獲贊 22 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章